Repository navigation
chore: fix Renovate and gate installs by age - #92
Merged
Merged
Conversation
Renovate has been installed since the repository began and never opened a pull request. The shared preset schedules dependencies, devDependencies and the package manager separately and groups non-majors across them; with the two-hour Wednesday window this file set, the Dependency Dashboard kept everything "Awaiting Schedule" for 25 days. One weekly window now covers every update. Kodiak merges every pull request whose checks pass: the org-wide config in mheob/.github sets require_automerge_label = false and no blocking labels. Majors therefore open as drafts, which Kodiak never merges and CI still runs on; marking one ready is the decision. Two more rules. TypeScript in packages/api-client is capped below 7: CI never runs the generator, so that bump would pass every check and break the next regeneration. The TanStack Router family stays off until a @storybook/tanstack-react release carries storybookjs/storybook#36333, matching the pins from #91. CLAUDE.md records all of it; neither tool was documented anywhere.
pnpm-workspace.yaml listed packages to exclude from a release-age gate that nothing set, and pnpm config list confirmed none was in effect. minimumReleaseAge is now 4320 minutes, the three days the Renovate preset applies, so a manual pnpm add or pnpm update holds back what Renovate would. pnpm 12 accepts the setting, and the lockfile passes it as it stands: #91 was resolved under the same window.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
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.
Summary
Renovate has been installed since the repository began and has never opened a pull request. This fixes why, and — because every green pull request here merges itself — makes sure that once it does start, a major cannot land without someone deciding it should. A release-age gate for manual installs rides along, since it is the same policy from the other side.
Changes
.github/renovate.json, four rules on top of the shared preset:draftPR).packages/api-clientcapped below 7 (allowedVersions).react-router,react-router-devtools,react-router-ssr-query,react-start— matching the exact pins from chore(deps): update dependencies and pnpm 12 #91.Each rule carries a
descriptionsaying why, so the reason travels with it into the dashboard.pnpm-workspace.yaml—minimumReleaseAge: 4320.CLAUDE.md— one entry under "Non-obvious constraints". Neither Renovate nor Kodiak was documented anywhere in the repository or its planning docs.Motivation
Why no pull request ever arrived. The preset
github>mheob/renovate-configgives dependencies, devDependencies and the package manager separate schedules, and its non-major group puts dependencies and devDependencies into one branch. Together with the two-hour Wednesday window this file used to set, the Dependency Dashboard (#1) listed everything as "Awaiting Schedule" from 2026-09-01 to 2026-09-25. The outcome is observed; Renovate's exact reckoning for a group spanning several schedules was not verified, which is why the fix is a single window that matches everything rather than a tuned intersection. The hosted app visits a repository only every few hours, so a narrow weekly window can be missed week after week.Why fixing the schedule alone would have been dangerous. Kodiak's configuration lives in
mheob/.github's.github/.kodiak.toml, shared across repositories, withrequire_automerge_label = falseand noblocking_labels. #85, #86 and #90 carried no label and were merged by Kodiak all the same. A working schedule would therefore have auto-merged whatever Renovate proposed the moment its checks passed — including two branches the dashboard already showed pending:typescript-7.xwould liftpackages/api-clientonto TypeScript 7. CI never runs the client generator, so it passes every check, merges, and breaks the nextpnpm run generate:apiwith nothing pointing back at the cause.lib/observability.tssets everydataCollectionfield explicitly because of how v10 resolves a partial object; a change there is exactly what decides what leaves the browser, and no test would notice.Why drafts rather than a dashboard tick or a label. Kodiak never merges a draft, and CI still runs on one —
pull_requesttriggers here carry no draft filter, and Vercel builds previews for drafts too — so the pull request exists with its checks already run, and marking it ready for review is the decision. A dashboard-approval gate would stop the pull request from being created at all, so the decision would have to be made before seeing whether it is green. A blocking label would work just as well — the preset already tags majorsmajor ⚠️, soblocking_labels = ["major ⚠️"]in the Kodiak config would need no Renovate change — but that file governs every repository sharing it, which is a decision beyond this one.The release-age gate.
pnpm-workspace.yamlalready listed packages to exclude from a release-age gate that nothing set;pnpm config listconfirmed none was in effect. pnpm 12's own release notes name this pattern — a policy that silently is not there — as the reason its settings check got stricter. 4320 minutes is the three days the preset's:securitypreset gives Renovate, so a manualpnpm addorpnpm updatenow holds back what Renovate would.Testing
renovate-config-validator --strictpasses, run both against the file as global config and — without a path argument, so it discovers the file itself — as a repository config, which is the stricter of the two. It was run throughnpxwith install scripts disabled: pnpm 12'sdlxrefuses to finish while Renovate's dependencies carry unapproved build scripts, and approving them for a validator was not worth it. Its only warning is that RE2 is unbuilt and regex validation may be approximate; this file uses no patterns, only exact names and*.pnpm installacceptsminimumReleaseAgeunder pnpm 12 — which now fails on an unrecognised key when the pinned version matches — andpnpm config get minimumReleaseAgereports 4320. The lockfile passes as it stands, because chore(deps): update dependencies and pnpm 12 #91 was resolved under the same window.pnpm formatandpnpm lintare silent.What cannot be tested here is Renovate's next run. The first real evidence is the Dependency Dashboard after the coming Monday morning: updates should move out of "Awaiting Schedule", and any major should arrive as a draft.
Breaking Changes
None for the application. Two changes in how dependencies arrive: Renovate majors now appear as drafts that wait for a human, and a manual install refuses any package published less than three days ago. A security fix that is still too fresh goes through
--config.minimum-release-age=0on that one command, as the comment inpnpm-workspace.yamlsays.