fix(migration): operator-window SC2 must be regression-relative, not strict
The operator window's step [a] called 40-validate-standalone.sh directly (strict exit-code), so it STOPped on the first target carrying pre-existing in-repo test red — voyage (2 doc-consistency drifts re phase_models/phase_signals, content moved to docs/operations.md) and ai-psychosis (1). But the migration's ratified contract, the one the Step-11 dry-run validated as PASS 11/11, is 'introduce no regression': pre-existing in-repo red is the plugin's own concern, not a migration regression. The window enforced a STRICTER gate than the contract the dry-run signed off. Fix: new 41-validate-or-regression.sh — the single per-target gate the window calls in [a]. It runs 40 strict, then on failure passes iff the standalone failing-test NAME set is a SUBSET of the live in-repo set (the exact decision 99-dryrun.sh makes), reusing sc2-regression.sh. A genuine extraction-introduced regression still STOPs the window; a structure-validator fail and the config-audit gate stay strict. Single-source the failing-name capture: extract capture_fails into capture-fails.sh (mirrors the sc2-regression.sh extraction) so the live gate and the dry-run agree on what 'failing' means; 99-dryrun.sh now delegates to it (behaviour identical). Verified end-to-end on the real extracts: 40 strict fails voyage+ai-psychosis while 41 passes them 'N pre-existing, regression-relative'; clean targets (llm-security, graceful-handoff) still pass via the strict path. New hermetic tests: capture-fails 3/3, 41 6/6 (strict-pass, regression-relative-pass, genuine-regression-fail, structure-not-eligible, gate pass/fail). RUNBOOK per-repo step updated to 41. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e279b1f022
commit
3403648c6c
7 changed files with 336 additions and 12 deletions
|
|
@ -81,12 +81,19 @@ rollout_one() {
|
|||
say ""
|
||||
say "==== $key (tag $tag) ===="
|
||||
|
||||
# (a) validate the extract — self-extracts if $WORK/$key is absent
|
||||
# (a) validate the extract — self-extracts if $WORK/$key is absent.
|
||||
# SC2 is REGRESSION-RELATIVE (the contract the Step-11 dry-run validated): a target passes iff the
|
||||
# extraction introduces NO NEW failure. Pre-existing in-repo red (voyage's 2 doc-consistency drifts,
|
||||
# ai-psychosis's 1) is the plugin's own concern — 41-validate-or-regression.sh enforces that exact
|
||||
# contract (strict 40 first, then standalone-failing ⊆ in-repo-failing) so the window does NOT STOP on
|
||||
# red the rehearsal blessed. config-audit keeps its dedicated deterministic gate.
|
||||
say " [a] validate extract…"
|
||||
if [ "$key" = "config-audit" ]; then
|
||||
WORK="$WORK" bash "$MIG/50-config-audit-sc2.sh" >/dev/null 2>&1 || die "$key SC2 gate FAILED — STOP"
|
||||
else
|
||||
WORK="$WORK" bash "$MIG/40-validate-standalone.sh" "$key" >/dev/null 2>&1 || die "$key standalone validation FAILED — STOP"
|
||||
sc2out="$(WORK="$WORK" bash "$MIG/41-validate-or-regression.sh" "$key" 2>&1)" \
|
||||
|| die "$key standalone validation FAILED (incl. regression-relative SC2) — STOP${sc2out:+ :: $sc2out}"
|
||||
case "$sc2out" in *pre-existing*) say " ${sc2out#*: }";; esac
|
||||
fi
|
||||
|
||||
# (b) create the Forgejo repo (201 created | 409 already exists)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue