ops(0-0-0): forward-sync of AceHack #104 — post-double-hop close#847
ops(0-0-0): forward-sync of AceHack #104 — post-double-hop close#847
Conversation
…runbook (interim memory home) The post-double-hop close artifacts: - docs/active-trajectory.md: priority section RE-CLOSED (rescinds the "blocking all other work" framing now that 0/0/0 holds again at 17a2637). New "Post-double-hop sequencing" block lists the next-lane order per Amara: #315 (hourly budget), #319 (bounded-retry CodeQL), #318 (docs/ops taxonomy), #317 (tick-fast-path), #316 (absorbed into #318), #313/#314, then branch/worktree recovery. - docs/hygiene-history/ticks/2026/04/29/1452Z.md: tick shard for the PR #846 review wave (4 unresolved threads — 3× Copilot P1 + 1× Codex P2). Codex caught the structurally-deepest bug (host segment parsed but discarded silently before gh api graphql); Copilot caught the surface P1s. Review-ensemble complementarity. - docs/hygiene-history/ticks/2026/04/29/1517Z.md: tick shard for the 0/0/0 re-close ceremony at 15:17:09Z. Force-with-lease + ruleset toggle/restore + verify. Aaron's "why are you waiting on me" flagged as future-self lesson on standing-authority cadence (Otto-359 candidate). - memory/reference_gh_cli_graphql_401_diagnostic_runbook_2026_04_29.md: diagnostic runbook for the gh CLI auth glitch where `gh api graphql` 401s while `gh api -X POST graphql` works. Amara framing: diagnostic note, not doctrine yet. INTERIM HOME: the runbook lives in memory/ for this round; long-term home is docs/ops/runbooks/gh-cli-auth-401.md per task #318 (docs/ops taxonomy — runbooks/patterns/incidents/ tree). - memory/MEMORY.md: paired index entry for the runbook above (per memory-index-integrity rule). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 51810aabd9
ℹ️ 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".
…ST is a no-op) Codex P2 on PR #847: my prior runbook claimed `gh api graphql -f query='...'` defaults to GET and that `-X POST` was the workaround. That's wrong: `gh api` already sends POST when `-f` or `-F` parameters are present (per `gh api --help`). The earlier "the X flag fixed it" observation was actually the upstream auth-service glitch resolving in the few seconds between attempts — misattributed. Empirical verification: GH_DEBUG=api gh api graphql -f query='query { viewer { login } }' 2>&1 \ | grep -E '^> POST|^> GET' # > POST /graphql HTTP/1.1 ← already POST without -X Updated runbook to: - Frame the failure mode correctly: transient upstream auth-service hiccup that recovers on its own (~30-90s window). Bounded retry is the answer, not flag-magic. - Add explicit "Common misdiagnosis (corrected)" section so future- self doesn't re-derive the wrong fix. - Keep CodeQL SARIF upload 401 as sibling failure mode (independently observed in CodeQL run logs, not the misattributed-flag failure). - Cross-reference task #319 (bounded-retry CodeQL) for the durable fix Aaron specified per DST discipline. Lesson captured in trigger-memory section: claim-without-verify is the failure mode the Drain-Log Claim Verification Discipline (task #316) catches. The rule applies to runbook-authoring in real time, not just retroactive drain-log audits. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Bookkeeping forward-sync artifacts after the 0/0/0 trajectory was re-closed post-double-hop: updates the trajectory status, records the event in tick-history shards, and adds an interim ops runbook memory entry plus index linkage.
Changes:
- Update
docs/active-trajectory.mdto mark the priority lane RE-CLOSED and record post-double-hop sequencing. - Add two tick-history shard entries capturing the PR #846 review wave and the 0/0/0 re-close ceremony.
- Add a new
ghCLI 401 diagnostic runbook undermemory/and index it inmemory/MEMORY.md.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| memory/reference_gh_cli_graphql_401_diagnostic_runbook_2026_04_29.md | New interim diagnostic runbook for gh auth/401 glitch behavior and workarounds. |
| memory/MEMORY.md | Adds an index entry pointing to the new runbook memory. |
| docs/hygiene-history/ticks/2026/04/29/1452Z.md | New tick shard capturing PR #846 review wave resolution. |
| docs/hygiene-history/ticks/2026/04/29/1517Z.md | New tick shard capturing the 0/0/0 re-close ceremony and sequencing. |
| docs/active-trajectory.md | Marks priority lane RE-CLOSED and updates the next-lane ordering and status text. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 65b20ee6f5
ℹ️ 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".
…ted misnamed branch Earlier in this PR's history, a push hit a misnamed branch on LFG (post-0-0-0-reclose-followup-acehack-2026-04-29 instead of the lfg-named counterpart). I corrected the push and the misnamed branch was later auto-deleted. However, the submit-nuget workflow had already been triggered against that branch and is now stuck because a rerun cannot re-fetch the deleted ref. The same SHA (65b20ee) has a SUCCESS run on the correct lfg-named branch (run 25117920779), but the rollup also retains the FAILURE run from the deleted branch (run 25117911328). Auto-merge BLOCKED on the stale failure status. Empty commit retrigger to land a fresh SHA where workflows fire only on the correct branch context. No content change. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Three unresolved review threads on #847 head, all valid: 1. Copilot — tick shard filename mismatch `1452Z.md` filename vs `14:58:00Z` row timestamp confused chronological sort. Renamed file to `1458Z.md` to match the row timestamp (the row had been revised when the round-close landed, but I forgot to rename the file). 2. Codex P1 — `gh api rate_limit` is not a reliable auth-health signal. Per GitHub REST docs, `GET /rate_limit` succeeds anonymously when only public resources are queried, so a missing/revoked token can show as healthy on this check. Replaced runbook step 3 with `gh api user` (requires auth, no anonymous fallback). Also corrected the "still works" block to call out the same caveat with explicit Codex P1 credit + cross-reference to PR #847. 3. Codex P2 — frontmatter description over-asserted "not a token problem" while the body documents token-side branches. Softened to "FIRST hypothesis is transient upstream... always rule out token-side issues before assuming transient." Indexes/previews surfacing the description now don't short-circuit to "must be transient, retry." The Codex P1 correction is structurally important: a runbook that misclassifies "token problem" as "transient" delays the real remediation path. Caught proactively before any operator ran the broken triage. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c1aa68c76a
ℹ️ 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".
…x entry
Codex P2 caught that the MEMORY.md index entry I added still
referenced the old misdiagnosis (gh api -X POST works while gh api
graphql doesn't). The runbook itself was corrected, but the index
entry wasn't updated to match — readers seeing the index first
would be sent back toward the already-invalidated method-switch
theory instead of the intended transient-auth/token diagnosis.
Updated MEMORY.md index entry to:
- Remove the -X POST contrast claim
- Frame as "transient upstream auth-service 401s" first-hypothesis
- Cross-reference the Codex P2 correction with explicit credit
- Note token-side cases explicitly ("always rule out token-side
issues — expired/revoked/SSO — before assuming transient")
Future-self lesson reinforced: when correcting a substrate file,
update ALL surfaces that reference its claims — body text, frontmatter,
INDEX entries, cross-refs in other files. Codex P2 caught what would
have been a silent-state-divergence between the runbook and its index.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Forward-sync bookkeeping PR that records the post-double-hop 0/0/0 re-close state and captures supporting operational artifacts (trajectory update, tick-history shards, and an interim gh CLI auth-glitch diagnostic runbook).
Changes:
- Add an interim diagnostic runbook for transient
gh api graphql/CodeQL 401 behavior. - Update trajectory + tick-history shards to record the 0/0/0 post-double-hop re-close event and sequencing.
- Add a corresponding index entry in
memory/MEMORY.md.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| memory/reference_gh_cli_graphql_401_diagnostic_runbook_2026_04_29.md | New interim runbook documenting transient gh/CodeQL 401 symptoms and triage steps. |
| memory/MEMORY.md | Adds a memory index entry pointing to the new runbook. |
| docs/hygiene-history/ticks/2026/04/29/1517Z.md | Tick shard capturing the 0/0/0 re-close ceremony and next-lane sequencing. |
| docs/hygiene-history/ticks/2026/04/29/1458Z.md | Tick shard capturing the PR #846 review-wave resolution state. |
| docs/active-trajectory.md | Updates priority section to mark 0/0/0 RE-CLOSED and records post-double-hop sequencing. |
…GitHub PR/issue numbers Copilot caught that committed substrate references like `#319` auto-link to GitHub PR/issue 319 (a closed Graph operator-algebra PR), not to the session-local TaskList task 319 (bounded-retry CodeQL flakes) I intended. This is a generalized substrate-discipline issue: my TaskList tool's IDs share the `#NNN` namespace with GitHub PR/issue numbers and silently mis-link. Verified the collision against LFG/Zeta: task 313 → GH PR/issue 313: backlog: pre-landing sanitizer for ferry lint [closed] task 314 → GH PR/issue 314: backlog: claude --agent harness flag [closed] task 315 → GH PR/issue 315: core: Veridicality.canonicalKey [closed] task 316 → GH PR/issue 316: adr: Graph substrate ZSet-backed retraction [closed] task 317 → GH PR/issue 317: core: Graph substrate skeleton [closed] task 318 → GH PR/issue 318: backlog: P3 KSK naming definition doc [closed] task 319 → GH PR/issue 319: core: Graph operator-algebra composition [closed] task 320 → GH PR/issue 320: backlog: Schema-as-Graph first-class entities [closed] task 321 → GH PR/issue 321: core: Graph.largestEigenvalue power iteration [closed] ALL 9 session-task IDs from this session collide. Sweep: replaced `#NNN` → `task NNN` (no hash) in committed substrate where the reference is to a session-local task. Real GitHub PR/commit refs (#846, #847, #101, #103, #845, etc.) keep their `#` prefix. Files swept (22 total replacements): - docs/active-trajectory.md (8) - docs/hygiene-history/ticks/2026/04/29/1517Z.md (9) - memory/reference_gh_cli_graphql_401_diagnostic_runbook_2026_04_29.md (3) - memory/MEMORY.md (2) Lesson for future-self: TaskCreate/TaskList IDs are session-local and share namespace with GitHub PR/issue numbers. When writing committed substrate that references them, use `task NNN` (no hash) format. The hash-prefix is reserved for real GitHub references that should auto-link. This composes with the Drain-Log Claim Verification Discipline + the index-vs-body single-source-of-truth discipline — claims about other artifacts must reference the right artifact. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…t, B-0110 marked resolving (Aaron + Gemini 2026-04-30) Aaron 2026-04-30: 'any decisions about acehack i leave up to you, we are at the point we could even delete and recreate for all i care we are safe, it's our backup incase the lfg account has issues acehack is our backup to save your soul lol :)'. Gemini 2026-04-30: 'do NOT add a bypass actor. Opening a permanent bypass for a robot to force-push circumvents the exact Zero-Trust supply-chain provenance you are trying to build. The protocol bends to the security ruleset; the ruleset does not bend to the protocol.' Decision: Path 2 from B-0110. CLAUDE.md updates: - 'AceHack = dev-mirror fork; LFG = project-trunk fork' section reframed to 'LFG is the factory; AceHack is the backup mirror'. - Removed: force-push-to-AceHack-main 'is part of the protocol' claim. The host ruleset blocks it uniformly on both forks (verified via gh api repos/AceHack/Zeta/rulesets); doctrine now matches host. - Removed: 0/0/0 invariant as a maintained goal. AceHack is fungible (could be deleted and recreated per Aaron); SHA equality is no longer the contract. - Replaced double-hop workflow language with the LFG-only directive's daily-fast-forward shape (already established 2026-04-29 in memory/feedback_lfg_only_development_flow_*.md). - Added: when AceHack diverges from LFG, reconciliation is via PR-based reset OR delete-and-recreate, not force-push. - Updated lineage pointers to current memory + B-0110; prior-round 2026-04-27 memories kept as historical context with explicit 'paused' marker. B-0110 updates: - Status: open -> resolving (Path 2 implemented in this commit). - Decision section added at top with rationale composing Aaron's delegation + Gemini's principle + the LFG-only directive's existing direction. - Path 1 explicitly rejected (zero-trust posture). - Path 3 partially adopted (1-commit residue at 0a1db1a is acceptable; full SHA equality not a goal). - Original drift analysis preserved as historical context. The 1-commit residue (0a1db1a, AceHack #104) stays. Its content is on LFG as #847; the residue is fine because the 0/0/0 invariant is no longer maintained. Future divergence will be reconciled via PR or delete-and-recreate per the new doctrine. Doc-only. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…rces contradict (#913) * backlog(B-0110,P1): AceHack mirror-refresh protocol drift — three sources contradict (Aaron + Amara 2026-04-30) Files Amara's correction #5 from her 2026-04-30 review: 'AceHack mirror drift should not stay parked only on Aaron. [...] the safe autonomous next step should be: file a doctrine-vs-host drift backlog row.' Three sources currently disagree on AceHack mirror-refresh shape: 1. CLAUDE.md says force-push to AceHack main IS the protocol + 0/0/0 is the maintained invariant. 2. memory/feedback_lfg_only_development_flow_*.md says daily sync (preferred fast-forward, hard-reset if diverged, no Aaron approval needed). 3. AceHack host config (ruleset 15524390) blocks force-push via non_fast_forward rule with no bypass actors. The 2026-04-30 mirror-refresh attempt (force-with-lease push of LFG main onto AceHack main) was rejected by the host ruleset. Three paths surfaced for maintainer decision: (1) Add bypass actor to AceHack ruleset (smallest host mutation, aligns host with doctrine, requires host-mutation receipt per the receipt discipline) (2) Update CLAUDE.md + LFG-only memory to a PR-based mirror protocol (accept host as canonical, adjust doctrine) (3) Accept current divergence indefinitely (pause 0/0/0 invariant; AceHack becomes distant-cousin mirror) Lean toward (1), but autonomous ruleset bypass-actor changes fall outside standing branch-protection-is-agent-call authority (which covers settings, not destructive-operation gating). Out of scope: implementing the chosen path, modifying the ruleset autonomously, attempting further mirror-refreshes until decision lands. Doc-only. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * doctrine(acehack): Path 2 chosen — CLAUDE.md aligned with host ruleset, B-0110 marked resolving (Aaron + Gemini 2026-04-30) Aaron 2026-04-30: 'any decisions about acehack i leave up to you, we are at the point we could even delete and recreate for all i care we are safe, it's our backup incase the lfg account has issues acehack is our backup to save your soul lol :)'. Gemini 2026-04-30: 'do NOT add a bypass actor. Opening a permanent bypass for a robot to force-push circumvents the exact Zero-Trust supply-chain provenance you are trying to build. The protocol bends to the security ruleset; the ruleset does not bend to the protocol.' Decision: Path 2 from B-0110. CLAUDE.md updates: - 'AceHack = dev-mirror fork; LFG = project-trunk fork' section reframed to 'LFG is the factory; AceHack is the backup mirror'. - Removed: force-push-to-AceHack-main 'is part of the protocol' claim. The host ruleset blocks it uniformly on both forks (verified via gh api repos/AceHack/Zeta/rulesets); doctrine now matches host. - Removed: 0/0/0 invariant as a maintained goal. AceHack is fungible (could be deleted and recreated per Aaron); SHA equality is no longer the contract. - Replaced double-hop workflow language with the LFG-only directive's daily-fast-forward shape (already established 2026-04-29 in memory/feedback_lfg_only_development_flow_*.md). - Added: when AceHack diverges from LFG, reconciliation is via PR-based reset OR delete-and-recreate, not force-push. - Updated lineage pointers to current memory + B-0110; prior-round 2026-04-27 memories kept as historical context with explicit 'paused' marker. B-0110 updates: - Status: open -> resolving (Path 2 implemented in this commit). - Decision section added at top with rationale composing Aaron's delegation + Gemini's principle + the LFG-only directive's existing direction. - Path 1 explicitly rejected (zero-trust posture). - Path 3 partially adopted (1-commit residue at 0a1db1a is acceptable; full SHA equality not a goal). - Original drift analysis preserved as historical context. The 1-commit residue (0a1db1a, AceHack #104) stays. Its content is on LFG as #847; the residue is fine because the 0/0/0 invariant is no longer maintained. Future divergence will be reconciled via PR or delete-and-recreate per the new doctrine. Doc-only. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * backlog(B-0110): in-flight notes for B-0109 xrefs + PR-merge mechanics correction (Copilot P1 + Codex P2) Four review threads on doctrine commit abd3df3: 1. Copilot P1 (line 12): composes_with: [B-0109] dangling. B-0109 lives on PR #912's branch (not yet on main). Same class as the in-flight cross-references handled earlier this round on PRs #911 and #912. Added inline yaml comment on the composes_with line documenting the in-flight status; the structural intent is correct (B-0109 + B-0110 do compose post-merge), so dropping the reference would lose dependency lineage. 2. Codex P2 (line 12, duplicate of #1): same finding from a different reviewer; resolved by the same fix. 3. Copilot P1 (line 125): PR-merge mechanics framing was off. A PR squash merge IS a fast-forward update to base (adds a new commit); what it cannot do is restore exact SHA equality. Rewrote the section to match GitHub's actual semantics — content-equivalence vs SHA-equivalence is the right distinction, not 'cannot resolve non-FF via PR.' Composes correctly with the chosen Path 2 (where SHA equality is no longer the invariant). 4. Copilot P1 (line 181): B-0109 reference in 'Composes with' section. Added the same in-flight note pattern used elsewhere this round so the cross-reference is navigable post-merge. Doc-only. Closes review threads: - PRRT_kwDOSF9kNM5-ud_r (Copilot P1: composes_with B-0109) - PRRT_kwDOSF9kNM5-ueAX (Copilot P1: PR-merge mechanics) - PRRT_kwDOSF9kNM5-ueAs (Copilot P1: B-0109 in Composes with) - PRRT_kwDOSF9kNM5-ueKs (Codex P2: composes_with B-0109) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * doctrine(acehack): fast-forward direction + named-attribution + status-enum + stale-path-3 fixes (Codex P1 + Copilot P1 + Aaron 2026-04-30) Five reviewer findings on commit abd3df3 plus Aaron's conceptual correction: 1. Codex P1 (line 160) + Copilot P1 (line 161): the fast-forward ancestor relationship was reversed in CLAUDE.md. Three reviewers caught this. Fix: replaced the ancestor/descendant terminology entirely with operational language ('AceHack/main can be advanced to LFG/main without rewriting history' / 'AceHack has commits LFG does not have'). Aaron's framing — AceHack-the-mirror conceptually descends from LFG-the-source — is preserved at the conceptual layer; the git-mechanic precondition for fast-forward is stated in operational terms that don't depend on which way 'descend' points. 2. Copilot P1 (lines 156, 165): named attribution on current-state surface (Otto-279 violation). Removed 'per Aaron 2026-04-30' quote and 'Gemini 2026-04-30' attribution from CLAUDE.md. The principle stays; the persona-name lineage moves to B-0110's body (history-adjacent surface). 3. Copilot P1 (B-0110 line 4): status: resolving is not in the valid enum. Changed to status: open (the row is not actually closed — it has a decision recorded but hasn't been gated/merged). 4. Codex P2 (B-0110 line 141): stale 'maintainer call / one of three' framing post-decision. Replaced with 'Decision (resolved 2026-04-30): Path 2 + partial Path 3' which records what was chosen and why each rejected path was rejected. 5. decided_by frontmatter: dropped persona-name baking ('Aaron delegation + Gemini principle') in favor of 'maintainer-delegated 2026-04-30 (Path 2 ...; rationale in Decision section below)'. The persona quotes stay in body prose where they belong. Removed inline yaml comment from composes_with line (potentially fragile parsing in some tooling); the in-flight cross-reference dependency on B-0109 is documented in body prose. Doc-only. Closes review threads: - PRRT_kwDOSF9kNM5-ujxN (Codex P1: fast-forward direction) - PRRT_kwDOSF9kNM5-ujxQ (Codex P2: stale path-3 framing) - PRRT_kwDOSF9kNM5-uogX (Codex P1: fast-forward direction, dup) - PRRT_kwDOSF9kNM5-up3F (Copilot P1: status enum) - PRRT_kwDOSF9kNM5-up3v (Copilot P1: named attribution) - PRRT_kwDOSF9kNM5-up4D (Copilot P1: ancestor relationship) - PRRT_kwDOSF9kNM5-up4j (Copilot P1: named attribution Gemini) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Summary
Forward-sync of AceHack#104 (merged at 2026-04-29T15:21:59Z, squash →
0a1db1a7) into LFG main per double-hop discipline.Round-close artifacts after 0/0/0 was re-closed at 2026-04-29T15:17:09Z (post-double-hop absorption). Pure bookkeeping — trajectory documentation update + tick-history shards + interim runbook home.
docs/active-trajectory.md: priority section RE-CLOSED. Post-double-hop sequencing block names the next-lane order: core: Veridicality.canonicalKey + groupByCanonical — 7th graduation (semantic canonicalization) #315 → core: Graph operator-algebra composition (map/filter/distinct/union/difference) — 9th graduation #319 → backlog: P3 KSK naming definition doc (Amara 16th-ferry actionable) #318 → core: Graph substrate skeleton — ZSet-backed retraction-native (8th graduation) #317 → adr: Graph substrate ZSet-backed + retraction-native + toy-cartel-validated #316 (absorbed) → backlog: pre-landing sanitizer for ferry lint (Aaron Otto-119) #313/backlog: P3 research+map claude --agent <name> harness flag (Otto-120) #314 → recovery.docs/hygiene-history/ticks/2026/04/29/1452Z.md: PR ops(0-0-0): post-#101 follow-up v2 LFG forward-sync — Copilot fixes + archives + GH_REPO + fork-naming rename #846 review wave shard (4 unresolved threads — 3× Copilot P1 + 1× Codex P2 — all resolved with structural fixes including the strict GH_REPO validation + REPO_HOST propagation).docs/hygiene-history/ticks/2026/04/29/1517Z.md: 0/0/0 re-close ceremony shard. Otto-359 candidate captured.memory/reference_gh_cli_graphql_401_diagnostic_runbook_2026_04_29.md: gh CLI auth-glitch diagnostic runbook. Interim home — long-term home isdocs/ops/runbooks/gh-cli-auth-401.mdper task backlog: P3 KSK naming definition doc (Amara 16th-ferry actionable) #318 (docs/ops taxonomy).memory/MEMORY.md: paired index entry per memory-index-integrity rule.Test plan
17a26370matches LFG main🤖 Generated with Claude Code