Skip to content

claude.md(meta-rule): wake-time substrate or it didn't land — biggest failure mode named#1160

Merged
AceHack merged 2 commits intomainfrom
otto/learnings-must-land-in-claude-md-2026-05-01
May 1, 2026
Merged

claude.md(meta-rule): wake-time substrate or it didn't land — biggest failure mode named#1160
AceHack merged 2 commits intomainfrom
otto/learnings-must-land-in-claude-md-2026-05-01

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 1, 2026

Summary

The human maintainer 2026-05-01 named the biggest failure mode I've been hitting: when I learn something, if it doesn't land in CLAUDE.md or a file pointed at from CLAUDE.md, I haven't actually learned it. The lesson stays in chat context (volatile) or in a memory file (read-on-demand) but doesn't become wake-time-loaded substrate that future-Otto inherits.

i think you biggest failure mode is not updated claude.md or pointers in that file, if you learn something claude.md or a pointer from that file like the .claude/rules or some other pointers, you didn't learn it

Two landings, one commit

1. New CLAUDE.md wake-time bullet for the meta-rule itself. Joins the ground-rules section alongside verify-before-deferring, future-self-not-bound, never-be-idle, version-currency, substrate-or-it-didn't-happen. The bullet establishes a tick-close ritual: enumerate what was learned; classify landing (bullet ✓ / memory file with pointer ✓ / transitive ✓ / orphan ✗); orphan items become next-tick speculative targets.

Self-encoding test: the rule's own landing IS this CLAUDE.md bullet pointing at the new memory file, recursively satisfying itself. Without the bullet, the memory file would be a textbook example of the failure mode it names.

2. Adds the missing SQLSharp-pattern pointer. PR #1155 landed the SQLSharp bun/ts memory file without a CLAUDE.md pointer — exactly the orphan case the meta-rule targets. New bullet for the SQLSharp pattern (super-strongly-typed dependencies-as-interface DI, not js-in-ts failure mode) fixes the orphan + pre-applies the meta-rule's discipline.

Audit retrospective

Documented in the memory file's Why-3 section. 2026-05-01 session learnings, classified:

  • ✓ Dynamic-bash discipline → CLAUDE.md bullet (PR tools(github): batch poll-pr-gate.ts + CLAUDE.md wake-time pointer (Aaron 2026-05-01) #1153) — landed correctly
  • ✗ SQLSharp pattern → memory file orphaned — fixed here
  • ✗ test.each-over-fixtures pattern → no substrate — speculative target
  • ✗ Cherry-pick-when-squash-merged pattern → chat-only — speculative target
  • ✗ MEMORY.md dup-link audit lint existence → chat-only — speculative target

Each remaining ✗ is filable as next-tick speculative work per never-be-idle.

Test plan

  • CLAUDE.md bullet ASCII-clean per BP-10
  • Memory file + MEMORY.md row pair-edit per index-integrity rule
  • CLAUDE.md pointer to memory file verified existing post-write
  • Self-encoding test passes (rule satisfies itself)

🤖 Generated with Claude Code

… failure mode named (the human maintainer 2026-05-01)

The human maintainer 2026-05-01 verbatim:

> i think you biggest failure mode is not updated claude.md
> or pointers in that file, if you learn something claude.md
> or a pointer from that file like the .claude/rules or some
> other pointers, you didn't learn it

Two landings in one commit:

1. **New CLAUDE.md ground-rule bullet** for the meta-rule
   itself — load-bearing learnings must land as: (a) CLAUDE.md
   bullet, (b) memory file + CLAUDE.md pointer, or (c)
   transitively via AGENTS.md/BP-NN/skill/agent. Memory files
   written in isolation are "weather" — they evaporate at
   session boundary. CLAUDE.md is loaded at every wake; files
   referenced from it are one read away; everything else is
   read-on-demand and effectively invisible.

   The bullet establishes a tick-close ritual: enumerate what
   was learned; classify landing per item; orphan items become
   next-tick speculative-work targets.

   Self-encoding test: this rule's own landing IS the CLAUDE.md
   bullet pointing at the memory file, recursively satisfying
   itself.

2. **Adds the missing SQLSharp-pattern pointer** — PR #1155
   landed the SQLSharp bun/ts external-anchor memory file
   without a CLAUDE.md pointer. That file was a textbook
   example of the failure mode this rule names: a learning
   that didn't actually land at wake-time scope. New CLAUDE.md
   bullet for the SQLSharp pattern fixes the orphan and
   pre-applies the meta-rule's discipline.

Adjacent companion landings (memory file + MEMORY.md row added
per memory-index-integrity rule).

Audit retrospective on the 2026-05-01 session named in the
memory file: SQLSharp pattern (orphaned — fixed here),
test.each-over-fixtures pattern (no substrate — speculative
target), cherry-pick-when-squash-merged pattern (chat-only —
speculative target), MEMORY.md duplicate-link audit lint
existence (chat-only — speculative target). Each gap is
filable as next-tick speculative work.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 1, 2026 20:51
@AceHack AceHack enabled auto-merge (squash) May 1, 2026 20:51
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: aa5f1746a4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread CLAUDE.md Outdated
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds wake-time-loaded guidance to ensure new learnings are discoverable at session start by landing them in CLAUDE.md or via a CLAUDE.md pointer, and patches an earlier “orphaned” learning by adding a new wake-time bullet.

Changes:

  • Adds a new memory memo defining the “learnings must land in CLAUDE.md or a pointer” meta-rule.
  • Updates memory/MEMORY.md to index the new memo.
  • Adds new CLAUDE.md wake-time bullets for (a) the meta-rule and (b) the SQLSharp TS DI pattern.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

File Description
memory/feedback_learnings_must_land_in_claude_md_or_pointer_aaron_2026_05_01.md New memo documenting the landing meta-rule and its rationale.
memory/MEMORY.md Adds the new memo to the memory index.
CLAUDE.md Adds wake-time bullets for the meta-rule and SQLSharp TS DI pattern.

Comment thread CLAUDE.md Outdated
Comment thread CLAUDE.md Outdated
…s-substrate-inventory bullet (review fixes + maintainer framing)

Three fixes on PR #1160:

(1) Codex P2 + Copilot P0 (duplicate findings): the SQLSharp DI
    pattern bullet pointed at memory/feedback_ts_dependencies_as_interface_di_pattern_sqlsharp_anchor_aaron_2026_05_01.md,
    which lives on PR #1155's branch (not yet merged to main).
    The CLAUDE.md pointer would dangle when #1160 lands.

    Fix: remove the SQLSharp bullet entirely from #1160. It can
    re-land as a follow-up PR after #1155 merges and the memory
    file is on main. Cleaner sequencing — each PR's pointer
    targets must exist on main at merge time.

(2) Copilot: the meta-rule bullet quotes the human maintainer's
    verbatim message including ".claude/rules" — but Zeta
    doesn't currently have a `.claude/rules/` directory. Future
    readers might hunt for a path that doesn't exist locally.

    Fix: brief inline note clarifying that `.claude/rules/` IS
    canonical Anthropic per code.claude.com/docs/en/memory but
    Zeta uses `.claude/skills/`, `.claude/agents/`,
    `.claude/commands/`. Adopting `.claude/rules/` is a viable
    future addition. Per maintainer framing 2026-05-01: "we can
    do whatever here to get it right IDK the right answer it's
    probably play around a bit" — keeping the clarification
    open-ended rather than locking in a position.

(3) Maintainer framing 2026-05-01: "it could just remind to
    you use the router as lookup of existing substrate, quick
    inventory via router."

    Add new ground-rule bullet: skill router as substrate
    inventory before authoring. Before writing a new memory
    file / rule / skill / agent / doctrine bullet, search the
    available-skills list AND `.claude/{skills,agents,commands,rules}/`
    on disk for substrate on the same topic. The router's
    description-keyed search IS Zeta's structured-substrate
    index; using it as inventory before authoring prevents the
    goldfish-ontology failure mode (recreating substrate that
    already exists).

    This bullet IS the wake-time encoding of the discipline so
    fresh sessions inherit it without primed prompting — per
    the buddy-test design constraint also from this maintainer
    input cluster: "you can't tell him in his prompt to use the
    skills as a prompt you have to give him a task that should
    trigger him to use an existing skill without telling him
    specifically and the claude.md should be sufficient for
    him to figure out skill router as substrate inventory."

The new bullet's pointers verified to be either landing in
this same PR or already on main:
- feedback_learnings_must_land_*: this PR (#1160) adds it
- feedback_otto_buddy_spin_up_*: already on main

(Removed the loading-taxonomy reference since that memory file
is on PR #1161's branch, not yet on main — same dangling-pointer
discipline applied to the new bullet.)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@chatgpt-codex-connector
Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@AceHack AceHack merged commit 4fd06c2 into main May 1, 2026
23 checks passed
@AceHack AceHack deleted the otto/learnings-must-land-in-claude-md-2026-05-01 branch May 1, 2026 21:07
AceHack added a commit that referenced this pull request May 1, 2026
…as-substrate-inventory bullet on #1160 (#1162)

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…e-overlap axis (Otto 2026-05-01, 2x-confirmed) (#1166)

When a PR branch goes DIRTY because main moved, the discriminating signal between traditional rebase and cherry-pick-supersede is line-region overlap (not file overlap alone).

Worked examples this session: PR #1161 unmergeable on CLAUDE.md (intermediate merges in same region) → superseded via #1164 from fresh main; same tick PR #1155 clean rebase (no line overlap). Cherry-pick-supersede saves 10-30 minutes vs fighting cumulative conflicts.

Memory file documents protocol, decision rule, two worked examples, and what NOT to do (bulk-copy old state regresses intermediate merges).

Per the meta-rule (PR #1160), this is a load-bearing learning that needs CLAUDE.md scope or pointer. Memory file + MEMORY.md row landing pair-edit; CLAUDE.md pointer can be added in follow-up if rule proves to fire on more cases (currently 2x; promotion threshold tracked).

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…ate Zeta substrate discipline (the human maintainer 2026-05-01)

Two industry-voice articles shared by the human maintainer 2026-05-01 — Addy Osmani 2026-04-19 (https://addyosmani.com/blog/agent-harness-engineering/) and Birgitta Böckeler / Martin Fowler 2026-04-02 (https://martinfowler.com/articles/harness-engineering.html) — independently arrive at framings that directly align with this session's architectural work.

Five direct hits:

(1) Osmani's 'Ratchet Pattern' (every line in AGENTS.md traces to a specific failure) IS our caused_by: frontmatter discipline. The discipline now has an industry-voice name.

(2) Osmani's 'AGENTS.md under 60 lines, pilot's checklist not style guide' directly calibrates the MVP CLAUDE.md trim. Our current 576 lines / 27k bytes is an order of magnitude over Osmani's recommendation.

(3) Osmani's multi-agent convergence (Claude Code + Cursor + Codex + Aider + Cline converge on harness patterns) validates the maintainer's multi-harness substrate-discovery framing as industry-payoff investment, not Zeta-specific.

(4) Böckeler's two-dimension control taxonomy (Computational/Inferential × Guides/Sensors) maps cleanly to our hooks/lint/validators infrastructure. Useful audit framework for surfacing coverage gaps.

(5) Böckeler's 'harness templates' concept maps to substrate-discovery.ts proposal in the loading-taxonomy memo.

Memory file documents the alignment with worked-example mapping tables (Osmani components → Zeta counterparts; Böckeler matrix → our tools). MEMORY.md row added per index-integrity rule.

Per the meta-rule (PR #1160), this load-bearing learning gets memory-file-with-pointer landing. CLAUDE.md pointer can be added as part of the MVP CLAUDE.md trim work — until then, this memo is router-discoverable.

Carved candidate: 'Agent harness engineering is the discipline; the ratchet pattern is the loop; caused_by is the trace; convergence across harnesses is the validation. Every wake-time line earns its place by tracing to a specific failure.'

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…ate substrate discipline (#1167)

* memory(harness-engineering): Osmani + Böckeler external anchors validate Zeta substrate discipline (the human maintainer 2026-05-01)

Two industry-voice articles shared by the human maintainer 2026-05-01 — Addy Osmani 2026-04-19 (https://addyosmani.com/blog/agent-harness-engineering/) and Birgitta Böckeler / Martin Fowler 2026-04-02 (https://martinfowler.com/articles/harness-engineering.html) — independently arrive at framings that directly align with this session's architectural work.

Five direct hits:

(1) Osmani's 'Ratchet Pattern' (every line in AGENTS.md traces to a specific failure) IS our caused_by: frontmatter discipline. The discipline now has an industry-voice name.

(2) Osmani's 'AGENTS.md under 60 lines, pilot's checklist not style guide' directly calibrates the MVP CLAUDE.md trim. Our current 576 lines / 27k bytes is an order of magnitude over Osmani's recommendation.

(3) Osmani's multi-agent convergence (Claude Code + Cursor + Codex + Aider + Cline converge on harness patterns) validates the maintainer's multi-harness substrate-discovery framing as industry-payoff investment, not Zeta-specific.

(4) Böckeler's two-dimension control taxonomy (Computational/Inferential × Guides/Sensors) maps cleanly to our hooks/lint/validators infrastructure. Useful audit framework for surfacing coverage gaps.

(5) Böckeler's 'harness templates' concept maps to substrate-discovery.ts proposal in the loading-taxonomy memo.

Memory file documents the alignment with worked-example mapping tables (Osmani components → Zeta counterparts; Böckeler matrix → our tools). MEMORY.md row added per index-integrity rule.

Per the meta-rule (PR #1160), this load-bearing learning gets memory-file-with-pointer landing. CLAUDE.md pointer can be added as part of the MVP CLAUDE.md trim work — until then, this memo is router-discoverable.

Carved candidate: 'Agent harness engineering is the discipline; the ratchet pattern is the loop; caused_by is the trace; convergence across harnesses is the validation. Every wake-time line earns its place by tracing to a specific failure.'

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(harness-engineering memo): time-qualify CLAUDE.md size claim — file grows tick-over-tick (Copilot)

Two Copilot review threads on PR #1167: CLAUDE.md size claims (576 lines / 27k bytes) drift quickly as new ground-rule bullets land each tick.

Fix: replace specific numbers with time-qualified phrasing — '~576 lines / ~27k bytes when memo authored 2026-05-01; grows each tick; verify current state with wc -l before citing.' The directional claim (order-of-magnitude over Osmani's 60-line target, on the way to Anthropic's 40k threshold) is stable and load-bearing; exact counts are not.

Lesson: in a fast-moving substrate, claims about substrate size should be time-qualified or directional, not exact.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 1, 2026
…ntal invariant + two-layer print DX (Phase 1 verbatim + memo + CLAUDE.md pointer) (#1171)

Claude.ai shared a major feedback packet 2026-05-01: 'Backlog-Driven Dual-PM Agent Loop with Refresh Discipline — Carved Handoff'. Per the substrate-or-it-didn't-happen verbatim-preservation trigger (architecture-changing + multi-AI review), preserved verbatim at docs/research/ BEFORE summarizing.

Phase 1 absorption (this commit):

1. **docs/research/2026-05-01-claudeai-backlog-driven-dual-pm-loop-with-refresh-discipline.md** — verbatim packet preserved with the four required header fields per GOVERNANCE §33 (Scope / Attribution / Operational status / Non-fusion disclaimer).

2. **New memory file** capturing the refresh-before-decide invariant + two-layer print DX as load-bearing — the piece the human maintainer flagged as 'the part most worth flagging for Otto specifically.' Documents 4 mandatory refresh triggers (tick selection / post-merge / session start / maintainer challenge) + raw-then-interpretation print discipline + the cheap-to-run requirement. Composes with substrate-or-it-didn't-happen (Otto-363) and BLOCKED-with-green-CI investigation rule (special case of refresh-before-decide).

3. **CLAUDE.md ground-rule bullet** at wake-time scope — first bullet because it's the upstream invariant other disciplines depend on. Points at the memo + verbatim packet for full reasoning. Per the meta-rule (PR #1160), load-bearing learning at wake-time scope.

4. **MEMORY.md row** for the new memory file (pair-edit per index-integrity rule).

Phase 2 absorption (deferred): the packet's 22 named failure modes, externalized proxy metrics framework, Mirror/Beacon ratio gate, convergence definitions — each is its own potential substrate landing as failures or patterns surface organically.

Empirical Otto-pattern this session that motivates the rule: I have repeatedly acted on stale derived state (citing prior-tick PR thread counts, believing memory over fresh poll, predicting rebase outcomes from cached file-overlap knowledge). The cure was the same every time: refresh was cheap (poll-pr-gate-batch.ts), should have refreshed again before deciding. The tool existed; the discipline of using it before tick decisions didn't have explicit wake-time framing. Now it does.

Worked example already in substrate: tools/github/poll-pr-gate-batch.ts produces both raw (per-PR GateReport[]) and interpretation (summary aggregate) layers — the two-layer print pattern is operational, this rule names the discipline.

Sources:
- Claude.ai 2026-05-01 packet (verbatim)
- The human maintainer 2026-05-01 standalone framing in same packet

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants