Split out of review feedback on PR #1021 (implements #1019). Both findings are valid and accepted; they are deferred because each needs an interface change, and CodeRabbit itself labelled them 🏗️ Heavy lift. #1021 already fixes the two defects that would have made it a non-fix (compare truncation in _gh_changed_files, and a silent promote-all).
1. _autocut_range_signals — bump signals are unscoped and the range is unpaginated
_autocut_range_signals() {
local host="$1" base="$2" head="$3" json out
json="$(gh api "repos/$host/compare/$base...$head" 2>/dev/null)" || return 1
out="$(jq -r ' … (.commits | map(.commit.message // "")) as $msgs
| { b: any($msgs[]; test("^\\w+(\\([^)]*\\))?!:") …), f: any($msgs[]; test("^feat…")) } … ')"
Two defects in one function:
- Unscoped. It scans every commit message in the range. An unrelated
docs: feat!: … commit therefore forces a major bump on an otherwise script-only cut. Bump level drives the channel/ring pin surface, so a spurious major seeds a fresh v<newMAJOR>-next (per #657 F4) and consumers pinned to the old major stop receiving updates entirely — a silent-non-delivery outcome, the same class #1019 exists to remove.
- Unpaginated. Same root cause as the
_gh_changed_files truncation bug fixed in #1021: the compare response caps .commits (250) and .files (300) and sets .truncated. Signals beyond the cap are invisible, so a genuine BREAKING CHANGE: in a long range can be missed and ship as a patch — the more dangerous direction.
Why it wasn't fixed in #1021: scoping requires knowing which commits touch a watched path, i.e. per-commit file lists, and the function's (host, base, head) signature carries no agent — so it cannot resolve _watched_paths. That is an interface change plus an API-cost decision (one call per commit), not a local edit.
Acceptance criteria:
2. cmd_promote_all — failed promotions are logged but not persisted
#1021 now emits an aggregated ::warning:: naming every failed agent, so a green sweep no longer looks clean. But the failure is still only in the run log: CANARY_PROMOTIONS_LOG records successful moves only, and sync-issues tracks BLOCKED gate states — not failed tag writes (a permission or API rejection). So a repeatedly-failing tag write leaves no durable artifact and no trend.
Acceptance criteria:
Context
Found on #1021, whose own history is the argument for both: dev-lead posted detailed replies claiming fixes for the truncation and summary defects — naming functions and citing new bats tests — and made none of them (#1567). The fixes in #1021 are hand-applied steering commits (a700662, 55fe2e8). Please verify these by diffing the head, not by reading a reply.
Related: #1019, petry-projects/.github-private#1592, #1567, #657.
Split out of review feedback on PR #1021 (implements #1019). Both findings are valid and accepted; they are deferred because each needs an interface change, and CodeRabbit itself labelled them 🏗️ Heavy lift.
#1021already fixes the two defects that would have made it a non-fix (compare truncation in_gh_changed_files, and a silentpromote-all).1.
_autocut_range_signals— bump signals are unscoped and the range is unpaginatedTwo defects in one function:
docs: feat!: …commit therefore forces a major bump on an otherwise script-only cut. Bump level drives the channel/ring pin surface, so a spurious major seeds a freshv<newMAJOR>-next(per#657F4) and consumers pinned to the old major stop receiving updates entirely — a silent-non-delivery outcome, the same class#1019exists to remove._gh_changed_filestruncation bug fixed in#1021: the compare response caps.commits(250) and.files(300) and sets.truncated. Signals beyond the cap are invisible, so a genuineBREAKING CHANGE:in a long range can be missed and ship as a patch — the more dangerous direction.Why it wasn't fixed in
#1021: scoping requires knowing which commits touch a watched path, i.e. per-commit file lists, and the function's(host, base, head)signature carries no agent — so it cannot resolve_watched_paths. That is an interface change plus an API-cost decision (one call per commit), not a local edit.Acceptance criteria:
feat!outside watched paths does not raise the bump; aBREAKING CHANGE:in a watched-path commit beyond the compare cap is detected.2.
cmd_promote_all— failed promotions are logged but not persisted#1021now emits an aggregated::warning::naming every failed agent, so a green sweep no longer looks clean. But the failure is still only in the run log:CANARY_PROMOTIONS_LOGrecords successful moves only, andsync-issuestracksBLOCKEDgate states — not failed tag writes (a permission or API rejection). So a repeatedly-failing tag write leaves no durable artifact and no trend.Acceptance criteria:
CANARY_PROMOTIONS_LOGwith an outcome field, or a sibling failure log).Context
Found on
#1021, whose own history is the argument for both: dev-lead posted detailed replies claiming fixes for the truncation and summary defects — naming functions and citing new bats tests — and made none of them (#1567). The fixes in#1021are hand-applied steering commits (a700662,55fe2e8). Please verify these by diffing the head, not by reading a reply.Related:
#1019,petry-projects/.github-private#1592,#1567,#657.