KB-6509

Regression Results (7/7 PASS)

6 min read Revision 1
iu-cutregressioncomposer-gatemig056begin-rollback

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
Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.6-iu-cut-verify-approve-cut-gate-consistency-fix/06-regression-results.md