Skip to content

chore(backlog): regenerate docs/BACKLOG.md — B-0488 closed + B-0329 pickup#3247

Merged
AceHack merged 2 commits into
mainfrom
otto/backlog-regen-b0488-closed-2026-05-14
May 14, 2026
Merged

chore(backlog): regenerate docs/BACKLOG.md — B-0488 closed + B-0329 pickup#3247
AceHack merged 2 commits into
mainfrom
otto/backlog-regen-b0488-closed-2026-05-14

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented May 14, 2026

Summary

Regenerates docs/BACKLOG.md after the merge of #3244 (B-0488 close-out). Copilot's review on #3244 flagged that the close-out PR didn't include the regen — substantive catch; addressed here.

Changes (2-line index delta)

  1. B-0488 (KSK persona map row): - [ ]- [x] (status reflects closed frontmatter)
  2. B-0329 (passive pickup): B-0329-new-surface-audit-alignment-check.md was added on disk by another Otto without an index regen — picked up here.

Pure regen via BACKLOG_WRITE_FORCE=1 bun tools/backlog/generate-index.ts. No per-row file changes.

Pattern (codified)

The row-close-out pattern documented in tick 2055Z assumed the close-out PR would update only metadata + frontmatter, but the BACKLOG.md auto-index also reflects status via checkbox state. Future row-close-out PRs should include the regen in the same PR to avoid drift. This PR is the cleanup; the pattern is fixed forward in this PR's commit message.

Test plan

  • bun tools/backlog/generate-index.ts --check is clean post-regen
  • Diff is exactly +2 / -1 lines (1 status flip + 1 new row)
  • Composite branch-guard + gh pr create --head
  • CI clears
  • Auto-merge

🤖 Generated with Claude Code

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

…ssive pickup

PR #3244 (B-0488 close-out) merged the row's status flip but didn't
include the BACKLOG.md regen — Copilot flagged this on #3244 as a
substantive catch. Regenerating now closes the drift.

Two changes:

1. B-0488 KSK persona map row: `- [ ]` -> `- [x]` (status: closed)
2. NEW row B-0329 picked up — `B-0329-new-surface-audit-alignment-check.md`
   was added on disk by another Otto without an index regen.

Pure regen via `BACKLOG_WRITE_FORCE=1 bun tools/backlog/generate-index.ts`.
No per-row file changes.

Per the row-close-out pattern codified in tick 2055Z: ideally the
close-out PR would have included the regen; future row-close-outs
should do so. This PR is the cleanup; the pattern is fixed forward.

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

Regenerates the generated backlog index after a closed-row status change and picks up a newly present backlog row.

Changes:

  • Marks B-0488 as closed in docs/BACKLOG.md.
  • Adds the newly discovered B-0329 row to the generated index.
  • Preserves generated backlog-index formatting.

Comment thread docs/BACKLOG.md Outdated
AceHack added a commit that referenced this pull request May 14, 2026
…BACKLOG drift cleanup) (#3248)

Tick output:
- PR #3247 (chore(backlog) regen): closes BACKLOG.md drift caused by
  PR #3244 (B-0488 close-out) not including the regen. +2/-1 lines:
  B-0488 checkbox flip + B-0329 passive pickup. Auto-merge armed.
- Commit 38771fb on PR #3245's branch: fixes `git diff --stat` format
  accuracy per Copilot review. Thread resolved.
- Thread on PR #3244 (merged) acknowledged + resolved with reply
  pointing to #3247.
- This shard.

Both Copilot catches were substantive (not nits):
- #3244: BACKLOG.md drift after status flip
- #3245: incorrect quoted `git diff --stat` output format

Patterns codified:
- Row-close-out PRs should include BACKLOG.md regen in the same PR
- Tick shards quoting command output should reproduce real format,
  not paraphrase

PRs merged during the tick: #3239 + #3240 + #3244.
Session tally: 13 merged + 4 wait-ci.

Cron sentinel 12fb713e armed; recurring.

Co-authored-by: Claude <noreply@anthropic.com>
Copilot caught the substantive ID-collision: BACKLOG.md regen added a
second visible B-0329 entry because two on-disk files both claimed
`id: B-0329`:

- B-0329-claude-md-as-process-not-doctrine.md (existing — keep this one)
- B-0329-new-surface-audit-alignment-check.md (NEW — collision)

Backlog IDs are required to be factory-wide unique (tools/backlog/README.md).
Two rows with the same ID can't unambiguously resolve in edge references.

Resolution:
- Rename file: B-0329-new-surface-audit-alignment-check.md -> B-0520-new-surface-audit-alignment-check.md
- Update frontmatter: id: B-0329 -> id: B-0520
- Update body heading: "# B-0329 — ..." -> "# B-0520 — ..."
- Add renumbered_from breadcrumb frontmatter field citing the Copilot
  catch + PR #3247
- Regenerate BACKLOG.md — duplicate B-0329 row removed, B-0520 picked up

Verifies clean:
- grep -c "B-0329" docs/BACKLOG.md returns 1 (just the original)
- B-0520 appears at end of P1 section
- No other refs to the renamed file (grep confirmed)

The next available ID before this renumber was B-0520 (highest on-disk
B-0519; no in-flight PRs claim 0520-0522). B-0516 is missing (was
renumbered earlier per tick-history archaeology).

Co-Authored-By: Claude <noreply@anthropic.com>
@AceHack AceHack merged commit d04481b into main May 14, 2026
22 checks passed
@AceHack AceHack deleted the otto/backlog-regen-b0488-closed-2026-05-14 branch May 14, 2026 21:15
AceHack added a commit that referenced this pull request May 14, 2026
…#3250)

Adds an 8th audit class that detects multiple per-row files claiming
the same `id: B-NNNN` — a factory-wide uniqueness violation per
tools/backlog/README.md.

Surfaced 2026-05-14: Copilot caught two files both claiming `id: B-0329`
on PR #3247 (BACKLOG.md regen would have rendered a duplicate row). The
collision was renumbered out-of-band via #3247's renumber commit, but
the audit-time gap remained — no automated check would have caught the
collision at author-time.

This commit closes that gap. Output format mirrors the sibling
report* functions (## 8 section + sample listing + resolution note +
summary line):

  ## 8. Duplicate IDs (factory-wide uniqueness violation)
  **Duplicate-ID groups: N**
  ### B-NNNN (M files claim this ID)
    - <path1> (tier=Px, status=...)
    - <path2> ...
  Resolution: renumber all-but-one ... + renumbered_from breadcrumb

When run today on origin/main, the audit reports 1 duplicate-ID group
(B-0329 — same one Copilot caught; PR #3247 fixes via renumber). Once
#3247 merges, the audit will report 0.

Extends the existing tool per skill-router-as-substrate-inventory.md
(don't duplicate; extend or correct). audit-backlog-items.ts already
audited 7 classes; the 8th composes naturally with broken-edges /
orphan-rows / top-blocked classes — all ID-integrity concerns.

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

Tick output:
- PR #3250 (feat(hygiene) duplicate-ID audit): extends audit-backlog-items.ts
  with an 8th audit class detecting multiple files claiming the same
  id: B-NNNN. Mechanizes the B-0329 collision Copilot caught on PR #3247.
  Live test: reports 1 duplicate-ID group on origin/main (B-0329, fixed by
  the just-merged #3247). Auto-merge armed.
- This shard.

Pattern: review-time catch (2059Z) -> out-of-band fix (2108Z) -> mechanization
(this tick, 2113Z). Three-step propagation from a single Copilot review.

Per skill-router-as-substrate-inventory.md: extended existing audit
rather than minting new tool. audit-backlog-items.ts grew 7 -> 8 classes.

Prior-tick PRs merged this batch:
- #3245 (shard 2055Z) MERGED as 10f35d7
- #3247 (BACKLOG regen + renumber) MERGED as d04481b

Session tally: 16 merged + 4 wait-ci.

Cron sentinel 12fb713e armed; recurring.

Co-authored-by: Claude <noreply@anthropic.com>
AceHack added a commit that referenced this pull request May 14, 2026
…gh api graphql fix) (#3249)

* shard(tick): 2108Z — review-thread triage round 2 (B-0329 ID-collision renumber + gh api graphql usage fix)

Tick output:
- Commit 4407e4a on PR #3247: renumbers duplicate B-0329 (new-surface-audit
  file) to B-0520 + adds renumbered_from breadcrumb + regenerates index.
  Real data-integrity fix per Copilot's substantive catch.
- Commit a5b812b on PR #3246: corrects 2059Z shard's gh api graphql usage
  description to show canonical -f query= pattern. Accuracy nit fix.
- Both Copilot threads resolved with verification.
- This shard.

Patterns codified:
- Backlog-ID-collision class of bug (multiple files claiming same
  id: B-NNNN) is a real data-integrity failure mode.
- The renumbered_from frontmatter breadcrumb preserves archaeology
  without needing a separate ADR.

Audit-discipline candidate filed mentally: tools/hygiene/audit-backlog-id-uniqueness.ts
that would catch this at author-time. Not authoring this tick (defer).

Cron sentinel 12fb713e armed; recurring.

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

* fix(pr3249): add blank line before list per markdownlint MD032

CI failure: lint (markdownlint) flagged MD032/blanks-around-lists at
2108Z.md:32 — list right after "Fix:" without separating blank line.

Repo's markdownlint-cli2 config keeps MD032 enabled (catches real
readability issues; only MD040/MD004/MD013 are disabled per
.markdownlint-cli2.jsonc).

One-line fix; markdownlint-cli2 now clean on the file.

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

---------

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

Substrate-honest correction to B-0535's framing: the duplicate-ID
detection logic ALREADY EXISTS in audit-backlog-items.ts (item 8,
added 2026-05-14 via PR #3249 after Copilot caught B-0329 collision
on PR #3247). The actual gap was CI wiring, not implementation.

This PR adds:

1. CLI flag --enforce-duplicate-ids to audit-backlog-items.ts:
   - Detect mode unchanged (default, exits 0 with findings reported)
   - --enforce-duplicate-ids: exit 1 if duplicate-ID groups > 0
   - Rejects unknown flags with stderr error + exit 1

2. New gate.yml job lint-backlog-id-uniqueness:
   - Same shape as lint-section-33-migration-xrefs + lint-archive-header-section33
   - Runs `bun tools/hygiene/audit-backlog-items.ts --enforce-duplicate-ids`
   - Baseline = 0 duplicate-ID groups on main (verified locally)

Catches the failure class empirically observed today:

- B-0444 (Otto-CLI vs Otto-Desktop, PR #3053 renumber, ~15 min)
- B-0532 + B-0533 (Lior PR #3545 vs Otto-CLI mine, ~15 min coordination)

Both went undetected by the existing detect-only audit because
nothing was wired to fail CI on duplicate-IDs. This PR closes that
gap.

Composes with:
- B-0535 (parent row; the framing was "extend B-0532" but the actual work was "wire existing logic")
- audit-section-33-migration-xrefs (PR #3555 — same catch-once-then-lint pattern)
- audit-backlog-items item 8 (PR #3249 — the existing detection logic)
- PR #3247 (the B-0329 collision that surfaced the need)

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