chore(renovate): automerge GitHub Action digest re-pins, and only those (#62) - #65
Merged
Merged
Conversation
…se (#62) A digest re-pin moves a SHA and the `# vX.Y.Z` comment beside it, together, and there is nothing else in the diff to read. It also recurs forever. Reviewing it by hand teaches nobody anything and trains the habit of skimming bot PRs, which is worse than automating the boring case. Renovate has one queued already. **Why this is safe now and was not this morning.** Ruleset `EJ` makes `verify` a required check on `main` with no bypass actors AND `strict_required_status_checks_policy: true`, so an automerged PR can neither land red nor land having been tested against a different `main` than the one it merges into. Both had to be true. The strict flip arrived last (#60) and was the actual blocker - it is the specific objection recorded against doing this earlier. The rule is therefore NOT independently safe, and both the config and CLAUDE.md now say so: if bypass actors are added, `verify` dropped, or strict turned off, this rule must be removed in the same change. `platformAutomerge` hands the merge to GitHub's auto-merge so the required check gates it, rather than Renovate polling and merging itself. Everything else stays manual under the global `automerge: false`. The reason is on the record rather than a preference: `verify` proves the repo is CONSISTENT, not that a bump is CORRECT. pako 3.0.0 flipped `legacyHash` to false, which passes a green suite while silently breaking the codec's byte-exactness, and the wrong belief that produced survived about a year. Also corrects CLAUDE.md, which still said branch protection was not configured, and records that it is a RULESET - `gh api .../branches/main/protection` returns 404 for a protected branch here, which reads like "unprotected" and is not. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F3a2HLJ4beKARi7SPmaM54
wormeyman
added a commit
that referenced
this pull request
Jul 30, 2026
Three stale claims, all reading as current fact after #64/#65 merged: - verify.yml still listed `pnpm vp build` as deliberately absent, 90 lines above the job that runs it. - Its concurrency comment still said strict_required_status_checks_policy is false; ruleset EJ has had strict: true since before #65 landed. The reason main runs stay uncancelled survives, so it is corrected in place. - CLAUDE.md repeated the "build is absent" claim and the "build stamp reads git history" one that #64 measured wrong - it reads git *state*. Adds what happened after: `build` is a required check now, the two-step order for adding one (requiring a check that does not exist on main blocks the PR that introduces it), that the ruleset PUT replaces the whole rules array, and that strict: true means every other open PR needs Update branch after any merge. Claude-Session: https://claude.ai/code/session_01BkKb3S2cGyRFFHSzuCQBgj Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #62.
A digest re-pin moves a SHA and the
# vX.Y.Zcomment beside it, together, and there is nothing else in the diff to read. It also recurs forever. Reviewing it by hand teaches nobody anything and trains the habit of skimming bot PRs, which is worse than automating the boring case. Renovate has one queued right now (pnpm/action-setup→0ebf471).Why this is safe now and was not this morning
Two things had to be true, and the second arrived last:
verifyis a required status check onmain(rulesetEJ,bypass_actors: []), so an automerged PR cannot land red.strict_required_status_checks_policy: true(Harden the main ruleset: no pull-request requirement, non-strict status checks, and a duplicate ruleset #60, a few minutes ago), so it cannot land having passed against a differentmainthan the one it merges into.(2) is the specific objection I recorded against doing this earlier - "not yet, because a PR can pass against an old
main". It is now closed, so the reasoning that deferred this no longer applies.Consequence, stated in both the config and CLAUDE.md: this rule is NOT independently safe. If bypass actors are added,
verifyis dropped, or strict is turned off, the rule must be removed in the same change. It borrows its safety entirely from branch protection.platformAutomergehands the merge to GitHub's own auto-merge, so the required check gates it rather than Renovate polling and merging itself.What stays manual, and why it is not caution-by-default
Everything else, under the existing global
automerge: false. The reason is on the record rather than a preference:pnpm run verifyproves the repo is CONSISTENT, not that a bump is CORRECT. pako 3.0.0 flippedlegacyHashtofalse, which passes a green suite while silently breaking the codec's byte-exactness - and the wrong belief that produced ("pako cannot match zlib") survived roughly a year and was hardened into CLAUDE.md and issue #40 before #46 refuted it.test/deflate.spec.tsnow guards that specific option, but the general lesson stands.Explicitly out of scope, permanently: the codec path (
pakoabove all),vite-plus,vue/pinia/vue-tsc, thewranglerpair,.node-version, and thefactoriotools/factorioDocker digest - that last one pins the render container to a game version, which is a fixture-provenance decision, not a dependency bump. A comment above the remainingpackageRulesnow says so, so the next reader does not have to infer it from the absence of a rule.Also corrects CLAUDE.md
It still said "Branch protection on
mainis not configured", which is false as of #60. Replaced with the actual state, plus the two things that are load-bearing and easy to break by tidying:required_approving_review_countis0on purpose - GitHub will not let you approve your own PR, so1would makemainunmergeable by its only maintainer.gh api .../branches/main/protectionreturns 404 on a protected branch here. That reads exactly like "unprotected" and is not; the right call isgh api .../rules/branches/main.Verification
renovate-config-validatorexit 0 after the formatter pass (which rewrote quoting, so it was re-validated afterwards rather than before).vp checkclean - 301 files, no warnings/lint/type errors. CIverifyruns on this PR.Note what this PR cannot demonstrate: the automerge path itself only exercises on the next Action digest PR. If that lands without human action and stays green, it worked.
🤖 Generated with Claude Code
https://claude.ai/code/session_01F3a2HLJ4beKARi7SPmaM54