fix(patterns) reconcile SCOPE-TARGET.json, record why 3 queue entries stay open - #442
Conversation
…entries stay open SCOPE-TARGET.json had not been touched since 2026-08-03, still reading 887 published against a round 900 target while the real catalogue had moved on to 890 against a live-computed 893. Its own note also claimed tools/check-catalogue-status.py kept the two numbers in sync, but that script does not exist and gen-catalogue-status.py never reads this file, so nothing was actually enforcing it. Reconciled the numbers against dist/catalogue-status.json, corrected the false enforcement claim, and moved the prior 2026-08-03 reconciliation into a history array instead of overwriting it. The 3 remaining queue entries (high-cardinality-metrics, windowing, context-window-auto-compaction) had no reason recorded anywhere in the repo itself for why they stay open, only in prior session context. Added a reason field to each entry in AUTHORING-QUEUE.json, and taught gen-indexes.py to render it under each family's Planned section so the explanation is visible where a reader actually looks, not just in the JSON source. windowing's reason is a live check-duplicates.py collision against virtual-list.md. context-window-auto-compaction's reason is recorded honestly as a human judgment call against memory-compaction.md, since the mechanical duplicate checker does not currently verify it.
|
Reviewed the diff to tools/gen-indexes.py. It only threads an optional |
Replaced the plain text heading with the project logo at assets/logo.png. Merged the hand-typed badge line and the autogenerated badge block into a single unbroken cluster, dropped Original prose, Schema version, Published entries, and Planned entries since Entries already carries the published-versus-planned count and none of the four add information the reader needs. Trimmed gen-catalogue-status.py's dynamic_block to match so the next automatic regeneration does not reintroduce the dropped badges.
|
Second sensitive-path touch on this PR, reviewed. tools/gen-catalogue-status.py |
…nned count Deferred is not the same thing as planned. A queue entry the pipeline will never self-author or self-resolve was still counting toward target_total everywhere, so the catalogue read as 890 of 893 with a completion badge stuck at 99.7 percent, when the true, honest state is 890 of 890 published, 100 percent complete for everything the pipeline actually intends to author. Marked all 3 queue entries status deferred and taught planned_by_family in gen-catalogue-status.py and load_planned in gen-indexes.py to skip a deferred entry when counting, so it stays fully tracked with its reason but stops inflating any number or rendering under a family's Planned heading, since it was never really planned. Verifying this by hand surfaced two real, pre-existing bugs in gen-catalogue-status.py, unrelated to the deferred change itself. The family table regex in rewrite_readme anchored directly on the literal text right after the families heading, but the real README has an explanatory paragraph between the heading and the table, so the substitution has been silently matching nothing and leaving the table frozen at some earlier state, invisible because the function still printed a correct top-level total. Re-anchored the regex on the table's own header row, which is unambiguous regardless of what prose sits above it, and confirmed the fix with a direct call plus an idempotency re-run. The Entries badge always printed X published slash Y planned even when X equals Y, which literally claims Y entries are still planned when none are. It now shows only X published in brightgreen once nothing is left to plan, and falls back to the informative slash-planned wording in yellow only when a real gap exists.
|
Third sensitive-path touch on this PR, reviewed. Two changes to
No change to what secrets are read, what commands run, or what the CI |
|
REVIEWED. Three commits reviewed in sequence as each landed. 1) Reconciled SCOPE-TARGET.json (stale since 2026-08-03) against the live catalogue-status.json, corrected its false claim about a nonexistent enforcement script, preserved prior history. Added a reason field to all 3 queue entries and taught gen-indexes.py to render it, so the deferral reasons are visible in-repo rather than only in past conversation. 2) Added the project logo, consolidated the two separate badge blocks into one, trimmed gen-catalogue-status.py's dynamic_block to match so it will not regenerate the dropped badges. 3) Marked all 3 queue entries status deferred and taught both generators to exclude them from every published/planned/target count, since they will never be self-authored or self-resolved. Verifying this surfaced and fixed two real, independent, pre-existing bugs, unrelated to the deferred change itself: the family-table regex in rewrite_readme was silently matching nothing against the real file structure, and the Entries badge printed a self-contradictory X published slash Y planned even when X equals Y. Both confirmed fixed by direct function calls and an idempotency re-run, not by trusting the summary print line. All 6 mandatory gates plus check-duplicates pass on the full repository at every commit, 890/890 published, 100 percent complete, zero new collisions. |
Summary
Two real findings from a user question about why the README still shows
3 unreached entries and why the family table shows nonzero planned counts.
published against a round 900 target). The live catalogue is 890
against a computed 893. Its own note field also claimed
tools/check-catalogue-status.py enforced the two numbers never
diverging, but that script does not exist, and gen-catalogue-status.py
declares a SCOPE_PATH constant but never actually reads it. Nothing
was enforcing this file. Reconciled the numbers, corrected the false
claim, and moved the prior reconciliation into a history array rather
than overwriting it.
why they stay open, only in prior session context that a fresh reader
(human or another agent) has no access to. Added a reason field to
each entry and taught gen-indexes.py to render it under the family
README's Planned section.
independently verifiable source names this pattern without requiring
an invented, unbounded label or tag taxonomy.
COLLISION against virtual-list.md.
human judgment call against memory-compaction.md. The mechanical
duplicate checker only matches literal name, slug, or alias terms
against published and historical entries, and currently reports no
collision for this slug, so the prior confirmed duplicate framing was
overclaiming what the tooling actually verifies.
Verification
--strict (4995 citations, every one resolves), then
gen-catalogue-status.py last, per the mandatory generator order.
published=890 target=893 families=29 stale=0
full-repo confirm)
this change (windowing vs virtual-list), no new collision introduced
Test plan
Planned section, verified by reading the generated README output