Interactive explorer for fix/cc-watch-carry-triaged-gaps โ why triaged CC-adoption
features got dropped (the #2084 straggler class) and how the fix decides carry vs prune.
cc-release-watch.mjs โ cc-triage.mjs --retry-failed โ cc-file-adoption-issues.sh โ commit/PR
(writes gaps) (fills features[]) (files issues + STAMPS (next run reads
issues_filed_at) the gaps file)
Each new cc-release-watch run rebuilds the gaps file from scratch, then re-appends
surviving older entries (carry-forward). The bug was in which entries survived.
An already-snapshotted version sits in the gaps file. A NEW version just appeared, so the watcher rebuilds. Does this entry survive?
Watcher carry-forward decision
Old code (parse_failed-only) would have:
| parse_failed | features[] | issues_filed_at | OLD behavior | NEW (fixed) | Correct? |
|---|
The two red OLD cells are the data-loss bug: triaged-but-unfiled work
silently dropped. The fix carries them; once the filer stamps issues_filed_at, they prune
(keeps the file bounded โ no gh secondary rate-limit, and never re-files a closed issue).
// cc-release-watch.mjs โ carry forward anything still representing PENDING work
const carriedPending = existingGaps.filter(
(e) => e?.version
&& !newVersionSet.has(e.version) // not superseded by a fresh entry this run
&& (e.parse_failed === true || !e.issues_filed_at), // stuck OR triaged-but-unfiled
);
# cc-file-adoption-issues.sh โ stamp processed entries so they prune next run
jq --arg ts "$TS" \
'map(if (.parse_failed // false) == true then . else . + {issues_filed_at: $ts} end)' \
"$GAPS_FILE"
Type a PR body line; the classic trap is โ/โ (U+2713/U+2717), not in the 12-glyph vocabulary.
bin/check-pr-visual-style.sh runs this engine before gh pr create.