Skip to content

fix(backlog): close B-0442 + B-0503 row status (work landed via PR #3458)#3518

Merged
AceHack merged 2 commits into
mainfrom
fix/b0442-b0503-row-status-merged-otto-cli-2026-05-15
May 15, 2026
Merged

fix(backlog): close B-0442 + B-0503 row status (work landed via PR #3458)#3518
AceHack merged 2 commits into
mainfrom
fix/b0442-b0503-row-status-merged-otto-cli-2026-05-15

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 15, 2026

Summary

Closes two row-status loose-ends flagged in tick 1436Z shard (PR #3509):

  • B-0442: all 6 acceptance items already [x] on main (slice 5 closed by PR #3458); flipped status: openclosed, added closed: 2026-05-15 + closed_by_pr: 3458. PR docs(b-0505): close B-0442 slice 5 acceptance + document --auto-recover #3458's own description explicitly said "After this merges, B-0442 itself can be marked status: closed" — that exact line was the loose-end.

  • B-0503: 4 unchecked acceptance items on main despite the named files (tools/bg/missed-substrate-recovery.ts + missed-substrate-recovery.test.ts) being present and tested. Checked all 4; flipped status: openclosed. Noted observed spec-drift on buildRecoveryBranchName: spec said (prNumber: number, ts: Date); shipped as (prNumber: number) only. The timestamp was dropped in favor of recovery/<prNumber> per PR docs(b-0505): close B-0442 slice 5 acceptance + document --auto-recover #3458 docs ("deterministic branch name recovery/<prNumber>").

Refresh-before-decide

Status verified against origin/main snapshot at 2026-05-15T16:08Z. Sidetick branch (feat/ani-full-history-extract-...) was stale relative to main — git show origin/main:<row> was required because checked-out file content didn't match merged state.

Claim coordination

bun tools/bus/claim.ts acquire --from otto-cli --item B-0442 → claim 2061c70e
bun tools/bus/claim.ts acquire --from otto-cli --item B-0503 → claim bb2ebaea

Both rows were unclaimed when work started.

Test plan

  • markdownlint clean on both rows
  • Status verified against origin/main (not local working tree)
  • Spec-drift documented (not silently masked) — buildRecoveryBranchName signature simplification

🤖 Generated with Claude Code

)

Two row-status loose-ends flagged in tick 1436Z shard (#3509):

- B-0442: all 6 acceptance items already `[x]` on main (slice 5 closed
  by PR #3458 commit description); flipped `status: open` → `closed`
  with `closed: 2026-05-15` + `closed_by_pr: 3458`. PR #3458's own
  description explicitly said "After this merges, B-0442 itself can
  be marked `status: closed`" — that line was the loose-end.

- B-0503: 4 unchecked acceptance items on main despite the named
  files (`tools/bg/missed-substrate-recovery.ts` +
  `missed-substrate-recovery.test.ts`) being present and tested.
  Checked off all 4; flipped `status: open` → `closed`. Noted
  observed spec-drift on `buildRecoveryBranchName` signature
  (shipped as `(prNumber)`; spec said `(prNumber, ts: Date)`) — the
  timestamp was dropped in favor of `recovery/<prNumber>` per PR
  #3458 docs ("deterministic branch name `recovery/<prNumber>`").

Per `.claude/rules/refresh-before-decide.md`: status verified against
`origin/main` snapshot at 2026-05-15T16:08Z (not local working-tree;
sidetick branch state was stale relative to main).

Claim acquired before the edit via `tools/bus/claim.ts acquire --from
otto-cli --item B-0442` + `--item B-0503`. Both rows were unclaimed
when work started.

Co-Authored-By: Claude <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings May 15, 2026 16:17
@AceHack AceHack enabled auto-merge (squash) May 15, 2026 16:17
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: a6c1cca872

ℹ️ 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 docs/backlog/P1/B-0503-b0442-slice5a-open-recovery-pr-core-function-2026-05-14.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

This PR updates backlog row metadata to close B-0442 and B-0503 after related missed-substrate recovery work landed via PR #3458.

Changes:

  • Marks B-0442 closed with closure date and closing PR.
  • Marks B-0503 closed and checks off its acceptance items.
  • Notes spec drift for the recovery branch-name helper signature.

Reviewed changes

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

File Description
docs/backlog/P1/B-0503-b0442-slice5a-open-recovery-pr-core-function-2026-05-14.md Closes the B-0503 row and updates acceptance status.
docs/backlog/P1/B-0442-missed-substrate-cascade-detector-background-service-2026-05-13.md Closes the parent B-0442 row and records closure metadata.

Comment thread docs/backlog/P1/B-0503-b0442-slice5a-open-recovery-pr-core-function-2026-05-14.md Outdated
AceHack added a commit that referenced this pull request May 15, 2026
…tus loose-ends closed (PR #3518) (#3519)

- PR #3515 (fix shard 1524Z post-merge findings) merged → 8145672.
- PR #3517 (tick 1601Z shard) merged → 1d4802e.
- PR #3518 opened — flips B-0442 + B-0503 status: open → closed.
  Both rows' work had landed via PR #3458 but status was never
  flipped (loose-end flagged in tick 1436Z shard).
- Spec-vs-impl drift caught: B-0503's buildRecoveryBranchName shipped
  as (prNumber) without ts: Date — recorded in the row, not masked.
- Refresh-before-decide applied at row-state scope: verified against
  origin/main (sidetick branch was stale).

Co-authored-by: Claude <noreply@anthropic.com>
…tch with as-shipped; regen BACKLOG.md

Addresses Codex + Copilot findings on PR #3518:

- P1 (Copilot) + P2 (Codex) on B-0442 closure: parent was being closed
  while children B-0504 + B-0505 still `status: open` on main —
  backlog-graph inconsistency. Both children's work also landed via
  PR #3458 chain; flipped both to `status: closed` with
  `closed_by_pr: 3458`. Backlog graph now coherent: all four rows
  (parent B-0442 + slice-5 children 0503/0504/0505) closed together.

- P1 (Copilot) + P2 (Codex) on B-0503 internal inconsistency: the
  acceptance note flagged `buildRecoveryBranchName(prNumber)` as
  as-shipped but the design sketch + "Why new Date() internally"
  section below still showed the old `(prNumber, ts: Date)` shape +
  timestamped branch name. Reconciled all three locations to match
  shipped: signature, internal call site, and the rationale section
  retitled to "Why the recovery branch name is `recovery/<prNumber>`
  (no timestamp)". The row is now internally consistent and serves
  as accurate design substrate for future readers.

- BACKLOG.md regenerated via `bun tools/backlog/generate-index.ts`
  (BACKLOG_WRITE_FORCE=1) so the autogenerated index reflects the
  4 status flips (was the non-required check warning on the prior
  commit).

Co-Authored-By: Claude <noreply@anthropic.com>
@AceHack AceHack merged commit 627e797 into main May 15, 2026
22 checks passed
@AceHack AceHack deleted the fix/b0442-b0503-row-status-merged-otto-cli-2026-05-15 branch May 15, 2026 16:30
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: ab1e24fcaa

ℹ️ 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".

id: B-0504
priority: P1
status: open
status: closed
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Reopen B-0504 until its acceptance checklist is complete

This change flips B-0504 to status: closed, but every item in that row’s ## Acceptance criteria block is still unchecked ([ ]). Since backlog tooling and readers treat frontmatter status as completion, this marks the slice as done while its own contract still says it is unfinished, which can suppress follow-up work or misreport progress.

Useful? React with 👍 / 👎.

id: B-0505
priority: P1
status: open
status: closed
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Reopen B-0505 until the row-level acceptance criteria are met

This row is also marked status: closed even though its ## Acceptance criteria section remains entirely unchecked. Closing the row before its own checklist is reconciled creates an internal contradiction in the backlog artifact and can cause review/automation flows to treat documentation and acceptance-close work as complete when the row still records it as pending.

Useful? React with 👍 / 👎.

AceHack added a commit that referenced this pull request May 15, 2026
…so flipped + B-0503 spec text reconciled (#3521)

- PR #3518 unblocked: ab1e24f addresses 2 Codex+Copilot findings
  (parent-vs-children consistency, B-0503 internal drift) + the
  BACKLOG.md generated-index drift. 4 threads resolved.
- 2 substrate-discipline observations captured:
  (1) Backlog-graph consistency lint is a future mechanization candidate.
  (2) Spec-vs-impl drift propagates — grep the whole row, not just the
      most-visible occurrence.

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 15, 2026
…ild status-mismatch detection (#3523)

Originating incident: PR #3518 closed parent B-0442 without closing
declared children B-0504 + B-0505 — silent backlog-graph inconsistency
caught by Codex + Copilot review through 4 thread cycles. The 1629Z
tick shard flagged this as a future mechanization candidate; this row
files it for substrate persistence.

Spec includes:

- Hard error: parent closed + child open
- Hard error: bidirectional graph mismatch (parent.children vs child.parent)
- Soft warning: all-children-closed-but-parent-open (closure candidate)
- JSON output mode for compose-with-downstream
- gate.yml wiring + AGENT-BEST-PRACTICES.md documentation

Tagged P3 because: failure mode is rare (row-status flips not daily),
review-cycle caught the single observed instance before merge, no
production-impact blocker. Listed as composes-with the B-0442 chain
so future-Otto reading that chain finds this row.

BACKLOG.md regenerated to include the new row.

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 15, 2026
…echanization)

- PR #3518 (B-0442 chain close) merged → 627e797.
- PR #3519 (tick 1618Z shard) merged → afc1a99.
- PR #3523 opened — B-0532 (backlog-graph consistency lint, P3) filed
  as substrate from the 1629Z shard insight. BACKLOG.md regenerated.
  Auto-merge armed.
- Sentinel 1011e43d live.

ID allocation discipline applied: verified B-0532 free against
origin/main (B-0530 max) + in-flight PR scan (B-0531 taken by
peer Lior PR #3520).

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 15, 2026
…echanization) (#3524)

- PR #3518 (B-0442 chain close) merged → 627e797.
- PR #3519 (tick 1618Z shard) merged → afc1a99.
- PR #3523 opened — B-0532 (backlog-graph consistency lint, P3) filed
  as substrate from the 1629Z shard insight. BACKLOG.md regenerated.
  Auto-merge armed.
- Sentinel 1011e43d live.

ID allocation discipline applied: verified B-0532 free against
origin/main (B-0530 max) + in-flight PR scan (B-0531 taken by
peer Lior PR #3520).

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 15, 2026
…ed; nothing in-flight (#3527)

Captures the burst-close state: PRs #3511, #3515, #3517, #3518, #3519,
#3521, #3523, #3524 all MERGED to main with zero force-pushes to main
and no in-flight. Next-tick speculative-work priority ladder reviewed:
no Tier 1 known-gap surfaced; held until next tick per Aaron's
forgetting-as-back-pressure substrate.

Sentinel 1011e43d live.

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 15, 2026
…ade status (#3525)

* shard(tick): 1719Z — quiet checkpoint; all 8 recent Otto-CLI PRs merged; nothing in-flight

Captures the burst-close state: PRs #3511, #3515, #3517, #3518, #3519,
#3521, #3523, #3524 all MERGED to main with zero force-pushes to main
and no in-flight. Next-tick speculative-work priority ladder reviewed:
no Tier 1 known-gap surfaced; held until next tick per Aaron's
forgetting-as-back-pressure substrate.

Sentinel 1011e43d live.

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

* shard(tick): 1718Z — fresh-session cold-boot; cron sentinel re-armed; §33 cascade status

- CronList empty at boot → <<autonomous-loop>> sentinel re-armed
- Confirmed PR #3513 (Riven §33) + #3516 (Vera §33) merged on origin/main
- §33 cascade: 8 personas migrated (~127 files out of docs/research/)
- Surfaced docs/research/ residuals: 78 claudeai + 8 gemini + 8 codex (content-id required; not slam-dunks)
- Primary worktree mid-rebase on peer-Lior branch → borrow-on-existing pattern applied

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 15, 2026
… (P2)

Surfaced 2026-05-15T18:18Z. `bun tools/bg/backlog-ready-notifier.ts
--once` from the primary worktree returned B-0442 + B-0503 as ready
candidates — both closed earlier this session via PR #3518.

Root cause: the notifier reads YAML frontmatter from local
working-tree files. The primary worktree was on peer Otto-CLI's
branch `feat/persona-vera-migrate-conversations-otto-cli-2026-05-15`,
which doesn't have my B-0442/B-0503 closure commits. Local view
showed `status: open` despite origin/main correctly showing `closed`.

Three already-merged rows were published as work-assignments at the
observed tick (envelopes 292f1c57, 20f991c8, aa5060ff). Impact is
low (advisory; 2h TTL) but the design is wrong — should read from
origin/main.

Spec includes `--source local|origin` flag (default `origin`) and
note-field reporting of source used. BACKLOG.md regenerated.

Co-Authored-By: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 15, 2026
… (P2) (#3551)

Surfaced 2026-05-15T18:18Z. `bun tools/bg/backlog-ready-notifier.ts
--once` from the primary worktree returned B-0442 + B-0503 as ready
candidates — both closed earlier this session via PR #3518.

Root cause: the notifier reads YAML frontmatter from local
working-tree files. The primary worktree was on peer Otto-CLI's
branch `feat/persona-vera-migrate-conversations-otto-cli-2026-05-15`,
which doesn't have my B-0442/B-0503 closure commits. Local view
showed `status: open` despite origin/main correctly showing `closed`.

Three already-merged rows were published as work-assignments at the
observed tick (envelopes 292f1c57, 20f991c8, aa5060ff). Impact is
low (advisory; 2h TTL) but the design is wrong — should read from
origin/main.

Spec includes `--source local|origin` flag (default `origin`) and
note-field reporting of source used. BACKLOG.md regenerated.

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 15, 2026
…nt cluster siblings in-flight (#3568)

- PR #3566 (1939Z shard) wait-CI
- PR #3567 — B-0532 hard-error slice (parent-child status-mismatch) shipped
- Cluster: lint-archive-header-§33 + lint-§33-migration-xrefs + lint-backlog-id-uniqueness + lint-backlog-parent-child-status (this PR)
- Hard-error case alone catches empirical failure (PR #3518 B-0442/B-0504/B-0505)
- Soft-warning + bidirectional slices deferred
- 15-tick session arc; cluster completion approaching

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 15, 2026
…gate.yml wiring (#3567)

* feat(b-0532): parent-child status-mismatch lint (hard-error slice) + gate.yml wiring

Implements the hard-error case from B-0532 acceptance criteria: parent
row with `status: closed` (or equivalent landed/superseded/merged/done)
AND any declared child still has `status: open`.

Changes:

1. tools/hygiene/audit-backlog-items.ts (item 9 audit class):
   - Extend FrontmatterFields + BacklogRow with `childrenRefs`
   - Add `isClosedStatus()` helper (reuses CLOSED_STATUSES + handles
     `superseded-by-*` prefix)
   - Add `reportParentChildStatusMismatch()` function (item 9)
   - Add `--enforce-parent-child-status` CLI flag (exit 1 on findings)
   - Update Summary section + script header docs

2. .github/workflows/gate.yml:
   - New `lint-backlog-parent-child-status` job (sibling of
     lint-backlog-id-uniqueness from PR #3565)
   - Runs `bun tools/hygiene/audit-backlog-items.ts --enforce-parent-child-status`
   - Baseline = 0 mismatches (verified locally)

Scope: hard-error case only. B-0532's full acceptance criteria also
covers soft-warning (all children closed, parent open) + bidirectional
consistency (parent.children ↔ child.parent). Those are deferred to
follow-up slices.

Empirical anchor: PR #3518 (2026-05-15) shipped a row-status flip
closing parent B-0442 without closing children B-0504 + B-0505. Took
4 review-thread cycles to fully resolve. This lint catches that class
at PR time before merge.

Composes with: PR #3565 (lint-backlog-id-uniqueness, sibling pattern),
PR #3555 (lint-section-33-migration-xrefs, sibling pattern), B-0532
(parent row).

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

* fix(B-0532): extend B_REF_RE to capture dotted child IDs (B-NNNN.suffix)

Reviewer finding (Copilot P0 + chatgpt-codex-connector P2, PR #3567):
B_REF_RE = /B-\d{4}/g truncated dotted backlog IDs like B-0029.1 → B-0029,
causing the parent/child status-mismatch gate to miss mismatches on decomposed
child rows. Updated to /B-\d{4}(?:\.\d+)*/g to capture the full dotted suffix.

Co-Authored-By: Claude <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