ci(dependabot): unblock workspace updates and move child manifest ranges - #205
Merged
Merged
Conversation
The root `bun` entry already reaches the child packages: `directory: "/"` reads the only lockfile the workspace has, and Dependabot edits whichever child manifest declares the range it must widen. PR #99 bumped `@types/semver`, declared only in `packages/core`, and the root-bun branch at `d9b775c` widened `zod` in `packages/mcp/package.json`. Coverage was never the problem, so this adds no `directories:` entries — for `packages/adapters/*` they would be actively harmful, because `spec-kit` and `agent-plugin` declare no dependencies by design. The problem was that one group batched dependencies whose bumps invalidate a committed artifact together with dependencies that are safe. `zod` drives `z.toJSONSchema` in `packages/core/src/schema/emit.ts`, so bumping it fails the schema-emit and T090/T096 envelope-digest tests until `schema:emit` is re-run; `picomatch` is recorded as a literal observation in `glob-compile-once.test.ts`, so bumping it fails T063. Batched, either one takes every other update down with it — which is why #200 is red on `clean-clone-builds` and three root-bun branches stacked up re-proposing the same three updates. Both now land alone, alongside the two exact pins whose versions were verified by measurement rather than changelog (`@modelcontextprotocol/*` 2.0.0 under ADR-0018's dual-era dogfood, `jsonpath-rfc9535` 1.3.0). The group keeps the rest and takes minor/patch only, so a major arrives as its own reviewable PR. The `/site` and `github-actions` entries are unchanged. Claude-Session: https://claude.ai/code/session_01WpiQVx199bYsLcUrFoSyJk Signed-off-by: Mark Beacom <m@beacom.dev>
A range is otherwise rewritten only where it has the precision to show the change. `zod: ^4.2.0` in `packages/mcp` became `^4.5.4`, but `picomatch: "^4"` and `@types/semver: "^7"` in `packages/core` stayed textually put across 4.0.5 -> 4.0.7 and 7.7.1 -> 7.8.0, because the bumped digits sit below the precision those ranges declare. Reading `packages/*/package.json`, that is indistinguishable from Dependabot never reaching the child packages at all. `versioning-strategy: increase` makes every child manifest move with its dependency. Confirmed supported for this ecosystem rather than inherited from npm by assumption: `bun/lib/dependabot/bun/update_checker.rb` honours an explicitly configured strategy and only falls back to `library? ? WidenRanges : BumpVersions` when none is set. The cost is accepted, not unnoticed: five of these packages are published, so narrowing `^4` to `^4.0.7` narrows what a consumer can dedupe to. The file records that, and records that a narrow range here is not a considered compatibility floor. Scoped to the workspace entry; `/site` keeps the default. Claude-Session: https://claude.ai/code/session_01WpiQVx199bYsLcUrFoSyJk Signed-off-by: Mark Beacom <m@beacom.dev>
Decisions governing this changeNo governing decisions for the changed files. |
There was a problem hiding this comment.
🔵 Needs a closer look
The package-publication rationale has an unresolved concern requiring final human review.
Pull request overview
This pull request refines the root Bun Dependabot configuration for safer, more predictable workspace updates.
Changes:
- Enables manifest range increases and raises the open PR limit.
- Isolates artifact-sensitive and pinned dependencies from grouped updates.
- Documents workspace and GitHub Actions coverage.
File summaries
| File | Summary |
|---|---|
.github/dependabot.yml |
Refines Dependabot grouping, exclusions, range updates, and coverage documentation. |
Review details
Suppressed comments (1)
.github/dependabot.yml:39
- This rationale incorrectly lists
@adrkit/sdkas published.packages/sdk/package.json:22-23explicitly describes it as a 0.0.0 design sketch, absent from the release package list, and not authorized for publication. Keeping/sdkhere makes the stated consumer-range impact inaccurate; remove it or replace it with an actually published package.
# `/cli`, `/evaluator`, `/mcp` and `/sdk` are published, so narrowing `^4` to
- Files reviewed: 1/1 changed files
- Comments generated: 0
- Review effort level: Lite
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.
What and why
Two defects in
.github/dependabot.yml, both found by reading what Dependabotactually did in this repository rather than what the config looks like it says.
The
bunentry already reachespackages/*.directory: "/"reads the onlylockfile the workspace has, and Dependabot edits whichever child manifest
declares the range it must widen — PR #99 bumped
@types/semver, declared onlyin
packages/core, and the root-bun branch atd9b775cwidenedzodinpackages/mcp/package.json. So this adds nodirectories:entries. Forpackages/adapters/*they would be actively harmful:spec-kitandagent-plugindeclare no dependencies by design, andpackaging.test.tsenforces it.
1. One group was batching bumps that invalidate a committed artifact with bumps that don't.
zoddrivesz.toJSONSchemainpackages/core/src/schema/emit.ts, so bumpingit fails
schema-emit.test.tsand the T090/T096 envelope-digest tests untilschema:emitis re-run.picomatchis recorded as a literal observation atglob-compile-once.test.ts:76(toBe('4.0.5')), so bumping it fails T063.Grouped under
patterns: ["*"], either one took every other update down withit — which is why #200 is red on
clean-clone-buildsand threeroot-bunbranches stacked up re-proposing the same three updates.
Both now land alone, alongside the two exact pins whose versions were verified
by measurement rather than changelog:
@modelcontextprotocol/*2.0.0 (ADR-0018'sdual-era stdio dogfood) and
jsonpath-rfc95351.3.0 (RFC 9535 semantics for@adrkit/evaluator). The group keeps the rest and takes minor/patch only, so amajor arrives as its own reviewable PR.
2. Child manifest ranges moved inconsistently, which reads as "Dependabot never got here".
A range is rewritten only where it has the precision to show the change.
zod: ^4.2.0became^4.5.4, butpicomatch: "^4"and@types/semver: "^7"stayed textually put across 4.0.5 → 4.0.7 and 7.7.1 → 7.8.0, because the bumped
digits sit below the precision those ranges declare.
versioning-strategy: increasemakes every child manifest move with itsdependency. Confirmed supported for this ecosystem rather than assumed to be
inherited from npm:
bun/lib/dependabot/bun/update_checker.rbhonours anexplicitly configured strategy and only falls back to
library? ? WidenRanges : BumpVersionswhen none is set. It reaches neitherworkspace:*nor thelatesttag on@types/bun/yaml— the updater returnsany requirement matching
/^([A-Za-uw-z]|v[^\d])/untouched.The cost is accepted rather than unnoticed, and recorded in the file: five of
these packages are published, so narrowing
^4to^4.0.7narrows what aconsumer can dedupe to, and a narrow range here is not a considered
compatibility floor.
/siteandgithub-actionsare byte-identical tomain.Checklist
docs/adr/.packages/ci/srcand@adrkit/coreunchanged.bun run typecheck && bun run build && bun test && bun run lintpass fromthis worktree: 2812 pass, 0 fail, lint clean.
Notes for reviewers
No test covers this file, and I did not add one. Nothing in
scripts/,.github/workflows/, orpackages/*/test/reads.github/dependabot.yml(grepped). The config's real validator is GitHub, on push. Adding a gate that
asserts the config's shape is plausible for this repository but is a larger
decision than this PR — flagging rather than smuggling it in. Per ADR-0016 I'd
rather say that than claim coverage a check never gave.
This does not make #200 mergeable. Ungrouping isolates
zodandpicomatch;it does not regenerate the artifacts they invalidate. That needs
bun run schema:emitcommitted and the'4.0.5'literal updated, which isseparate work. The three stale
root-bunbranches (d9b775c,731707b,24dd742) also need closing so Dependabot re-proposes under this config —otherwise the new grouping never touches the existing backlog.
Watch the first run after merge.
update-typesactivatessemver_rules_allow_grouping?, which excludes a dependency from the group wheneither the current or latest version is not parseable semver. Previously, with
update-typesunset, that check short-circuited to true for everything.Out of scope, offered:
Containerfile's base-image digests are covered by noentry. Dependabot's docker fetcher does match the filename
(
/dockerfile|containerfile/i), but bothFROMlines resolve tag and digestthrough
ARG, and I did not verify it can update those.