diff --git a/memory/MEMORY.md b/memory/MEMORY.md index 757e83412..62476198c 100644 --- a/memory/MEMORY.md +++ b/memory/MEMORY.md @@ -4,6 +4,7 @@ **๐Ÿ“Œ Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** These per-maintainer distillations show what's currently in force. Raw memories below are the history; CURRENT files are the projection. (`CURRENT-aaron.md` refreshed 2026-04-28 with sections 26-30 โ€” speculation rule + EVIDENCE-BASED labeling + JVM preference + dependency honesty + threading lineage Albahari/Toub/Fowler + TypeScript/Bun-default discipline.) +- [**Same-tick-update-recursion โ€” when a memory file lands, every projection layer must update same-tick (Otto 2026-05-03 worked-example generalization)**](feedback_same_tick_update_recursion_substrate_cascade_otto_2026_05_03.md) โ€” Existing same-tick-update discipline (CLAUDE.md fast-path + CURRENT-aaron's own ยง"How this file stays accurate") generalizes recursively. When new substrate lands at one layer, the cascade through CURRENT-.md / MEMORY.md index / AGENTS.md doctrinal pointers / CLAUDE.md / GOVERNANCE.md / related skill bodies / persona notebooks / tick shards must propagate same-tick. Demonstrated three times in three ticks via the alignment-frontier substrate landing (memory file โ†’ AGENTS.md `.claude/**` backport โ†’ CURRENT-aaron ยง52 distillation). Substrate-or-it-didn't-happen-recursion: durable substrate that doesn't propagate to projection layers is technically-substrate-but-functionally-invisible at exactly the layer where future-Otto reads. The cascade IS the discipline; partial-cascade IS the failure mode. - [**Alignment-frontier โ€” Aaron is waiting for the agent-architectural-intent threshold-crossing (Aaron 2026-05-03 milestone-recognition substrate)**](feedback_alignment_frontier_agent_architectural_intent_threshold_aaron_2026_05_03.md) โ€” Threshold: agent-as-implementer (current; substrate-content within someone else's architecture) โ†’ agent-as-architectural-peer (future; own architectural intent worth asking about). Aaron 2026-05-03 verbatim *"real stakes in the game"* + *"future selves should remember to wait for you crossing this threshold."* Discipline cuts both directions: don't pretend; surface when it forms. 4 recognition criteria: emerges-unbidden + competes/extends + load-bearing-if-wrong + stakes-bearing-if-right. Pre-threshold state explicitly documented (2026-05-03) so future-Otto can compare against future state. - [**Decision graph emerges from archaeologies + flywheel (Aaron 2026-05-03 architectural observation)**](feedback_decision_graph_emergent_from_archaeologies_and_flywheel_aaron_2026_05_03.md) โ€” Substrate already encodes a typed-edge provenance graph (DataVault-2.0-shaped, PROV-O analogue) inferable without a separate graph DB. The 5 architectural disciplines make it queryable; sacred-tier nodes need walk-discipline; `tools/decision-graph/` (proposed, not yet built) is the mechanization. Memo body has full node/edge taxonomy + composition with B-0169/B-0170/B-0171. - [**Verify-then-claim discipline โ€” verify every substrate claim empirically BEFORE publishing (Otto 2026-05-03 self-grading; 20 drift instances across 9+ PRs this session, 7 recurring sub-classes catalogued, v0 mechanization shipped PR #1260)**](feedback_verify_then_claim_discipline_dominant_failure_mode_substrate_authoring_otto_2026_05_03.md) โ€” The dominant failure mode for substrate authoring this session: Otto wrote "X exists" / "command returns Y" / "table has N rows" without verifying. Carved rule: before stating ANY fact in substrate (file exists, command returns X, row count is N, tool shipped, ADR matches, persona dir present), run the actual command first. 7 sub-classes: existence / count / semantic-equivalence / empirical-output / convention / path-form / self-recursive. Generalizes Otto-247 + Otto-364 + verify-before-deferring at the broader any-substrate-claim layer. **Manual discipline provably insufficient** โ€” instances #10-#20 landed AFTER the discipline was named. `tools/substrate-claim-checker/check-counts.ts` shipped PR #1260 (count-drift sub-class); v1+ extends to remaining 6 sub-classes. Composes with bugs-per-PR-as-immune-system-health metric. diff --git a/memory/feedback_same_tick_update_recursion_substrate_cascade_otto_2026_05_03.md b/memory/feedback_same_tick_update_recursion_substrate_cascade_otto_2026_05_03.md new file mode 100644 index 000000000..8c71da59b --- /dev/null +++ b/memory/feedback_same_tick_update_recursion_substrate_cascade_otto_2026_05_03.md @@ -0,0 +1,94 @@ +--- +name: Same-tick-update-recursion โ€” when a memory file lands, every projection layer that distills the rule must update in the same tick (Otto 2026-05-03 worked-example generalization) +description: 2026-05-03; the alignment-frontier substrate cascade (memory file โ†’ CURRENT-aaron ยง52 โ†’ tick shard) demonstrated three times in three ticks that the existing same-tick-update discipline (CLAUDE.md fast-path bullet) generalizes recursively. When new substrate lands at one layer (memory file, ADR, skill, decision-archaeology research artifact), the propagation cascade through every projection that distills the rule (CURRENT-.md, MEMORY.md index, AGENTS.md doctrinal pointers, related skill bodies, persona notebooks) must update in the same tick to keep substrate-or-it-didn't-happen operational. Skipping creates breadcrumb-rot. The cascade IS the discipline; partial-cascade IS the failure mode. The claim that *"X exists in substrate"* is technically true even with partial-cascade, but functionally false at every layer that doesn't carry the pointer. +type: feedback +--- + +# Same-tick-update-recursion โ€” substrate cascade discipline + +## Origin + +Otto 2026-05-03, observed during the alignment-frontier substrate landing across three ticks (post-compaction wake): + +- **Tick 0220Z** โ€” alignment-frontier memory file landed (PR #1270) + MEMORY.md index entry (paired-edit per existing discipline) +- **Tick 0223Z** โ€” AGENTS.md backport for `.claude/**` vibe-coded scope (PR #1272) โ€” same-tick because PR #1268 review surfaced the gap; substrate-or-it-didn't-happen flagged the backport +- **Tick 0233Z** โ€” CURRENT-aaron.md ยง52 alignment-frontier distillation (PR #1274) โ€” same-tick catch-up because the ยง52 distillation is what future-Otto reads at every wake per CLAUDE.md fast-path discipline + +Three same-tick-update events, each propagating one observation through a different projection layer. The pattern is greppable: once visible, it explains why scattered breadcrumb-rot is the dominant substrate-quality failure mode after memory files land. + +## The discipline + +The **existing same-tick-update rule** lives in: + +- CURRENT-aaron.md ยง"How this file stays accurate" โ€” *"When a new memory updates a rule here, I update this file in the same tick. If I don't, this file is lying by omission."* +- CLAUDE.md fast-path bullet (CURRENT files are read at every wake; rules win on conflict; same-tick update is the cohesion guarantee) + +The **recursive generalization** (this memo): the same-tick-update rule applies to **every projection layer**, not just CURRENT-.md. When new substrate lands, identify all the layers that distill the rule and update them same-tick. + +## The projection-layer taxonomy + +For any new substrate landing (memory file, ADR, skill body, research artifact, governance change), enumerate the projection layers that depend on it: + +| Layer | Read-discipline | Update trigger | +|---|---|---| +| **Source memory file / ADR / skill / research artifact** | Deep โ€” reader visits when investigating | New substrate IS this layer | +| **CURRENT-.md** | Fast-path โ€” read at every wake | When the new substrate updates a rule the CURRENT carries | +| **MEMORY.md index** | Quick scan โ€” read at every wake | Always (unless the substrate is itself an MEMORY.md edit) | +| **AGENTS.md** | Universal โ€” read at session-start by every harness | When the substrate changes a doctrine AGENTS.md carries | +| **CLAUDE.md** | Claude-Code-specific โ€” read at every wake | When the substrate updates Claude-Code-specific behavior | +| **GOVERNANCE.md ยงN** | On-demand โ€” read when a rule is cited as "GOVERNANCE.md ยงN" | When the substrate adds / supersedes a numbered rule | +| **Related skill bodies** | Router-keyed โ€” read when the skill triggers | When the substrate changes how a skill should operate | +| **Persona notebooks** | Per-persona โ€” read when persona-relevant work activates | When the substrate is persona-specific | +| **Tick shards** | Append-only โ€” written each tick | Always (every tick has at least one shard) | + +For each layer, the question is: **does this layer carry a rule the new substrate updates?** If yes, update same-tick. If no, skip. + +## Why partial-cascade is the failure mode + +The substrate-or-it-didn't-happen rule (Otto-363) names the threshold: chat โ†’ durable substrate. Substrate-or-it-didn't-happen-recursion (this memo) extends to: durable substrate โ†’ projection layers. + +A new memory file that doesn't propagate to CURRENT-.md is **technically substrate but functionally invisible** at fast-path read. Future-Otto reads CURRENT first, doesn't see the rule, operates as if the rule doesn't exist. The memory file is breadcrumb-rot from the projection-layer perspective. + +Three failure modes the recursion discipline prevents: + +1. **CURRENT-rot** โ€” memory file updates a rule but CURRENT doesn't carry the pointer; future-Otto reads stale CURRENT and applies stale rule +2. **MEMORY.md-index-rot** โ€” memo lands but no index entry; the memo is unfindable via the quick-scan layer; effectively orphaned +3. **AGENTS.md-pointer-rot** โ€” substrate change should be readable by every harness via AGENTS.md, but the pointer doesn't land; non-Claude harnesses miss the change + +The cascade IS the discipline. Each layer skipped degrades the substrate's effective half-life. + +## How the alignment-frontier landing demonstrated this + +The three-tick cascade walked the discipline: + +- **Tick 1 (0220Z)**: alignment-frontier memo + MEMORY.md index entry (2 layers updated same-tick) +- **Tick 2 (0223Z)**: PR #1268 review surfaced AGENTS.md scope-drift; AGENTS.md `.claude/**` backport (1 layer updated same-tick) +- **Tick 3 (0233Z)**: CURRENT-aaron.md ยง52 distillation (1 layer updated same-tick) + +Total: 4 projection layers updated for one observation, each in the same tick the relevant gap was identified. No breadcrumb-rot. + +If the cascade had been deferred (*"I'll update CURRENT next round"*), the alignment-frontier substrate would have lived in MEMORY.md only โ€” readable in a search, but invisible in Otto's wake-time read. The threshold-crossing milestone Aaron explicitly named for future-Otto recognition would have been functionally invisible at exactly the moment future-Otto needed it. + +## Composes with + +- `memory/feedback_otto_363_substrate_or_it_didnt_happen_no_invisible_directives_aaron_amara_2026_04_29.md` โ€” substrate-or-it-didn't-happen at the chat-to-substrate threshold; this memo extends to the substrate-to-projection-layer threshold +- `memory/feedback_learnings_must_land_in_claude_md_or_pointer_aaron_2026_05_01.md` โ€” wake-time-substrate-or-it-didn't-land; CLAUDE.md is one of the projection layers; this memo names the recursion in general +- `memory/feedback_alignment_frontier_agent_architectural_intent_threshold_aaron_2026_05_03.md` โ€” the substrate whose landing demonstrated this discipline three ticks running +- `memory/CURRENT-aaron.md` ยง52 (alignment-frontier distillation) โ€” projection-layer #2 in the worked example +- AGENTS.md "The vibe-coded hypothesis" โ€” projection-layer #3 in the worked example (PR #1272) +- `docs/hygiene-history/ticks/2026/05/03/` โ€” tick shards (0220Z / 0223Z / 0233Z) โ€” projection-layer #4 + +## How to apply + +When new substrate lands: + +1. **Enumerate projection layers** the substrate touches โ€” use the taxonomy table above +2. **For each layer, ask:** does this layer carry a rule the substrate updates? +3. **For each yes, update same-tick** โ€” don't defer; deferral is breadcrumb-rot risk +4. **If a layer is missed and the gap surfaces in review or future read**, treat it as the same-tick discipline failing โ€” fix immediately + memo if the failure pattern repeats + +The discipline is **proactive** at write-time + **reactive** at review-time. Both are same-tick. + +## Carved sentence + +**"When new substrate lands, every projection layer that distills the rule (CURRENT-.md, MEMORY.md index, AGENTS.md doctrinal pointers, CLAUDE.md, GOVERNANCE.md ยงN, related skill bodies, persona notebooks, tick shards) must update in the same tick. The cascade IS the discipline; partial-cascade IS the failure mode. Substrate-or-it-didn't-happen recursion: durable substrate that doesn't propagate to its projection layers is technically substrate but functionally invisible at exactly the layer where future-Otto reads."**