Skip to content

fix(backlog): #320 declared no status and red main - #123

Merged
wshallwshall merged 1 commit into
mainfrom
fix-320-status-banner
Aug 1, 2026
Merged

fix(backlog): #320 declared no status and red main#123
wshallwshall merged 1 commit into
mainfrom
fix-320-status-banner

Conversation

@wshallwshall

Copy link
Copy Markdown
Collaborator

main is red at ea055251 and this is the one-line fix. Verified by running the guard on a clean checkout of main, not just on a branch.

BACKLOG.md:7299: item #320 declares no status. Add exactly one leading banner:
'> ✅ **SHIPPED …**', '> ⛔ **DECLINED …**', '> 🪦 **RETIRED …**',
'> 🔢 **Re-scored …**', or '> 🚧 **Status …**'.

My fault, and a dull one: I opened #320 with 📋 **Filed 2026-08-01, not started.** — I invented an emoji instead of using the vocabulary the invariant defines. Corrected to 🚧 **Status: OPEN INVESTIGATION …**, which is what the item actually is.

tests/test_backlog_status_check.py15 passed, 0.4s.

Why this is worse than a typo

It fails in 0.6 seconds and runs inside every required test leg, so it reds every PR that compiles the suite. It was already blocking auto-merge on #119 and would have blocked #118. A trivially-detectable defect in a docs file took main down for every session in the repo.

How it merged green — a real coverage hole

#117 was docs-only, and ci.yml's changes job short-circuits exactly that case: when changes.outputs.code == 'false' the install/lint/type/test steps are skipped and the required test (…) contexts go green in seconds.

So the guard that polices BACKLOG.md does not run on a PR that only changes BACKLOG.md. That's the gap: the one class of change this invariant exists to catch is precisely the class that skips it. It isn't theoretical — it just happened, and it was found by another session's PR tripping over it rather than by mine.

I'm not fixing that here; this PR restores main and nothing more. Worth a follow-up decision: either add docs/BACKLOG.md to the paths that count as code for the short-circuit, or run the ledger/backlog guards in a cheap always-on leg that the docs-only path cannot skip. The second is closer to how backlog-hygiene.yml already behaves.

Also worth noting

The banner now carries the two facts a reader of #320 needs up front: measurement tooling landed in #118, and the decisive experiment is blocked because the self-hosted WS2025 runner is unregistered (actions/runnerstotal_count: 0, selfhosted-win2025-sql.yml never run).

`test_backlog_status_check::test_the_real_backlog_satisfies_the_invariant` fails on
origin/main at ea05525 itself. #320 (filed in #117) opened with a `📋 **Filed …**`
banner, which is not one of the five the invariant accepts (✅ SHIPPED / ⛔ DECLINED
/ 🪦 RETIRED / 🔢 Re-scored / 🚧 Status). I invented an emoji instead of using the
vocabulary.

It fails in 0.6s and runs in every required test leg, so it reds every PR that
compiles the suite -- it was already blocking auto-merge on #119 and would have
blocked #118.

Corrected to `🚧 **Status: OPEN INVESTIGATION …**`, which is what the item is, and
the banner now also carries the two facts a reader needs: the measurement tooling
landed in #118, and the decisive experiment is blocked on an unregistered
self-hosted runner.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@wshallwshall
wshallwshall enabled auto-merge (squash) August 1, 2026 14:12
@wshallwshall
wshallwshall merged commit 863b905 into main Aug 1, 2026
31 checks passed
@wshallwshall
wshallwshall deleted the fix-320-status-banner branch August 1, 2026 14:14
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.

1 participant