Skip to content

docs(lanes): protocol for rung-2 doc/code two-lane parallel-subagent dispatch (B-0144)#1189

Merged
AceHack merged 4 commits intomainfrom
docs/lanes-protocol-b-0144-2026-05-02
May 2, 2026
Merged

docs(lanes): protocol for rung-2 doc/code two-lane parallel-subagent dispatch (B-0144)#1189
AceHack merged 4 commits intomainfrom
docs/lanes-protocol-b-0144-2026-05-02

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 2, 2026

Summary

Companion to PR #1185 (B-0125 CI lane-split). #1185 was the build/CI side — gate.yml path-filter skips F# build steps on docs-only PRs. This PR is the agent-dispatch side — the protocol two parallel subagents follow when working on disjoint file trees in isolated worktrees.

The two PRs together form rung-2 of the parallelism scaling ladder per memory/feedback_parallelism_scaling_ladder_kenji_unlocked_loop_agent_doc_code_two_lane_*.md:

Rung What Status
1 Serial-subagent dispatch (existing) Operational
2 Doc/code two-lane parallel-subagent dispatch + CI lane-split PR #1185 (CI) + this PR (protocol) — closing now
3 File-isolation lanes (N>2) Future
4 Mechanized best-practice (compound improvement loop) Future
5 Peer-mode claims protocol (cross-vendor parallel agents) Future, agent-orchestra cluster

Files added

  • tools/lanes/README.md — full protocol covering:

    • When to use two-lane vs single-lane
    • File allowlist + denylist per lane (doc-lane / code-lane)
    • Coordinator coordination protocol (allocate-both-then-dispatch + same-tool-call + dual-push synchronization + merge-queue)
    • Worktree isolation pattern (with git worktree add/remove examples)
    • Lessons-mechanization feedback loop (rung-4)
    • Explicit out-of-scope list (N>2, cross-harness, per-PR quality compromise)
  • tools/lanes/prompts/doc-lane-template.md — subagent prompt template the coordinator passes to the doc-lane subagent. Encodes allowlist/denylist + standard PR-body shape + read-only disciplines that still apply (verify-before-deferring, BP-10 ASCII-only, §33 archive header on research imports, Otto-279 history-surface carve-out).

  • tools/lanes/prompts/code-lane-template.md — subagent prompt template for the code-lane subagent. Encodes the same allowlist/denylist contract from the code side, plus the build/test gate (dotnet build 0/0, actionlint, bunx tsc --noEmit, shellcheck, Result-over-exception).

Why protocol-first vs scripts-first

B-0144 acceptance criterion #1 calls for tools/lanes/doc-lane.sh allocate <branch> + tools/lanes/code-lane.sh allocate <branch> allocator scripts. Those are follow-up work. The protocol is documented first so the scripts have a target shape to satisfy.

The protocol is enforceable today via git worktree directly — no scripts needed. The follow-up work mechanizes the ergonomics (one command vs five), not the substance.

Composes with

  • PR ci(gate): skip F#/dotnet build steps on docs-only PRs (B-0125 path-filter — immune-system tuning) #1185 (B-0125) — the CI/build side of the same lane split
  • memory/feedback_parallelism_scaling_ladder_kenji_unlocked_loop_agent_doc_code_two_lane_*.md — architectural framing
  • memory/feedback_parallel_agents_need_isolated_worktrees_coordinator_owns_main_aaron_amara_2026_04_29.md — worktree-isolation discipline this protocol instantiates
  • memory/project_loop_agent_named_otto_role_project_manager_2026_04_23.md — Otto-as-PM role definition (the coordinator)
  • B-0144 — backlog row this PR closes (criteria 1+2+3)

Closes B-0144 acceptance criteria

  • Worktree isolation pattern documented (tools/lanes/README.md § "Worktree isolation pattern")
  • Subagent prompt templates (tools/lanes/prompts/doc-lane-template.md + code-lane-template.md)
  • Coordinator coordination protocol documented (tools/lanes/README.md § "Coordinator coordination protocol")
  • First demonstrated dry-run — follow-up
  • Lessons-mechanization step — open-ended follow-up

🤖 Generated with Claude Code

…dispatch (B-0144)

Companion to PR #1185 (B-0125 CI lane-split). PR #1185 was the
build/CI side: gate.yml `path-filter` skips F# build steps on
docs-only PRs. This PR is the agent-dispatch side: the protocol
that two parallel subagents follow when working on disjoint
file trees in isolated worktrees.

Files added:

- tools/lanes/README.md — full protocol covering when to use
  two-lane vs single-lane, file allowlist per lane, coordinator
  coordination protocol (allocate-both-then-dispatch +
  same-tool-call dispatch + dual-push synchronization +
  merge-queue), worktree isolation pattern, lessons-mechanization
  feedback loop (rung-4), explicit out-of-scope list.

- tools/lanes/prompts/doc-lane-template.md — subagent prompt
  template encoding the doc-lane allowlist + denylist + standard
  PR-body shape + read-only disciplines that still apply.

- tools/lanes/prompts/code-lane-template.md — subagent prompt
  template encoding the code-lane allowlist + denylist + build/test
  gate + read-only disciplines.

Implementation note: the protocol is enforceable today via
`git worktree` directly. Allocator scripts
(tools/lanes/doc-lane.sh + tools/lanes/code-lane.sh) and a first
demonstrated dry-run (B-0144 acceptance criterion #4) are
follow-up work — the protocol is documented first so the scripts
have a target shape to satisfy.

Composes with:
- B-0125 (CI lane-split, just landed in PR #1185) — build/CI side
- memory/feedback_parallelism_scaling_ladder_kenji_unlocked_loop_agent_doc_code_two_lane_*.md — architectural framing
- memory/feedback_parallel_agents_need_isolated_worktrees_coordinator_owns_main_aaron_amara_2026_04_29.md — worktree-isolation discipline
- memory/project_loop_agent_named_otto_role_project_manager_2026_04_23.md — Otto-as-PM role

Closes B-0144 acceptance criteria 1+2+3 (worktree-isolation
documented + subagent prompt templates + coordinator protocol).
Acceptance criteria 4 (first demonstrated dry-run) and 5
(lessons-mechanization) are open-ended follow-ups.
Copilot AI review requested due to automatic review settings May 2, 2026 01:08
@AceHack AceHack enabled auto-merge (squash) May 2, 2026 01:08
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: 5cc6a1e1fd

ℹ️ 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 tools/lanes/prompts/code-lane-template.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 a documented “two-lane” (docs vs code) parallel subagent dispatch protocol under tools/lanes/, including coordinator steps, file allow/deny boundaries, and prompt templates to standardize lane execution.

Changes:

  • Add tools/lanes/README.md describing rung-2 doc/code lane dispatch, worktree isolation, and coordinator synchronization steps.
  • Add doc-lane and code-lane subagent prompt templates encoding lane boundaries and completion gates.

Reviewed changes

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

File Description
tools/lanes/README.md Documents the rung-2 two-lane protocol, allowlists/denylists, and worktree isolation workflow.
tools/lanes/prompts/doc-lane-template.md Adds the doc-lane dispatch prompt template (task placeholders + path boundaries + completion checklist).
tools/lanes/prompts/code-lane-template.md Adds the code-lane dispatch prompt template (task placeholders + path boundaries + build/lint gates).

Comment thread tools/lanes/prompts/doc-lane-template.md Outdated
Comment thread tools/lanes/prompts/code-lane-template.md Outdated
Comment thread tools/lanes/prompts/code-lane-template.md Outdated
Comment thread tools/lanes/prompts/code-lane-template.md Outdated
Comment thread tools/lanes/README.md Outdated
Comment thread tools/lanes/README.md Outdated
Comment thread tools/lanes/prompts/doc-lane-template.md Outdated
Comment thread tools/lanes/prompts/doc-lane-template.md Outdated
AceHack added a commit that referenced this pull request May 2, 2026
)

Companion to PR #1189 (B-0144 protocol docs). The protocol
documented allocation via raw `git worktree add/remove`; this
PR ships the wrapper scripts so the coordinator (Otto) and
maintainers don't need to remember the worktree paths or
branch-naming conventions.

Files added:

- tools/lanes/lane-allocator.sh — shared backend handling
  allocate/release/path/status across both lanes. Resolves
  worktree path siblings of the repo root (../zeta-doc-lane,
  ../zeta-code-lane) so worktrees don't get scanned by tools
  that recurse the main checkout's directory tree.

- tools/lanes/doc-lane.sh — thin wrapper passing `doc` as the
  lane to lane-allocator.sh.

- tools/lanes/code-lane.sh — thin wrapper passing `code` as
  the lane.

Subcommands:
  allocate <branch-name>  — create worktree + branch
  release                 — clean up worktree
  path                    — print absolute worktree path
  status (allocator only) — show both lanes' allocation state

Bash 3.2 compatible (Otto-235 4-shell target). Shellcheck-clean.
Smoke-tested: status shows "not allocated" cleanly when no
worktrees exist; help text + error messages match the protocol
docs in tools/lanes/README.md.

Live allocate/release cycle deferred to CI demonstration (B-0144
acceptance criterion #4 — first demonstrated dry-run). The
scripts are simple `git worktree` wrappers; correctness depends
on git's worktree implementation, which is well-tested upstream.

Closes B-0144 acceptance criterion #1 (allocator scripts).
AceHack added a commit that referenced this pull request May 2, 2026
… through Aaron's rest period (#1192)

Session-summary tick documenting the autonomous-loop work
landed/in-flight while Aaron rested. Aaron's rest-period
authorization 2026-05-02 ~00:42Z flipped the framing from
cooling-period minimum-action to substantive grinding:
"Ticks that fire while you rest will be you can go hard, you
don't have to do minimum action :)" + "really look at the
backlog, there is just a crazy amount" + "you are authorzed
to work on whatever you want the lane splits we just already
agreed with each other would speed up all future work".

Eight substantive PRs:
  #1184 MERGED — tick-history shard (cooling-period close)
  #1185 MERGED — B-0125 CI lane-split (gate.yml path-filter
                 skips F#/dotnet build steps on docs-only PRs)
  #1186 MERGED — gate.yml=immune-system Aaron-recognition +
                 Claude.ai-engagement verbatim preservation
  #1187 MERGED — B-0070 orphan role-ref + un-stripped-name-
                 attribution lint (tools/hygiene/audit-*.sh)
  #1188 OPEN   — B-0117 cold-start-check.ts executable
  #1189 OPEN   — B-0144 doc/code two-lane protocol docs
  #1190 OPEN   — B-0144 lane allocator scripts
  #1191 OPEN   — backlog closure bookkeeping (B-0125, B-0070,
                 B-0117, B-0144 marked closed)

The F# CI lane-split is now LIVE on main — all future docs-
only PRs skip ~5-10min of F# build per OS-leg, compounding
across the queue.

Substrate-class promotion of the carved sentence "gate.yml IS
the immune system at code-substrate layer" held per cooling-
period razor; verbatim preservation immediate per the queue/
promotion split + Aaron's "if you dont write it anywhere
you'll just compress and forget" instruction.
AceHack added a commit that referenced this pull request May 2, 2026
Two findings from Codex P2 + Copilot on PR #1191 addressed:

1. **Quote `closed_by` PR-reference values** (Copilot, four
   instances). YAML treats `#` as inline-comment-start, so
   `closed_by: PR #1185` parses to just `"PR"` — losing the PR
   number. Quoted all four:

     closed_by: "PR #1185"           (B-0125)
     closed_by: "PR #1187"           (B-0070)
     closed_by: "PR #1188"           (B-0117)
     closed_by: "PR #1189 + PR #1190" (B-0144)

   Verified with `python3 -c "import yaml; yaml.safe_load(...)"`:
   all four files now parse with `closed_by` preserved correctly.

2. **Move B-0117's closure note OUT of frontmatter** (Codex P2 +
   Copilot). The blockquote `> **Closed ...**` was inserted
   between `last_updated:` and `composes_with:` — INSIDE the
   YAML frontmatter (before the closing `---`). That broke the
   frontmatter parse. Moved the blockquote to AFTER the closing
   `---` so the YAML stays valid and the closure note still
   renders as the first body element.

   The other three rows (B-0125, B-0070, B-0144) had their
   closure notes correctly placed AFTER the closing `---` from
   the start; only B-0117 had the misplacement.
