chore(renovate): tune for "Automated PRs" - security bypass, burst caps, lockfile hold - #59
Merged
Conversation
…ps, lockfile hold The Renovate GitHub App went live with "Automated PRs", "Require config file" and "Create onboarding PRs", so the config now has to hold up unattended rather than describe an intent. - `timezone: America/Los_Angeles`. The schedule was UTC, so "before 6am on monday" actually fired around midnight Sunday local. - `prConcurrentLimit` / `prHourlyLimit`. The first run after enabling sees every pending update at once, and each PR now costs a ~4 minute CI run. - `vulnerabilityAlerts` bypasses the weekly window - a CVE fix could otherwise sit ~10 days (up to 3 for the age floor, then up to 7 for Monday). Its `minimumReleaseAge` is **25 hours, not 0**: pnpm 11 refuses anything younger than 24h without writing a `minimumReleaseAgeExclude:` bypass into pnpm-workspace.yaml, so a same-day security PR would reintroduce exactly the hazard this config exists to prevent. - `osvVulnerabilityAlerts` - GitHub's advisories miss ecosystem-only reports. - `lockFileMaintenance` pinned off. It is automated `pnpm up` for the lockfile, and transitive re-resolution is what triggered the `TS2321: Excessive stack depth ... UserConfig` pathology in vite.config.ts while installing the same target versions directly did not. Off by default; pinned so it cannot get switched on as tidying. - `dependencyDashboardApproval` deliberately NOT set - it would re-impose scan-only behaviour at the config layer and defeat the app's own setting. CLAUDE.md's "Renovate is inert until the GitHub App is enabled" is now false and is corrected, along with the two settings whose reasoning is not guessable from the outside. Validated with `renovate-config-validator` (exit 0). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F3a2HLJ4beKARi7SPmaM54
Caught by the CI workflow from #56 on its first real use - `vp check` (no --fix) failed in 27s on two formatting issues. Worth noting the gate earned its keep immediately on a comment-only change. 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
…RULE, not the fields (#57) Verified locally and in CI, and the anti-vacuity control was tested by breaking it. ## The `+3` control is genuinely load-bearing - proven, not assumed This repo has a documented history of confirmations that turned out vacuous, so I sabotaged the substitution rather than trusting the assertion. Replacing the game-field lookup with one that never matches - i.e. simulating every lookup silently falling through to our own field: | test | with substitution dead | | --- | --- | | "substituting the game's own elevation and cliffiness does not move a single cell" | **still passes** | | "and the substitution really is live - a `+3` elevation bias does move cells" | **FAILS**: `AssertionError: expected 0 to be greater than 5` | So the headline assertion *would* have passed vacuously, and the `+3` control is exactly what catches it. Restored and re-confirmed 9/9 green. `expect(game.size).toBeGreaterThan(500)` is a second, independent guard against an empty placement set making the equality trivial. ## Provenance `test/fixtureProvenance.spec.ts` passes (4/4). Both new fixtures carry entries with `factorioVersion: "2.1.12"` and concrete `evidence` naming the capture script and recording that `refs:sync --check` reported in-sync at capture time - so neither lands as `unknown`, and the spec's `unknown` cap is not touched. ## Gate - Local `pnpm run verify` exit **0** in 60s on the exact tree that lands (`5399b6f`): format 316, lint+type 301, `check:vue` clean, app **1255 passed / 3 skipped**, worker 12. - CI `verify`: **pass** (4m41s). The branch was updated **twice** so the run tests the real target - it now contains #51, #52, #55 and #59, not the older `main` the first run saw. - No `src/` change, so nothing shipped to users; the new spec needs no Factorio at runtime because the fixtures are committed, which is why CI can run it. ## Two notes, neither blocking - The description reads as though `test/vulcanusOreCliffSeparation.spec.ts` is new. It is not - it already existed on `main` at 222 lines and this extends it to 597 (3 -> 7 `it` blocks at the top level, 9 tests total), which is why the file count stays 143 and the suite moves +4 rather than +9. - Re-deriving the binary reading and the statistics was explicitly out of scope for this pass, so the `0x1016229b4` / `0x101625038` disassembly claims and the Poisson figures are **recorded as the author's measurements, not independently reproduced here**. What was checked is that the code is gated, the fixtures have provenance, and the assertions can fail.
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.
The Renovate GitHub App is live as of 2026-07-30, enabled with Automated PRs, Require config file and Create onboarding PRs. The config landed in #56 was written for an app that was not yet on, so it now has to hold up unattended rather than describe an intent.
Note "Require config file" means merging #56 first was load-bearing: with that setting and no config on the default branch, Renovate would have done nothing at all, silently.
Changes
timezone: America/Los_AngelesprConcurrentLimit: 3,prHourlyLimit: 2vulnerabilityAlertsosvVulnerabilityAlerts: truelockFileMaintenance: { enabled: false }pnpm upfor the lockfiledependencyDashboardApprovalThe two non-obvious ones
vulnerabilityAlerts.minimumReleaseAgeis"25 hours", not0. The obvious move is to drop the age floor entirely for security fixes. That would be wrong here: pnpm 11 refuses anything younger than 24h without writing aminimumReleaseAgeExclude:bypass intopnpm-workspace.yaml, so a same-day security PR would reintroduce precisely the hazard the top-of-file comment exists to prevent - the wayvue-tsc@3.3.8once waived the guard silently. 25 hours clears pnpm with an hour to spare and still cuts the wait from 3 days to ~1.lockFileMaintenanceis pinned off rather than left off. It is off by default, but it is also automatedpnpm upfor the lockfile, and that is the one dependency operation this repo has measured as harmful: re-resolving the ~22 surrounding transitive packages triggeredTS2321: Excessive stack depth comparing types ... 'UserConfig'invite.config.ts, while installing the same target versions directly did not. Explicit so it cannot get switched on as tidying.dependencyDashboardApprovalis deliberately unset. It would require ticking a box per update before a PR appears, which re-imposes scan-only behaviour at the config layer and would quietly defeat the app's "Automated PRs" setting. PRs are wanted; what is not wanted is anything merging unread, which isautomerge: false's job.Verification
renovate-config-validatorexit 0. CIverifyruns on this PR.CLAUDE.md's "Renovate is inert until the GitHub App is enabled on the repo" is now false and is corrected in the same commit.
Not done here
mainrequiringverify- a repository setting, not a file. It is also the prerequisite for ever enabling narrow automerge (Action digest re-pins), which stays off until it exists.🤖 Generated with Claude Code
https://claude.ai/code/session_01F3a2HLJ4beKARi7SPmaM54