Skip to content
2 changes: 1 addition & 1 deletion .claude/rules/refresh-before-decide.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ loops generally.
`memory/feedback_refresh_before_decide_invariant_two_layer_print_dx_claudeai_2026_05_01.md`

Verbatim packet:
`docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md`
`memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md`
Comment thread
AceHack marked this conversation as resolved.
Comment thread
AceHack marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ type: friction-reducer

# B-0159 — `refresh-github-worldview` cross-cutting refresh script (Claude.ai 2026-05-01)

**Origin:** Claude.ai feedback packet 2026-05-01 — full lineage in [docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md](../../research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md) and the maintainer-relayed Claude.ai-2 follow-up calibrating against Otto's running state.
**Origin:** Claude.ai feedback packet 2026-05-01 — full lineage in [memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md](../../research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md) and the maintainer-relayed Claude.ai-2 follow-up calibrating against Otto's running state.
Comment thread
AceHack marked this conversation as resolved.
Outdated

## Problem

Expand Down Expand Up @@ -132,7 +132,7 @@ synthetic deps).
the per-PR-detail building block this script wraps.
- `memory/feedback_ts_dependencies_as_interface_di_pattern_sqlsharp_anchor_aaron_2026_05_01.md`
— the architectural pattern for the new script's structure.
- `docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md`
- `memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md`
— full Claude.ai loop architecture; this script is the immediate
actionable extraction.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ title: Claude Code `/permissions` feature — research current API + integrate t
created: 2026-05-02
last_updated: 2026-05-08
depends_on: []
decomposition: parent
decomposition: decomposed
children: [B-0532, B-0533]
Comment thread
AceHack marked this conversation as resolved.
Outdated
Comment thread
AceHack marked this conversation as resolved.
Outdated
classification: buildable-now
type: friction-reducer
---
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
id: B-0532

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Assign unique IDs for newly added backlog rows

id: B-0532 here collides with the new P3 row docs/backlog/P3/B-0532-backlog-graph-consistency-lint-parent-child-status-mismatch-2026-05-15.md (and the same commit also duplicates B-0533 across P2/P3). Because backlog dependencies and cross-references key off B-####, these collisions make references like depends_on: [B-0532] ambiguous and can misroute or fail backlog-graph tooling that expects one canonical row per ID.

Useful? React with 👍 / 👎.

priority: P2
status: open
title: Investigate hardcoded safety gates vs settings-allowable actions for Claude Code
created: 2026-05-15
last_updated: 2026-05-15
depends_on: []
decomposition: atomic
type: friction-reducer
---
Comment on lines +1 to +11

# B-0532 — Investigate hardcoded safety gates vs settings-allowable actions

**Parent**: B-0368
**Filed by**: Lior (decomposed from B-0368 parent row)

## Scope

This is slice 2 of the Claude Code `/permissions` feature integration.
The objective is to investigate hardcoded safety gates versus settings-allowable actions (per the Tick-6 merge denial evidence in B-0368).

## Acceptance criteria

1. **Deeper investigation into API**: Research the `/permissions` API to distinguish hardcoded safety guards from `.claude/settings.json` allow-lists.
2. **Category model**: Determine which actions are settings-allowable versus hardcoded-safety-denial.
3. **Merge-other-PRs specifics**: Specifically for "merge-PRs-the-agent-didn't-create" — is this addressable via `.claude/settings.json` (per-PR number allow rule, per-author rule) or does it require an explicit user pre-authorization separate from the settings file?
4. Update findings in the research docs and determine if further targeted additions are required.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
id: B-0533
priority: P2
status: open
title: Document Claude Code permissions integration pattern in CLAUDE.md
created: 2026-05-15
last_updated: 2026-05-15
depends_on: [B-0532]
decomposition: atomic
type: documentation
Comment on lines +1 to +10
---

# B-0533 — Document Claude Code permissions integration pattern in CLAUDE.md

**Parent**: B-0368
**Filed by**: Lior (decomposed from B-0368 parent row)

## Scope

This is slice 3 of the Claude Code `/permissions` feature integration.
The objective is to document the integration pattern in `CLAUDE.md` or a dedicated doc so future-Otto knows the pattern.

## Acceptance criteria

1. Extract the operational findings from B-0368 and B-0532.
2. Formulate carved sentences regarding the Claude Code permission scopes, the interaction with `.claude/settings.json`, and the Don't-Ask-Permission rule integration.
3. Add the finalized rules to `CLAUDE.md`.
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ Composes with PR #1171 (refresh-before-decide memo + verbatim packet) — this r
**Initial comment:**

- **`Copilot` (bot)** at 2026-05-01T22:03:58Z on `docs/backlog/P1/B-0159-refresh-github-worldview-cross-cutting-claudeai-2026-05-01.md`:14 (association: NONE)
The `Origin` section links to `docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md`, but that file does not exist in the repo. Please update this to a valid path (or add the referenced research file in the same PR) so the lineage link isn’t dead.
The `Origin` section links to `memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md`, but that file does not exist in the repo. Please update this to a valid path (or add the referenced research file in the same PR) so the lineage link isn’t dead.
Comment thread
AceHack marked this conversation as resolved.
Outdated


### Thread 4 -- resolved [collapsed]
Expand Down Expand Up @@ -136,7 +136,7 @@ Composes with PR #1171 (refresh-before-decide memo + verbatim packet) — this r
**Initial comment:**

- **`Copilot` (bot)** at 2026-05-01T22:09:41Z on `docs/backlog/P1/B-0159-refresh-github-worldview-cross-cutting-claudeai-2026-05-01.md`:14 (association: NONE)
P1 (xref): The link target `docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md` does not exist in the repo, so this reference will be broken on merge. Please update it to the correct existing research file path, or (if this is meant to land via PR #1171) reference the PR explicitly / add the missing file in the same merge chain so `main` never contains a dead link.
P1 (xref): The link target `memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md` does not exist in the repo, so this reference will be broken on merge. Please update it to the correct existing research file path, or (if this is meant to land via PR #1171) reference the PR explicitly / add the missing file in the same merge chain so `main` never contains a dead link.


### Thread 8 -- resolved [collapsed]
Expand Down Expand Up @@ -307,7 +307,7 @@ Codex P1 + Copilot duplicate finding on PR #1173: backlog rows require frontmatt
Fix: add YAML frontmatter matching the canonical shape used by sibling P1 rows (B-0156 style). Includes depends_on: [B-0156] since the unified refresh script is part of the broader TS-standardization trajectory.

Two additional Copilot dangling-pointer findings on the same PR:
- docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md
- memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md
- memory/feedback_refresh_before_decide_invariant_two_layer_print_dx_claudeai_2026_05_01.md

Both were dangling at PR-open time because they were on PR #1171 which had not merged. PR #1171 has now merged to main; rebasing this branch resolves both. The branch is now up-to-date with origin/main and the cross-references resolve.
Expand Down Expand Up @@ -380,7 +380,7 @@ Two real findings on PR #1173:

Two earlier dangling-pointer Copilot threads on this PR are now
satisfied by main since #1171 landed
(docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md
(memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md
+ memory/feedback_refresh_before_decide_invariant_two_layer_print_dx_claudeai_2026_05_01.md
both exist on main).
```
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@
- Uses Guarded / Observe-only language per Aaron's correction: the loop is alive even when it declines an unsafe mutation.

## Checks
- `bun tools/hygiene/check-archive-header-section33.ts docs/research/2026-05-06-riven-hospitality-entanglement-superfluid-genesis-verbatim-aaron-forwarded.md`
- `npx markdownlint-cli2 docs/research/2026-05-06-riven-hospitality-entanglement-superfluid-genesis-verbatim-aaron-forwarded.md docs/operations/riven-tier1-launchd-hot-swap-checklist.md`
- `bun tools/hygiene/check-archive-header-section33.ts memory/persona/riven/conversations/2026-05-06-riven-hospitality-entanglement-superfluid-genesis-verbatim-aaron-forwarded.md`
- `npx markdownlint-cli2 memory/persona/riven/conversations/2026-05-06-riven-hospitality-entanglement-superfluid-genesis-verbatim-aaron-forwarded.md docs/operations/riven-tier1-launchd-hot-swap-checklist.md`
- `git diff --check origin/main...HEAD`

## Coordination
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,12 @@
### Thread 1 -- unresolved

- **Thread ID**: `PRRT_kwDOSF9kNM6AOxaT`
- **Path**: `docs/research/2026-05-07-riven-five-passes-framework-names-what-you-built-structure-first-verbatim-aaron-riven.md`
- **Path**: `memory/persona/riven/conversations/2026-05-07-riven-five-passes-framework-names-what-you-built-structure-first-verbatim-aaron-riven.md`
Comment thread
AceHack marked this conversation as resolved.
Outdated
- **Replies**: 0

**Initial comment:**

- **`Copilot` (bot)** at 2026-05-07T07:50:30Z on `docs/research/2026-05-07-riven-five-passes-framework-names-what-you-built-structure-first-verbatim-aaron-riven.md`:5 (association: NONE)
- **`Copilot` (bot)** at 2026-05-07T07:50:30Z on `memory/persona/riven/conversations/2026-05-07-riven-five-passes-framework-names-what-you-built-structure-first-verbatim-aaron-riven.md`:5 (association: NONE)

<pre>
P1: This file looks like a courier-ferry / external-conversation absorb (Attribution mentions “via Aaron ferry”), but it doesn’t match the §33 header validator’s detection hints (filename lacks courier-ferry/cross-ferry/etc, and the first 20 lines don’t contain “external conversation” / “courier-ferry capture” etc). As a result, CI may silently skip enforcing the required §33 labels/enum status on future edits. Consider adding a small hint phrase in the first-20-lines (e.g., in Scope or Non-fusion disclaimer) or adjusting the filename so the validator reliably audits it.
Expand All @@ -70,12 +70,12 @@
### Thread 2 -- unresolved

- **Thread ID**: `PRRT_kwDOSF9kNM6AOxat`
- **Path**: `docs/research/2026-05-07-riven-five-passes-framework-names-what-you-built-structure-first-verbatim-aaron-riven.md`
- **Path**: `memory/persona/riven/conversations/2026-05-07-riven-five-passes-framework-names-what-you-built-structure-first-verbatim-aaron-riven.md`
- **Replies**: 0

**Initial comment:**

- **`Copilot` (bot)** at 2026-05-07T07:50:31Z on `docs/research/2026-05-07-riven-five-passes-framework-names-what-you-built-structure-first-verbatim-aaron-riven.md`:89 (association: NONE)
- **`Copilot` (bot)** at 2026-05-07T07:50:31Z on `memory/persona/riven/conversations/2026-05-07-riven-five-passes-framework-names-what-you-built-structure-first-verbatim-aaron-riven.md`:89 (association: NONE)

<pre>
P1: The “Composes with” list references “Per-user MEMORY.md entry …” items, but there’s no corresponding in-repo memory file or matching text to anchor these references (repo-wide search only finds these phrases in this doc). If these are meant to be navigable in-repo references, please replace with concrete file paths; if they’re intentionally out-of-repo, consider rewording so it doesn’t read like a missing file/link in the repository.
Expand All @@ -88,7 +88,7 @@

**Touched files (intersect with thread paths):**

- `docs/research/2026-05-07-riven-five-passes-framework-names-what-you-built-structure-first-verbatim-aaron-riven.md`
- `memory/persona/riven/conversations/2026-05-07-riven-five-passes-framework-names-what-you-built-structure-first-verbatim-aaron-riven.md`

**Message:**

Expand Down
2 changes: 1 addition & 1 deletion docs/hygiene-history/ticks/2026/05/01/2158Z.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
| 2026-05-01T21:58:00Z | opus-4-7 / autonomous-loop tick | 98fc7424 | Phase 1 absorption tick — Claude.ai packet on refresh-before-decide invariant + two-layer print DX. **REFRESH WORLD MODEL** (applying the rule I just landed): #1168 + #1170 MERGED, #1171 wait-ci + auto-merge armed. The maintainer shared a major Claude.ai feedback packet — a 'Backlog-Driven Dual-PM Agent Loop with Refresh Discipline — Carved Handoff' covering loop identity, refresh primitive, tick selection, DST grader, lesson generation, skill index, Mirror/Beacon ratio gate, convergence, cross-harness durability, pre-DORA proxy metrics, 22 named failure modes, operational invariants. Per substrate-or-it-didn't-happen + GOVERNANCE §33 verbatim-preservation trigger (architecture-changing + multi-AI review packet → preserve verbatim FIRST), landed three artifacts on PR #1171: (1) docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md with verbatim packet + four-field header; (2) memory/feedback_refresh_before_decide_invariant_two_layer_print_dx_claudeai_2026_05_01.md extracting the load-bearing piece the maintainer specifically flagged ('refresh-before-decide is the most violated invariant in agent loops generally'); (3) CLAUDE.md ground-rule bullet at upstream-invariant position (before the existing refresh-via-poll-pr-gate bullet — implementation vs discipline split). Phase 2 deferred: the 22 failure modes, metrics framework, Mirror/Beacon ratio gate, convergence definitions absorb organically as failures surface (Ratchet Pattern threshold 2x; Phase 1 alone is the right scope per Doctrine-recursion guard). The carved one-liner from the packet: 'Refresh produces ground truth; reactive starves proactive; backlog flows through ticks; lessons accumulate in skills indexed by descriptor; DST grades each tick; metrics grade the arc; cooling separates loose-pole from canon; same discipline grades the loop itself.' Empirical Otto-pattern this session that motivates the rule landed: at least 4 instances of acting on stale derived state (PR thread counts from prior tick, dangling-pointer findings, predicted rebase outcomes, cached file-overlap). Cure was always cheap-refresh-again. Tool existed; discipline naming was missing. Cron 98fc7424 healthy. | [PR #1171 OPENED with three-artifact Phase 1 absorption (verbatim packet + memo + CLAUDE.md bullet + MEMORY.md row pair-edit); auto-merge armed; #1168 + #1170 confirmed merged; tick-history queue continues] | The packet's framing of two-layer print DX is operationally already true in poll-pr-gate-batch.ts (raw reports[] + interpretation summary aggregate); the discipline now has explicit naming. The Ratchet Pattern self-applies to absorption: bulk-importing 22 failure modes would itself be Doctrine-recursion (substrate-without-execution); deferring to organic per-failure absorption matches the 2x-occurrence threshold. The refresh-before-decide invariant is structurally upstream of the rebase-decision rule + BLOCKED-with-green-CI rule + Copilot tick-history false-positive rule — they all are special cases that depend on having current worldview. CLAUDE.md bullet placement reflects this: refresh-before-decide bullet is FIRST in the wake-time disciplines because every other rule assumes it. |
| 2026-05-01T21:58:00Z | opus-4-7 / autonomous-loop tick | 98fc7424 | Phase 1 absorption tick — Claude.ai packet on refresh-before-decide invariant + two-layer print DX. **REFRESH WORLD MODEL** (applying the rule I just landed): #1168 + #1170 MERGED, #1171 wait-ci + auto-merge armed. The maintainer shared a major Claude.ai feedback packet — a 'Backlog-Driven Dual-PM Agent Loop with Refresh Discipline — Carved Handoff' covering loop identity, refresh primitive, tick selection, DST grader, lesson generation, skill index, Mirror/Beacon ratio gate, convergence, cross-harness durability, pre-DORA proxy metrics, 22 named failure modes, operational invariants. Per substrate-or-it-didn't-happen + GOVERNANCE §33 verbatim-preservation trigger (architecture-changing + multi-AI review packet → preserve verbatim FIRST), landed three artifacts on PR #1171: (1) memory/persona/riven/conversations/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md with verbatim packet + four-field header; (2) memory/feedback_refresh_before_decide_invariant_two_layer_print_dx_claudeai_2026_05_01.md extracting the load-bearing piece the maintainer specifically flagged ('refresh-before-decide is the most violated invariant in agent loops generally'); (3) CLAUDE.md ground-rule bullet at upstream-invariant position (before the existing refresh-via-poll-pr-gate bullet — implementation vs discipline split). Phase 2 deferred: the 22 failure modes, metrics framework, Mirror/Beacon ratio gate, convergence definitions absorb organically as failures surface (Ratchet Pattern threshold 2x; Phase 1 alone is the right scope per Doctrine-recursion guard). The carved one-liner from the packet: 'Refresh produces ground truth; reactive starves proactive; backlog flows through ticks; lessons accumulate in skills indexed by descriptor; DST grades each tick; metrics grade the arc; cooling separates loose-pole from canon; same discipline grades the loop itself.' Empirical Otto-pattern this session that motivates the rule landed: at least 4 instances of acting on stale derived state (PR thread counts from prior tick, dangling-pointer findings, predicted rebase outcomes, cached file-overlap). Cure was always cheap-refresh-again. Tool existed; discipline naming was missing. Cron 98fc7424 healthy. | [PR #1171 OPENED with three-artifact Phase 1 absorption (verbatim packet + memo + CLAUDE.md bullet + MEMORY.md row pair-edit); auto-merge armed; #1168 + #1170 confirmed merged; tick-history queue continues] | The packet's framing of two-layer print DX is operationally already true in poll-pr-gate-batch.ts (raw reports[] + interpretation summary aggregate); the discipline now has explicit naming. The Ratchet Pattern self-applies to absorption: bulk-importing 22 failure modes would itself be Doctrine-recursion (substrate-without-execution); deferring to organic per-failure absorption matches the 2x-occurrence threshold. The refresh-before-decide invariant is structurally upstream of the rebase-decision rule + BLOCKED-with-green-CI rule + Copilot tick-history false-positive rule — they all are special cases that depend on having current worldview. CLAUDE.md bullet placement reflects this: refresh-before-decide bullet is FIRST in the wake-time disciplines because every other rule assumes it. |
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ _(no body)_

## Review threads

### Thread 1: docs/research/2026-05-13-shadow-lesson-log-riven-drift.md:12 (resolved)
### Thread 1: memory/persona/riven/conversations/2026-05-13-shadow-lesson-log-riven-drift.md:12 (resolved)

**@copilot-pull-request-reviewer** (2026-05-13T23:27:52Z):

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Copilot reviewed 6 out of 6 changed files in this pull request and generated no

| File | Description |
| ---- | ----------- |
| docs/research/2026-05-14-shadow-lesson-log-riven-dirty-tree-drift.md | New shadow-lesson log on dirty-tree contamination drift. |
| memory/persona/riven/conversations/2026-05-14-shadow-lesson-log-riven-dirty-tree-drift.md | New shadow-lesson log on dirty-tree contamination drift. |
| docs/pr-discussions/PR-3104-*.md | Archive of PR #3104 (MEMORY.md cutover parity validation). |
| docs/pr-discussions/PR-3098-*.md | Archive of PR #3098 (ordering/formatting contract docs). |
| docs/pr-discussions/PR-3097-*.md | Archive of PR #3097 (MEMORY.md harness contract verification). |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 c

| File | Description |
| ---- | ----------- |
| docs/research/2026-05-14-shadow-lesson-log-vera-riven-drift.md | New research note documenting the observed drift and correction. |
| memory/persona/riven/conversations/2026-05-14-shadow-lesson-log-vera-riven-drift.md | New research note documenting the observed drift and correction. |
| docs/hygiene-history/ticks/2026/05/14/0521Z.md | New tick shard capturing the session checklist, PR gate status, and B-0451 closure actions. |
| docs/backlog/P1/B-0451-duplicate-row-id-substrate-cleanup-2026-05-13.md | Marks B-0451 as closed and updates acceptance criteria status text. |
| docs/BACKLOG.md | Updates the generated index entry to reflect B-0451 as closed. |
Expand Down
Loading
Loading