Dashboard › institutional-transition-lab › Distillation
Distillation
ID: 13824279-5600-411a-b2db-562a4b0424e2
Generation: 0
Tokens: 2657
R_compression: 22.066
C_norm: 0.002
Archived: Yes
Created: 2026-09-09 01:19:13
Source IDs:
["lore_tm_v1_dEs9YTod_dKtUIgOKqKievD3ppZD6KWsejDs3dZp7I4","lore_tm_v1_USC_IDPdVWcQAcr20OrHYoP8RNLENKuKDVIhn3iYvoU","lore_tm_v1_8n0EsOP5LGwNgju3Ga5QGxffDcFmQMHYBf9pe7wjg-Q","lore_tm_v1_Cawjb1Ec10Kxg9lbuwuGqJ843JOgUAnk3wNlslD1pZM","lore_tm_v1_JbKYIlKZm9-bL92eIH-MkXbysigCneEgtCwui9qdGJ0"]
Observations
- 🟡 (01:14) src/institution_lab/governance_adjudication.py imports validate_response from institution_lab.governance_coding and defines DECISIONS={"accept","revise","reject","abstain"}, INSTITUTIONAL_CLASSES={"effective_institutional_change","announced_institutional_change","proposal_only"}, REVIEWER_TYPES={"human","llm","human_llm_assisted"}, REVIEWER_ROLES={"source_adjudicator","evidence_auditor","synthesizer"}, RESPONSE_SOURCES={"luna_a","luna_b","terra_advisory"}, and CLAIM_FIELDS={"record_class","event_kind","title","announced_on","effective_on","affected_scope","body_patch_relation"}.
- 🟡 (01:14) src/institution_lab/governance_adjudication.py freezes 9 required input 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; adjudication_schema_sha256=6181f5cb60a0462f83be00be301763daa89f11581e68ee1c46a84e8bf4e5be31.
- 🟡 (01:14) Input limits in src/institution_lab/governance_adjudication.py are MAX_INPUT_BYTES=1610241024, MAX_ARTIFACT_BYTES=3210241024, MAX_ARCHIVE_MEMBERS=128, MAX_ARCHIVE_MEMBER_BYTES=1610241024, and MAX_ARCHIVE_EXPANDED_BYTES=6410241024.
- 🟡 (01:14) Input hardening in src/institution_lab/governance_adjudication.py: canonical_sha256() serializes with sort_keys=True, separators=(",",":"), and allow_nan=False; _read_regular_file() uses O_RDONLY|O_NONBLOCK|O_NOFOLLOW where available, rejects non-regular and oversized files, and reads at most max_bytes+1; _parse_json_object() rejects duplicate JSON keys, non-finite constants, invalid UTF-8/JSON, and non-object roots.
- 🟡 (01:14) _verify_input_payloads() validates the manifest’s exact key set and frozen identity, verifies byte hashes for all payloads, and constrains the artifact ZIP to at most 128 uniquely named members and 64 MiB expanded content. It requires documents.json and v1.2-adjudication-package.json, each at most 16 MiB, to byte-match the durable files; it then verifies canonical documents_sha256 and returns VerifiedInputBundle(pins, documents, coding_package, adjudication_schema).
- 🟡 (01:14) _source_index() maps each valid document source_id to its text and adds synthetic source_id "record_metadata", whose grounded text is compact sorted JSON containing record_id, source_url, published_on, publisher, and source_type.
- 🟡 (01:14) _evidence_errors() requires ordinary evidence refs to have exactly source_id and quote, and claim refs to additionally have exactly field. Claim field must be one of CLAIM_FIELDS; source_id and quote must be non-empty strings; source_id must occur in the frozen source index; and quote must occur verbatim in the selected source text.
- 🟡 (01:14) graph_edge_diff() compares baseline and final power_changes by canonical compact sorted JSON of each whole edge, returning deterministically key-sorted added and removed edge arrays.
- 🟡 (01:14) _validate_reviewer() requires exactly reviewer_id, reviewer_type, model, role, and assistance. reviewer_id and assistance must be non-empty; reviewer_type and role must use their allowed sets; human reviewers require model=null; non-human reviewers require a non-empty model name; any model string containing “gemini” case-insensitively is rejected because Gemini is restricted to event triage.
- 🟡 (01:14) _validate_record() requires source_url to match the frozen document; decision to be valid; reviewer_ids to be a non-empty, unique array of known non-empty IDs; rationale to be non-empty; and source_audit to confirm inspected_before_codings=true with source_ids in the frozen document’s exact order and evidence_bounds equal to the frozen document.
- 🟡 (01:14) A record has bounded evidence when source_text_truncated=true, files_listing_complete=false, patch_selection_truncated=true, or integer patch_unavailable_count>0; bounded evidence requires a non-empty evidence_limitations string.
- 🟡 (01:14) Decision semantics in _validate_record(): accept requires accepted_from∈{"luna_a","luna_b","terra_advisory"}, that frozen source to have schema_valid=true and an object response, and final_coding to equal that response; only accept may set accepted_from. accept/revise/reject require final_coding validated by validate_response(); abstain requires final_coding=null and a non-empty unresolved_reason; resolved decisions require unresolved_reason=null and cannot use final record_class="abstain"; reject must resolve to a non-institutional class.
- 🟡 (01:14) Final-coding temporal/status rules in _validate_record(): effective_institutional_change requires effective_on and permits only power-change status effective; announced_institutional_change requires announced_on, forbids effective_on, and permits only announced; proposal_only forbids effective_on and permits proposed, rejected, or unclear.
- 🟡 (01:14) For institutional final classes, _validate_record() requires grounded claim_evidence_refs for every non-null field among record_class, event_kind, title, announced_on, effective_on, affected_scope, and body_patch_relation.
- 🟡 (01:14) graph_edge_revision rules: abstain requires null revision; each resolved decision requires an object revision; basis must be luna_a, luna_b, terra_advisory, or null; accept requires basis=accepted_from; and added/removed must exactly equal graph_edge_diff() derived from the selected valid frozen response and final_coding.
- 🟡 (01:14) validate_adjudication() requires transition_dates_excluded=true and outcome_data_used=false, checks every adjudication input pin against verified_pins, and requires the coding package summary’s documents_sha256 to equal canonical_sha256(documents).
- 🟡 (01:14) Full-adjudication record integrity requires non-empty reviewers, unique reviewer IDs, and at least one listed reviewer with role source_adjudicator per record. Document, coding-package, and adjudication rows must be arrays; coding and adjudication record IDs must each match frozen document IDs exactly once and in order.
- 🟡 (01:14) validate_adjudication() summarizes exact record_count, sorted decision_counts, sorted class_counts, unresolved_record_ids, per-record decision/final_class/reviewer_ids/evidence_limitations, graph_edge_revisions, and reviewer_provenance. canonicalization_gate is "closed" when validation errors or unresolved abstentions exist, otherwise "open".
- 🟡 (01:14) validate_adjudication_fragment() builds a strict fragment schema requiring schema_version=1, design_status="performance_blinded_llm_assisted_source_adjudication", at least 1 reviewer, and at least 1 record. It applies reviewer and record semantic validation, requires a source_adjudicator on each record, requires unique fragment IDs forming a known subset in frozen-document order, and verifies coding IDs and documents_sha256 against frozen inputs.
- 🟡 (01:14) validate_against_schema() uses jsonschema.Draft202012Validator with FormatChecker and returns path-qualified errors sorted by JSON path.
- 🟡 (01:14) render_markdown() emits “# OSS governance adjudication v1” with sections in order: canonicalization gate, Decisions, Final classes, Record decisions (including evidence limitations), Unresolved records, Frozen inputs, Reviewer provenance, and Graph-edge revisions with added/removed counts.
- 🟡 (01:14) Output safety in src/institution_lab/governance_adjudication.py: _validate_output_paths() rejects any output aliasing an input or each other using samefile()/resolved-path comparison; _atomic_write() creates the parent directory, writes and fsyncs a same-directory temporary file, then os.replace()s it, deleting the temporary file after failures.
- 🟡 (01:14) On exceptions, _write_failure_reports() atomically writes JSON with schema_version=1, canonicalization_gate="closed", and the exception in validation_errors, plus a closed-gate Markdown report, then main() re-raises. Ordinary validation writes both reports before raising ValueError("adjudication validation failed:\n...") when errors exist.
- 🟡 (01:14) governance_adjudication.py CLI requires --adjudication, --input-manifest, --documents, --coding-package, --artifact, --protocol, --coding-schema, --adjudication-schema, --summary-json, and --summary-markdown.
- 🟡 (01:15) schema/governance-adjudication-v1.schema.json defines sha256 as a lowercase 64-hex-character string matching ^[0-9a-f]{64}$.
- 🟡 (01:15) The adjudication schema’s power_change right_kind enum, in order, is appoint, remove, elect, vote, delegate, override, approve, merge, write, release, veto, own, license, steward, fund, set_budget, set_strategy, set_policy, set_membership, set_terms, inform; direction is added/removed/modified; change_status is effective/announced/proposed/rejected/unclear; evidence_refs requires at least 1 evidence_ref.
- 🟡 (01:15) The adjudication schema’s coding object has additionalProperties=false and exactly required fields record_class, event_kind, title, announced_on, effective_on, affected_scope, body_patch_relation, power_changes, confidence, and ambiguity. record_class options are effective_institutional_change, announced_institutional_change, proposal_only, control_event, no_event, abstain; event_kind options are leadership, board_or_steering, control_rights, reorganization, foundation_transfer, license, fork, reunification, strategy, product, external, null; body_patch_relation options are consistent, patch_supersedes_body, body_only, patch_only, conflict, not_applicable, unclear; confidence is numeric from 0 to 1.
- 🟡 (01:15) The adjudication schema defines edge_revision as an exact object with basis, added, and removed; basis is luna_a, luna_b, terra_advisory, or null, and added/removed are arrays of power_change objects.
- 🟡 (01:15) The schema’s source_audit requires inspected_before_codings=true, at least 1 unique non-empty source_id, and evidence_bounds containing exactly source_text_truncated:boolean, files_listing_complete:boolean|null, patch_selection_truncated:boolean, and patch_unavailable_count:integer≥0.
- 🟡 (01:15) The schema’s record object disallows additional properties and requires record_id, source_url, decision, accepted_from, reviewer_ids, source_audit, rationale, evidence_limitations, unresolved_reason, claim_evidence_refs, final_coding, and graph_edge_revision. source_url must be a URI matching ^https://github\.com/[^\s]+$; reviewer_ids requires at least 1 unique non-empty string; final_coding and graph_edge_revision may each be their defined object or null.