public/release.md
Release verification
Pre-publish regression scripts
Scripts and checks run before publishing a new create-workframe version or signing off an install. For day-to-day development, see Develop.
CI parity (monorepo)
From repository root:
pnpm test:ci
This matches GitHub Actions: public-repo verify, API py_compile typecheck, web build, UI bundle copy, and scaffold smoke tests.
Scaffold regression
From repository root:
node packages/create-workframe/scripts/test-scaffold.mjs
Expected: scaffold tests pass for native, core, product, engineering, and vanilla packs.
Generated project smoke
node packages/create-workframe/scripts/new-project.mjs SmokeDemo --out /tmp --force
cd /tmp/SmokeDemo
docker compose up -d
node scripts/workframe.mjs doctor
Expected: UI loads, /hermes-dashboard/ loads, API health OK, native SOUL present.
After Hermes setup in the generated project:
./scripts/bootstrap-native.sh
./scripts/verify-bootstrap.sh
Expected: Agents/SOUL.md, Agents/profiles/{slug}-agent/SOUL.md, terminal.cwd → /workspace.
Session routing sanity
Via the API:
- same profile + different
client_id→ different sessions - same profile + same
client_id→ same persisted session
Specialist lifecycle
node scripts/agent-lifecycle.mjs create --slug qa-proof --display-name "QA Proof" --role "Smoke-test child"
node scripts/agent-lifecycle.mjs delete --slug qa-proof
Public deploy preflight
bash scripts/workframe/verify-public-deploy.sh
With a configured public overlay and WORKFRAME_DEPLOYMENT_MODE=public_multi_user. See PUBLIC_DEPLOY.md.
Install gate
Full sign-off before npm publish:
.\scripts\workframe\sign-off-install.ps1
Build/sync/pack only (no install):
.\scripts\workframe\install-gate.ps1
Dogfood reset only:
.\scripts\workframe\reset-dogfood-docker.ps1 -Confirm
Then complete the wizard in the browser and send a test chat. Set dogfood-install-gate to passes: true in .harness/feature_list.json, then:
node scripts/workframe/verify-release-gates.mjs
CI green alone is not sign-off. publish-npm.ps1 calls the release-gates verifier and fails closed when local evidence is missing.
DevOps map: scripts/workframe/README.md
Release evidence (maintainer)
Machine-readable sign-off artifacts — not the public security audit. Three types:
| Type | Purpose |
|---|---|
PackageInstallEvidence |
Pack → clean install, file parity |
FirstRunEvidence |
Docker boot, wizard, first chat |
NegativeInstallEvidence |
Deny paths, no filesystem mutation |
Schemas and examples: operations/release-evidence/README.md
node scripts/workframe/validate-release-evidence.mjs
Runners that emit live JSON:
node scripts/workframe/run-package-install-evidence.mjs --build
First-run and negative runners:
node scripts/workframe/run-first-run-evidence.mjs
node scripts/workframe/run-negative-install-evidence.mjs
GitHub → npm (trusted publishing)
No laptop OTP after one-time setup.
npm (each package)
On npmjs.com, for workframe, create-workframe, and @workframe/workframe:
- Package → Settings → Trusted publishing
- GitHub Actions → repository
npx-workframe/workframe, workflow filenamepublish-npm.yml - Save (repeat per package; same workflow name)
Optional hardening after first green CI publish: Publishing access → require 2FA and disallow tokens.
GitHub
- Repo Settings → Secrets and variables → Actions
- Secret
VERIFY_PUBLIC_PATTERNS_JSON= full JSON fromscripts/workframe/verify-public-patterns.local.json(gitignored operator denylist)
Release
Bump versions in all three publish package.json files, commit, tag, push:
git tag v0.1.7
git push origin main
git push origin v0.1.7
Workflow .github/workflows/publish-npm.yml runs install-gate (quick), then npm publish via OIDC.
Local publish (OTP or granular bypass token) remains: .\scripts\workframe\publish-npm.ps1
Install-window test flags
Use only on loopback or dedicated test stacks — never on a public URL.
| Flag | Use |
|---|---|
WORKFRAME_E2E=1 |
Loopback, install window only |
WORKFRAME_E2E_UNSAFE=1 |
CI/local test stacks |
DEV_LOCAL_UNSAFE=true |
Trusted local operators only |
OTP-in-JSON exposure stops after install completes.
Canonical sync before pack
- Edit
apps/web/src/and/orservices/workframe-api/ pnpm build:webif UI touchednode packages/create-workframe/scripts/sync-canonical-to-package.mjsif API/supervisor touchednode packages/create-workframe/scripts/bundle-workframe-ui.mjsif UI touched- Rebuild Docker API/supervisor images and re-run checks above
If docs disagree with code, code wins.