-
Notifications
You must be signed in to change notification settings - Fork 1
the merge-before-finalize warning only reaches operators who run the verb that prints it #712
Copy link
Copy link
Open
Labels
area:governanceLifecycle, approval, adoption, or release-policy behaviorLifecycle, approval, adoption, or release-policy behaviorarea:product-bugRuntime or CLI behavior is incorrectRuntime or CLI behavior is incorrectarea:uxMessages, output, or next actions mislead or frustrateMessages, output, or next actions mislead or frustrateimpact:user-facingCan affect an end user or repository operator directlyCan affect an end user or repository operator directlypriority:p1Highest-impact or release-blocking riskHighest-impact or release-blocking riskscope:legacy-validLegacy or migration path remains supported and affectedLegacy or migration path remains supported and affectedscope:specsync-6Applies to current SpecSync 6 behavior or release contractApplies to current SpecSync 6 behavior or release contract
Description
Activity
Metadata
Metadata
Assignees
Labels
area:governanceLifecycle, approval, adoption, or release-policy behaviorLifecycle, approval, adoption, or release-policy behaviorarea:product-bugRuntime or CLI behavior is incorrectRuntime or CLI behavior is incorrectarea:uxMessages, output, or next actions mislead or frustrateMessages, output, or next actions mislead or frustrateimpact:user-facingCan affect an end user or repository operator directlyCan affect an end user or repository operator directlypriority:p1Highest-impact or release-blocking riskHighest-impact or release-blocking riskscope:legacy-validLegacy or migration path remains supported and affectedLegacy or migration path remains supported and affectedscope:specsync-6Applies to current SpecSync 6 behavior or release contractApplies to current SpecSync 6 behavior or release contract
I merged a PR without finalizing its change today. The warning that exists to prevent exactly that never appeared, because it is printed by
shipand I never ranship.What happened
PR #710 was verified, pushed, CI-green, and merged.
change reviewandchange shipwere never run. The deliverable was fine — the docs landed — but the lifecycle record stayedverifyingonmain, and when the next PR movedproject_input_digestits evidence went stale.change audit --strictthen failed onmain, and nobody noticed. It was found incidentally by an agent establishing a baseline for unrelated work, some hours later.Why the existing warning could not help
#687 improved this text and it is accurate:
It is emitted by
ship/ship-status/finalize. Every one of those is a verb you run when you are already doing the right thing. The operator who is about to make this mistake is, by definition, not running them.Nothing on the merge path asks the question. There is no check that fails when a PR carrying an active change is merged, and
audit— which does detect the result — runs only when someone chooses to run it.So the guidance is well-worded and unreachable. That is the same shape as several defects this release has already fixed: a signal that exists but cannot arrive at the moment it is needed.
Options, none obviously right
archived, fail — or warn on the PR itself. This puts the signal where the merge decision is made. Cost: it must not fire on legitimately multi-change PRs mid-sequence, and it needs to distinguish "not finalized yet" from "finalized in a later commit on this branch".auditpart of the required gate, so a stale or unfinalized workspace blocks the merge button rather than being discovered later. Bluntest, and it would have caught this — but it turns every mid-flight PR red until its last change ships.audit --strictonmainand opens an issue or fails the branch. Does not prevent the mistake; does bound how longmainstays quietly red.Option 3 is worth doing regardless of the others.
mainwas red for hours and the only reason it surfaced is that an unrelated agent happened to runauditfirst.What this is not
Not an argument for weakening the warning — it is correct and #687's second-order cost is real. The problem is placement, not wording.
Filed against myself: I have quoted this warning repeatedly today and then walked into it. If the operator most steeped in it can skip two verbs and merge with nothing objecting, the mechanism is not doing the work the wording implies.
Related: #687 (the wording), #703 (a fold-back step that also depends on the operator following
next_action).