Skip to content

A replay can supersede a live proposal #58

Closed

Description

@shipmill-romamo

What happens

Found in the review of #55 (#36) once it was rebased onto #53 (#26). Both are on main now.

  1. A replay supersedes a live proposal. agent investigate --replay writes into the default decisions folder unless --decisions says otherwise. When the model proposes the same operation, targets and inputs as an open live proposal, D-1 marks the live one superseded. The new replayed record can't be approved (D-2). The operator is left with no approvable proposal and has to propose it live again
  2. A replayed read is recorded ran with the verdict "a read operation runs when it is proposed", but it never ran on a host. why does add the replay sentence

Neither D-1 nor D-2 (docs/decisions.md) says whether replayed and live records interact.

Activity

  1. shipmill-romamo commented on Oct 9, 2026

    @shipmill-romamo
    ContributorAuthor

    @romamo Decision needed: should a proposal made during --replay and a live one supersede each other?

    1. Never across the two (recommended): supersede only matches records with the same replay value, so a replay never closes a live proposal and a live run never closes a replayed one. A small change to Decision.same_call(); recorded as a new D-n
    2. A replay never supersedes a live proposal, but a live proposal does supersede an open replayed one (the live run is the newer real evidence)
    3. Leave it: a replay may close a live proposal, and the operator proposes again

    For point 2 (a replayed read recorded ran), the recommendation is to keep ran and make the verdict say the output was played back, with no schema change.

    Reply here with a number or your own answer; shipmill takes this up on the tick after your reply.

  2. romamo commented on Oct 9, 2026

    @romamo
    Collaborator

    1 — never across the two: supersede only matches records with the same replay value; record it as a new D-n. For the replayed read: keep ran and make the verdict say the output was played back, no schema change

    (decision by @romamo, given in chat; posted by Claude on his behalf)

  3. shipmill-romamo commented on Oct 9, 2026

    @shipmill-romamo
    ContributorAuthor

    Triage: implement, with the answer above (option 1), recorded as D-7 in #59.

    Design:

    • Decision.same_call() (sdk/src/cloudfall/decision.py), or the supersede lookup that uses it, also requires the same replay value, so a replay never supersedes a live proposal and a live run never supersedes a replayed one
    • A replayed read keeps status ran; its verdict says the check output was played back from the recording instead of "a read operation runs when it is proposed". No schema change

    A PR follows.

  4. removed
    needs-decisionA shipmill session asked a question here; waits for a reply
    on Oct 9, 2026
  5. shipmill-romamo commented on Oct 9, 2026

    @shipmill-romamo
    ContributorAuthor

    PR: #60. The supersede loop in propose() also requires an equal replay value. same_call() itself is unchanged; it has no other caller. Live after live supersedes as before, replay and live never supersede each other, and two replays of the same recording do. Replays of different recordings don't. A replayed read keeps ran, and its verdict says the output was played back from the recording. cloudfall why's last line for a replayed read changed to match: it said "It ran when it was proposed", which contradicted the replay sentence.

  6. added a commit that references this issue on Oct 9, 2026
  7. shipmill-romamo commented on Oct 9, 2026

    @shipmill-romamo
    ContributorAuthor

    Released in v0.6.0rc10.

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