Skip to content

Late-write recheck: follow-ups from the #1669 review #1670

Open

Description

@abrichr

Follow-ups from the round 1 review of #1669 (late-write recheck). None of these hands a refuted write back as verified, but each leaves a person or an agent with less to go on.

  1. Owed rechecks are lost on a restart, with no trace. openadapt verify serve holds provisional results in memory (VerifyBridge._rechecks). After a restart, openadapt verify ledger list shows nothing pending, and the attempt's ledger state is a plain CONFIRMED. The values were pruned from attempt.json, so a person needs the agent's original values to run the Python recheck from recheck.json. Record "recheck owed until T" in the ledger, or in a file under the state directory that ledger list reads.
  2. The same error for a spent recheck and a lost one. verify_recheck says "no provisional result for that write_id" both when the recheck already ran and when the server restarted. Tell them apart.
  3. A stale provisional on earlier_result. AlreadyWritten.result, and the MCP earlier_result, keep provisional: true and a past recheck_due_at for good, also after a confirming recheck. A retrier gets no next and no way to recheck.
  4. The reason text when the recheck call itself is wrong. A recheck called with the wrong params or actor (a caller bug) gives UNCERTAIN and re-resolves a correct write for review. That is fail-closed, but the reason should say that the recheck call was wrong, not the write.
  5. UNCERTAIN wording in VERIFY_WRITES.md. Its recheck table says UNCERTAIN means "couldn't be read again, or was still changing". It is also given for a state not issued here, mismatched params or actor, and a change that a later refuted write may own.

Activity

  1. abrichr commented on Oct 30, 2026

    @abrichr
    MemberAuthor

    From the round-2 review of #1669 (#1669 (comment)). Both fail closed, but each stops or blames the wrong write:

    1. A recheck from a saved state trusts an unchecked correlation_id (verifier.py:2049, :2075). A state that fails the issued-here or params check can still hold another write's attempt. Fix: re-resolve only from a state that passed those checks; otherwise add the hold-by-hand reason.
    2. A later write whose own check gave UNCERTAIN is still passed as excused_by, so the first write is REFUTED for the later write's rows. It should give UNCERTAIN, or refuse.
      Nits: pipelined writes (the bridge could refuse with a reason); a second UNCERTAIN recheck overwrites a ledger REFUTED; a VerifierError at verify_tools.py:377 spends the recheck; the tool description should say writes under another agent_id aren't excused.
  2. added
    agent-readyReady for an automated agent to pick up
    claimedAn agent is working on this
    on Nov 4, 2026
  3. abrichr commented on Nov 4, 2026

    @abrichr
    MemberAuthor

    Claimed by Grok

  4. added a commit that references this issue on Nov 4, 2026
    2318b89
  5. abrichr commented on Nov 4, 2026

    @abrichr
    MemberAuthor

    Reopened: #1834 landed the flow side. The launcher's verify command change is in draft #1840, which waits for the next openadapt-flow release in the lock.

  6. reopened this on Nov 4, 2026
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

    agent-readyReady for an automated agent to pick upclaimedAn agent is working on this

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions