cc-watch gaps carry-forward ๐Ÿ”„

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.

The pipeline

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.

Try it โ€” toggle one gap entry's state

An already-snapshotted version sits in the gaps file. A NEW version just appeared, so the watcher rebuilds. Does this entry survive?

Default state = the exact 2.1.153/154 straggler: triaged, not yet filed.

Watcher carry-forward decision

โ€”

Old code (parse_failed-only) would have:

โ€”

Truth table

parse_failedfeatures[]issues_filed_atOLD behaviorNEW (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).

The one-line rule

// 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"

Bonus: the visual-style pre-flight (same PR)

Type a PR body line; the classic trap is โœ“/โœ— (U+2713/U+2717), not in the 12-glyph vocabulary.

โ€”
Allowed: โœ… โŒ โš  ๐Ÿ”„ โธ ๐Ÿ’ก ๐Ÿšจ ๐ŸŽฏ ๐Ÿ”ฅ ๐Ÿ“œ ๐Ÿค– โšก + ๐ŸŸข๐ŸŸก๐Ÿ”ด ๐Ÿฅ‡๐Ÿฅˆ๐Ÿฅ‰. bin/check-pr-visual-style.sh runs this engine before gh pr create.