The repository uses Node 24 and pnpm. Do not update generated policy output without reviewing the native tool behavior that produced it.
The runtime image has a default CPython 3.13 tool virtual environment and a second CPython 3.14 environment at /opt/venv314. Both are installed from docker/python/requirements.txt.
pnpm verify
pnpm build:launcher
pnpm docker:build
pnpm integration
pnpm capture <adapter-id> <fixture-directory>| Command | Purpose |
|---|---|
pnpm verify |
Runs type checking, linting, tests, and the bundle build. |
pnpm build:launcher |
Builds the npm launcher package. |
pnpm docker:build |
Builds the local analysis image. |
pnpm integration |
Exercises the TS, PHP, Python (python-project and python314-project), web, Drupal, Payload/Next, and monorepo fixture repositories plus deliberate mutations against a locally built image. |
pnpm capture … |
Captures a selected adapter's native output from a pinned image tool for parser tests. |
On its first run, integration installs fixture dependencies through the image. Native-output fixtures preserve the actual supported tool format and feed adapter parser tests.
A tool bump changes policy:
- Change the pin in
src/registry.tsand the image build definition. A Python tool bump changesdocker/python/requirements.txt, which feeds both virtual environments. - Build an image containing exactly that tool and capture fresh native-output fixtures.
- Run unit tests, integration tests, and
doctor. - Build and release the new image tags.
- Ask consumers to review the change, remove affected snapshots, and run
check --initialize.
Ordinary --update does not cross a tool-version gate. The project does not use Renovate for v1, and doctor is the final authority for versions in a built image.
Generated-configuration changes that alter tool settings or scan scope, including plugin toggles, extensions, and profiles, must bump POLICY_VERSION like a tool bump so consumers re-initialize affected baselines.
A version bump updates these three locations together:
- root
package.json; launcher/package.json; and- the CLI version literal in
src/cli/version.ts.
A test enforces version agreement. Launcher X.Y.Z runs image vX.Y.Z, and the release workflow verifies that a vX.Y.Z tag matches the launcher version before publishing.
- Merge the release change with a merge commit; the repository accepts merge commits only.
- Create the protected
vX.Y.Ztag. - The release workflow verifies
tag == launcher version. - The workflow publishes the image as both
vX.Y.Zand the floatingvXtag. - It stages the npm launcher from
launcher/with trusted publishing andnpm stage publish. - A maintainer reviews and approves the staged package with 2FA.
The trusted publisher has stage-only permission. Approve from the npm package page or from the command line:
npm stage list @runroom/code-quality
npx npm@11.19.0 stage approve <id>Staging requires npm 11.15 or newer; the release job installs a supported npm version explicitly. npm provenance is not available while the repository is private.
The first package version cannot use staging. Build the launcher from the repository root with pnpm build or pnpm build:launcher:
pnpm build:launcherThen publish from launcher/ and configure the npm trusted publisher for repository Runroom/code-quality and workflow release.yml:
cd launcher
npm publish --access publicProtected tags prevent replacement of a published release line. Breaking CLI, snapshot, parser, policy, or reusable-workflow contracts start a new major version.