A repeatable, artifact-first checklist for cutting a T3MP3ST release. The guiding rule is the same as the project itself: every headline number re-derives from committed artifacts — so a release isn't cut until the deterministic gates and the local smoke path are green.
A release marks a source commit that passed these quality gates. The only published release asset is the certified source ZIP: no npm publication, compiled binaries, container image, or separately rebuilt archive. Retain checksums, logs, and provenance as certification evidence in CI and record the SHA-256 in the release notes. This certification covers deterministic software checks; it does not claim live-provider, optional-tool, or hardware compatibility that was not tested.
npm ci
npm run test:release # lint, types, tests/coverage, claims, contracts, local smoke, docs, build, pack inspection
npm audit # expect 0 vulnerabilitiesnpm run build
npm run test:release:smoke # isolated loopback server; server checks must runThe release smoke runner starts and stops its own unconfigured server with temporary
state. It runs the core/server smoke, exploit-chain contract, field drill, and arsenal
checks against local synthetic fixtures. T3MP3ST_CONFIG_DIR selects an absolute
settings directory and loads only its .env, without falling back to home-directory
credentials; the runner sets this to a temporary directory. When unset, normal
configuration discovery remains unchanged. A missing server is a failure. Live-model
checks remain optional and are reported separately; do not count a skipped live
probe as positive provider evidence.
The coverage gate currently requires 100% per file for the three parser modules
listed in vitest.config.ts; it is not a claim of 100% repository coverage.
Lint warnings are permitted by existing policy and should be recorded with the
candidate results.
npm run smoke -- --live # exercises a live LLM (needs a provider key or a local agent)
npm run arsenal:doctor # reports which optional external tools are installedThe bash-only path needs no external tools. Specialist operators can use standard offensive
tooling if present on PATH; npm run arsenal:doctor reports what's installed. Missing tools
degrade gracefully — they never fail the core run.
- Never run live scans or exploitation against a target without an explicit authorization / scope receipt. The default posture is owned / local / synthetic targets only.
- The server binds
127.0.0.1by default. If you setT3MP3ST_HOSTto a non-loopback address, it prints an EXPOSURE WARNING — the API executes commands and has no built-in auth. Put a Bearer-token reverse proxy in front of it before any LAN / internet exposure.
- Confirm the release commit is already on
main, CI is green at that exact SHA, the version and changelog agree, and the tag is signed and points to that commit. Never move or reuse a failed release tag; correct the release and use a new version/tag. - Verify
repository.urlinpackage.jsonpoints at this repo. To retarget it:npm pkg set repository.url="git+https://github.com/<owner>/<repo>.git"
- Tag the release only after Sections 1–2 are green.
- Push the
v*tag and wait for the tag workflow. It rerunsnpm run test:release, the zero-vulnerability dependency audit, and package dry run against the exact tag. It then creates one deterministicT3MP3ST-<sha>.zipdirectly from that tested Git object. - The workflow extracts that ZIP into a clean temporary directory, performs a locked install and build, and invokes the packaged CLI help path before the archive can be retained.
- Verify
release-evidence/source-zip-check.txt,SHA256SUMS, and the retained Sigstore provenance bundle. Workspace notes, secrets, ignored files, and local artifacts cannot enter agit archivesnapshot. - Publish only the retained, checksum-matched source ZIP as the release asset. Do not rebuild a different archive from another checkout after certification.
Stop halts backend scheduling; a tool or provider request already in flight may finish. Pause similarly prevents further scheduling and does not suspend an external process. Release notes must preserve this limit rather than promise immediate cancellation of all activity.