Skip to content

deps: triage the post-v0.3.0 Dependabot group PRs (#144, #145, #146) - #147

Merged
tyler-rich merged 5 commits into
devfrom
claude/dependabot-triage-v0.3.0-qsqpqv
Aug 3, 2026
Merged

deps: triage the post-v0.3.0 Dependabot group PRs (#144, #145, #146)#147
tyler-rich merged 5 commits into
devfrom
claude/dependabot-triage-v0.3.0-qsqpqv

Conversation

@tyler-rich

@tyler-rich tyler-rich commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Triages the three grouped Dependabot PRs opened against dev after the v0.3.0 release and reapplies their content by hand rather than merging them as-built. None of #144, #145 or #146 should be merged — close them once this lands.

All three were correctly based on dev: every head branch carries the /dev/ target-branch segment and no timeline carries automatic_base_change_succeeded, so neither the security-update-on-main case (#120) nor the auto-retarget case (#126/#127/#128) applies.

#144 — backend (pip): applied in full

  • fastapi 0.140.13 → 0.141.1 — adds an app.frontend() dev-server convenience Scrye does not use, plus its 0.141.1 fix. No routing, dependency-injection or response-model change.
  • uvicorn[standard] 0.51.0 → 0.52.0 — adds an opt-in experimental --http zttp parser that upstream marks not-for-production, and a websockets header fix. docker/entrypoint.sh passes no --http flag, so the default parser is unchanged.
  • ruff 0.16.0 → 0.16.1 (dev extra).

backend/requirements.lock regenerated with the pinned uv 0.8.17 command from CONTRIBUTING.md § Backend dependency lock — the step Dependabot does not do, so its branch would have failed CI's drift gate. The lock diff is exactly those two packages and their hashes; starlette holds at 1.3.1, confirming FastAPI 0.141.1 still accepts the pin carried for CVE-2025-62727 / CVE-2026-48818 / CVE-2026-54283. The stale # … 0.51.0 is the current release comment Dependabot left behind is fixed too.

#146 — github-actions: not a version bump

The PR moves codeql-action/init and .../analyze to a new SHA while leaving the comment at # v4.37.4. Resolving the tag upstream rather than trusting the description shows both SHAs are the same release:

ea14db8afdef5d462e69d78c4ca45002d4522418  refs/tags/v4.37.4
f205ea1c3313d32999d8d6a48b4f6530d4437b38  refs/tags/v4.37.4^{}

codeql-action publishes annotated tags, so the old pin named the tag object and the new one names the commit it dereferences to. Applied, because a SHA-pin is meant to name an immutable commit.

  • Not an outage fix — Actions dereferences a tag object, and CodeQL has been green on the old pin since ci: migrate CodeQL from default setup to a committed workflow #141.
  • No code-scanning change — same release ⇒ same bundle (2.26.2), same security-extended suite.
  • Nothing on the tag-gated publish path moved. codeql.yml runs on PRs to dev, so this PR's own CI exercises the corrected pin.
  • All eight other pinned actions were re-resolved and already name commits — they publish lightweight tags, so this was a single-repo trap, not systemic.

#145 — frontend (npm): 8 applied, 1 narrowed, 11 held

The Mantine/React ignores held — no locked major was proposed; @mantine/* moved 7.15.2 → 7.17.8, a minor inside v7.

Applied: @mantine/core/form/hooks 7.17.8, @tabler/icons-react 3.46.0, @testing-library/react 16.3.2, @testing-library/jest-dom 7.0.0, postcss-preset-mantine 1.18.0, globals 17.8.0, prettier 3.9.6.

The two majors were checked, not waved through: jest-dom 7 needs @testing-library/dom as a peer (already direct at 10.4.1) and Node ≥22 (CI is on 24), and removes no matchers; globals 17 was inspected for a shrunken set rather than trusted to a green lint run (1191 browser globals, window/document/fetch present).

Narrowed: @types/node 22.20.0 → 24.13.3, not the proposed 26.1.2. Its major tracks Node's and the SPA builds on Node 24; tsconfig.node.json sets "types": ["node"], so types ahead of the pinned runtime feed APIs the build lacks into the type-aware ESLint gate — the same failure mode that put @types/react* in the ignore list.

Held back (the deferred #86 sweep): typescript 7, eslint 10, @eslint/js 10, typescript-eslint 8.65, vite 8, @vitejs/plugin-react 6, vitest 4, jsdom 30, eslint-plugin-react-hooks 7, eslint-plugin-react-refresh 0.5. Not blocked by any ignore rule and not unwanted — they all land on the type-aware ESLint gate and several cannot move alone. typescript-eslint 8.19 → 8.65 is a minor and looks routine in isolation; it is held anyway because its support matrix pairs with the TypeScript version the sweep will move.

Heads-up on the diff: Prettier 3.9 collapses short union types onto one line instead of the leading-| form, so three source files (src/api/scans.ts, src/api/targets.ts, src/pages/Dashboard.tsx) show whitespace-only edits — 17 lines, no semantic change.

Alongside

Verification

One note for whoever runs the suite locally next: it cannot run on CPython 3.14.0rc2 (what uv python install 3.14 resolves to in a sandbox). typing._eval_type() gained prefer_fwd_module between rc2 and final and pydantic 2.13.4 passes it unconditionally, so every model construction raises at import. That was confirmed interpreter-caused, not bump-caused, by reproducing it with the pre-bump pins before concluding anything.

See docs/ARCHIVE.md § Deviations for the full record of this triage.

Applies the runtime bumps proposed by the post-v0.3.0 Dependabot group PR
(#144) and regenerates the hash-pinned lockfile, which Dependabot does not
do — its branch edits pyproject.toml only and so fails CI's drift gate.

FastAPI 0.141.x adds an app.frontend() dev-server convenience that Scrye
does not use; no routing, dependency-injection or response-model behaviour
changes. uvicorn 0.52.0 adds an opt-in experimental --http zttp parser that
upstream marks not-for-production; docker/entrypoint.sh passes no --http
flag, so the default parser selection is unchanged.

starlette holds at 1.3.1 — the pin carried for CVE-2025-62727 /
CVE-2026-48818 / CVE-2026-54283 — confirming FastAPI 0.141.1 still accepts
it. ruff moves 0.16.0 -> 0.16.1 in the dev extra.

Lock regenerated with the pinned uv 0.8.17 command from CONTRIBUTING.md
§ Backend dependency lock; the diff is those two packages and their hashes.
Dependabot (#146) proposed moving github/codeql-action/init and .../analyze
from ea14db8 to f205ea1 while leaving the trailing comment at v4.37.4. That
is not a mislabelled bump — resolving the tag upstream shows both SHAs are
the same release:

  ea14db8afdef5d462e69d78c4ca45002d4522418  refs/tags/v4.37.4
  f205ea1c3313d32999d8d6a48b4f6530d4437b38  refs/tags/v4.37.4^{}

codeql-action publishes annotated tags, so the old pin named the tag OBJECT
and the new one names the commit it dereferences to. The advanced-setup
migration pinned the tag object; a SHA-pin is meant to name an immutable
commit, which is what every other action pinned here already does — the
rest publish lightweight tags, where refs/tags/vX is the commit, which is
why this is the only ref affected.

No functional change: same release, same CodeQL bundle (2.26.2), same
security-extended suite. The old pin worked — Actions dereferences a tag
object — so this is pin correctness, not a fix for a broken workflow.
Takes 8 of the 20 updates Dependabot proposed in #145 and narrows a 9th.
The Mantine/React ignores held — the PR proposed no locked major, and
@mantine/* moved 7.15.2 -> 7.17.8, a minor inside v7.

Applied: @mantine/core/form/hooks 7.17.8, @tabler/icons-react 3.46.0,
@testing-library/react 16.3.2, @testing-library/jest-dom 7.0.0,
postcss-preset-mantine 1.18.0, globals 17.8.0, prettier 3.9.6.

The two majors were checked rather than waved through. jest-dom 7 requires
@testing-library/dom as a peer (already a direct devDependency at 10.4.1)
and Node >= 22 (CI is on 24); it removes no matchers. globals 17 feeds
eslint.config.js's globals.browser, where a shrunken set would leave lint
passing while losing coverage — the set was inspected: 1191 entries, with
window/document/fetch present.

@types/node is narrowed from the proposed 26.1.2 to 24.13.3. Its major
tracks Node's, and the SPA builds on Node 24; tsconfig.node.json sets
types: [node], so types ahead of the pinned runtime describe APIs the build
does not have and feed them into the type-aware ESLint gate — the same
failure mode that put @types/react* in the ignore list.

Prettier 3.9 collapses short union types onto one line instead of the
leading-| form, which is the whitespace-only change to three source files.

Held back: typescript 7, eslint 10, @eslint/js 10, typescript-eslint 8.65,
vite 8, @vitejs/plugin-react 6, vitest 4, jsdom 30,
eslint-plugin-react-hooks 7 and eslint-plugin-react-refresh 0.5 — the
deferred #86 toolchain sweep, which lands on the type-aware ESLint gate and
is its own scoped work.
@types/node's major tracks Node's, and this repo builds and runs on Node 24
(the Dockerfile builder stage and ci.yml's node-version), with Node majors
already declined for the docker ecosystem on a support-lifecycle argument.
tsconfig.node.json sets types: [node], so a @types/node ahead of the pinned
runtime feeds APIs the build does not have into the type-aware ESLint gate
— the same reason @types/react* are majors-locked.

Without this, #145's @types/node 26 returns inside the grouped PR every
week. The comment also records what is deliberately NOT ignored: the
frontend toolchain majors are wanted work tracked in docs/ROADMAP.md and
should keep being surfaced.
Adds the dated ARCHIVE.md §14 entry covering all three grouped PRs (#144,
#145, #146) — the base-branch check, the changelog findings, the annotated-
tag SHA-pin discovery, the applied/narrowed/held split on the frontend, and
the verification evidence. Refreshes the ROADMAP #86 sweep list to the
versions #145 surfaced and adds the four members that were not on the
original list. Records the bumps under CHANGELOG's Unreleased § Changed.
@tyler-rich
tyler-rich merged commit 004d2b5 into dev Aug 3, 2026
8 checks passed
@tyler-rich
tyler-rich deleted the claude/dependabot-triage-v0.3.0-qsqpqv branch August 3, 2026 08:18
tyler-rich added a commit that referenced this pull request Aug 8, 2026
…A + Track B)

Replaces docs/ROADMAP.md wholesale with an externally-drafted revision. The
previous document becomes Track A — Engineering & hardening, carried across
verbatim; Track B — Features is new, covering six phases plus a Deferred list,
an out-of-scope policy list, a licensing & bundling policy table, and the
guiding principles. Known limitations & accepted trade-offs is unchanged.

Track A's only substantive edits are three † prerequisite markers, on the items
that gate a Track B feature: content-addressed SBOM identity (Phase 2
fix-watch), cancel a running scan (endpoint-scanning target class), and the
generated API client (Phase 4 MCP server).

Track A and Known limitations were diffed line by line against the outgoing
file before replacing, and every §14 pointer was re-checked against the entry
it names rather than against its presence in the old file. One regression was
caught: the draft's "Frontend tooling majors from Dependabot #86" paragraph
predated 004d2b5 (#147), so taking it as written would have reverted the #145
shopping-list refresh, dropped four toolchain members, reverted jsdom 26 -> 30
to 26 -> 29, and removed the sentence that mirrors dependabot.yml's
"Deliberately NOT ignored" comment. The current paragraph is spliced in
verbatim.

See docs/ARCHIVE.md § Deviations for the full verification record.
tyler-rich added a commit that referenced this pull request Aug 8, 2026
…A + Track B) (#155)

* docs(roadmap): replace ROADMAP.md with the two-track revision (Track A + Track B)

Replaces docs/ROADMAP.md wholesale with an externally-drafted revision. The
previous document becomes Track A — Engineering & hardening, carried across
verbatim; Track B — Features is new, covering six phases plus a Deferred list,
an out-of-scope policy list, a licensing & bundling policy table, and the
guiding principles. Known limitations & accepted trade-offs is unchanged.

Track A's only substantive edits are three † prerequisite markers, on the items
that gate a Track B feature: content-addressed SBOM identity (Phase 2
fix-watch), cancel a running scan (endpoint-scanning target class), and the
generated API client (Phase 4 MCP server).

Track A and Known limitations were diffed line by line against the outgoing
file before replacing, and every §14 pointer was re-checked against the entry
it names rather than against its presence in the old file. One regression was
caught: the draft's "Frontend tooling majors from Dependabot #86" paragraph
predated 004d2b5 (#147), so taking it as written would have reverted the #145
shopping-list refresh, dropped four toolchain members, reverted jsdom 26 -> 30
to 26 -> 29, and removed the sentence that mirrors dependabot.yml's
"Deliberately NOT ignored" comment. The current paragraph is spliced in
verbatim.

See docs/ARCHIVE.md § Deviations for the full verification record.

* docs(archive): link the ROADMAP replacement deviation entry to its PR
tyler-rich added a commit that referenced this pull request Aug 9, 2026
…192)

@types/node 26.2.0 landed on dev in #190 (5948b73), so the ignore's
premise is spent. The comment it carried argued that tsconfig.node.json's
`"types": ["node"]` feeds a runtime-ahead @types/node straight into the
type-aware ESLint gate — true of the tree it was written against, and no
longer true of this one. Step 4 (#179) wrote an explicit empty `types`
array into tsconfig.app.json, which narrows the package's reach to a
single file: `tsc --listFiles` loads 1,063 files for the app project and
zero of them are @types/node, against 82 for the node project. The rule
and its comment are removed together rather than the comment being
rewritten, since a comment whose premise has been retired reads as a live
argument.

Deliberately NOT done: no ignore rule was added for typescript. TypeScript
7 is wanted; what blocks it is upstream — typescript-eslint's typescript
peer range, whose upper bound has never exceeded <6.1.0 across all 1,510
published versions (re-verified today from the full packument, not from
`latest` alone). The regenerating Dependabot PR proposing typescript 7.x
is the notification that tells us when upstream ships support, so an
ignore rule would suppress the signal while changing nothing about the
blocker. Dependabot's own automated reply on the PR closed today
recommended exactly that ignore; it is correct on mechanics and wrong as
advice here.

Like every prior change to this file, it is inert on main until the next
dev->main promotion — Dependabot reads its configuration, ignore list
included, from the default branch. main's copy has never carried the
@types/node stanza (added on dev by #147, never promoted), so this
removal deletes a rule that was never live and brings the file closer to
the effective configuration rather than further from it.

No other key in dependabot.yml changed: the six ecosystems, every
target-branch, schedule, groups and commit-message block, and the five
remaining npm ignores enforcing locked decision §2 are untouched.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant