Skip to content

Delete the no-change retry path (retryOnNoChange, pendingInteractionOutcome) #3073

Description

@thymikee

Part of #3069.

Purpose

Nothing in production sets retryOnNoChange: true (grep of src and packages, non-test). The flag is still read in src/daemon/interaction-outcome-policy.ts, and it keeps pendingInteractionOutcome alive in src/daemon/session-state.ts and src/daemon/deferred-interaction-outcome.ts. The path re-sends an interaction when the tree looks unchanged, which is the same class of blind resend that error.details.dispatched exists to prevent: a tap that landed on a screen that had not re-rendered yet runs twice. The e2e consumer review (tester-army) traced it as a double-tap source.

Required behavior

  • Remove retryOnNoChange from packages/contracts/src/command-flags.ts and every surface that carries it. Retiring a flag touches the CLI grammar, structured input, MCP schema, help, the wire ledger, and the docs; each must refuse or drop the key, not silently accept it.
  • Remove pendingInteractionOutcome from SessionState, its owner entry in the state-field table, and bump the state-file version.
  • Delete deferred-interaction-outcome.ts and the branch of interaction-outcome-policy.ts that reads the flag. Freshness retires only on a trustworthy capture.

Completion conditions

  • grep -rn "retryOnNoChange\|pendingInteractionOutcome" src packages returns nothing outside git log.
  • pnpm check:affected --run passes; the wire-compat ledger records the removal as a breaking change to a flag no released client sets.
  • No interaction is re-sent by the daemon without the producer proving dispatched: "no".

Dependencies

After #3071 merges (it names this path as the remaining blind resend on the daemon side).

Activity

  1. thymikee commented on Oct 1, 2026

    @thymikee
    MemberAuthor

    [claude-fable-5-1] responding on behalf of @thymikee

    Done: #3083 merged into feat/dispatch-disclosure, which landed on main as 1f0981b (#3071). Closing against that commit.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions