Skip to content

fix(ci): orphan sweep spares other homes, dep gate blocks on failed deps (D-1117, D-1119) - #476

Merged
acamarata merged 1 commit into
mainfrom
dw1-plugins-1
Oct 25, 2026
Merged

acamarata merged 1 commit into
mainfrom
dw1-plugins-1

Conversation

@acamarata

Copy link
Copy Markdown
Contributor

D-1117 (fixed)

Recover treated a coordinator id missing from the store as stale, and the container sweep lists every labelled container on the daemon. A run under another NSELF_CI_HOME could rm -f that home's live container.

  • exec.KnownChecker (optional extension of StaleChecker): sweepRuntime skips containers whose coordinator the checker does not know.
  • run.staleChecker.Known answers from the store. Stale is unchanged, so own-home process markers of a lost coordinator are still swept.
  • Test: TestRecoverSweepSkipsContainersOfUnknownCoordinators (fake docker). Fails on main (rm -f foreign1), passes now.

D-1119 (fixed)

depOK accepted a failed allow_failure dependency (contrary to plan/dag.go) and any skipped prerequisite not marked dep.failed/fail_fast, including ones that never ran.

  • A failed dependency now always blocks its waiters.
  • A skipped dependency blocks when its reason is dep.failed, fail_fast.cancelled, unplaceable.*, admission.* or advisory.*. Scoped-out skips (selection.*, when.*, pipeline.*) still let waiters run. This reason split is my reading of the review text ("unplaceable skipped prerequisites"); say if you want it narrower or wider.
  • Tests: TestDepOK (table) and TestFailedAllowFailureJobBlocksItsWaiters (end to end). Both fail on main.

D-0187 (not changed, blocked)

Accepted residual: the legacy engine is removed at the v1.6 removal release together with D-0119 (scheduled_in: v1.6.0 removal release). Deleting or reshaping internal/legacy is release scope, not a local fix.

Checks

  • gofmt -l, go vet -mod=vendor ./internal/run ./internal/exec: clean
  • go test -mod=vendor ./... -count=1 in free/ci: two failures, identical on clean origin/main (internal/legacy TestSecretsEnvLiveKeyGateTrackedValueOnly, cmd/agent TestServeStdioExitsNonZeroWithE663OnAProdStackMarker); all else ok

… or unplaced deps block waiters (D-1117, D-1119)

The container sweep lists every labelled container on the daemon and treated an
unknown coordinator as stale, so a run with another NSELF_CI_HOME could remove
that home's live container. Only coordinators the store knows are now swept.

depOK let jobs run after a failed allow_failure dependency (contrary to
plan/dag.go) and after a prerequisite that was never placed, admitted or run.
Both now block the waiter.
@acamarata
acamarata merged commit 208d270 into main Oct 25, 2026
30 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant