You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found in the review of #55 (#36) once it was rebased onto #53 (#26). Both are on main now.
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
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.
@romamo Decision needed: should a proposal made during --replay and a live one supersede each other?
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
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)
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.
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)
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
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.
Activity
shipmill-romamo commentedon Oct 9, 2026
@romamo Decision needed: should a proposal made during
--replayand a live one supersede each other?replayvalue, so a replay never closes a live proposal and a live run never closes a replayed one. A small change toDecision.same_call(); recorded as a new D-nFor point 2 (a replayed read recorded
ran), the recommendation is to keepranand 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.
romamo commentedon Oct 9, 2026
1 — never across the two: supersede only matches records with the same
replayvalue; record it as a new D-n. For the replayed read: keepranand make the verdict say the output was played back, no schema change(decision by @romamo, given in chat; posted by Claude on his behalf)
shipmill-romamo commentedon Oct 9, 2026
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 samereplayvalue, so a replay never supersedes a live proposal and a live run never supersedes a replayed oneran; its verdict says the check output was played back from the recording instead of "a read operation runs when it is proposed". No schema changeA PR follows.
shipmill-romamo commentedon Oct 9, 2026
PR: #60. The supersede loop in
propose()also requires an equalreplayvalue.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 keepsran, 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.Merge pull request #59 from cloudfall-dev/docs/decisions-56-57-58
shipmill-romamo commentedon Oct 9, 2026
Released in v0.6.0rc10.