Problem
The initial all sync can recover from a partially applied execution, then
fail because its assertions expect the original creation plan. Track this as
the first implementation task under #1943. Keep all in blocking CI.
In PR #2197, attempt 1 applied 42 changes, failed gateway-service resolution
with a connection reset, and skipped one dependent change. Attempt 2 succeeded
and created the remaining API implementation. Assertion assert-002 then
expected all-key-auth to appear as CREATE, although it already existed.
The terminal failure was an assertion mismatch, not an execution timeout.
Failed shard
Captured evidence: all/scenario.yaml, 002-sync-all/000-sync-all;
execution attempts 28.629s and 7.297s; terminal phase assertion;
execution retry stop succeeded. The retry plan contained only the API
implementation. Assertions/backoff added approximately 31 seconds.
Proposed change
- After reset, generate a read-only sync-mode plan and assert the expected
CREATE actions, resource references, dependencies, and other initial-plan
contracts against that immutable plan, before any mutation.
- Execute sync with bounded recovery. Assert successful execution, then
verify expected remote resources and fields through readbacks, followed
by the existing no-op convergence and deletion lifecycle checks.
- Audit the assertions attached to this retried sync. Move assertions that
depend on the original remote state to the pre-execution plan check.
Preserve their coverage; do not replace them with fixed/minimum retry-plan
counts or a broad CREATE-or-UPDATE allowance. Already-created resources
can be absent from the retry plan entirely.
- Avoid retry delays when rechecking the same immutable output. Preserve
polling for assertion sources that actually perform fresh remote reads.
- Document this authoring pattern for stateful scenarios.
The initial plan is a coverage artifact, not a saved CREATE plan to blindly
reapply after partial success. Normal execution retries should replan from
current state. Full scenario reset/restart is reserved for tests whose actual
contract requires a clean initial state; do not make it the default recovery.
Acceptance criteria
- A deterministic fault after some creates reproduces the old failure and
passes after recovery with the new assertions.
- Missing desired resources, wrong fields, incorrect initial plan actions,
failed convergence, and failed deletion still fail the scenario.
- Successful execution alone cannot satisfy the scenario's resource checks.
- Immutable-output mismatches fail without repeated backoff; fresh readback
assertions retain bounded eventual-consistency polling.
- All attempt artifacts remain available and identify the final assertion
source. Extend existing test seams rather than adding production fault
injection solely for this scenario.
all remains blocking; no automatic assertion-failure shard reruns.
Related: #1695 covers surfacing assertion mismatches in Actions summaries.
Problem
The initial
allsync can recover from a partially applied execution, thenfail because its assertions expect the original creation plan. Track this as
the first implementation task under #1943. Keep
allin blocking CI.In PR #2197, attempt 1 applied 42 changes, failed gateway-service resolution
with a connection reset, and skipped one dependent change. Attempt 2 succeeded
and created the remaining API implementation. Assertion
assert-002thenexpected
all-key-authto appear as CREATE, although it already existed.The terminal failure was an assertion mismatch, not an execution timeout.
Failed shard
Captured evidence:
all/scenario.yaml,002-sync-all/000-sync-all;execution attempts 28.629s and 7.297s; terminal phase
assertion;execution retry stop
succeeded. The retry plan contained only the APIimplementation. Assertions/backoff added approximately 31 seconds.
Proposed change
CREATE actions, resource references, dependencies, and other initial-plan
contracts against that immutable plan, before any mutation.
verify expected remote resources and fields through readbacks, followed
by the existing no-op convergence and deletion lifecycle checks.
depend on the original remote state to the pre-execution plan check.
Preserve their coverage; do not replace them with fixed/minimum retry-plan
counts or a broad CREATE-or-UPDATE allowance. Already-created resources
can be absent from the retry plan entirely.
polling for assertion sources that actually perform fresh remote reads.
The initial plan is a coverage artifact, not a saved CREATE plan to blindly
reapply after partial success. Normal execution retries should replan from
current state. Full scenario reset/restart is reserved for tests whose actual
contract requires a clean initial state; do not make it the default recovery.
Acceptance criteria
passes after recovery with the new assertions.
failed convergence, and failed deletion still fail the scenario.
assertions retain bounded eventual-consistency polling.
source. Extend existing test seams rather than adding production fault
injection solely for this scenario.
allremains blocking; no automatic assertion-failure shard reruns.Related: #1695 covers surfacing assertion mismatches in Actions summaries.