chore(deps): Renovate config, packageManager-derived pnpm in CI, repo-wide format - #1444
Conversation
…ion in CI Refs #1422 Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
Size Report
Startup median (7 runs, lower is better):
Top changed chunks: no changes in the largest emitted chunks. |
|
format/format:check drop their hand-maintained path list: oxfmt already skips node_modules and honors .gitignore, so the only exclusion list is .oxfmtrc.json ignorePatterns. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ilter Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
|
Not ready — one configuration mismatch remains: P2 — the fixture-app rule regroups runtime dependencies. Everything else reviewed clean at |
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Fixed in 43e4aed: the fixture rule is now scoped to |
|
Re-reviewed head Code review is clean and this head is ready for human review while the remaining checks finish. Residual admin acceptance remains external to this PR: Renovate app/permissions and the repository’s dependency-security prerequisites must be enabled before the first real Renovate/security PR can prove the configuration end to end. |
Summary
Dependency hygiene for the repo: a Renovate config, CI that can no longer disagree with
package.jsonabout which pnpm to run, and aformatscript that covers the whole repo instead of ahand-maintained path list. Closes #1422.
pnpm version drift.
.github/actions/setup-node-pnpmcarried its ownpnpm-version: '11.1.2'default — a second source of truth next to
packageManager, so a bump on one side stayed green whilelocal (corepack) and CI ran different pnpm. The input is gone; the action derives the version and
then asserts it:
No workflow passed
pnpm-version, so no caller changes. The assert step is the point: resolving theversion is not the same as proving the pnpm actually on
PATHis that version.packageManagerisbumped to
pnpm@11.17.0in the same commit set, which is now a one-line change with no CI edit.Locally the same field is activated by
corepack enable pnpm, now the documented setup step — thatis what silences the local pnpm drift warning.
Renovate (
.github/renovate.json, validated withrenovate-config-validator): weeklylockfile maintenance, one grouped
devDependenciesPR,groupName: nullfor runtime deps so eachgets its own PR, action digest bumps via
helpers:pinGitHubActionDigests+pinDigests, apackageManagergroup so the pnpm pin above gets its own PR, and aminimumReleaseAge: "7 days"supply-chain floor.
automerge: falseat the top level and on everypackageRulesentry,lockFileMaintenance, andvulnerabilityAlerts— inheritance makes a single top-levelfalseeasyfor a later preset to defeat. Security updates are enabled explicitly (
vulnerabilityAlerts.enabledosvVulnerabilityAlerts) and are the only updates that opt out of the release-age floor(
minimumReleaseAge: null). Theexamples/test-appgroup is scoped todevDependenciesonly, sorule-merge order cannot regroup that app's runtime deps out of the one-PR-per-runtime-dep policy.
format/format:checkgeneralized. They enumerated ~25 paths, so anything outside the list(
scripts/, workflows,website/rspress.config.ts, the test-app screens) silently drifted, and everynew formattable tree needed a package.json edit:
With no path argument oxfmt formats the repo, already skipping
node_modulesand honoring.gitignore, so the single exclusion list is.oxfmtrc.jsonignorePatterns. Added there:**/*.md(prose stays hand-wrapped, as before),scripts/maestro-conformance/corpus/**(upstreamfixture data whose bytes are the oracle — and one deliberately invalid YAML file that oxfmt
hard-errors on), and the generated
fallow-baselines/,mutation-baselines/. The resulting one-timereformat is 45 files, mechanical only: quote style in workflows/YAML, collapsed single-element JSON
arrays, wrapping. One gate was coupled to the old quote style:
scripts/mutation/workflow.test.tsparsed the affected-lane path filters with
/^ {6}- "(?<glob>[^"]+)"$/, which matched nothing onceoxfmt rewrote them to single quotes (the mutation lane's
Select affected kernelsjob caught it).The regex now accepts either quote spelling via a backreference; the assertion itself is unchanged.
CONTRIBUTING gains the gating paragraph: Renovate PRs are reviewed like human PRs — green CI plus a
green affected-check plan (which fails open to the full set for lockfile/workflow diffs), never
rubber-stamp automerge. AGENTS.md's formatting note now points at
ignorePatternsinstead ofnaming
scripts/as deliberately unformatted.Requires a repo admin (not doable in this PR)
callstack/agent-device(or grant theself-hosted runner's token access). Until then the config is inert and no Renovate PR opens.
vulnerabilityAlertsandosvVulnerabilityAlertsread GitHub's advisory data, so security PRs stay dormant without them.dependencies/securitylabels exist (Renovate creates them if the app has writeaccess).
Validation
CI green on
043e721(31/31 checks, including the mutation lane), which is the only place the actionchange is provable: every job routes through
setup-node-pnpm, so a broken resolve/assert step fails all ofthem. Locally:
pnpm format:check,pnpm lint,pnpm typecheck,pnpm maestro:conformance,pnpm depgraph:test,pnpm check:affected:test,pnpm check:mcp-metadatagreen after the reformat,plus
pnpm mutation:testandpnpm check:affected --base origin/main --run, which fails open to thefull 19-check set on these paths and was green through every locally runnable check.
corepack installactivatespnpm@11.17.0andpnpm installreports the lockfile unchanged.Residual risk / gaps:
skillgymin the local plan cannot run here (spawn claude ENOENT); it has no CI job either, andno
skills/file changed.examples/test-apptypecheck needspnpm test-app:install, not run here; its two touched files arepure re-wrapping.
pnpm buildneeds Node ≥ 24.11 (tsdown loadstsdown.config.tsnatively; the optionalunrunpeer is absent), so local runs used Node 24.13 to match CI — unrelated to this diff.
Touched 50 files, 45 of them the one-time mechanical reformat; scope expanded from CI/tooling config
to that reformat at the reviewer's request.
Link to Devin session: https://app.devin.ai/sessions/9c55972f3d1545eeaf1d3b8efbe42b7c
Requested by: @thymikee