Maintaining Explorer dependencies
A dependency is a library or tool that Explorer uses. package.json declares
which versions are permitted; pnpm-lock.yaml records the exact versions and
package integrity values selected for a build. Both files matter when reviewing
an automated Dependabot pull request.
Preserve the security controls
Use the repository's pnpm 10 toolchain. Run pnpm install --frozen-lockfile for
validation: it fails when the manifest and lockfile disagree. During an
authorised update, regenerate the lockfile with pnpm, review every changed
package, then return to frozen installation. Never hand-edit integrity values
or remove a security override to bypass a failing install.
The cookie: ^0.7.2 override preserves the reviewed fix for
GHSA-pxg6-pf52-xh8x.
Some older bot updates removed this override from the lockfile and selected
cookie 0.6.0. @types/cookie is a separate type-definition package and must
not be confused with the affected runtime package.
Vitest and its coverage package must resolve to the same version. The repaired
baseline uses 4.1.11, including the transitive @vitest/mocker fix for
GHSA-82fw-gwwq-j7x9.
That advisory concerns development-server file access; a dependency alert is
not evidence that the static Pages site has been exploited. Keep development
servers local and review any change that exposes them to a network.
The combined audit also found older transitive copies of devalue and nanoid.
Conditional overrides select devalue 5.9.2 for
GHSA-9rgm-9g3h-6x36
and nanoid 3.3.18 for
GHSA-2v37-7h3g-55p8.
These address denial-of-service conditions involving malformed input or a
zero-sized custom ID request; the audit does not demonstrate an exploitable
Explorer path. The guard checks resolved versions, allowing the temporary
overrides to be removed when reviewed upstream dependencies select safe copies.
pnpm deps:check enforces these recorded dependency invariants against the
manifest, package inventory and resolved snapshots. Its regression tests retain
examples of lost overrides, vulnerable duplicate packages and mismatched
coverage. It is a targeted guard, not a replacement for vulnerability alerts or
reviewing upstream changes. Pre-release replacements need an explicit policy
review rather than silently passing the stable-version checks.
Framework and bundler baseline
The reviewed framework set uses SvelteKit 2.70.3, the Svelte Vite plugin 7.3.0,
Svelte 5.57.0, svelte-check 4.7.6 and Vite 8.3.0. Vite uses Rolldown to produce
the static application. The rolldown: 1.2.9 override keeps its native bindings
on the reviewed version while Vite's permitted range also admits later releases.
Remove or change that pin only after reviewing the new Rolldown release and
testing the resulting build. The conditional nanoid override remains in place;
the current lockfile selects the newer safe copy, 3.3.19.
Framework updates can change generated HTML, CSS and JavaScript even when no application source changes. Review the exact lockfile and regenerated SBOM, then run the deterministic build, Site checks and the full Chrome, Firefox and WebKit browser contract before accepting a candidate. Local checks do not establish the identity of a later Pages deployment.
For this update, the 100-question Heritage suite and three local journeys were
run against the rebuilt application. The preceding receipt and results are
retained under validation/dependency-updates/2026-09-25/pre-framework/.
The final receipt also binds those browser results to the assembled Site after
the security documentation commit was included; that documentation change did
not change the application or Heritage corpus evaluated in the browser.
Review and validate a candidate
- Start from current
mainon a feature branch. Inspect the complete diff, upstream release notes, security advisories and changes in indirectly used packages. Do not infer safety from the bot's authorship or a patch-version label. - Update only the reviewed versions. Keep coupled packages together: Vitest with coverage, and Playwright with its core/browser versions. Recheck the combined lockfile after integrating overlapping updates.
- Run the checks below. The software bill of materials (SBOM) is the generated inventory of exact package versions and integrity values. Regenerate it only after reviewing the lockfile; preserve historical release receipts.
- Update this documentation and
CHANGELOG.mdwhen behaviour or the supported toolchain changes. Required checks do not exempt dependency updates. - Review the exact candidate, pass protected-branch CI, then verify the exact merged Pages deployment. Earlier release receipts do not attest to a new manifest, lockfile or application build.
cd apps/okf-explorer
pnpm install --frozen-lockfile
pnpm deps:check
pnpm audit --audit-level=moderate
pnpm sbom
pnpm sbom:check
pnpm check
pnpm test
pnpm test:coverage
Run the affected browser journeys too. Changes to Playwright or the application compiler require the supported Chrome, Firefox and WebKit checks. A failed inventory check is different from a functional test failure; a skipped browser check is still missing validation.
Local browser checks own their server and fail if its port is already occupied.
This prevents a different worktree's older application from satisfying the
tests. For parallel work, choose a free port explicitly, for example
PLAYWRIGHT_PORT=4183 pnpm test:e2e. Do not stop another task's server or use
its results as evidence for this candidate. The full browser command uses that
port for the application and then the generated Site in sequence. Set
PLAYWRIGHT_FOUNDRY_PORT if the Site needs a different free port.
An application rebuild also invalidates the current Heritage browser receipt's
application identity. Follow the receipt refresh procedure
to run its 100 questions and three local journeys, then materialise a new
receipt from those results. Preserve the previous receipt and result files;
do not change identity hashes by hand or weaken the receipt tests. The
25 September security repair retains its preceding evidence under
validation/dependency-updates/2026-09-25/pre-security/.
Build and deployment actions
GitHub Actions updates can affect code running during builds or deployment.
Keep actions pinned to complete commit hashes and verify those hashes against
the upstream release. Preserve the existing workflow triggers, pnpm 10 setting
and separate Pages deployment permissions. The reviewed maintenance update
uses pnpm/action-setup 6.1.0 and actions/deploy-pages 5.0.1; it does not grant
additional permissions.