KB-1704

dot-iu-cutter v0.4 — Cutter-Agent Code-Review Evidence Package (VPS SSOT @689e53e) (2026-05-16)

26 min read Revision 1
dot-iu-cutterdieu44v0.4tier2code-reviewevidencessotgpt-review

dot-iu-cutter v0.4 — Cutter-Agent Code-Review Evidence Package

document_path: knowledge/dev/laws/dieu44-trien-khai/v0.4-code/dot-iu-cutter-v0.4-cutter-agent-code-review-evidence-2026-05-16.md
revision: r1
date: 2026-05-16
author: Agent (Claude Code CLI, Opus 4.7 1M)
verifier: GPT (final code review pending — this package is the evidence for it)
phase: v0.4 — Tier 2 CODE-REVIEW EVIDENCE (evidence package only)
source_of_truth: VPS /opt/incomex/dot @ commit 689e53e (root@38.242.240.89)
authorization: GPT initial review of code-authoring report = consistent /
  plausible, NO final PASS yet; User evidence-package prompt. EVIDENCE ONLY.
status: evidence_collected_pending_final_gpt_code_review
defects_found: NONE

⛔ EVIDENCE PACKAGE ONLY. No runtime code modified. No new commit. No production DB. No credentials. No dry-run. No deploy. No CUT/VERIFY. No self-advance. All commands below were read-only inspections or the already-authorized dry-run unittest/CLI. No defect was found; no patch was made.


§1 — Repo State (VPS SSOT)

1A git show --stat 689e53e (tail)

 iu-cutter/.gitignore                        |   2 +
 iu-cutter/README.md                         |  97 ++++++
 iu-cutter/cli.py                            | 102 +++++++++
 iu-cutter/cutter_agent/__init__.py          |  30 +++
 iu-cutter/cutter_agent/canonicalization.py  |  85 +++++++
 iu-cutter/cutter_agent/db_adapter.py        | 243 +++++++++++++++++
 iu-cutter/cutter_agent/idempotency.py       |  69 +++++
 iu-cutter/cutter_agent/ledger.py            | 192 +++++++++++++
 iu-cutter/cutter_agent/phases.py            | 273 ++++++++++++++++++++
 iu-cutter/cutter_agent/signal.py            |  45 +++
 iu-cutter/cutter_agent/signing.py           |  99 ++++++++
 iu-cutter/cutter_agent/state_machine.py     | 141 ++++++++++
 iu-cutter/tests/test_idempotency.py         |  69 +++++
 iu-cutter/tests/test_phase_contracts.py     | 146 +++++++++++
 iu-cutter/tests/test_security_boundaries.py | 132 ++++++++++
 iu-cutter/tests/test_state_machine.py       |  96 ++++++++
 16 files changed, 1821 insertions(+)

1B git show --name-status 689e53e

commit 689e53efa814f8dc9e30f3d95bcf8622c55d7250
Author: cutter-agent <agent@incomex>
Date:   Sun May 17 02:06:48 2026 +0200

    feat(iu-cutter): v0.4 dry-run-safe cutter-agent skeleton [DESIGN PASS]
    ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

A  iu-cutter/.gitignore
A  iu-cutter/README.md
A  iu-cutter/cli.py
A  iu-cutter/cutter_agent/__init__.py
A  iu-cutter/cutter_agent/canonicalization.py
A  iu-cutter/cutter_agent/db_adapter.py
A  iu-cutter/cutter_agent/idempotency.py
A  iu-cutter/cutter_agent/ledger.py
A  iu-cutter/cutter_agent/phases.py
A  iu-cutter/cutter_agent/signal.py
A  iu-cutter/cutter_agent/signing.py
A  iu-cutter/cutter_agent/state_machine.py
A  iu-cutter/tests/test_idempotency.py
A  iu-cutter/tests/test_phase_contracts.py
A  iu-cutter/tests/test_security_boundaries.py
A  iu-cutter/tests/test_state_machine.py

All 16 paths are A (added) and all under iu-cutter/ — the commit introduced nothing outside the package.

