Skip to content

deps-auto: battery only where it tests something; a cancelled run stays cancelled - #468

Merged
AlexZ005 merged 8 commits into
depsfrom
feat/deps-auto
Oct 25, 2026
Merged

AlexZ005 merged 8 commits into
depsfrom
feat/deps-auto

Conversation

@AlexZ005

Copy link
Copy Markdown
Collaborator

Follow-up from Dependabot's first round into deps (2026-10-25 05:45Z, after 1.43.0): it opened 9 PRs at once, and each ran the whole battery. That came to about 380 jobs against the account's cap of 20 concurrent jobs, ahead of the release job and every other CI run. All 9 runs were cancelled by hand.

2k: battery only where it tests something

  • scripts/ci/deps-policy.cjs: new battery output, true only when the PR changes the root app's npm packages and is not a major.
  • deps.yml: the perf budget and plan/e2e run only when battery is true. Actions, tools/agent and major PRs get ci.yml alone.
  • A major's deps-gate now fails on purpose ("not tested here; its planned migration runs the battery"), so nobody reads a green check on an untested major.
  • The optional set (report only, about 750 runner-min) runs only on workflow_dispatch.
  • RELEASING.md and tests/unit/depsCi.test.js are updated (9/9).

2l: a cancelled run stays cancelled

  • The job-level always() conditions (confirm, e2e-optional, optional-report, deps-gate) still ran after a cancel, so the cancelled runs kept starting their 18 optional shards. They are now ${{ !cancelled() && … }}.

Checks: check-ratchet 299/39 = baseline; actionlint 1.7.7 clean. This PR is a manual one (battery=true), so it runs the required battery once. The optional set is skipped.

🤖 Generated with Claude Code

AlexZ005 and others added 8 commits October 24, 2026 18:06
… a systemd unit

Unquoted, Environment=PC_BATTERY_WRAP=e2e-slot --exclusive ... is split at the spaces (found
installing the timer on the desktop).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…5-10 (16 shards; replayed slowest shard 49 -> 35-38 min)

- refresh --results is repeatable and takes the median per suite: a suite's time moves by half
  between runs on a shared runner, and the 15-shard split fitted to run 9 alone put run 10's
  shards anywhere from 21 to 50 min
- battery.json seconds from runs 5-10 (required + optional passes); replaying runs 8 / 9 / 10 on
  the new split: max shard 38 / 37 / 35 min (was 49 / 38 / 49)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…et by hand

- deps-policy.cjs: new `battery` output = the PR moves the root app's npm packages and is not a major
- deps.yml: perf budget + plan/e2e only when battery=true (Actions, tools/agent and majors get ci.yml alone);
  a major's deps-gate fails on purpose ("not tested here"); the optional set runs on workflow_dispatch only
- why: Dependabot's first round after 1.43.0 opened 9 PRs at once = ~380 jobs on the account's 20-job cap,
  queueing the v1.43.0 release job and every lane's CI for hours (runs cancelled, re-run after this)
- RELEASING.md + depsCi test (9/9); check-ratchet 299/39 = baseline; actionlint clean

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- confirm / e2e-optional / optional-report / deps-gate used always(), which also runs after a cancel: cancelling
  Dependabot's 9 first-round runs still started their optional sets (18 shards each); now !cancelled()

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ub runner; medians from runs 5-12

- run 12 (#468, released 1.43.2 app code, CI-only diff) was the scatter suites' first run on the runner:
  scatter-select + scatter-convert red twice (shard + fresh confirm runner: "B has the terrain" never true),
  scatter-sources at the 600 s suite timeout twice (all its checks green until then) -> optional with reasons
- scatter-edit was flaky (green on the confirm runner) and stays required
- refresh --results over runs 5-12 (one durations file per run): 16 required shards ~35 min each

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- run 13 (#468): scatter-edit red on its shard and both confirm tries, the same 'B has the terrain' as
  scatter-select/convert in run 12 (where it was green on confirm); scatter-surface flaky, stays required

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@AlexZ005
AlexZ005 merged commit 4897d2b into deps Oct 25, 2026
32 of 36 checks passed
@AlexZ005
AlexZ005 deleted the feat/deps-auto branch October 25, 2026 12:14
AlexZ005 added a commit that referenced this pull request Oct 25, 2026
* [docs] deps-auto 3g: pc-battery — PC_BATTERY_WRAP has to be quoted in a systemd unit

Unquoted, Environment=PC_BATTERY_WRAP=e2e-slot --exclusive ... is split at the spaces (found
installing the timer on the desktop).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2j: shards balance on the median runner time of runs 5-10 (16 shards; replayed slowest shard 49 -> 35-38 min)

- refresh --results is repeatable and takes the median per suite: a suite's time moves by half
  between runs on a shared runner, and the 15-shard split fitted to run 9 alone put run 10's
  shards anywhere from 21 to 50 min
- battery.json seconds from runs 5-10 (required + optional passes); replaying runs 8 / 9 / 10 on
  the new split: max shard 38 / 37 / 35 min (was 49 / 38 / 49)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2k: battery only where it tests something; optional set by hand

- deps-policy.cjs: new `battery` output = the PR moves the root app's npm packages and is not a major
- deps.yml: perf budget + plan/e2e only when battery=true (Actions, tools/agent and majors get ci.yml alone);
  a major's deps-gate fails on purpose ("not tested here"); the optional set runs on workflow_dispatch only
- why: Dependabot's first round after 1.43.0 opened 9 PRs at once = ~380 jobs on the account's 20-job cap,
  queueing the v1.43.0 release job and every lane's CI for hours (runs cancelled, re-run after this)
- RELEASING.md + depsCi test (9/9); check-ratchet 299/39 = baseline; actionlint clean

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2l: a cancelled deps run stays cancelled

- confirm / e2e-optional / optional-report / deps-gate used always(), which also runs after a cancel: cancelling
  Dependabot's 9 first-round runs still started their optional sets (18 shards each); now !cancelled()

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2m: three of 51's scatter suites optional on the GitHub runner; medians from runs 5-12

- run 12 (#468, released 1.43.2 app code, CI-only diff) was the scatter suites' first run on the runner:
  scatter-select + scatter-convert red twice (shard + fresh confirm runner: "B has the terrain" never true),
  scatter-sources at the 600 s suite timeout twice (all its checks green until then) -> optional with reasons
- scatter-edit was flaky (green on the confirm runner) and stays required
- refresh --results over runs 5-12 (one durations file per run): 16 required shards ~35 min each

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2n: scatter-edit optional on the GitHub runner too

- run 13 (#468): scatter-edit red on its shard and both confirm tries, the same 'B has the terrain' as
  scatter-select/convert in run 12 (where it was green on confirm); scatter-surface flaky, stays required

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2o: auto-merge in its own job with contents: write

- #460 (actions, class auto) went green through the gate on the 2k deps.yml, then the gate's auto-merge step
  failed: 'Resource not accessible by integration (enablePullRequestAutoMerge)' (it needs contents: write)
- a separate automerge job after a green deps-gate holds contents + pull-requests write and checks nothing
  out, so the gate (which runs the PR's code) stays contents: read

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2p: battery.cjs run with no --deadline runs every suite

- the deadline was Date.now() + 0, which is truthy, so '|| Infinity' never applied: by hand (no flag) every
  suite after the first came out notrun. CI always passes --deadline, so the workflows were unaffected.
  Found by lane scatter-sync.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2q: scatter-surface optional on the GitHub runner

- red on its shard in runs 13, 14 and 16 (#473 run 16: shard + both confirm tries): the Add scatter click
  times out (locator.click 30 s) - a different failure from the late-joiner terrain race

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2r: knock-physics + env-preset-broadcast optional on the GitHub runner

- the two required suites that fail on their shard about half the time (runs 10-17): knock-physics (shard red
  in 8, 9, 12, 14, 17; run 17 also both confirm tries, '2.3 (premise) B sees the ball parked') and
  env-preset-broadcast (shard red in 10, 12, 13); at ~50% a run loses all three tries ~1 in 8, so each
  alone turned deps-gate red every few runs. The rest of the flaky set is ~25% or less

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
AlexZ005 added a commit that referenced this pull request Oct 25, 2026
…s skipped (#475)

* [docs] deps-auto 3g: pc-battery — PC_BATTERY_WRAP has to be quoted in a systemd unit

Unquoted, Environment=PC_BATTERY_WRAP=e2e-slot --exclusive ... is split at the spaces (found
installing the timer on the desktop).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2j: shards balance on the median runner time of runs 5-10 (16 shards; replayed slowest shard 49 -> 35-38 min)

- refresh --results is repeatable and takes the median per suite: a suite's time moves by half
  between runs on a shared runner, and the 15-shard split fitted to run 9 alone put run 10's
  shards anywhere from 21 to 50 min
- battery.json seconds from runs 5-10 (required + optional passes); replaying runs 8 / 9 / 10 on
  the new split: max shard 38 / 37 / 35 min (was 49 / 38 / 49)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2k: battery only where it tests something; optional set by hand

- deps-policy.cjs: new `battery` output = the PR moves the root app's npm packages and is not a major
- deps.yml: perf budget + plan/e2e only when battery=true (Actions, tools/agent and majors get ci.yml alone);
  a major's deps-gate fails on purpose ("not tested here"); the optional set runs on workflow_dispatch only
- why: Dependabot's first round after 1.43.0 opened 9 PRs at once = ~380 jobs on the account's 20-job cap,
  queueing the v1.43.0 release job and every lane's CI for hours (runs cancelled, re-run after this)
- RELEASING.md + depsCi test (9/9); check-ratchet 299/39 = baseline; actionlint clean

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2l: a cancelled deps run stays cancelled

- confirm / e2e-optional / optional-report / deps-gate used always(), which also runs after a cancel: cancelling
  Dependabot's 9 first-round runs still started their optional sets (18 shards each); now !cancelled()

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2m: three of 51's scatter suites optional on the GitHub runner; medians from runs 5-12

- run 12 (#468, released 1.43.2 app code, CI-only diff) was the scatter suites' first run on the runner:
  scatter-select + scatter-convert red twice (shard + fresh confirm runner: "B has the terrain" never true),
  scatter-sources at the 600 s suite timeout twice (all its checks green until then) -> optional with reasons
- scatter-edit was flaky (green on the confirm runner) and stays required
- refresh --results over runs 5-12 (one durations file per run): 16 required shards ~35 min each

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2n: scatter-edit optional on the GitHub runner too

- run 13 (#468): scatter-edit red on its shard and both confirm tries, the same 'B has the terrain' as
  scatter-select/convert in run 12 (where it was green on confirm); scatter-surface flaky, stays required

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2o: auto-merge in its own job with contents: write

- #460 (actions, class auto) went green through the gate on the 2k deps.yml, then the gate's auto-merge step
  failed: 'Resource not accessible by integration (enablePullRequestAutoMerge)' (it needs contents: write)
- a separate automerge job after a green deps-gate holds contents + pull-requests write and checks nothing
  out, so the gate (which runs the PR's code) stays contents: read

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2p: battery.cjs run with no --deadline runs every suite

- the deadline was Date.now() + 0, which is truthy, so '|| Infinity' never applied: by hand (no flag) every
  suite after the first came out notrun. CI always passes --deadline, so the workflows were unaffected.
  Found by lane scatter-sync.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2q: scatter-surface optional on the GitHub runner

- red on its shard in runs 13, 14 and 16 (#473 run 16: shard + both confirm tries): the Add scatter click
  times out (locator.click 30 s) - a different failure from the late-joiner terrain race

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2r: knock-physics + env-preset-broadcast optional on the GitHub runner

- the two required suites that fail on their shard about half the time (runs 10-17): knock-physics (shard red
  in 8, 9, 12, 14, 17; run 17 also both confirm tries, '2.3 (premise) B sees the ball parked') and
  env-preset-broadcast (shard red in 10, 12, 13); at ~50% a run loses all three tries ~1 in 8, so each
  alone turned deps-gate red every few runs. The rest of the flaky set is ~25% or less

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* [fix] deps-auto 2s: automerge runs after a green gate even when the battery was skipped

- #460 on c6dda92: run green (scope auto, ci green, deps-gate + pc-battery SUCCESS) but automerge SKIPPED:
  its implicit success() also checks the gate's own needs, and perf/plan/e2e are skipped for every PR
  without the battery. Now: !cancelled() && needs.gate.result == 'success' && class auto && base deps

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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