Files
OpenOPC/opc
LZH-YS1998 b73a5a14c3 fix(engine): keep follow-ups off terminal cards and make startup reconcile idempotent (#10)
Three defects that kept a converged run bouncing forever, found by
replaying the issue #10 timeline against the real engine:

- follow-up routing did not exclude terminal cards: a FAILED
  final-decider was clobbered to PENDING and then blew up the whole
  resume turn with InvalidPhaseTransition: failed -> ready. Filter
  FAILED/CANCELLED at selection and refuse terminal targets in
  _prepare_company_followup_target (DONE stays eligible - the
  approved -> rework reopen has a dedicated legal store op).
- with every routable decider terminal, the suspend checkpoint parked
  pending forever and dead-ended each message on the same error.
  Degrade to a plain runtime resume so the run converges and the
  checkpoint drains, with an explanatory note.
- startup reconcile classified suspend-hold residue on terminal cards
  as an interruption, rebuilding a pending company_runtime_interrupted
  checkpoint on every boot. Scrub the residue instead so restarts are
  idempotent.

scripts/verify_issue10_e2e.py replays the reporter's full timeline
(kill -> restart -> resume cycles, all external agents disabled) against
the real engine/store/dispatcher: startup only suspends, the codex-pinned
card fails closed with zero attempts burned, restarts stay converged with
idle CPU ~0%, and the kill loop terminalizes at the ledger limit. 11/11.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 11:18:49 +08:00
..
2026-07-01 17:56:31 +08:00
2026-07-01 17:56:31 +08:00
2026-07-01 17:56:31 +08:00
2026-07-01 17:56:31 +08:00
2026-07-01 17:56:31 +08:00
2026-07-01 17:56:31 +08:00
2026-07-01 17:56:31 +08:00
2026-07-01 17:56:31 +08:00