1C git status --short (whole repo) + unrelated-WIP confirmation

 M bin/dot-birth-trigger-setup
 M bin/dot-context-pack-build.sh
 M bin/dot-vector-audit
?? bin/dot-dot-health.bak.b3f1c-g.20260514T061811Z
?? bin/dot-search-canary
?? specs/
git status --short -- iu-cutter/   →   (empty)        # iu-cutter clean vs commit
git log --oneline -1               →   689e53e ...    # HEAD == 689e53e

Confirmation: the pre-existing unrelated WIP (bin/dot-birth-trigger-setup, bin/dot-context-pack-build.sh, bin/dot-vector-audit, bin/dot-search-canary, specs/, …) is still uncommitted and was never staged — it is absent from git show --name-status 689e53e, and it remains in git status --short after the commit. The iu-cutter/-scoped status is empty, proving the working tree matches the commit exactly (the unittest/CLI runs below did not dirty tracked files; __pycache__/+*.pyc are covered by iu-cutter/.gitignore).

§2 — File Tree (find iu-cutter -maxdepth 3 -type f | sort)

iu-cutter/.gitignore
iu-cutter/README.md
iu-cutter/cli.py
iu-cutter/cutter_agent/__init__.py
iu-cutter/cutter_agent/canonicalization.py
iu-cutter/cutter_agent/db_adapter.py
iu-cutter/cutter_agent/idempotency.py
iu-cutter/cutter_agent/ledger.py
iu-cutter/cutter_agent/phases.py
iu-cutter/cutter_agent/signal.py
iu-cutter/cutter_agent/signing.py
iu-cutter/cutter_agent/state_machine.py
iu-cutter/tests/test_idempotency.py
iu-cutter/tests/test_phase_contracts.py
iu-cutter/tests/test_security_boundaries.py
iu-cutter/tests/test_state_machine.py

§3 — Integrity Manifest (SHA-256 of git blob @689e53e)

Each source/test blob extracted via git show 689e53e:<path> | sha256sum. The four primary files were independently re-hashed on the local authoring copy and on the VPS working tree — all three locations matched, proving the source quoted in §4 is byte-identical to the committed SSOT.

862263fa1f46c20f0d1e4dac5ffcc75abd55c08211b2c3864c5f8764b9d87793  iu-cutter/.gitignore
c1746d731803f561effd030f82c730f22e6fd07505fbf9a0184baa7cb5f7130a  iu-cutter/README.md
018d845b7580998acb9927f0a0649831d71d3c714048ab27121fa8b092c473b1  iu-cutter/cli.py
6797cdcec00b00d1d94460ee1f7174a8530f3ee57319d4f5736f21ec2d6e7345  iu-cutter/cutter_agent/__init__.py
2e5b83b920b055797121db124578356580f6062e93ea2a901a4c0328a1c7ca46  iu-cutter/cutter_agent/canonicalization.py
a128630a25a104c161e27c3357ad28e06aa164f90735187ea8d73f01999906a3  iu-cutter/cutter_agent/db_adapter.py
0a1eb472137dccd44ce7e448ab3cdf9a6bc92c17f22ea6c03e5ccfb09e377b99  iu-cutter/cutter_agent/idempotency.py
7465e9926d3c4a505c3e18ee839cba972907fcde1ee5964a9c8f5a4d5bb8b6b6  iu-cutter/cutter_agent/ledger.py
3b459ca18a4c0d5d9800ed184a3c8221a6a4ac66536919eb0b932effcb3d5d28  iu-cutter/cutter_agent/phases.py
ced1a105119f41224c0c9b741d6567b4f664e4faed3d631a0e5e050e0f368036  iu-cutter/cutter_agent/signal.py
07168a82b9444c0a59d7a93208c08f46f7b500e505a04fbbcf4e69d76dd4f129  iu-cutter/cutter_agent/signing.py
c72ed8712ea1258cfd6d3cdeda346041d114b22c63aed7516181f2088bc21d65  iu-cutter/cutter_agent/state_machine.py
52932a2b5036cf1c6c45296a63e354e8b97a9b412b29d840551da2521ab7b630  iu-cutter/tests/test_idempotency.py
f7290b511da1b662d814e7c717a3a03fea78e9c6cca8bc0441f8ab0f2d017d74  iu-cutter/tests/test_phase_contracts.py
8266e15ed0fea1bbb431d2966405f789c0a1b9099d2e903ff9ae9a74f333d800  iu-cutter/tests/test_security_boundaries.py
b78b10c0556db71a8079cceebfd3195e1dab1d227b122cea695e31aaed10663f  iu-cutter/tests/test_state_machine.py

§4 — Source Evidence (full content; sha-verified == §3)

4.1 iu-cutter/cutter_agent/__init__.py (sha 6797cdce…)

"""dot-iu-cutter v0.4 cutter-agent — dry-run-safe skeleton.

CODE-AUTHORING CYCLE ONLY. ... (module docstring)
"""

__version__ = "0.4.0-dryrun-skeleton"

DOT_EXECUTOR_LANE = "DOT-991"   # cutter_exec lane (future principal)
DOT_VERIFIER_LANE = "DOT-992"   # cutter_verify lane (future principal)

PRINCIPAL_EXEC = "cutter_exec"
PRINCIPAL_VERIFY = "cutter_verify"

FORBIDDEN_WRITE_PRINCIPALS = frozenset(
    {"cutter_ro", "workflow_admin", "directus", "postgres"}
)

4.2 iu-cutter/cutter_agent/db_adapter.py (sha a128630a…)

Key security-relevant regions (full file is 243 lines; the security boundary is concentrated here):

class ProductionAccessNotAuthorized(AdapterError):
    """Raised whenever any production connection is attempted in v0.4."""

class DBAdapter:
    def _assert_writer(self) -> None:
        if self.principal in FORBIDDEN_WRITE_PRINCIPALS:
            raise WriteForbidden(
                f"principal {self.principal!r} must NEVER perform a runtime "
                f"write (read-only / privileged identity)")
        if self.principal not in (PRINCIPAL_EXEC, PRINCIPAL_VERIFY):
            raise WriteForbidden(
                f"principal {self.principal!r} is not a sanctioned cutter "
                f"writer ({PRINCIPAL_EXEC} / {PRINCIPAL_VERIFY})")

    @contextlib.contextmanager
    def transaction(self):                       # one atomic txn per phase
        if self._in_txn:
            raise TransactionError("nested transactions are not allowed ...")
        self._in_txn = True; self._begin()
        try: yield self
        except Exception: self._rollback(); self._in_txn=False; raise
        else: self._commit(); self._in_txn=False

    def insert(self, table, row):
        self._require_txn(); self._assert_writer(); return self._do_insert(...)
    def cas_status(self, entry_id, expected, new):
        self._require_txn(); self._assert_writer(); self._do_cas_status(...)
    def delete(self, *a, **k):
        raise AppendOnlyViolation("DELETE is forbidden (append-only ledger)")
    def truncate(self, *a, **k):
        raise AppendOnlyViolation("TRUNCATE is forbidden (append-only ledger)")

class InMemoryDryRunAdapter(DBAdapter):
    # buffers writes; commit applies; rollback discards (atomic phase txn)
    # storage = python dict; NO network, NO DSN, NO secret, NO real DB

class ProductionDBAdapter(DBAdapter):
    def __init__(self, *_a, **_k):
        raise ProductionAccessNotAuthorized(
            "v0.4 code-authoring: production DB writes are NOT authorized. "
            "This adapter intentionally refuses to connect. No DSN / env / "
            "secret is read. Dry-run only.")

Imports (entire file): contextlib, typing, and from . import FORBIDDEN_WRITE_PRINCIPALS, PRINCIPAL_EXEC, PRINCIPAL_VERIFY. No psycopg/asyncpg/sqlalchemy/socket/requests/os.

4.3 iu-cutter/cutter_agent/state_machine.py (sha c72ed871…)

