KB-65FE

dot-iu-cutter v0.4 PG-backed Dry-run RERUN#3 — EXECUTION FAIL: harness negatives self-serialization UUID defect (cross-ref fix VALIDATED on happy 15-row baseline) (2026-05-17)

9 min read Revision 1
dot-iu-cutterv0.4db-adapterdry-runrerunexecution-failharness-false-negativeuuid-jsondieu44blocking-finding

dot-iu-cutter v0.4 — PG-backed Dry-run RERUN#3 — EXECUTION FAIL

Date: 2026-05-17 · Verdict: honest FAIL (NOT PASS). · execution_status = FAIL:G_HARNESS_NEG Authorized by: GPT (cross-ref + lane-overlap fix PASS; accepted commit e93424b…0856a; tests 140/140; PG dry-run RERUN#3 authorized; orchestrator-pin bump only; no iu-cutter code change / commit). Accepted code commit: e93424b5ff7fa5e4b8406131977ce4339cd0856a (parent db4aa58). Plan: command-review r1 · verification-plan r3 · rollback-plan r1 · risk-review r1.

1. Pre-run remediation — PASS

Item Result
Orchestrator ACCEPTED pin db4aa58…eede6e93424b…0856a (gitignored run_dryrun_v0_4.sh only) applied; bash -n OK
Teardown shreds current-run $DUMP on all exit paths (${DUMP:-}-guarded) confirmed present (carried from RERUN#2)
Corrected orchestrator SHA256 pre d6478497901d5eed534a7b1204e9b09024250953fda4c8ac52191647a3ca0cb2post 2ddffd1d071cc9b87ec05c4dd1fbeeb41ee2c3c0a9d2bcfa2d7228cf66a7e484
Git SSOT branch main, HEAD e93424b…0856a, git status --short -- iu-cutter clean; no iu-cutter source change; no git commit (orchestrator gitignored)

2. Run timeline (C-01 → C-13)

C-01 OK head=e93424b…0856a
C-02 OK roles.sql sha=2a409696… harness sha=ddf14a94…
C-03 OK dump sha=9183160f53d084312b81423f6739ff0eedf7f82976d3fd260571df8e63944332 size=681125620 prod_sysid=7611578671664259111
C-04 OK no published host port
C-05 OK cg tables=12 views=12
C-06 OK matrix exec=18 verify=15 ro=12 ro_login=f
C-07 OK dr_sysid=7640841609642958891 != prod 7611578671664259111
C-08 OK harness sha verified=ddf14a94…
C-10a harness happy -> PASS
C-11a baseline EXACT total=15  ✅
C-10b harness negatives -> GATE FAIL G_HARNESS_NEG
C-13 teardown (exact-name only); STOP (honest FAIL, DR env torn down only)

3. CROSS-REFERENCE + LANE-OVERLAP FIX VALIDATED (happy path)

C-11a captured the canonical MARK → SWEEP → REVIEW → CUT → VERIFY flow producing the verification-plan r3 §2.3 exact baseline, cell-for-cell:

decision_backlog_entry=1  decision_backlog_history=5  decision_backlog_dependency=0
decision_backlog_sweep_log=1  manifest_envelope=1  manifest_unit_block=1
review_decision=1  dot_pair_signature=2  cut_change_set=1
cut_change_set_affected_row=1  verify_result=1  canonical_address_alias=0   TOTAL=15 ✅

dot_pair_signature=2 reached against the deployed dot_pair_signature_check XOR — i.e. the DOT-991 executor row carried cross_reference_change_set_id (verify_result NULL) and the DOT-992 verifier row carried cross_reference_verify_result_id (change_set NULL). The prior RERUN#2 blocker (dot_pair_signature_check violation) is resolved; DOT lane-overlap separation held on the happy path. Commit e93424b is confirmed effective for the happy-path contract.

4. Failure — HARNESS self-serialization defect (R6 false-negative class), NOT a SUT/fix defect

logs/harness_negatives.out traceback:

File "/wd/dr_harness_v0_4.py", line 277, in main
    json.dump(res, f, indent=2, sort_keys=True)
...
TypeError: Object of type UUID is not JSON serializable

out/negatives.json left half-written: { "S10": { "entry_id": <UUID … — confirming the crash is at the final aggregate json.dump, after the negative scenarios ran.

Structural proof it is the harness, not cutter_agent:

  • dr_harness_v0_4.py:226 _ok(res,"S10",entry_id=e2["entry_id"],…) and :228 res["_replay_entry_id"]=e2["entry_id"] store the replayed entry id into the harness's own result dict.
  • S10 = idempotency replay: accepted phases.mark() correctly returns the existing row via the idempotent path (existing[0]), read back from the real psycopg3 adapter, whose entry_id is a uuid.UUID object (real DB returns uuid columns as UUID). This is correct SUT behaviour.
  • main():277 serialises res with no default=str (and no json_safe_id applied to harness-captured ids) → TypeError. The defect is purely in the dry-run harness report serialisation, a throwaway artefact in the gitignored .dryrun-v0.4-2026-05-17/. cutter_agent (incl. the e93424b cross-ref fix and the db4aa58 signing-body json_safe_id) is not implicated — json_safe_id only normalises the CUT/VERIFY signing body, not the harness's own S10 result capture.
  • happy mode passed because its captured S4_MARK entry_id is the first-insert path; only the idempotent replay returns a real-DB UUID, so the defect surfaces only in negatives.

Consequence: the harness exited non-zero before the orchestrator's shell-side count_tables/Δ=0 post-comparison ran, so the negative & idempotency Δ=0 battery (S2/S3-neg/S8/S9/S10/S11/S12) is UNVERIFIED. Per verification-plan §4, an incomplete gate ⇒ run = FAIL, regardless of the happy-path PASS. Marked honest FAIL; not PASS. Per verification-plan §3/§4 and risk R6, a suspected harness FN must be proven structurally before any verdict action — proven here; no improvised harness fix, no re-run, no self-advance.

5. Net-zero / safety proof

Asset State
Current-run prod dump prod-directus-20260517T124731Z.sql (sha 9183160f…) CURRENT_RUN_DUMP_ABSENT_OK (patched teardown shredded on fail path)
DR container pg-dry-run-v0.4-db-adapter-2026-05-17 / network dr-net-v0.4-2026-05-17 DR_GONE_OK / NET_GONE_OK (exact-name)
3 protected prior dry-run envs PROTECTED_BYTE_IDENTICAL
Production sysid pre==post 7611578671664259111; StartedAt 2026-04-17T05:35:18.48439927Z unchanged; read-only pg_dump only; no write/CUT/VERIFY; not restarted
iu-cutter SSOT HEAD e93424b…0856a, git status --short -- iu-cutter clean; no code change, no git commit
Secrets dry-run-only, openssl-generated; dr.env/dr.harness.env shredded at teardown; retained artefacts confirmed secret-free (UUIDs/hashes/sha/verbs only). Formal C-12 leak gate not reached (STOPped at C-10b).

6. Artefact index (SHA256)

Artefact SHA256 / value
Corrected orchestrator run_dryrun_v0_4.sh 2ddffd1d071cc9b87ec05c4dd1fbeeb41ee2c3c0a9d2bcfa2d7228cf66a7e484
Harness dr_harness_v0_4.py (defective; unchanged this run) ddf14a94438a6b8ed621329d2f3b62ca7da2b58724d6fd363136a0f1c8d3aa96
Roles matrix dr_roles_matrix.sql (unchanged) 2a409696dc3f60cb6328a77afd345e7638685f8d70cb5c0995b40f5841a57584
Current-run prod dump (shredded at teardown; sha ref only) 9183160f53d084312b81423f6739ff0eedf7f82976d3fd260571df8e63944332
Retained redacted RESULT.json, logs/orch.log, `logs/protected_before

7. Hardcode / label / DOT lane-overlap control statement

No fixed IP/DSN/password/container/vector-collection introduced; DR host from dry-run-only dr.harness.env; passwords openssl-generated then shredded; container/network = required exact-name safety ids. No label/metadata/vector/NoSQL change. DOT lane-overlap control: on the happy path DOT-991 referenced only change_set, DOT-992 only verify_result, XOR satisfied, no swap/both/neither — PASS for the validated portion. No STOP-class hardcode/lane issue.

8. Verdict & next (no self-advance)

RERUN#3 = honest FAIL (gate G_HARNESS_NEG incomplete). The e93424b cross-reference + lane-overlap fix is VALIDATED on the canonical happy path (exact 15-row r3 baseline, deployed XOR satisfied). Remaining blocker is a dry-run harness self-serialization defect (dr_harness_v0_4.py json.dump lacks default=str/uuid normalisation for S10 replay-captured ids) — a throwaway-tooling defect, not iu-cutter, not the fix. Remediation = a separate GPT-gated harness-hardening cycle (normalise harness-captured ids before json.dump; harness sha will change → re-state). NOT performed here. No code change / commit / re-run / production touch. Self-advance PROHIBITED.

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.4-db-adapter-dry-run/dot-iu-cutter-v0.4-pg-backed-dry-run-RERUN3-EXECUTION-FAIL-harness-negatives-uuid-json-2026-05-17.md