AceHack added a commit that referenced this pull request May 2, 2026
…026-05-02) (#1191)

* backlog: close B-0125 + B-0070 + B-0117 + B-0144 (landed 2026-05-02 overnight session)

Bookkeeping pass marking four backlog rows as closed by the
PRs that landed in this autonomous-loop session arc:

  B-0125 — skip F#/dotnet build on docs-only PRs (PR #1185)
  B-0070 — orphan role-ref detector lint (PR #1187)
  B-0117 — cold-start-check.ts executable checklist (PR #1188)
  B-0144 — doc/code two-lane parallel-split protocol (PR #1189 + #1190)

Each row's frontmatter gets `status: closed`, `closed: 2026-05-02`,
`closed_by: PR #NNNN`. A closure note in the body documents what
shipped and what (if anything) remains as open-ended follow-up:

- B-0125: closed completely. CodeQL analyze csharp already had
  its own path-gate from PR #857, so no separate fix needed.
- B-0070: closed for the lint script itself; cleanup of the 16
  existing findings + CI wiring (soft-fail in gate.yml) deferred.
- B-0117: closed for the implementation. Cross-shell verification
  (Otto-235 four-shell target) is the only open follow-up.
- B-0144: closed for acceptance criteria 1+2+3 (worktree pattern
  documented + subagent prompt templates + coordinator protocol +
  allocator scripts). Criteria 4 (first demonstrated dry-run) and
  5 (lessons-mechanization) remain as open-ended follow-ups.

`docs/BACKLOG.md` regenerated via
`BACKLOG_WRITE_FORCE=1 bash tools/backlog/generate-index.sh`.
The rows now appear as `[x]` checkboxes in the index.

* fix(backlog): YAML quoting + frontmatter scope on PR #1191 closure rows

Two findings from Codex P2 + Copilot on PR #1191 addressed:

1. **Quote `closed_by` PR-reference values** (Copilot, four
   instances). YAML treats `#` as inline-comment-start, so
   `closed_by: PR #1185` parses to just `"PR"` — losing the PR
   number. Quoted all four:

     closed_by: "PR #1185"           (B-0125)
     closed_by: "PR #1187"           (B-0070)
     closed_by: "PR #1188"           (B-0117)
     closed_by: "PR #1189 + PR #1190" (B-0144)

   Verified with `python3 -c "import yaml; yaml.safe_load(...)"`:
   all four files now parse with `closed_by` preserved correctly.

2. **Move B-0117's closure note OUT of frontmatter** (Codex P2 +
   Copilot). The blockquote `> **Closed ...**` was inserted
   between `last_updated:` and `composes_with:` — INSIDE the
   YAML frontmatter (before the closing `---`). That broke the
   frontmatter parse. Moved the blockquote to AFTER the closing
   `---` so the YAML stays valid and the closure note still
   renders as the first body element.

   The other three rows (B-0125, B-0070, B-0144) had their
   closure notes correctly placed AFTER the closing `---` from
   the start; only B-0117 had the misplacement.
AceHack added 2 commits May 1, 2026 21:27
Five Copilot/Codex findings on the lane-protocol PR addressed:

1. **Persona name "Otto" stripped from current-state surfaces**
   (Copilot P1, four occurrences). The repo rule (Otto-279
   carve-out at docs/AGENT-BEST-PRACTICES.md ~284-356) restricts
   persona names to a closed list of history surfaces. tools/
   is a current-state surface; persona names there violate the
   carve-out. Replaced with role-refs:

     "Otto, the loop-agent" → "the loop-agent / PM-1"
     "the coordinator (Otto)" → "the coordinator"
     "Otto (the loop-agent / PM-1) is the coordinator" →
       "The coordinator is the loop-agent / PM-1."
     "Otto-as-PM role definition" annotation now explicitly
       notes the persona-name-in-filename is allowed (history
       surface) but body uses role-ref.

   "Otto-279" and "Otto-235" remain as rule IDs (stable
   identifiers, not persona references — same convention as
   "Aaron's directive" being shorthand for the rule's owner).

2. **Co-Authored-By footer with "(1M context)" qualifier**
   (Copilot, two occurrences in templates). Updated both
   prompt templates to match the canonical format from
   .claude/skills/commit-message-shape/SKILL.md:36,90-92:

     Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

3. **TypeScript typecheck command matches CI exactly**
   (Copilot). Code-lane template now says
   `bun --bun tsc --noEmit -p tsconfig.json` instead of
   `bunx tsc --noEmit -p tsconfig.json`. Matches the
   `lint (tsc tools)` job in gate.yml exactly so local
   verification produces the same signal as CI.

4. **Actionlint command matches CI** (Codex P2). Code-lane
   template now says
   `actionlint -color -ignore 'unknown permission scope "administration"'`
   instead of plain `actionlint <workflow-file>`. Matches the
   `lint (actionlint)` job in gate.yml; the ignore flag works
   around a known actionlint gap on the `administration`
   permission scope.

5. **Otto-279 carve-out scope clarified** (Copilot). Doc-lane
   template's "disciplines that still apply" section previously
   enumerated history surfaces inline (and missed several:
   docs/aurora/, docs/pr-preservation/, docs/BACKLOG.md).
   Replaced with a pointer to docs/AGENT-BEST-PRACTICES.md as
   the canonical source of truth, plus the principle: on every
   non-history surface, use role-refs not persona names.
CI failed with MD026 (no-trailing-punctuation) on four H3
headings ending with `:`:

  Doc lane writes to:        →  Doc lane — writes to
  Doc lane NEVER writes:     →  Doc lane — NEVER writes
  Code lane writes to:       →  Code lane — writes to
  Code lane NEVER writes:    →  Code lane — NEVER writes

The em-dash separator preserves the title's two-part shape
(lane name + scope) without trailing punctuation.
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: 0766e37b6e

ℹ️ 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 tools/lanes/prompts/doc-lane-template.md Outdated
Copilot AI review requested due to automatic review settings May 2, 2026 01:31
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

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

Comment thread tools/lanes/prompts/doc-lane-template.md Outdated
Comment thread tools/lanes/prompts/code-lane-template.md Outdated
Comment thread tools/lanes/prompts/code-lane-template.md Outdated
Comment thread tools/lanes/README.md
Comment thread tools/lanes/README.md Outdated
Comment thread tools/lanes/README.md Outdated
Comment thread tools/lanes/prompts/doc-lane-template.md Outdated
Codex P2 + 7 Copilot threads on the lane-protocol templates,
all addressed:

1. **`tools/*.md` overlap eliminated** (3 threads). Both lanes
   previously claimed `tools/*.md` — doc-lane via "tools/*.md
   exception in denylist", code-lane via explicit allowlist
   entry. That broke the disjoint-file-trees contract.

   Resolution: code lane owns the entire `tools/**` tree
   including `tools/*.md`. Removed the exception from the
   doc-lane denylist (now reads: "anything under tools/").
   Code-lane allowlist entry kept and reworded to make the
   ownership explicit.

2. **BP-10 reference corrected to BP-09 + BP-10** (2 threads).
   The disciplines bullet said "ASCII-only in factory substrate
   (BP-10)" but BP-10 is the invisible-Unicode-lint discipline
   and BP-09 is the ASCII-only rule (per docs/AGENT-BEST-
   PRACTICES.md:74-82). Updated to "ASCII-only in factory
   substrate (BP-09); invisible-Unicode lint discipline
   (BP-10)" — covers both rules accurately.

3. **Code-lane denylist expanded for symmetry** (2 threads).
   Previous denylist enumerated only some doc-lane subtrees
   (memory/, docs/research/, docs/aurora/, docs/DECISIONS/,
   docs/backlog/). Reviewer correctly noted this should be
   `docs/**` plus root *.md plus all .claude/ doc surfaces
   plus .github/ doc surfaces. Updated both README and
   code-lane template to enumerate the full doc-lane territory
   so the disjoint contract is enforceable from either side.

The 8th thread (markdown table syntax `||` complaint) was a
Copilot mis-parse — the table on README.md:193 uses single `|`
delimiters correctly. No edit needed; will resolve as-not-applicable.
@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 2df664a into main May 2, 2026
25 checks passed
@AceHack AceHack deleted the docs/lanes-protocol-b-0144-2026-05-02 branch May 2, 2026 01:40
AceHack added a commit that referenced this pull request May 3, 2026
* docs: CODEX-LOOP-HANDOFF.md — GPT-5.5 overnight loop substrate

Aaron 2026-05-02 explicitly directed switching the autonomous-loop
overnight role from Claude Code (Opus 4.7) to GPT-5.5 under Codex
CLI after empirical pattern of Claude Code drifting to no-op
cadence across his rest periods.

This doc gives the GPT-5.5 instance landing cold on this repo
the substrate + disciplines it needs to pick up the loop without
repeating Claude Code's failure mode.

Covers:
- Why the handoff is needed (Claude Code's empirical no-op drift)
- Substrate to read on wake (CLAUDE.md, AGENTS.md, GOVERNANCE.md,
  MEMORY.md, AUTONOMOUS-LOOP.md, the just-landed periodic-self-
  check rule)
- The loop discipline (never-idle ladder, no-op cadence as
  failure mode, periodic self-check, refresh-before-decide,
  lane discipline)
- How to invoke Codex (peer-call/codex.sh confirmed fine, this
  doc complements for the loop-driving case)
- First-session checklist + smoke-test
- Exit conditions and handoff back
- Different-model-different-harness as resilience primitive
- Lane-split verification: PR #1185 + PR #1189 both landed
  early in Aaron's rest period

Provenance preserves Aaron's verbatim quotes including the
trust-loss + cost-model-inversion motivations.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* review: address PR #1199 reviewer findings + markdownlint MD029

Six reviewer findings + one failed lint check addressed:

1. **MD029 (failed lint)**: Per-tick checklist items numbered
   6-9 instead of restarting at 1-4. Renumbered to restart
   at 1; markdownlint MD029/ol-prefix should pass.

2. **P0 (missing reference)**: The periodic-self-check
   memory file referenced here lands in PR #1198, not yet
   merged. Updated framing to acknowledge the substrate is
   the set {#1198, #1199, #1200} taken together; once
   #1198 merges the path resolves directly.

3. **P1 (CURRENT-aaron.md location)**: Reviewer correctly
   noted the file IS in-repo at memory/CURRENT-aaron.md
   (per the 2026-04-24 directional shift "memory natural
   home is in-repo"). Updated to say in-repo is canonical;
   per-user mirrors are convenience-cache only.

4. **P1 (lane allowlist drift)**: Reviewer flagged drift
   from canonical contract in tools/lanes/README.md. Replaced
   the duplicate full allowlist with a high-level summary +
   explicit pointer at tools/lanes/README.md as authoritative.
   Treats any divergence between summary and canonical as
   error-in-this-doc.

5. **P1 (personal name attribution)**: Body-prose "Aaron"
   replaced with "the human maintainer" per AGENT-BEST-
   PRACTICES.md role-ref rule on current-state surfaces.
   Verbatim quotes in provenance section preserved
   unchanged (Otto-231 first-party consent-by-creation).

6. **P1 (glob reference)**: `memory/feedback_*same_model_
   different_harness*` replaced with the concrete file path
   `memory/feedback_same_model_different_harness_produces_
   different_biases_cursor_vs_claude_code_opus_4_7_aaron_
   2026_05_01.md` so readers can navigate directly.

7. **P2 (MEMORY.md size drift)**: Removed the specific line
   count (was "~563 lines", actual is now ~770 and growing).
   Replaced with "high hundreds of lines and grows; verify
   with `wc -l` before citing specifics" — drift-resistant
   framing.

Also added a Per-tick checklist entry for the mechanical
authorization check rule (PR #1200) — Codex inherits both
the introspective predecessor (PR #1198) and the
mechanical successor (PR #1200) when picking up the loop.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <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