Development workflow
The workspace is only in a good state when the checks, docs, smoke tests, Rust/WASM transcript paths, and selected direct-path verification lanes pass together.
Prerequisites
Section titled “Prerequisites”- Node
24.14.1or newer pnpm10.33.0- Rust with the
wasm32-unknown-unknowntarget installed - Playwright browser runtimes for browser tests
Main commands
Section titled “Main commands”pnpm installpnpm run buildpnpm run api-surface:generatepnpm run checkpnpm run vectorspnpm exec playwright install chromium firefox webkitpnpm run test:node:fastpnpm run test:node:protocolpnpm run test:node:kernelpnpm run testpnpm run test:proof-benchmarkpnpm run test:proof-benchmark:nodepnpm run test:proof-benchmark:browser:desktoppnpm run verify:docspnpm run smoke:pack:npmWhat each command proves
Section titled “What each command proves”pnpm run build: every package builds, the private crypto/runtime facade is vendored into the SDK, the WASM transcript-core artifact is copied into the internal loader package, and the published SDK loader is pinned to the packaged kernel hashpnpm run api-surface:generate: runs the full build and regenerates the compact public API surface summary for manual PR reviewpnpm run check: builds the workspace once, runs TypeScript, then runs lint, docs verification, npm package smoke verification, public package policy, package-boundary checks, vector manifest verification, dead-code analysis, and the fast Node tests in parallel against the built output before running Rust formatting, Rust clippy, and Rust tests in an isolated lanepnpm run vectors: committed test vector files matchtest-vectors/manifest.jsonpnpm run test:node:fast: pre-commit-friendly Node testspnpm run test:node:protocol: slower protocol and relation tests that remain useful for the selected direct path and shared substratepnpm run test:node:kernel: transcript-core WASM loader, parity, fixture, proof, and kernel integration testspnpm run test: runs the Node lanes and browser lanes through the package scriptspnpm run test:proof-benchmark: direct proof benchmark evidence where applicablepnpm run test:proof-benchmark:node: Node proof benchmark lanepnpm run test:proof-benchmark:browser:desktop: desktop Chromium proof benchmark lanepnpm run coverage:badge: runs the fast Node coverage lane and writes the Shields-compatible badge and summary JSON that GitHub Pages publishes for the README badgepnpm run verify:docs: generated API pages, docs link structure, and the production docs site build stay consistentpnpm run docs:build: builds the docs site without the surrounding verification checks when that narrower target is neededpnpm run smoke:pack:npm: the published package tarball installs cleanly through npm and exposes the current safe public boundary
Local hooks
Section titled “Local hooks”The pre-commit hook runs pnpm run check.
Protocol, kernel, browser, and proof benchmark lanes remain explicit commands so they can use targeted reruns instead of slowing every local commit. The coverage badge is generated locally in the Pages workflow, not by Codecov.
Local run logs
Section titled “Local run logs”Heavy local runners write timestamped logs under gitignored logs/ directories.
Each run gets logs/YYYY-MM-DD/YYYY-MM-DDTHH-mm-ss-SSSZ-script-name/ with metadata.json, summary.json, combined.log, and per-command logs.
CI disables local log emission with --no-run-log; use the same trailing argument locally when a one-off run should skip logs, for example pnpm run test:node:kernel -- --no-run-log.
Heavy gate policy
Section titled “Heavy gate policy”Default and release gates should stay lean and direct-path-only.
Use explicit heavy lanes only when the change touches the selected direct path area:
direct proof benchmark;direct Node/WASM proof-copy measurement;direct browser proof-copy measurement;fully encrypted evaluator replay benchmark;target-bound decryption benchmark;manual mobile proof and replay lane.Default, release, docs, package-smoke, browser, and mobile gates should cover only the selected direct path and shared substrate.
Release-facing rule
Section titled “Release-facing rule”The release workflow bumps and publishes only packages/sdk. The workspace root is private and is never published.