Regression Results (7/7 PASS)
Phase F — Regression Results
All tests run live via ssh contabo → docker exec postgres → psql workflow_admin@directus. Mutating tests use BEGIN; ...; ROLLBACK; only. Composer gate live = false.
T1 — preflight on Điều 39 manifest with composer=false
cut_readiness_ok | mark_valid | ready_for_cut | e8_composer_ok | composer_enabled | e8_problems
f | t | f | f | f | ["E8: composer_gate_closed -- iu_core.composer_enabled is false; CUT would refuse via fn_iu_cut_from_manifest G7"]
PASS — cut_readiness_ok=false; manifest still mark_valid=true; E8 problem reported.
T2 — VERIFY_MARK dry-run (apply=false) on Điều 39 manifest with composer=false
Inside BEGIN; UPDATE iu_core.iu_staging_record SET lifecycle_status='pending_review', approved_at=NULL, approved_by=NULL, approval_doc_id=NULL WHERE staging_record_id='5ef349ac…'; …; ROLLBACK;:
ok | verdict | cut_readiness_ok | mark_valid | e8_problems
f | rejected | f | t | ["E8: composer_gate_closed -- iu_core.composer_enabled is false; CUT would refuse via fn_iu_cut_from_manifest G7"]
PASS — VERIFY_MARK no longer says ready_for_cut=true when composer=false. Reports mark_valid=t (manifest is good) and cut_readiness_ok=f (runtime not ready).
T3 — APPROVE (apply=true) refused when composer=false
Inside BEGIN; <revert manifest+request to pre-approve state>; <fn_cut_verify_mark p_approve=true>; ROLLBACK;:
verdict | ok | status | inner_verdict | inner_ok
rejected | f | mark_rejected | rejected | f
Post-call state:
cut_request.status=mark_rejected✓- manifest
lifecycle_status=rejected✓
PASS — APPROVE refused; both manifest and cut_request consistently in their rejected states; downstream activity (cut_run_id etc.) untouched.
T4 — fn_cut_apply refuses cleanly when composer=false
Inside BEGIN; <revert request to mark_verified>; <fn_cut_apply>; ROLLBACK;:
ok | verdict | refusal_code | status
f | refused | preflight_refused | mark_verified
Post-call state:
cut_request.status=mark_verified(no transition to cut_in_progress) ✓cut_request.cut_run_id= NULL ✓cut_request.cut_done_at= NULL ✓iu_total= 200 (unchanged) ✓
PASS — No IU created, no fake cut_done, no fake cut_run_id, no fake cut_done_at. cut_request status remains at mark_verified (pre-transition refusal — cleaner than transitioning to cut_in_progress just to land in cut_failed).
T5 — composer=true (BEGIN/ROLLBACK fixture) preflight approves
Inside BEGIN; UPDATE dot_config SET value='true' WHERE key='iu_core.composer_enabled'; <preflight>; ROLLBACK;:
cut_readiness_ok | mark_valid | e8_composer_ok | verdict
t | t | t | approved
PASS — E8 reads live composer gate and flips correctly. No live CUT performed.
T6 — Existing invalid manifest still refused (Axis D unit_kind)
Inside BEGIN; UPDATE iu_staging_payload SET payload_json=jsonb_set(..., '"bogus_kind"') WHERE …; <preflight>; ROLLBACK;:
cut_readiness_ok | axis_d_ok | axis_d_problems
f | f | ["Axis D: unit_kind compatibility failed (total=16, missing=0, in_vocab=15) -- every piece.unit_kind must exist in dot_config vocab.unit_kind.*"]
PASS — Axis D from mig 054 still operative; not regressed.
T7 — Forbiddens snapshot
| metric | value | invariant? |
|---|---|---|
iu_total |
200 | ✓ unchanged |
vsp |
152 | ✓ unchanged |
event_outbox |
139900 | ✓ unchanged (function definition + pg_dump only) |
production_documents |
absent | ✓ |
composer_enabled |
false | ✓ live unchanged |
job_substrate_enabled |
false | ✓ |
heartbeat_enabled |
true | ✓ |
Forbiddens — 15/15
| # | forbidden | observed |
|---|---|---|
| 1 | live CUT run | not run |
| 2 | live VERIFY_CUT | not run |
| 3 | live COMPLETE | not run |
| 4 | IU created | 0 (iu_total 200→200; dieu39 0→0) |
| 5 | Qdrant touched | no (vsp 152→152) |
| 6 | production_documents touched | absent |
| 7 | pg_cron installed | absent |
| 8 | broad worker started | none |
| 9 | vocab widened | no (dot_config row count unchanged) |
| 10 | silent value mapping added | no |
| 11 | MARK/CUT alias body rewrite | 7/7 alias md5 UNCHANGED |
| 12 | new cut_request created | no |
| 13 | manifest patched live | no (only inside BEGIN/ROLLBACK) |
| 14 | event_outbox mutated | no (139900→139900) |
| 15 | Điều 39 re-MARK | no |
Function md5 changes (single TX)
| function | before | after | unchanged? |
|---|---|---|---|
fn_iu_cut_preflight_validate |
914e26d6… |
25600094… |
CHANGED |
fn_iu_verify_mark |
c9c0553f… |
c740ff7c… |
CHANGED |
fn_cut_verify_mark |
(n/a — wrapper updated) | 2b77a680… |
CHANGED |
fn_cut_apply |
ce488b88… |
007e2097… |
CHANGED |
fn_iu_op_cut |
66b813e5… |
66b813e5… |
UNCHANGED |
fn_iu_op_verify_mark |
bf20bd19… |
bf20bd19… |
UNCHANGED |
fn_iu_op_mark_file |
ffaa47ff… |
ffaa47ff… |
UNCHANGED |
fn_iu_cut_from_manifest |
c5d556bc… |
c5d556bc… |
UNCHANGED |
fn_cut_mark_staged_file |
e85065ac… |
e85065ac… |
UNCHANGED |
fn_iu_create |
dcade99a… |
dcade99a… |
UNCHANGED |
fn_cut_request_transition |
c392d3e1… |
c392d3e1… |
UNCHANGED |