Dashboard › institutional-transition-lab › Distillation
f5ac80fc-4494-43da-837a-6cfe4cc92c34["lore_tm_v1_alXPH_ArMMDr3rgjvbYUWPDZa8DyP4QzijBPqgF8wwA","lore_tm_v1_4D9SDxswLXfzfnbWaamdOap7p5PcqU2tWiRM4xUd018","lore_tm_v1_bZFY9KCdYgOjfTEDvtaXc5ZxvOYNMxqWCKwMQ19wwo8","lore_tm_v1_JidMC7PUfFTKGiQQNL_tDB_eWK2bIG4WRV_4sfGEyrc","lore_tm_v1_q0gIYgcRTdPzbkyWTTQRu4lx9mpu7kecuSqvwvUpsWM","lore_tm_v1_FOvdBa1se4uE1yLrR85XekhTlUkhZbK2veXyFlvfrmU","lore_tm_v1_2hR8X96Wwl7uOa7BuooiUFJX1IFhuLbYt6DL2-xUeqU","lore_tm_v1_OHSqtct_AngmLWMXuKmdENZcOEeoo1NgWMTIOKb9Znw","lore_tm_v1_uFZgxtDgvb7LUHiB5c3b2nvYhZWekQ3_EFaX4h5vhhw","lore_tm_v1_Eaf2plZ3RVygndKKyxx4FXUbDjuQ414kbGuY2i4jhlU","lore_tm_v1_I4amk2viVGL3b37M7JWiWbcmNH-cHuiW2Q-f6_jBTrM"]
Date: Sep 9, 2026
/home/byk/Code/institutional-transition-lab, strictly limited to the immutable frozen-input and ZIP/archive verification boundary; this replaces a reviewer that returned an empty result twice.cases/review/oss-governance-adjudication-v1.inputs.json and ZIP metadata may be inspected only as needed.src/institution_lab/governance_adjudication.py and provenance-focused tests in tests/test_governance_adjudication.py.PASS, CONCERN, MUST-FIX, or BLOCKED, and with exact current file:line references.PASS, list the tests/probes relied upon, and identify residual risks.BLOCKED with the exact tool/error and a final verdict of DO-NOT-MERGE.MERGE or DO-NOT-MERGE./home/byk/Code/institutional-transition-lab contains .git/, .github/, .pytest_cache/, .ruff_cache/, .venv/, cases/, data/, docs/, research/, schema/, scripts/, src/, tests/, AGENTS.md, PROTOCOL.md, README.md, pyproject.toml, package.json, package-lock.json, and uv.lock.src/institution_lab/governance_adjudication.py: MAX_INPUT_BYTES = 16 * 1024 * 1024 at line 65, MAX_ARTIFACT_BYTES = 32 * 1024 * 1024 at line 66, MAX_ARCHIVE_MEMBERS = 128 at line 67, MAX_ARCHIVE_MEMBER_BYTES = 16 * 1024 * 1024 at line 68, and MAX_ARCHIVE_EXPANDED_BYTES = 64 * 1024 * 1024 at line 69.VerifiedInputBundle is a frozen dataclass at src/institution_lab/governance_adjudication.py:72-77, holding pins, documents, coding_package, and adjudication_schema._read_regular_file() at src/institution_lab/governance_adjudication.py:94-109 opens with os.O_RDONLY | os.O_NONBLOCK | getattr(os, "O_NOFOLLOW", 0), uses os.fstat() to require stat.S_ISREG, rejects st_size > max_bytes, reads at most max_bytes + 1, and rejects an over-limit read.file_sha256() at src/institution_lab/governance_adjudication.py:112-113 hashes bytes returned by _read_regular_file(path, max_bytes=MAX_ARTIFACT_BYTES).src/institution_lab/governance_adjudication.py: _reject_duplicate_keys() at lines 116-122 rejects repeated keys; _reject_non_finite_number() at lines 125-126 rejects non-finite constants; _parse_json_object() at lines 129-140 uses json.loads(..., object_pairs_hook=_reject_duplicate_keys, parse_constant=_reject_non_finite_number) and requires a top-level object._parse_json_object() catches only UnicodeDecodeError and json.JSONDecodeError at src/institution_lab/governance_adjudication.py:136-137; ValueError raised by duplicate-key and non-finite-number hooks propagates directly._validate_manifest_identity() at src/institution_lab/governance_adjudication.py:143-154 requires a dict with keys exactly equal to REQUIRED_INPUT_PINS, requires positive exact-int values for workflow_run_id and artifact_id, and compares every field against FROZEN_INPUT_PINS.REQUIRED_INPUT_PINS at src/institution_lab/governance_adjudication.py:30-40 contains exactly 9 fields: workflow_run_id, artifact_id, artifact_sha256, documents_sha256, documents_file_sha256, coding_package_file_sha256, protocol_sha256, coding_schema_sha256, and adjudication_schema_sha256._verify_input_payloads() at src/institution_lab/governance_adjudication.py:157-217 first validates immutable manifest identity, then hashes already-supplied byte payloads for the artifact, documents, coding package, protocol, coding schema, and adjudication schema and compares them to manifest values before opening/parsing payloads.src/institution_lab/governance_adjudication.py:179-208 uses zipfile.ZipFile(io.BytesIO(artifact)), rejects more than MAX_ARCHIVE_MEMBERS, counts exact info.filename strings to reject duplicates, rejects total declared expanded size above MAX_ARCHIVE_EXPANDED_BYTES, locates exact required names documents.json and v1.2-adjudication-package.json, rejects required members whose declared or read size exceeds MAX_ARCHIVE_MEMBER_BYTES, and byte-compares each required member against the separately captured durable bytes.src/institution_lab/governance_adjudication.py:180-206 performs uniqueness using raw info.filename values and exact required-name lookups; no explicit ZIP member path/name normalization or compressed-size limit was visible in the inspected section.src/institution_lab/governance_adjudication.py:209-211; coding-package and adjudication-schema bytes are strictly parsed for the returned bundle at lines 212-217.verify_input_manifest() at src/institution_lab/governance_adjudication.py:220-239 validates manifest identity before reading inputs, captures each input through _read_regular_file(), and passes captured bytes into _verify_input_payloads().main() at src/institution_lab/governance_adjudication.py:882-934 reads and strictly parses the adjudication and input manifest once, reads artifact/documents/coding package/protocol/coding schema/adjudication schema once into bytes, verifies through _verify_input_payloads(), then validates using the verified bundle.tests/test_governance_adjudication.py covering immutable-pin substitutions, changed file bytes, files not from the pinned artifact, a verification-time mutation/TOCTOU case, input/output aliasing via direct path/symlink/hardlink, duplicate manifest keys, non-object manifests, duplicate ZIP members, excessive ZIP member count, FIFO rejection without blocking, non-finite JSON values, and committed frozen-input-manifest verification._write_pinned_cli_inputs() at tests/test_governance_adjudication.py:40-84 creates synthetic documents.json, coding package, protocol, schemas, and an artifact containing documents.json plus v1.2-adjudication-package.json; it calculates hashes and monkeypatches governance_adjudication.FROZEN_INPUT_PINS.MAX_TEST_ARCHIVE_MEMBERS = 256 is defined at tests/test_governance_adjudication.py:37.cases/review/oss-governance-adjudication-v1.inputs.json:1-11 contains exactly 9 immutable pins: workflow_run_id=33063470968, artifact_id=9642983578, artifact_sha256=1f6be91fcd98e43e99d82d5f274536f6c23616e7e6c711e26324a2cc4b06ef06, documents_sha256=d70f7f795847968339a645b6dbd6d4428af6bd6044de44fa2602d4c4343b0ee9, documents_file_sha256=2a62ab05687982c112a29f6126227c26c3ff8defc89ca64662753aaf85c3c0ce, coding_package_file_sha256=14644759f53071adfe1173d4e25bb01931b8c1591fa8a48295dbd0556a754769, protocol_sha256=06d4b3407677fe7fb23046f70164a366db06638e8a29af3daf7661f00d565933, coding_schema_sha256=bfc735a7d8602d1f236a88c2d23b195f0600a8bae86fb8c8936afe7883a41b8e, and adjudication_schema_sha256=6181f5cb60a0462f83be00be301763daa89f11581e68ee1c46a84e8bf4e5be31._paths_alias() and _validate_output_paths() at src/institution_lab/governance_adjudication.py:828-841 use Path.samefile() where possible and resolved paths otherwise to reject outputs aliasing any input or each other._atomic_write() at src/institution_lab/governance_adjudication.py:844-856 creates a temporary file in the destination directory with tempfile.mkstemp(), writes and flushes, calls os.fsync(), and replaces the destination with os.replace(), cleaning up the temporary file on failure.MERGE/DO-NOT-MERGE verdict had yet been produced in the observed segment.