Skip to content

deps-auto: auto-merge in its own job with contents: write - #473

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

AlexZ005 merged 13 commits into
depsfrom
feat/deps-auto

Conversation

@AlexZ005

Copy link
Copy Markdown
Collaborator

On the new deps.yml (#468), Dependabot's Actions PR #460 passed everything:

  • scope: class auto, battery=false
  • the ci jobs passed; perf and the battery were skipped
  • pc-battery was posted as "not needed"

Then the gate's auto-merge step failed:

GraphQL: Resource not accessible by integration (enablePullRequestAutoMerge)

Enabling auto-merge needs contents: write. The gate job checks out and runs the PR's code, so it should keep contents: read. The fix moves auto-merge into its own job, automerge. That job:

  • needs [scope, gate], so it runs only after a green deps-gate;
  • holds contents: write + pull-requests: write;
  • checks nothing out and only calls gh pr merge --auto --squash (with GH_REPO).

Checks: actionlint 1.7.7 clean. This PR is a manual one, so it runs the required battery once. Afterwards, an @dependabot rebase on #460 shows the auto-merge end to end.

🤖 Generated with Claude Code

AlexZ005 and others added 13 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>
- #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>
- 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>
- 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>
…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>
@AlexZ005
AlexZ005 merged commit c6dda92 into deps Oct 25, 2026
35 of 37 checks passed
@AlexZ005
AlexZ005 deleted the feat/deps-auto branch October 25, 2026 15:52
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