diff --git a/docs/remediation/TASKS.md b/docs/remediation/TASKS.md index 6d88f97b..2cd32008 100644 --- a/docs/remediation/TASKS.md +++ b/docs/remediation/TASKS.md @@ -221,6 +221,52 @@ reviewer, and no other seat holds mosaicstack write. Flagged to the coordinator busy lane. Not blocking today — RM-02's code blockers are independently disqualifying — but the next otherwise-clean PR meets this. +### RM-02 CI artifact — the bounded re-trigger is a STOPGAP, not a policy + +Recorded so it cannot quietly become practice. + +RM-02's pipeline #2187 came back **overall success with `ci-postgres` FAIL** — every functional child +green, `gate-verify` included. RM-61's exemption is not built, so **no authority to exempt it exists**. +The orchestrator used **one bounded, pre-declared CI re-trigger** at the same head as an interim, with the +response to each outcome fixed _before_ triggering: + +- **clean** ⇒ a genuine terminal-green **observation** at that head (the mandate says green _at the head_, + not green _on the first roll_) ⇒ report gate-ready; +- **fails again** ⇒ RM-02 **waits for RM-61**. No ad-hoc exemption. **No third roll.** + +**Why it was declared in advance.** Re-running until the desired answer appears is **p-hacking the +pipeline**, and done silently _nobody can distinguish it from diligence — including the person doing it_. +A bounded attempt count with a pre-declared response to each outcome is the only defence, and it is the +same discipline as naming a kill criterion before a test or committing acceptance checks before reading a +diff. + +**Guardrail (Mos), non-negotiable.** **This must not become standing practice.** A per-PR "free re-roll" +on the artifact is **D-21 normalisation wearing a new hat** — routine artifact becomes routine re-roll, +and the erosion is identical. It is a one-time interim **for this PR**, under declared uncertainty, with +RM-61 as the real fix. **RM-61 must make the re-roll unnecessary, not codify it** — build the +discrimination, not a retry mechanism. + +**A clean re-run does NOT retire RM-61.** The re-roll is a die whose bias remains unmeasured; only RM-61's +negative control measures it. RM-61 stays required regardless of this run's outcome. + +### ★ MILESTONE — the full merge stack completed end-to-end for the first time (RM-03 / PR #1032) + +`independent review → CI terminal-green at the exact head → merge-gate verdict → coordinator → held for owner` + +The merge-gate returned **GO** (comment 20392, posted under its **own minted identity** — the #3084 +fail-open-to-admin foreclosed), enumerating: JSON **9/9** step scan, head triple equal at `78ec47cd`, +review **id 66 APPROVED** at the current head, `Closes #1019`, **`queue-guard: ZERO-INFORMATION`**, and +head stability post-verdict. Verified independently after the verdict: the head has **not** moved, so the +commit-bound GO remains valid. + +**What makes it worth marking:** every element was _observed_, none relayed; the queue-guard field was +recorded as the meaningless value it currently is rather than cited as evidence; and the verdict was +posted durably by an identity that **structurally cannot merge** (`push=False`). The gate that authorises +merges cannot perform them. + +And the shape holds: **RM-03 is the fix for the queue guard, so this — the first delivery through the +complete stack — is also the last one gated by a check that could not fail.** + ### D-35 — render-not-restate was enforced by a TOOL where attention had failed three times While editing `roles.local/merge-gate.md` to fix D-33, the coordinator **recalled the mandate string