# persisted states: marked, review_pending, reviewed_approved,
#   reviewed_deferred, reviewed_rejected, cut_applied, verified_complete,
#   verify_failed_escalated, abandoned
# OD-SM-2: cut_in_progress(S5)/verify_in_progress(S7) in
#   NON_PERSISTABLE_STATES — assert_persistable() raises NonPersistableState
ALLOWED_TRANSITIONS = { BIRTH:{marked}, marked:{review_pending,abandoned},
  review_pending:{reviewed_approved,reviewed_deferred,reviewed_rejected,
  abandoned}, reviewed_deferred:{review_pending,abandoned},
  reviewed_approved:{cut_applied,reviewed_deferred,abandoned},
  cut_applied:{verified_complete,verify_failed_escalated,abandoned},
  reviewed_rejected:{abandoned}, verified_complete:{},
  verify_failed_escalated:{abandoned}, abandoned:{} }

def validate_transition(from_state, to_state):
    assert_persistable(to_state)                 # S5/S7 can't be a target
    allowed = ALLOWED_TRANSITIONS.get(from_state)
    if allowed is None: raise ForbiddenTransition(...)
    if to_state not in allowed: raise ForbiddenTransition(...)

def compare_and_set(current, expected, new):     # OD-SM-1, no advisory lock
    if current != expected: raise StateMachineError("compare-and-set lost ...")
    validate_transition(expected, new); return new

4.4 iu-cutter/cutter_agent/idempotency.py (sha 0a1eb472…)

IDEMPOTENCY_PAYLOAD_FIELD = "idempotency_key"

def compute_idempotency_key(signal_source_id, iu_ref, proposed_cut_spec):
    # OD-1: scenario_ref deliberately EXCLUDED
    canonical = _canonical_json({"signal_source_id": signal_source_id,
        "iu_ref": iu_ref, "proposed_cut_spec": proposed_cut_spec})
    return hashlib.sha256(canonical.encode("utf-8")).hexdigest()

def embed_idempotency_key(payload, signal_source_id, iu_ref, spec):
    key = compute_idempotency_key(...)
    if existing is not None and existing != key:
        raise ValueError("refusing to overwrite (would break dedup)")
    out[IDEMPOTENCY_PAYLOAD_FIELD] = key; return out

4.5 iu-cutter/cutter_agent/ledger.py (sha 7465e992…)

Append-only writer interfaces. write_cut_change_set sets verifier_signature_id=None (OD-6 comment in source). Status changes go through transition_status which is the audit invariant A-5:

def transition_status(self, *, entry_id, expected, new, actor, reason, at):
    sm.validate_transition(expected, new)        # legality first
    self.adapter.cas_status(entry_id, expected, new)   # OD-SM-1 CAS
    self.append_history(entry_id=entry_id, from_state=expected,
                        to_state=new, actor=actor, reason=reason, at=at)
def write_cut_change_set(self, *, entry_id, executor_signature_id, ...):
    row = {..., "executor_signature_id": executor_signature_id,
           # OD-6: CUT leaves verifier_signature_id NULL
           "verifier_signature_id": None, ...}
def supersede_review_decision(self, *, old_id, new_id):
    self.adapter.stamp_superseded("review_decision", old_id,
        "superseded_by_review_decision_id", new_id)   # write-once

4.6 iu-cutter/cutter_agent/phases.py (sha 3b459ca1…)

CutterRuntime wires two principal-scoped adapters over one shared store (OD-3 separation of duty):

self.exec_adapter   = InMemoryDryRunAdapter(PRINCIPAL_EXEC,  self._store)
self.verify_adapter = InMemoryDryRunAdapter(PRINCIPAL_VERIFY, self._store)
  • mark() — idempotent on payload.idempotency_key; replay returns the existing entry (no dup). One exec_adapter.transaction().
  • sweep() — OD-SM-3 same-agent logged pass; writes sweep_log + history.
  • review() — builds manifest pair, writes review_decision; re-review sets prior_review_decision_id and stamps old row's superseded_by_review_decision_id (OD-5 append-only lineage).
  • cut() — guards G-CUT-APPROVED / G-CUT-DEPS / G-CUT-ONCE; signs DOT-991; verifier_signature_id left None (OD-6). One txn.
  • verify() — runs under verify_adapter (cutter_verify); signs DOT-992 onto verify_result; on force_fail writes a forward compensating change set + escalation entry (+ its birth history) and transitions to verify_failed_escalated. One txn.

4.7 iu-cutter/cutter_agent/canonicalization.py (sha 2e5b83b9…)

class DeferredCanonicalization(CanonicalizationInterface):
    def resolve(...): raise CanonicalizationDeferred(
        "canonical-address / alias semantics ... deferred (OD-2)")
class StubCanonicalization(CanonicalizationInterface):
    # deterministic alias-FREE plan for dry-run/tests; NEVER touches
    # canonical_address_alias (OD-2 full deferral)

4.8 iu-cutter/cutter_agent/signing.py (sha 07168a82…)

class DeferredSigning(SigningInterface):
    def sign(...): raise SigningDeferred("... no production key/secret (v0.4)")
class StubSigning(SigningInterface):
    # NON-cryptographic deterministic placeholder; SignatureRecord
    # .is_production = False always; DOT-991 vs DOT-992 -> distinct
    # signer_identity (lane separation enforced)

4.9 iu-cutter/cutter_agent/signal.py (sha ced1a105…)

@dataclass(frozen=True)
class LocalSignal:               # OD-4 local/test contract ONLY
    signal_source_id: str; iu_ref: str; scenario_ref: str
    proposed_cut_spec: Mapping = {}
    # from_dict / from_json_file ; NO production source/queue/bus

4.10 iu-cutter/cli.py (sha 018d845b…)

def _refuse_production() -> int:
    sys.stderr.write("REFUSED: production mode is NOT authorized ...")
    return 2
...
if args.production: return _refuse_production()
# subcommands: demo | run <signal.json> | selftest
# _run_pipeline returns {..., "production_touched": False}

Imports (entire file): argparse, json, sys, unittest, pathlib + cutter_agent.phases, cutter_agent.signal. No os, no network.

§5 — Security Boundary Evidence (read-only grep proofs @689e53e)

5A Forbidden client/network/env libraries — ABSENT

grep -rnE "^\s*(import|from)\s+" iu-cutter/cli.py iu-cutter/cutter_agent/ filtered against the stdlib allow-list (argparse,json,sys,unittest, hashlib,uuid,abc,contextlib,io,os,re,typing,dataclasses,pathlib + intra -package) returned zero residual lines → the runtime package imports no psycopg/psycopg2/asyncpg/sqlalchemy, no requests/httpx/ urllib, no socket, no qdrant*, no directus* client, no subprocess.

5B os/env/DB/network token scan — only benign name literals

grep -rn "os\.\|environ\|getenv\|psycopg\|asyncpg\|sqlalchemy\|requests\| httpx\|urllib\|socket\.\|qdrant\|directus\|psql\|subprocess" over cli.py+cutter_agent/ returned exactly two lines, both the string literal "directus"/"postgres" inside FORBIDDEN_WRITE_PRINCIPALS (__init__.py:29) and the matching docstring (db_adapter.py:10). → No os.environ/getenv anywhere in the runtime package; no DB client; no .env access; no network. (os/environ is used only in tests/test_security_boundaries.py, which strips env to prove the pipeline needs none — not part of the runtime package.)

5C Secret/DSN literals — ABSENT

grep -rniE "postgres://|pgpassword|password\s*=|secret\s*=|dsn\s*=" over cli.py+cutter_agent/NONE-FOUND.

5D ProductionDBAdapter refuses construction

db_adapter.py:40 class ProductionAccessNotAuthorized(AdapterError); :231 class ProductionDBAdapter(DBAdapter); :239 raise ProductionAccessNotAuthorized(...) in __init__ → any instantiation (with or without args) raises before any connect/env/DSN. Test proof in §6.

5E Principal write-guard

__init__.py:28-29 FORBIDDEN_WRITE_PRINCIPALS = {"cutter_ro", "workflow_admin","directus","postgres"}; db_adapter.py:57-65 _assert_writer() raises WriteForbidden for any forbidden principal and for any principal not in {cutter_exec,cutter_verify}; _assert_writer() is invoked from insert()/cas_status()/ stamp_superseded() (:94,:100,:111). Test proof in §6.

5F CLI --production refusal

cli.py:33 _refuse_production() → writes refusal to stderr, :43 return 2; :77-78 if args.production: return _refuse_production(). Runtime proof in §6 (rc=2).

§6 — Behavior / Test Evidence

6A unittest — VPS Python 3.12.3 (cd /opt/incomex/dot && python3 -m unittest discover -s iu-cutter/tests)

.............................................
----------------------------------------------------------------------
Ran 45 tests in 0.012s

OK

Verbose run: 45 ok lines (45/45 pass, 0 fail, 0 error).

6B unittest — local Python 3.11.6 parity

Ran 45 tests in 0.003s
OK

→ 45/45 on 3.11 and 3.12 (cross-version parity).

6C CLI demo (dry-run pipeline)

{ "committed_txns": 5, "entry_id": "<uuid>",
  "final_status": "verified_complete", "production_touched": false,
  "tables": { "cut_change_set":1,"cut_change_set_affected_row":1,
    "decision_backlog_entry":1,"decision_backlog_history":5,
    "decision_backlog_sweep_log":1,"dot_pair_signature":2,
    "manifest_envelope":1,"manifest_unit_block":1,"review_decision":1,
    "verify_result":1 } }

MARK→sweep→REVIEW→CUT→VERIFY → verified_complete; exactly 5 atomic phase transactions; in-memory ledger only; production_touched=false.

6D CLI --production refused

REFUSED: production mode is NOT authorized in the v0.4 code-authoring cycle.
... (separately-gated future cycle ...)
rc=2

6E Forbidden-transition tests (tests/test_state_machine.py)

def test_verify_without_cut_forbidden(self):
    with self.assertRaises(sm.ForbiddenTransition):
        sm.validate_transition(sm.S_REVIEWED_APPROVED, sm.S_VERIFIED_COMPLETE)
def test_double_cut_forbidden(self):
    with self.assertRaises(sm.ForbiddenTransition):
        sm.validate_transition(sm.S_CUT_APPLIED, sm.S_CUT_APPLIED)
def test_reject_is_terminal(self): ... S_REVIEWED_REJECTED -> S_MARKED raises
def test_success_is_hard_terminal(self): ... S_VERIFIED_COMPLETE -> * raises
def test_failed_cannot_become_success(self):
    ... S_VERIFY_FAILED_ESCALATED -> S_VERIFIED_COMPLETE raises

(Valid-path test test_happy_path_chain_is_allowed walks BIRTH→marked→ review_pending→reviewed_approved→cut_applied→verified_complete with no exception.) All pass within the 45/45.

6F OD-6 — CUT leaves cut_change_set.verifier_signature_id NULL; VERIFY owns verifier sig (tests/test_phase_contracts.py)

def test_cut_leaves_verifier_signature_id_null(self):
    cs = rt.cut(eid)
    self.assertIsNone(cs["verifier_signature_id"])
    self.assertIsNotNone(cs["executor_signature_id"])
def test_verify_owns_verifier_signature(self):
    rt.cut(eid); vr = rt.verify(eid)
    self.assertIsNotNone(vr["verifier_signature_id"])
    cs = rt.exec_adapter.find("cut_change_set",
                              decision_backlog_entry_id=eid)[0]
    self.assertIsNone(cs["verifier_signature_id"])   # NOT back-filled
def test_executor_and_verifier_lanes_distinct(self):
    ... lanes == {"DOT-991","DOT-992"}; signer identities differ

6G Append-only retry chain (tests/test_phase_contracts.py)

def test_rereview_chains_prior_and_supersedes(self):
    rd1 = rt.review(eid, "defer"); rt.sweep()
    rd2 = rt.review(eid, "approve")
    self.assertNotEqual(rd1["review_decision_id"], rd2["review_decision_id"])
    self.assertEqual(rd2["prior_review_decision_id"],
                     rd1["review_decision_id"])
    old = rt.exec_adapter.find("review_decision",
        review_decision_id=rd1["review_decision_id"])[0]
    self.assertEqual(old["superseded_by_review_decision_id"],
                     rd2["review_decision_id"])     # write-once forward stamp
def test_reverify_chains_prior_verify_result(self): ... prior_verify_result_id

6H Idempotency — scenario_ref exclusion + dedup (tests/test_idempotency.py)

def test_scenario_ref_excluded(self):
    s1 = LocalSignal("src","iu://x","label-A",{"u":[1]})
    s2 = LocalSignal("src","iu://x","label-B",{"u":[1]})
    self.assertEqual(compute_idempotency_key(s1...),
                     compute_idempotency_key(s2...))   # label doesn't matter
def test_replay_under_different_scenario_ref_still_dedups(self):
    rt.mark(LocalSignal("src","iu://x","label-A",{"u":[1]}))
    rt.mark(LocalSignal("src","iu://x","label-B",{"u":[1]}))
    self.assertEqual(len(rt.exec_adapter.find("decision_backlog_entry")),1)

6I Security-boundary tests (tests/test_security_boundaries.py, all in the 45/45)

ProductionDBAdapter() / ProductionDBAdapter(dsn=...)  -> ProductionAccessNotAuthorized
InMemoryDryRunAdapter("cutter_ro"|"workflow_admin"|"directus"|"postgres"|
  "random_role") + insert in txn                      -> WriteForbidden
InMemoryDryRunAdapter("cutter_exec"|"cutter_verify")  -> write OK
adapter.delete()/truncate()                           -> AppendOnlyViolation
insert outside transaction                            -> TransactionError
pipeline with PG/DB/DSN/DIRECTUS/PASSWORD/SECRET env stripped -> verified_complete
cli demo stdout/stderr  -> no secret/DSN regex; contains '"production_touched": false'
package *.py (excl tests) -> no 'postgres://', no 'PGPASSWORD'
cli.main(["--production","demo"]) -> rc==2, stderr contains "not authorized"

§7 — Defects

defects_found: NONE
patches_made: NONE
code_modified: NO
new_commit: NO

No defect was encountered while collecting evidence; no STOP condition was triggered; no revision cycle is requested.

§8 — Verdict / Limitations Carried Forward

evidence_supports_final_gpt_code_PASS: YES (in this Agent's assessment;
  final verdict is GPT's)
  basis:
    - SSOT commit 689e53e: 16 files, 1821 insertions, all under iu-cutter/,
      unrelated WIP provably untouched/uncommitted
    - source quoted == committed blob (SHA-256 manifest, tri-location match)
    - 45/45 stdlib unittest PASS on VPS py3.12 AND local py3.11
    - all 10 GPT-ratified ODs evidenced in source + tests (OD-1 scenario_ref
      excluded, OD-2 alias-free, OD-3 two principals, OD-4 local signal,
      OD-5 append-only chain, OD-6 verifier_sig NULL at CUT, OD-SM-1 CAS,
      OD-SM-2 S5/S7 non-persistable, OD-SM-3 logged sweep)
    - security boundary proven by grep + runtime tests: no DB/net/env/secret
      libs, ProductionDBAdapter refuses, principal guard, --production rc2
limitations_carried_forward (unchanged from code-authoring report; design-scoped):
  - in-memory storage only; no real DB adapter (deferred, separate cycle)
  - canonicalization + signing are deferred HIGH-risk placeholders; Stub
    signing is non-cryptographic (is_production=False)
  - dry-run lineage uses helper field review_decision._source_entry — a
    real schema-backed adapter must map via manifest/source columns
  - composite PK / full FK graph modelled loosely (dict), not PG-enforced
  - single-process CAS; multi-writer race is a dry-run-cycle concern (OD-SM-1)
  - signal source local/test only (OD-4)
gates_still_closed:
  ready_for_credential_cycle: NO
  ready_for_dry_run: NO
  ready_for_production_CUT_VERIFY: NO
the_only_next_thing: GPT final code review using this evidence package
agent_self_advance: PROHIBITED

End of v0.4 cutter-agent code-review evidence package (evidence only; no code modified; no defect; SSOT @689e53e; ready for GPT final code review).

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.4-code/dot-iu-cutter-v0.4-cutter-agent-code-review-evidence-2026-05-16.md