Skip to content

JIT admission: openIMIS claim program refused under clinical-write (risk override, idempotency key, low confidence) #1329

Open

Description

@abrichr

What happened

The launch demo's openIMIS claim-entry program, compiled through the JIT wrapper from one Claude run, cannot be admitted. The standard run gate refuses its attended canary under clinical-write, so nothing runs. The demo and the scoreboard therefore run it on the demo profile, labelled "not admitted".

Evidence: demo/cua_to_program/results/launch-4/admission.json (the gate's full output) and packages/flow/benchmark/scoreboard/raw/openimis/first_run/launch-4/items.csv (on #1303). Every other gate check passes: identity coverage 8/8, effect coverage 1/1, approval fallback, sealed manifest.

The full list of certification violations, from evaluate_policy(workflow, clinical-write, require_current_risk_certification=True) on that bundle:

Step Action Rule Reason
step_002 press Tab (after typing the insurance number, to trigger the lookup) require_reviewed_action_risk special key may navigate, edit, or invoke a shortcut; no bound operator classification
step_012 click on an unlabelled visual target (service picker) require_reviewed_action_risk unlabelled pointer control; no bound operator classification
step_012 same require_human_approval_below_confidence compile-time confidence 0.70 < 0.80
step_015 click the icon-only Save require_idempotency_key_for no declared system-of-record effect carries an idempotency key
step_015 same require_human_approval_below_confidence compile-time confidence 0.70 < 0.80

Gaps

  1. The JIT admission path has no way to certify a risk override. review and canary don't carry a qualification step, so these forms can't be admitted through compile_agent, however good the run is. Admission needs a reviewed risk classification for each step, bound to the bundle and policy, recorded as the gate expects.
  2. No idempotency key on a mined effect. The mined record check already selects the claim by the confirmed claim_no parameter. Effect mining could propose that bound field as the idempotency key, for the reviewer to confirm. Check first whether openIMIS enforces unique claim numbers.
  3. Confidence 0.70 on icon-only and unlabelled clicks. Related to draft PRs fix(flow): run gate counts a submit binding as an icon-only Save's identity #1274 (the gate's submit-binding identity for an icon-only Save) and fix(flow): guarded focusing click on new-record form fields #1275 (the focus-click lease). Those need a safety review. This issue only records that the gate still refuses after them.

Reproduce

ANTHROPIC_API_KEY=... demo/cua_to_program/run.sh

Or, on the stack it starts, run pipeline.py admit; see demo/cua_to_program/README.md.

Activity

  1. abrichr commented on Oct 19, 2026

    @abrichr
    MemberAuthor

    Which refusals are real

    I rebuilt the recorded launch-4 run offline on #1303 + #1336 + #1339, with no model calls, and evaluated it under clinical-write with current risk certification.

    Step Rule Verdict
    step_015 require_idempotency_key_for Missing evidence, fixed in #1339. The mined check already selected the claim by the confirmed claim_no with expected_count=1, so it already refuted a second claim with the same number. It just didn't declare the key. A person now names it: confirm_params(idempotency_key="claim_no") or jit review --idempotency-key claim_no. After that, the violation is gone.
    step_002 (Tab after Insurance No.) require_reviewed_action_risk Real. A special key can edit or invoke a shortcut, and only a person can classify it.
    step_012 (click) require_reviewed_action_risk Real. It's an unlabelled pointer control. In this recording, the DOM label at the click is "Explanation" (the text box), not the service picker.
    step_012, step_015 require_human_approval_below_confidence (0.70) Real. Confidence is template 0.5 + hashed identity 0.2. The capture recorded no structural locator for either click, and OCR found no label in either crop. The run's read-back doesn't change that. It confirms the record after the save. It doesn't help find the control before the click. A misplaced focus click on step_012 would put the explanation in another field, and step_015 would save it before the read-back refutes it.

    I couldn't check whether openIMIS enforces unique claim codes: Docker is down here, and the load is about 220. The key detects a duplicate (more than one record with the run's code refutes the run); it doesn't prevent one. The person naming the key asserts that the app keeps claim codes unique.

    What a person would approve

    There's no admission path for these yet. review records "reviewed every step" and nothing per step, and require_human_approval_below_confidence has no sign-off record at all: only higher confidence clears it. Proposal: the JIT review takes a per-step classification, signed and bound to the bundle digest and policy, which the gate accepts as the operator override it asks for:

    • step_002 Tab: "moves focus from Insurance No. and triggers the insuree lookup; reads only, writes nothing; reversible."
    • step_012 click: "focuses the Explanation text box; writes nothing by itself; reversible." This also covers the low-confidence sign-off after the reviewer looks at templates/step_012.png.
    • step_015 click: "the icon-only Save of the claim form", signed off after looking at templates/step_015.png and the submit binding (icon hash, div>div>span>button, bottom right). fix(flow): run gate counts a submit binding as an icon-only Save's identity #1274's submit-binding evidence is the candidate replacement for this sign-off once it passes its safety review.

    Re-run result

    Not admitted. Certification still refuses on the four violations above, so the canary's run gate refuses before anything runs. Confirm (with the key) and review succeed. No placeholder effects.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions