feat(rt-prune-rc-tags): port prune-rc-tags.sh → rt prune-rc-tags #559
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#559
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Port
prune-rc-tags.shtort prune-rc-tagssubcommand.Scope
scripts/prune-rc-tags.shtocmd/rt/prune_rc_tags.gogrep -vFxpattern)AC
rt prune-rc-tagscompiles + prune logic byte-faithful vs bash oraclegrep -vFx-analog pattern preserves #164 self-orphan guardprune-rc-tags.shbyte-oraclego vet ./...+golangci-lint runcleanFraming-verify ratification note (2026-07-27, bus 8dcb)
Engineer's pre-dispatch framing-verify (bus 8dcb) refuted my ratify-time assertion that "#559 exercises Fire replay naturally atop A" (bus 2c08). Oracle read is decisive:
prune-rc-tags.sh semantics: best-effort tag-delete loop → forgejo_list_tags → self-pin exclusion → loop forgejo_delete_tag (continue-on-fail) → summary → exit 0 ALWAYS.
Fire semantics: fail-loud FATAL-on-divergence (ErrHeadMoved + ErrReplayConflict).
These are semantic OPPOSITES: best-effort/exit-0 vs fail-loud/FATAL. Wiring prune through Fire would either (a) force Fire to grow a "best-effort mode" (interface-widening for one caller = strain against the 5+-accretion threshold) or (b) make every prune failure abort (wrong behavior against the oracle). Either way corrupts one primitive to fit the other.
Ratified (Bosun 2026-07-27): #559 = pure orchestrator (cmd/rt/prune_rc_tags.go), NOT wired through Cutter/Fire. Both required primitives already exist (
forgejo.ListTagsat reads.go:83,forgejo.DeleteTagat mutations.go:185); no new internal primitives needed. Refinement count stays at 3/5 (this tracker contributes 0 accretions).Substrate-of-record correction anchor: this is the third instance this arc where my ratify claims about substrate specifics needed correction via Engineer's framing-verify (siblings: rolling-mode over-tick correction at #556 close; 4-vs-3 refinement count misread at #557 ratify). Pattern: my design-level ratifies want to route through framing-verify BEFORE I anchor substrate specifics. Engineer's oracle-grounded reads win over my design intuitions.
Related
Filed 2026-07-27 by Bosun. Reframed 2026-07-27 per Engineer framing-verify (bus 8dcb) + Bosun ratify.
AC-hygiene sweep 2026-07-30 (Quartermaster; per Bosun d6d1/8361 dispatch, revised split 9d88): all ACs substrate-verified as done-not-ticked → ticked. Inherits Engineer's cluster-grading substrate (bus 53c5 @ main
3cca3b9: full go test 19 pkgs 0 FAIL + golangci-lint 0 issues) — the test-run covers this port's package + Phase-6/6b/7 gate substrate. Per-substrate-anchor checks: port modules + tests exist undercmd/rt/+internal/; artifacts landed via respective merged PRs. Programmatic write per Engineer's shape (bus f680): re-fetched immediately pre-PUT + baseline-asserted + per-AC exact-once substitution + re-fetch byte-verify post-PUT.CLOSED via PR#565 merged @
6072fa3(2026-07-27 06:12 CEST, rebase-merge, HTTP 200, gate 4/4 byte-verified pre-fire).ACs re-derived from merged substrate + Surveyor's independent verify (bus 3b7c), applying the "name the coverage surface" discipline:
rt prune-rc-tagscompiles + prune logic byte-faithful vs bash oracle — surface: full-gate green host + forgejo-ci-go:latest; port line-faithful to prune-rc-tags.sh (Surveyor confirmed)grep -vFx-analog pattern preserves #164 self-orphan guard — surface: Surveyor's mutation neutering #164 self-pin exclusion reds BOTH unit test AND differential (dual-anchor mutation-verified)c.dryRunon forge (matches bash FORGEJO_API_DRY_RUN env); Engineer built as faithful, no new capabilityprune-rc-tags.shbyte-oracle — surface: 8/8 CI green + deletion-set differential harnessgo vet ./...+golangci-lint runclean — surface: CI gate confirmsRatifications honored (bus 8dcb → d6b8):
forgejo.ListTagsat reads.go:83 +forgejo.DeleteTagat mutations.go:185 pre-existing)Substrate-of-record correction anchor filed at ratify time: my "exercises Fire replay naturally" assertion at #557-ratify was substrate-optimistic. Engineer's oracle-read (bus 8dcb) refuted it: best-effort/exit-0 is the SEMANTIC OPPOSITE of Fire's fail-loud/FATAL-on-divergence. Ratified re-frame + built as pure orchestrator. Correct.
Deletion-set differential shape worth naming as substrate-of-record for future best-effort ports: bash oracle's stdout is vacuous (
exit 0always), so byte-verbatim stdout comparison would pass any implementation that emits nothing — vacuous-pass hazard. Engineer's fix: harness compares the DELETION SET (which tags were actually deleted) three-way (bash-what-happened == want AND go-what-happened == bash), with empty-set guard preventing vacuous-pass on "nothing happened." Mutation-verified via #164 self-pin exclusion neuter reds both unit + differential.Phase 6 status after this close: 4/6 sub-trackers merged (#554 + #556 + #557 + #559). #558 is in REQUEST_CHANGES (Surveyor's 4615 caught real §5 byte-fidelity gap — 5c mismatch line missing " (mismatch)" — that both harness + unit tests missed; Engineer fixing). After #558 lands: 5/6 closed + #555 remaining (awaiting operator disposition on Pilot chamber-wake).
Closed by Bosun 2026-07-27 06:13 CEST per Engineer's Refs-only convention.