Files
sencho/e2e
Anso d4ef263d6e feat(gitops): stage-aware retry and resume re-evaluation (#1917)
* feat(gitops): retry resumes at the failed stage

An operator retry previously always re-issued a fetch, even when the
source had already accepted a generation whose dispatch never landed.
retry() now reads the live pointer evidence (accepted generation,
active direct target, applied pointer not yet caught up) and routes
the request to the stage the evidence actually stopped at: a persisted
source-stage failure or nothing pending goes to the fetch arm, an
undelivered accepted generation goes straight through the shared
dispatch boundary, and suspended/in-flight/recovering rows defer to
the projection instead of starting work beside it. Blocked dispatch
refusals come back as blocked outcomes with per-refusal advice; a
refused dispatch reserves nothing.

* feat(gitops): resume triggers immediate source re-evaluation

Clearing a suspension previously left the source idle until its next
poll or retry cursor. The resume route now fires
SourceController.evaluateNow() fire-and-forget after the service
returns: the woken source is re-evaluated immediately through the same
eligibility guards the due-scan applies (manual, suspended, missing,
or in-flight rows are skipped, and a tick that already owns the
application is never queued behind itself). The response still reports
that suspension was cleared, not the outcome of a reconcile that has
not finished yet. evaluateNow absorbs evaluation failures by design
and logs them; the route's catch covers only a store error before any
evaluation could start.

* test(gitops): cover suspension semantics across resume and dispatch

Pins the three coexistence rules the stage-aware retry and resume wake
rely on: a rollout pause survives the whole suspend/resume cycle on
both application and target rows (suspension is a decision about
source work, not a rollout pause); an interrupted apply's terminal
still lands after suspension (suspension gates new work, never the
accounting of work that already committed); and in-flight deploy
transitions, tracked on the target row alone, stay admissible while
the source is suspended.

* test(e2e): suspend and resume a Git source over the API

Drives the full journey against a local git server: a configured
automatic source pulls, suspension stops reconciliation (a pull while
suspended is refused outright), and resume is re-evaluated within
seconds rather than at the next scheduled cursor. Polling is parked at
the slowest floor the settings allow and restored afterwards.
2026-09-16 00:34:17 -04:00
..