Dashboard › institutional-transition-lab › Distillation
7232ad88-3147-49db-a056-40895b8dee0c["lore_tm_v1_MBWX6bWcAuXkTg_84X13bjMHkwG5mioqa5ofjae07kM","lore_tm_v1_drd293pbEcmQYxEkKEesO97Rz3I4OJUf47Su_IT47yE","lore_tm_v1_5T5kIBHTUEYXT8FIftJMHnOKc2vxP9XOr6AdGn2s850","lore_tm_v1_WQlodKaUdqMJG0AjMFEnwPc913DHm1lEgKHoicHVgiE","lore_tm_v1__lJyDmtJT8XtqNzCOVaHJYrvlRP7s-m8jGKzzyFYXYI"]
TypeError: object of type 'NoneType' has no len().Subagent depth limit reached (1). Increase "subagent_depth" to allow nested subagents.Re-read current validator, schema, and tests within the frozen audit scope (in_progress, high); 2. Verify each suspected defect with deterministic adversarial probes (pending, high); 3. Run scoped lint/tests and issue exact line-cited merge verdict (pending, high)./home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py, totaling 753 lines./home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:15-23 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; and response sources luna_a, luna_b, terra_advisory./home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:24-48 requires 9 pins: 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.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.verify_input_manifest() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:74-119 requires the manifest key set to equal REQUIRED_INPUT_PINS, requires positive integer workflow_run_id and artifact_id, compares every pin with FROZEN_INPUT_PINS, recomputes six file hashes, byte-compares ZIP members documents.json and v1.2-adjudication-package.json with durable files, and recomputes canonical documents_sha256._source_index() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:127-140 indexes only dictionary sources having string source_id and string text, then adds synthetic record_metadata containing canonical JSON for record_id, source_url, published_on, publisher, and source_type._evidence_errors() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:143-167 requires exact evidence-reference keys (source_id, quote, plus field for claim references), validates claim fields against CLAIM_FIELDS, and checks only that quote is a truthy string occurring as a substring of the selected source; whitespace-only strings remain truthy and are not stripped.graph_edge_diff() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:182-193 canonicalizes graph edges as JSON keys and builds dictionaries keyed by those strings, so duplicate identical edges collapse before added and removed are derived._validate_reviewer() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:196-221 uses truthiness rather than .strip() for reviewer_id, assistance, and non-human model; it rejects any model containing case-insensitive gemini but provides no allowlist for authorized models._validate_record() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:224-389 uses truthiness rather than stripped non-whitespace checks for rationale, reviewer_ids, evidence_limitations, and unresolved_reason./home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:324-351 require effective_on for effective_institutional_change, require announced_on for announced_institutional_change, forbid effective_on for announced_institutional_change and proposal_only, and restrict edge statuses by class; they do not compare chronological ordering between announced_on and effective_on./home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:353-369 treats a field as grounded whenever any dictionary claim reference names it; grounding membership does not depend on whether _evidence_errors() accepted that reference./home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:371-388 permits basis in {"luna_a", "luna_b", "terra_advisory", None} for all resolved decisions, constrains basis equality only for accept, and derives the expected diff from no baseline when basis is None or from _response_for() when it is a string.validate_adjudication() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:392-536 is typed to accept dictionaries but does not itself invoke validate_against_schema(); it sets canonicalization_gate to closed only when its manual errors list is nonempty or an abstain decision appears in unresolved, otherwise open./home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:411-414: package_summary = coding_package.get("summary", {}) is followed unconditionally by package_summary.get("documents_sha256"), so a non-dictionary summary such as a list raises AttributeError./home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:442-466: unfiltered record_id values flow into _duplicates(), set(...), and dictionary keys, allowing list/dictionary identifiers to raise TypeError: unhashable type.validate_adjudication_fragment() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:539-647 does invoke schema validation first, filters fragment_ids to string IDs, checks uniqueness and frozen-document subset order, and skips non-string IDs during manual per-record validation.validate_against_schema() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:650-656 uses Draft202012Validator with FormatChecker and formats each error as schema <path>: <message>.render_markdown() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:659-705 renders unresolved records from summary["unresolved_record_ids"], printing - None only when that list is empty; graph-edge counts call len(revision.get("added", [])) and len(revision.get("removed", [])), so explicit added: null or removed: null can cause TypeError: object of type 'NoneType' has no len().main() at /home/byk/Code/institutional-transition-lab/src/institution_lab/governance_adjudication.py:708-749 separately runs schema validation and validate_adjudication(), concatenates both error lists, forcibly closes the summary gate if the combined list is nonempty, writes JSON and Markdown outputs, then raises ValueError("adjudication validation failed:\n" + ...) when errors exist.