@arnilo/prism 0.0.8 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +44 -3
  2. package/dist/agent-loops.d.ts +1 -0
  3. package/dist/agent-loops.js +44 -5
  4. package/dist/agents.js +141 -7
  5. package/dist/context-budget.d.ts +63 -0
  6. package/dist/context-budget.js +235 -0
  7. package/dist/contracts.d.ts +107 -0
  8. package/dist/contracts.js +77 -0
  9. package/dist/index.d.ts +7 -5
  10. package/dist/index.js +5 -4
  11. package/dist/input.d.ts +3 -0
  12. package/dist/input.js +71 -28
  13. package/dist/node/session-store-jsonl.js +4 -1
  14. package/dist/provider-events.d.ts +2 -0
  15. package/dist/provider-events.js +21 -13
  16. package/dist/providers/openai-compatible.js +8 -5
  17. package/dist/providers/transport.d.ts +10 -1
  18. package/dist/providers/transport.js +24 -8
  19. package/dist/rpc.js +13 -2
  20. package/dist/session-stores.d.ts +7 -2
  21. package/dist/session-stores.js +174 -4
  22. package/dist/structured-output.d.ts +5 -1
  23. package/dist/structured-output.js +18 -0
  24. package/dist/testing/persistence-schema.d.ts +1 -1
  25. package/dist/testing/persistence-schema.js +8 -2
  26. package/dist/testing/session-store-conformance.d.ts +6 -0
  27. package/dist/testing/session-store-conformance.js +36 -1
  28. package/dist/tools.js +2 -0
  29. package/docs/agent-events.md +3 -2
  30. package/docs/agent-loops.md +10 -3
  31. package/docs/agent-session-runtime.md +5 -1
  32. package/docs/browser-automation.md +124 -0
  33. package/docs/cli-rpc.md +2 -1
  34. package/docs/coding-agent-tools.md +178 -14
  35. package/docs/coding-security.md +84 -11
  36. package/docs/evaluations.md +13 -2
  37. package/docs/guardrails.md +2 -1
  38. package/docs/host-security.md +4 -2
  39. package/docs/index.md +19 -15
  40. package/docs/input-and-prompt-assembly.md +4 -1
  41. package/docs/migration.md +84 -0
  42. package/docs/node-jsonl-session-store.md +1 -1
  43. package/docs/performance.md +46 -0
  44. package/docs/postgres-persistence.md +3 -3
  45. package/docs/provider-conformance.md +1 -1
  46. package/docs/provider-packages.md +1 -1
  47. package/docs/provider-primitives.md +7 -1
  48. package/docs/providers/anthropic.md +92 -0
  49. package/docs/providers/google.md +87 -0
  50. package/docs/public-contracts.md +4 -0
  51. package/docs/release-and-install.md +197 -64
  52. package/docs/review-coverage-2026-07-20-phase-4.md +175 -0
  53. package/docs/review-coverage-2026-07-21-phase-5.md +172 -0
  54. package/docs/review-coverage-2026-07-22-phase-6.md +209 -0
  55. package/docs/session-store-conformance.md +2 -0
  56. package/docs/session-stores.md +40 -1
  57. package/docs/sqlite-persistence.md +3 -3
  58. package/docs/structured-output.md +9 -3
  59. package/docs/tools.md +3 -0
  60. package/docs/web-tools.md +1 -1
  61. package/docs/workflows.md +3 -0
  62. package/package.json +6 -5
@@ -2,15 +2,15 @@
2
2
 
3
3
  ## What it does
4
4
 
5
- Prism is published as one core package, twenty-four first-party capability packages, and six pure-manifest family/profile packages. This page describes how they are packed, what each tarball contains, how to install them, the required `@arnilo/prism` peer dependency, the release workflow, and the offline test budget.
5
+ Prism is published as one core package, twenty-seven first-party capability packages, and six pure-manifest family/profile packages. This page describes how they are packed, what each tarball contains, how to install them, the required `@arnilo/prism` peer dependency, the release workflow, and the offline test budget.
6
6
 
7
7
  Core package:
8
8
 
9
9
  - `@arnilo/prism` — the runtime, contracts, registries, streaming events, CLI (including `prism init`), and the `/docs` hub. `files`: `dist` (with `!dist/__tests__` and `!dist/**/*.map` negations), `docs`, `templates`, `CHANGELOG.md`. `bin`: `prism` -> `dist/cli.js`. `sideEffects`: `["dist/cli.js"]`.
10
10
 
11
- First-party workspace packages (each has non-optional `@arnilo/prism@0.0.8` peer and `sideEffects: false`; RAG also peers on memory, and server also peers on workflows):
11
+ First-party workspace packages (each has non-optional `@arnilo/prism@0.0.11` peer and `sideEffects: false`; RAG also peers on memory, and server also peers on workflows):
12
12
 
13
- - `@arnilo/prism-provider-openai`, `@arnilo/prism-provider-openrouter`, `@arnilo/prism-provider-kimi`, `@arnilo/prism-provider-zai`, `@arnilo/prism-provider-opencode-go`, `@arnilo/prism-provider-neuralwatt` — provider adapters.
13
+ - `@arnilo/prism-provider-anthropic`, `@arnilo/prism-provider-google`, `@arnilo/prism-provider-openai`, `@arnilo/prism-provider-openrouter`, `@arnilo/prism-provider-kimi`, `@arnilo/prism-provider-zai`, `@arnilo/prism-provider-opencode-go`, `@arnilo/prism-provider-neuralwatt` — provider adapters.
14
14
  - `@arnilo/prism-provider-ai-sdk` — optional AI SDK `LanguageModelV4` adapter; included by the provider and all umbrellas.
15
15
  - `@arnilo/prism-compaction-llm` — optional LLM-backed compaction strategy.
16
16
  - `@arnilo/prism-compaction-observational-memory` — optional source-backed observational memory.
@@ -27,18 +27,19 @@ First-party workspace packages (each has non-optional `@arnilo/prism@0.0.8` peer
27
27
  - `@arnilo/prism-server` — optional framework-free authorized Web agent/workflow routes (peers on workflows).
28
28
  - `@arnilo/prism-supervisor` — optional bounded child delegation and A2A 1.0 card/server/client interoperability.
29
29
  - `@arnilo/prism-web-tools` — optional bounded host-selected Brave/Exa search and Firecrawl Markdown/schema extraction; native fetch, no vendor SDK/browser.
30
+ - `@arnilo/prism-browser` — optional host-supplied Playwright browser tools (`browser_open`/`browser_snapshot`/`browser_act`/`browser_close`); import launches nothing; `playwright-core@1.61.0` optional peer.
30
31
 
31
32
  Family/profile packages (pure manifests, no code or `dist`; ship `README.md` and `CHANGELOG.md`; use exact hard `dependencies`):
32
33
 
33
- - `@arnilo/prism-providers` — all seven `@arnilo/prism-provider-*` packages: six HTTP adapters plus AI SDK interoperability.
34
+ - `@arnilo/prism-providers` — all nine `@arnilo/prism-provider-*` packages: eight HTTP adapters plus AI SDK interoperability.
34
35
  - `@arnilo/prism-compaction` — both `@arnilo/prism-compaction-*` packages.
35
36
  - `@arnilo/prism-base` — core + compaction family + JSON Schema validator; excludes providers, MCP, native credentials/storage, and coding tools.
36
37
  - `@arnilo/prism-code` — base + coding-agent + coding-security + MCP; providers and persistence remain explicit choices.
37
38
  - `@arnilo/prism-sdk` — base + workflows + MCP + Node credentials + OpenTelemetry; providers and persistence remain explicit choices.
38
39
  - `@arnilo/prism-evals` remains optional and network-free by default; model judges are host callbacks and live credentialed gates run separately. `examples/evaluation-gate.ts` demonstrates non-zero threshold gating.
39
- - `@arnilo/prism-all` — every first-party package: code + SDK + providers + persistence + evals + memory/RAG + server + supervisor + web tools. Installation alone activates no network/listener, telemetry, database, memory, evaluation, delegation, MCP, shell, or filesystem capability.
40
+ - `@arnilo/prism-all` — every first-party package: code + SDK + providers + persistence + evals + memory/RAG + server + supervisor + web tools + browser. Installation alone activates no network/listener, telemetry, database, memory, evaluation, delegation, MCP, shell, filesystem, or browser capability.
40
41
 
41
- Profile footprint snapshot (Node 24/npm 11, lockfile graph, 2026-07-19): `base` reaches 6 first-party packages and one external dependency root (Ajv); `code` reaches 10 and three (Ajv, MCP SDK, diff); `sdk` reaches 11 and three (Ajv, MCP SDK, keyring); `all` reaches all 31 first-party manifests and seven external roots (those plus better-sqlite3, pg, and AI SDK provider types). Native database drivers stay out of base/code/sdk; both appear only in all.
42
+ Profile footprint snapshot (Node 24/npm 11, lockfile graph, 2026-07-19): `base` reaches 6 first-party packages and one external dependency root (Ajv); `code` reaches 10 and three (Ajv, MCP SDK, diff); `sdk` reaches 11 and three (Ajv, MCP SDK, keyring); `all` reaches all 34 first-party manifests and seven external roots (those plus better-sqlite3, pg, and AI SDK provider types). Native database drivers stay out of base/code/sdk; both appear only in all.
42
43
 
43
44
  Each code package's `files` array is `["dist", "!dist/__tests__", "!dist/**/*.map", "README.md", "CHANGELOG.md"]`; `README.md`, `LICENSE`, and `CHANGELOG.md` ship in every code-package tarball, the core tarball also ships the `docs/` directory, and family/profile tarballs ship `README.md` + `CHANGELOG.md` + `package.json`.
44
45
 
@@ -61,13 +62,14 @@ Consumers install the core package for the runtime and add first-party packages
61
62
  | Install everything | `npm install @arnilo/prism-all` |
62
63
  | Install core + a single provider | `npm install @arnilo/prism @arnilo/prism-provider-openai` |
63
64
  | Install bounded web research tools | `npm install @arnilo/prism @arnilo/prism-web-tools @arnilo/prism-tool-validator-json-schema` |
65
+ | Install browser automation tools | `npm install @arnilo/prism @arnilo/prism-browser playwright-core@1.61.0` |
64
66
  | Build everything (core + workspaces) | `npm run build` |
65
67
  | Run the default (network-free) test suite | `npm test` |
66
68
  | Dry-run pack core + every package | `npm run pack:dry-run` |
67
69
  | Local mirror of the release verify gate | `npm run release:dry-run` |
68
- | Validate clean tag/version/ranges and reject registry collisions | `npm run release:check -- --version 0.0.8` |
69
- | Preview deterministic publish order | `npm run release:publish -- --version 0.0.8 --dry-run --allow-dirty --allow-untagged` |
70
- | Resume interrupted tagged publication | `npm run release:publish -- --version 0.0.8 --resume --report release-artifacts/publish-report.json` |
70
+ | Validate clean tag/version/ranges and reject registry collisions | `npm run release:check -- --version 0.0.11` |
71
+ | Preview deterministic publish order | `npm run release:publish -- --version 0.0.11 --dry-run --allow-dirty --allow-untagged` |
72
+ | Resume interrupted tagged publication | `npm run release:publish -- --version 0.0.11 --resume --report release-artifacts/publish-report.json` |
71
73
  | Full SDK readiness gate (typecheck + offline tests + pack) | `npm run sdk:ready` |
72
74
 
73
75
  Public core import specifiers (from the root `exports` map):
@@ -104,7 +106,7 @@ A packed tarball contains only public compiled output and release files:
104
106
  - Code packages ship `README.md`, `LICENSE`, and `CHANGELOG.md`; family/profile packages ship `README.md` and `CHANGELOG.md`.
105
107
  - The core tarball additionally ships the full `docs/` directory (the docs hub) and `templates/init/` used by `prism init`.
106
108
  - `dist/cli.js` and the `bin` link in core.
107
- - **Tarball filenames.** npm strips the `@scope/` prefix, so the core package `@arnilo/prism` produces a tarball named `arnilo-prism-0.0.8.tgz`; first-party packages produce `arnilo-prism-provider-<name>-0.0.8.tgz` / `arnilo-prism-compaction-<name>-0.0.8.tgz` / `arnilo-prism-coding-agent-0.0.8.tgz`; family/profile packages produce `arnilo-prism-{providers,compaction,base,code,sdk,all}-0.0.8.tgz`. The CLI bin name `prism` is unaffected by the package name (`npx prism` still works; npm allows the bin field to differ from the package name).
109
+ - **Tarball filenames.** npm strips the `@scope/` prefix, so the core package `@arnilo/prism` produces a tarball named `arnilo-prism-0.0.11.tgz`; first-party packages produce `arnilo-prism-provider-<name>-0.0.11.tgz` / `arnilo-prism-compaction-<name>-0.0.11.tgz` / `arnilo-prism-coding-agent-0.0.11.tgz`; family/profile packages produce `arnilo-prism-{providers,compaction,base,code,sdk,all}-0.0.11.tgz`. The CLI bin name `prism` is unaffected by the package name (`npx prism` still works; npm allows the bin field to differ from the package name).
108
110
 
109
111
  Excluded from every tarball by `files` negation:
110
112
 
@@ -123,9 +125,9 @@ Excluded from every tarball by `files` negation:
123
125
  "name": "host-app",
124
126
  "type": "module",
125
127
  "dependencies": {
126
- "@arnilo/prism": "0.0.8",
127
- "@arnilo/prism-provider-openai": "0.0.8",
128
- "@arnilo/prism-compaction-observational-memory": "0.0.8"
128
+ "@arnilo/prism": "0.0.11",
129
+ "@arnilo/prism-provider-openai": "0.0.11",
130
+ "@arnilo/prism-compaction-observational-memory": "0.0.11"
129
131
  }
130
132
  }
131
133
  ```
@@ -135,7 +137,7 @@ Installing the provider/compaction packages without `@arnilo/prism` present prod
135
137
  ```text
136
138
  npm error code ERESOLVE
137
139
  npm error Could not resolve dependency:
138
- npm error peer @arnilo/prism@"0.0.8" from @arnilo/prism-provider-openai@0.0.8
140
+ npm error peer @arnilo/prism@"0.0.11" from @arnilo/prism-provider-openai@0.0.11
139
141
  ```
140
142
 
141
143
  ## Implementation example
@@ -168,11 +170,11 @@ For SDK readiness, run the same one-command gate directly. It composes existing
168
170
  npm run sdk:ready
169
171
  ```
170
172
 
171
- Release publication derives all 31 packages from the workspace once, validates exact `0.0.8` manifest/lockfile/internal ranges, then uses deterministic dependency order. `release:check` requires a clean commit tagged `v0.0.8` and rejects any existing registry version. `release:publish --resume` skips only registry versions whose internal dependency fingerprint matches the local manifest; conflicting versions fail closed. Each attempted package is written immediately to the JSON report, so a failed job can rerun safely. `--dry-run` still performs registry availability checks and invokes `npm publish --dry-run` with explicit public access, provenance, and `latest` tag.
173
+ Release publication derives all 34 packages from the workspace once, validates exact `0.0.11` manifest/lockfile/internal ranges, then uses deterministic dependency order. `release:check` requires a clean commit tagged `v0.0.11` and rejects any existing registry version. `release:publish --resume` skips only registry versions whose internal dependency fingerprint matches the local manifest; conflicting versions fail closed. Each attempted package is written immediately to the JSON report, so a failed job can rerun safely. `--dry-run` still performs registry availability checks and invokes `npm publish --dry-run` with explicit public access, provenance, and `latest` tag.
172
174
 
173
175
  ```bash
174
- npm run release:check -- --version 0.0.8
175
- npm run release:publish -- --version 0.0.8 --dry-run --allow-dirty --allow-untagged
176
+ npm run release:check -- --version 0.0.11
177
+ npm run release:publish -- --version 0.0.11 --dry-run --allow-dirty --allow-untagged
176
178
  ```
177
179
 
178
180
  `--allow-dirty` and `--allow-untagged` exist only for local preview; real publication and CI never pass them. npm registry calls occur only in these release preflight/publication commands, never build/test/package discovery.
@@ -183,9 +185,9 @@ Optional live smoke tests stay separate from SDK readiness because they require
183
185
  PRISM_LIVE_PROVIDER_TESTS=1 npm run test --workspaces --if-present
184
186
  ```
185
187
 
186
- ### 0.0.8 publish handoff
188
+ ### 0.0.11 publish handoff
187
189
 
188
- **Decision: GO after operator prerequisites below.** Code, tests, package graph, protected PostgreSQL CI, registry availability, packed artifacts, security gates, and dependency-ordered publication dry-run passed from the Phase 3 release-candidate tree. Clean protected-branch CI, signed commit/tag, npm authentication, OIDC attestation, and actual publication remain operator/workflow prerequisites. No package was published during readiness work.
190
+ **Decision: GO after operator prerequisites below.** Phase 6 coding-harness fundamentals: `SessionIndex`/`searchSessions`, assembler `contextBudget`, `@arnilo/prism-provider-anthropic` + `@arnilo/prism-provider-google`, mid-run `steer`, coding-agent `runCodingGoalVerify` + opt-in `ask_user_decision`, and `scripts/benchmark-0.0.11.mjs` search/budget evidence. Code, tests, exact `0.0.11` package graph (34 manifests), packed artifacts, security gates, and dependency-ordered publication dry-run passed from the Phase 6 release-candidate tree. Clean protected-branch CI, signed commit/tag, npm authentication, OIDC attestation, protected Anthropic/Google live canaries + Docker/Playwright/PostgreSQL gates (when host-provisioned), and actual publication remain operator/workflow prerequisites. No package was published during readiness work. Scope is coding-harness P1 only; **no Office** package, binary, SDK, wrapper, docs page, test, or release gate exists. Host mode never claims disposable containment. `@arnilo/prism-browser` remains optional via `@arnilo/prism-all` only.
189
191
 
190
192
  #### npm authentication prerequisite
191
193
 
@@ -193,7 +195,7 @@ The existing GitHub Actions secret `NPM_TOKEN` is used only by the publish step
193
195
 
194
196
  #### Release commit and tag
195
197
 
196
- Merge through the protected release branch, then run these commands from a clean checkout of the protected merge commit. `git push origin v0.0.8` is the workflow dispatch; there is no manual publish command.
198
+ Merge through the protected release branch, then run these commands from a clean checkout of the protected merge commit. `git push origin v0.0.11` is the workflow dispatch; there is no manual publish command.
197
199
 
198
200
  ```bash
199
201
  # Prepare and push the release commit.
@@ -202,22 +204,153 @@ npm ci
202
204
  npm run sdk:ready
203
205
  git add -A
204
206
  git diff --cached --check
205
- git commit -S -m "Release 0.0.8"
207
+ git commit -S -m "Release 0.0.11"
206
208
  git push origin HEAD
207
209
 
208
210
  # Merge/confirm protected branch CI, then check out that exact clean merge commit.
209
211
  test -z "$(git status --porcelain)"
210
212
  npm ci
211
- npm run release:check -- --version 0.0.8 --allow-untagged --report /tmp/prism-0.0.8-preflight.json
213
+ npm run release:check -- --version 0.0.11 --allow-untagged --report /tmp/prism-0.0.11-preflight.json
212
214
 
213
- git tag -s v0.0.8 -m "Prism 0.0.8"
214
- git verify-tag v0.0.8
215
- test "$(git rev-parse HEAD)" = "$(git rev-list -n 1 v0.0.8)"
216
- npm run release:check -- --version 0.0.8 --report /tmp/prism-0.0.8-tagged-preflight.json
217
- git push origin v0.0.8
215
+ git tag -s v0.0.11 -m "Prism 0.0.11"
216
+ git verify-tag v0.0.11
217
+ test "$(git rev-parse HEAD)" = "$(git rev-list -n 1 v0.0.11)"
218
+ npm run release:check -- --version 0.0.11 --report /tmp/prism-0.0.11-tagged-preflight.json
219
+ git push origin v0.0.11
218
220
  ```
219
221
 
220
- The tag workflow's only publication command is `npm run release:publish -- --version "${GITHUB_REF_NAME#v}" --resume --report release-artifacts/publish-report.json`. Latest registry preflight returned `available` for all 31 `0.0.8` versions. Publisher order is stable and dependency-safe:
222
+ The tag workflow's only publication command is `npm run release:publish -- --version "${GITHUB_REF_NAME#v}" --resume --report release-artifacts/publish-report.json`. Latest registry preflight returned `available` for all 34 `0.0.11` versions at handoff. Publisher order is stable and dependency-safe (run `node -e` via `release:check` for the live order). Package set:
223
+
224
+ ```text
225
+ @arnilo/prism
226
+ @arnilo/prism-coding-agent
227
+ @arnilo/prism-coding-security
228
+ @arnilo/prism-compaction-llm
229
+ @arnilo/prism-compaction-observational-memory
230
+ @arnilo/prism-credentials-node
231
+ @arnilo/prism-evals
232
+ @arnilo/prism-mcp
233
+ @arnilo/prism-memory
234
+ @arnilo/prism-observability-opentelemetry
235
+ @arnilo/prism-provider-ai-sdk
236
+ @arnilo/prism-provider-anthropic
237
+ @arnilo/prism-provider-google
238
+ @arnilo/prism-provider-kimi
239
+ @arnilo/prism-provider-neuralwatt
240
+ @arnilo/prism-provider-openai
241
+ @arnilo/prism-provider-opencode-go
242
+ @arnilo/prism-provider-openrouter
243
+ @arnilo/prism-provider-zai
244
+ @arnilo/prism-session-store-postgres
245
+ @arnilo/prism-session-store-sqlite
246
+ @arnilo/prism-supervisor
247
+ @arnilo/prism-tool-validator-json-schema
248
+ @arnilo/prism-web-tools
249
+ @arnilo/prism-browser
250
+ @arnilo/prism-workflows
251
+ @arnilo/prism-compaction
252
+ @arnilo/prism-providers
253
+ @arnilo/prism-rag
254
+ @arnilo/prism-server
255
+ @arnilo/prism-base
256
+ @arnilo/prism-code
257
+ @arnilo/prism-sdk
258
+ @arnilo/prism-all
259
+ ```
260
+
261
+ #### Interruption and resume
262
+
263
+ Do not create another tag or rerun packages manually. Re-run failed jobs for the same tag in GitHub Actions. The workflow invokes `release:publish --resume`: registry versions with matching names, versions, and internal dependency fingerprints are skipped; any mismatch stops the job. Retain `release-artifacts-v0.0.11` and `publish-report-v0.0.11` for audit.
264
+
265
+ #### Bounded post-publish smoke
266
+
267
+ Download the workflow artifact and run `sha256sum -c SHA256SUMS`. Then verify all registry versions/tags/integrity and install the complete profile in a fresh directory:
268
+
269
+ ```bash
270
+ while read -r package; do
271
+ test "$(npm view "$package@0.0.11" version)" = "0.0.11"
272
+ test "$(npm view "$package" dist-tags.latest)" = "0.0.11"
273
+ npm view "$package@0.0.11" dist.integrity >/dev/null
274
+ done <<'PACKAGES'
275
+ @arnilo/prism
276
+ @arnilo/prism-coding-agent
277
+ @arnilo/prism-coding-security
278
+ @arnilo/prism-compaction-llm
279
+ @arnilo/prism-compaction-observational-memory
280
+ @arnilo/prism-credentials-node
281
+ @arnilo/prism-evals
282
+ @arnilo/prism-mcp
283
+ @arnilo/prism-memory
284
+ @arnilo/prism-observability-opentelemetry
285
+ @arnilo/prism-provider-ai-sdk
286
+ @arnilo/prism-provider-anthropic
287
+ @arnilo/prism-provider-google
288
+ @arnilo/prism-provider-kimi
289
+ @arnilo/prism-provider-neuralwatt
290
+ @arnilo/prism-provider-openai
291
+ @arnilo/prism-provider-opencode-go
292
+ @arnilo/prism-provider-openrouter
293
+ @arnilo/prism-provider-zai
294
+ @arnilo/prism-session-store-postgres
295
+ @arnilo/prism-session-store-sqlite
296
+ @arnilo/prism-supervisor
297
+ @arnilo/prism-tool-validator-json-schema
298
+ @arnilo/prism-web-tools
299
+ @arnilo/prism-browser
300
+ @arnilo/prism-workflows
301
+ @arnilo/prism-compaction
302
+ @arnilo/prism-providers
303
+ @arnilo/prism-rag
304
+ @arnilo/prism-server
305
+ @arnilo/prism-base
306
+ @arnilo/prism-code
307
+ @arnilo/prism-sdk
308
+ @arnilo/prism-all
309
+ PACKAGES
310
+
311
+ npm audit signatures --json --include-attestations
312
+ npm install --no-audit --no-fund @arnilo/prism-all@0.0.11
313
+ ```
314
+
315
+ #### Rollback limitations
316
+
317
+ npm publication is not transactional and published versions are immutable. Partial publication is a resume case, not rollback. For a confirmed systemic defect after completion, deprecate every affected `@0.0.11`; restore `latest` to the previous good release only where that tag already existed. Exact `0.0.11` installs remain possible, so publish a fixed version promptly. Do not unpublish except for a security/legal emergency under npm policy.
318
+
319
+ ### 0.0.10 publish handoff (historical)
320
+
321
+ **Decision: GO after operator prerequisites below.** Phase 5 coding-harness unified workspace: required `workspaceMode`, fail-closed mixed wiring, sandbox FS auto-wire, tree identity, adversarial consistency tests, and `scripts/benchmark-0.0.10.mjs` evidence. Code, tests, exact `0.0.10` package graph (retargeted from post-ship `0.0.96`), packed artifacts, security gates, and dependency-ordered publication dry-run passed from the Phase 5 release-candidate tree. Clean protected-branch CI, signed commit/tag, npm authentication, OIDC attestation, protected Docker/Playwright live gates (when host-provisioned), and actual publication remain operator/workflow prerequisites. No package was published during readiness work. Scope is coding-harness P0 only; **no Office** package, binary, SDK, wrapper, docs page, test, or release gate exists. Host mode never claims disposable containment.
322
+
323
+ #### npm authentication prerequisite
324
+
325
+ The existing GitHub Actions secret `NPM_TOKEN` is used only by the publish step as `NODE_AUTH_TOKEN`, matching previous Prism releases. Confirm that token remains valid and can publish existing and new public packages under `@arnilo`; no additional secret or manual npm publish is required. The workflow also requests OIDC and always passes `--provenance`.
326
+
327
+ #### Release commit and tag
328
+
329
+ Merge through the protected release branch, then run these commands from a clean checkout of the protected merge commit. `git push origin v0.0.10` is the workflow dispatch; there is no manual publish command.
330
+
331
+ ```bash
332
+ # Prepare and push the release commit.
333
+ git diff --check
334
+ npm ci
335
+ npm run sdk:ready
336
+ git add -A
337
+ git diff --cached --check
338
+ git commit -S -m "Release 0.0.10"
339
+ git push origin HEAD
340
+
341
+ # Merge/confirm protected branch CI, then check out that exact clean merge commit.
342
+ test -z "$(git status --porcelain)"
343
+ npm ci
344
+ npm run release:check -- --version 0.0.10 --allow-untagged --report /tmp/prism-0.0.10-preflight.json
345
+
346
+ git tag -s v0.0.10 -m "Prism 0.0.10"
347
+ git verify-tag v0.0.10
348
+ test "$(git rev-parse HEAD)" = "$(git rev-list -n 1 v0.0.10)"
349
+ npm run release:check -- --version 0.0.10 --report /tmp/prism-0.0.10-tagged-preflight.json
350
+ git push origin v0.0.10
351
+ ```
352
+
353
+ The tag workflow's only publication command is `npm run release:publish -- --version "${GITHUB_REF_NAME#v}" --resume --report release-artifacts/publish-report.json`. Latest registry preflight returned `available` for all 32 `0.0.10` versions at handoff. Publisher order is stable and dependency-safe:
221
354
 
222
355
  ```text
223
356
  1 @arnilo/prism
@@ -241,21 +374,22 @@ The tag workflow's only publication command is `npm run release:publish -- --ver
241
374
  19 @arnilo/prism-supervisor
242
375
  20 @arnilo/prism-tool-validator-json-schema
243
376
  21 @arnilo/prism-web-tools
244
- 22 @arnilo/prism-workflows
245
- 23 @arnilo/prism-coding-security
246
- 24 @arnilo/prism-compaction
247
- 25 @arnilo/prism-providers
248
- 26 @arnilo/prism-rag
249
- 27 @arnilo/prism-server
250
- 28 @arnilo/prism-base
251
- 29 @arnilo/prism-code
252
- 30 @arnilo/prism-sdk
253
- 31 @arnilo/prism-all
377
+ 22 @arnilo/prism-browser
378
+ 23 @arnilo/prism-workflows
379
+ 24 @arnilo/prism-coding-security
380
+ 25 @arnilo/prism-compaction
381
+ 26 @arnilo/prism-providers
382
+ 27 @arnilo/prism-rag
383
+ 28 @arnilo/prism-server
384
+ 29 @arnilo/prism-base
385
+ 30 @arnilo/prism-code
386
+ 31 @arnilo/prism-sdk
387
+ 32 @arnilo/prism-all
254
388
  ```
255
389
 
256
390
  #### Interruption and resume
257
391
 
258
- Do not create another tag or rerun packages manually. Re-run failed jobs for the same tag in GitHub Actions. The workflow invokes `release:publish --resume`: registry versions with matching names, versions, and internal dependency fingerprints are skipped; any mismatch stops the job. Retain `release-artifacts-v0.0.8` and `publish-report-v0.0.8` for audit.
392
+ Do not create another tag or rerun packages manually. Re-run failed jobs for the same tag in GitHub Actions. The workflow invokes `release:publish --resume`: registry versions with matching names, versions, and internal dependency fingerprints are skipped; any mismatch stops the job. Retain `release-artifacts-v0.0.10` and `publish-report-v0.0.10` for audit.
259
393
 
260
394
  #### Bounded post-publish smoke
261
395
 
@@ -263,9 +397,9 @@ Download the workflow artifact and run `sha256sum -c SHA256SUMS`. Then verify al
263
397
 
264
398
  ```bash
265
399
  while read -r package; do
266
- test "$(npm view "$package@0.0.8" version)" = "0.0.8"
267
- test "$(npm view "$package" dist-tags.latest)" = "0.0.8"
268
- npm view "$package@0.0.8" dist.integrity >/dev/null
400
+ test "$(npm view "$package@0.0.10" version)" = "0.0.10"
401
+ test "$(npm view "$package" dist-tags.latest)" = "0.0.10"
402
+ npm view "$package@0.0.10" dist.integrity >/dev/null
269
403
  done <<'PACKAGES'
270
404
  @arnilo/prism
271
405
  @arnilo/prism-coding-agent
@@ -279,6 +413,7 @@ done <<'PACKAGES'
279
413
  @arnilo/prism-server
280
414
  @arnilo/prism-supervisor
281
415
  @arnilo/prism-observability-opentelemetry
416
+ @arnilo/prism-provider-ai-sdk
282
417
  @arnilo/prism-provider-kimi
283
418
  @arnilo/prism-provider-neuralwatt
284
419
  @arnilo/prism-provider-openai
@@ -289,6 +424,7 @@ done <<'PACKAGES'
289
424
  @arnilo/prism-session-store-sqlite
290
425
  @arnilo/prism-tool-validator-json-schema
291
426
  @arnilo/prism-web-tools
427
+ @arnilo/prism-browser
292
428
  @arnilo/prism-workflows
293
429
  @arnilo/prism-coding-security
294
430
  @arnilo/prism-compaction
@@ -302,7 +438,7 @@ PACKAGES
302
438
  consumer="$(mktemp -d)"
303
439
  cd "$consumer"
304
440
  npm init -y >/dev/null
305
- npm install --no-audit --no-fund @arnilo/prism-all@0.0.8
441
+ npm install --no-audit --no-fund @arnilo/prism-all@0.0.10
306
442
  node --input-type=module <<'NODE'
307
443
  for (const name of [
308
444
  "@arnilo/prism", "@arnilo/prism-coding-agent", "@arnilo/prism-coding-security",
@@ -314,6 +450,7 @@ for (const name of [
314
450
  "@arnilo/prism-tool-validator-json-schema", "@arnilo/prism-workflows", "@arnilo/prism-evals",
315
451
  "@arnilo/prism-provider-ai-sdk", "@arnilo/prism-memory", "@arnilo/prism-rag",
316
452
  "@arnilo/prism-server", "@arnilo/prism-supervisor", "@arnilo/prism-web-tools",
453
+ "@arnilo/prism-browser",
317
454
  ]) await import(name);
318
455
  NODE
319
456
  ./node_modules/.bin/prism --help >/dev/null
@@ -324,12 +461,12 @@ This smoke is bounded to registry metadata, imports, CLI startup, checksums, sig
324
461
 
325
462
  #### Rollback limitations
326
463
 
327
- npm publication is not transactional and published versions are immutable. Partial publication is a resume case, not rollback. For a confirmed systemic defect after completion, deprecate every affected `@0.0.8`; restore `latest` to `0.0.3` only for the 13 previously published packages, and remove `latest` from the 12 first-publication packages. Exact `0.0.8` installs remain possible, so publish a fixed version promptly. Do not unpublish except for a security/legal emergency under npm policy.
464
+ npm publication is not transactional and published versions are immutable. Partial publication is a resume case, not rollback. For a confirmed systemic defect after completion, deprecate every affected `@0.0.10`; restore `latest` to the previous good release only where that tag already existed. Exact `0.0.10` installs remain possible, so publish a fixed version promptly. Do not unpublish except for a security/legal emergency under npm policy.
328
465
 
329
466
  ## Extension and configuration notes
330
467
 
331
- - **Required `@arnilo/prism` peer.** Every first-party package declares `peerDependencies: { "@arnilo/prism": "0.0.8" }` with no `peerDependenciesMeta` (non-optional). The range stays pinned to `0.0.8` for the 0.x series and will widen to `^1.0.0` at the 1.x stable release. Inside the workspace each package also declares `"@arnilo/prism": "file:../.."` in `devDependencies` so `npm install` resolves the peer locally; that devDependency is stripped from consumer installs and is not a runtime dependency.
332
- - **Public access.** All 31 manifests (25 code packages + 6 family/profile packages) declare `"publishConfig": { "access": "public" }`; the publisher also passes `--access public` explicitly because scoped packages otherwise default to restricted on first publish.
468
+ - **Required `@arnilo/prism` peer.** Every first-party package declares a non-optional `@arnilo/prism@0.0.11` peer (`peerDependenciesMeta` must not mark `@arnilo/prism` optional; other peers such as `playwright-core` may be optional). The range stays pinned to `0.0.11` for the 0.x series and will widen to `^1.0.0` at the 1.x stable release. Inside the workspace each package also declares `"@arnilo/prism": "file:../.."` in `devDependencies` so `npm install` resolves the peer locally; that devDependency is stripped from consumer installs and is not a runtime dependency.
469
+ - **Public access.** All 34 manifests (28 code packages + 6 family/profile packages) declare `"publishConfig": { "access": "public" }`; the publisher also passes `--access public` explicitly because scoped packages otherwise default to restricted on first publish.
333
470
  - **Map retention knob.** Source maps are emitted locally but stripped from tarballs by `!dist/**/*.map`. Removing that `files` negation ships maps in releases (larger tarballs, better consumer stack traces).
334
471
  - **Release workflow.** `.github/workflows/release.yml` has six jobs. `verify` runs network-free SDK readiness on Node 24; `node20-compat` builds/imports every public root `exports` default target on Node 20 for declared `engines.node >=20` (docs examples need Node >=22.6 native TypeScript stripping); `postgres-integration` uses `pgvector/pgvector:pg16`; `supply-chain` runs high-severity audit, SPDX/license policy, and tracked-source secret scanning; and tag-only `codeql-release` runs SAST. Tag-only `publish` needs all five gates, preserves clean exact-tag/version/topological publication, and alone receives `NPM_TOKEN`, `id-token: write`, and `attestations: write`. Before npm publish it packs all current tarballs, generates checksums plus SPDX, scans unpacked public artifacts, creates GitHub attestations for tarballs and SBOM, then retains artifacts for 30 days. Registry state remains the resumable journal. Local `npm run release:dry-run` remains network-free SDK readiness; local PostgreSQL coverage is `PRISM_TEST_POSTGRES_URL=... npm run test:postgres`.
335
472
  - **Adding a package.** New workspace packages are picked up automatically by `npm run build --workspaces`, `npm test --workspaces`, `npm run pack:dry-run`, the packaging guard (`src/__tests__/packaging.test.ts`), and the install-smoke test (`src/__tests__/install-smoke.test.ts`) via the workspace glob; add the package to both tests' config arrays for explicit per-package assertions.
@@ -338,7 +475,7 @@ npm publication is not transactional and published versions are immutable. Parti
338
475
 
339
476
  - **No secrets or fixtures in tarballs.** Tests, fixtures, `src/`, `plans/`, `.agents/`, `roadmap.md`, and `tsconfig` files are excluded. The `docs avoid real-looking secret examples` docs check and the packaging guard's deny list prevent secret-bearing fixtures from shipping.
340
477
  - **Live tests stay opt-in.** The default `npm test` is network-free by construction and never sets these vars. Provider/compaction live gates stay credential-gated and are not set by default or during `sdk:ready`. The PostgreSQL adapter live matrix is the exception that runs in CI via the dedicated `postgres-integration` job (still skipped in the default suite).
341
- - `PRISM_LIVE_PROVIDER_TESTS=1` — gates the six provider packages' `src/__tests__/live.test.ts` (`@arnilo/prism-provider-openai`, `provider-opencode-go`, `provider-openrouter`, `provider-zai`, `provider-kimi`, `provider-neuralwatt`). Each provider live test also requires its own API key env var and skips safely when it is missing:
478
+ - `PRISM_LIVE_PROVIDER_TESTS=1` — gates the eight provider packages' `src/__tests__/live.test.ts` (`@arnilo/prism-provider-anthropic`, `provider-google`, `provider-openai`, `provider-opencode-go`, `provider-openrouter`, `provider-zai`, `provider-kimi`, `provider-neuralwatt`). Each provider live test also requires its own API key env var and skips safely when it is missing:
342
479
  - `OPENAI_API_KEY` for `@arnilo/prism-provider-openai`
343
480
  - `OPENROUTER_API_KEY` for `@arnilo/prism-provider-openrouter`
344
481
  - `KIMI_API_KEY` for `@arnilo/prism-provider-kimi`
@@ -346,6 +483,8 @@ npm publication is not transactional and published versions are immutable. Parti
346
483
  - `NEURALWATT_API_KEY` for `@arnilo/prism-provider-neuralwatt`
347
484
  - `OPENCODE_API_KEY` for `@arnilo/prism-provider-opencode-go`
348
485
  - `PRISM_LIVE_WEB=1` — gates `@arnilo/prism-web-tools` restricted live tests; provider calls additionally require `PRISM_BRAVE_SEARCH_TOKEN`, `PRISM_EXA_API_KEY`, or `PRISM_FIRECRAWL_API_KEY`. Run `npm run test:live -w @arnilo/prism-web-tools`; default tests use injected fake fetch only.
486
+ - `PRISM_TEST_PLAYWRIGHT=1` or `PRISM_LIVE_PLAYWRIGHT=1` — gates `@arnilo/prism-browser` protected Playwright adversarial matrix (`npm run test:live -w @arnilo/prism-browser`). Host must supply a pinned Chromium binary via `playwright-core`. Default tests use fake Playwright APIs only; enabled but missing browser fails closed.
487
+ - `PRISM_TEST_DOCKER_SANDBOX=1` — gates `@arnilo/prism-coding-security` protected Docker matrix. Requires host-preloaded digest-pinned `PRISM_TEST_DOCKER_IMAGE` and absolute `PRISM_TEST_DOCKER_BIN` (optional `PRISM_TEST_DOCKER_USER`). Prism never pulls/builds the image during default tests. Missing prerequisites fail closed when the gate is enabled; disabled gate skips safely.
349
488
  - `PRISM_LIVE_CANARIES=1` — gates `scripts/live-canary.mjs`, used only by scheduled/manual `.github/workflows/live-canaries.yml` in protected `live-canaries` environment. It requires provider endpoint/key/model, MCP endpoint/token, A2A endpoint/token, and Brave token environment entries; performs four probes plus at most one MCP session DELETE; caps provider output at one token, each response at 64 KiB, each request at 15 seconds (30 seconds hard), and emits only aggregate kind/status/code/duration. Disabled gate skips before network; enabled but incomplete configuration fails closed.
350
489
  - `PRISM_LIVE_COMPACTION_TESTS=1` — gates `@arnilo/prism-compaction-llm`'s live summary-provider smoke test (placeholder).
351
490
  - `PRISM_LIVE_OBSERVATIONAL_MEMORY_TESTS=1` — gates `@arnilo/prism-compaction-observational-memory`'s live worker/provider checks (placeholder).
@@ -354,32 +493,26 @@ npm publication is not transactional and published versions are immutable. Parti
354
493
  - Provider live tests read the API key from the env only when both gates are set; the key is used as a bearer token and never logged. `assertNoSecretLeak` verifies the key value does not appear in any streamed event. The compaction placeholders still carry no real credentials.
355
494
  - Enforced by `network-free-guard.test.ts` (default suite stays network-free) and by source-scanning meta-tests that assert each `live.test.ts` keeps its `skip:` guard.
356
495
  - **Supply-chain workflows.** `.github/workflows/security.yml` runs CodeQL JavaScript/TypeScript SAST, PR-only dependency review, `npm audit`, SPDX 2.3 generation, exact license allow/deny policy, tracked-source plus unpacked-tarball credential-pattern scans, and seven-day SBOM retention. Dependabot opens bounded weekly npm and GitHub Actions updates. Every third-party action uses a full immutable revision; workflows never use `pull_request_target`. GitHub repository secret scanning/push protection and required-check branch rules remain repository settings because GitHub provides no equivalent checked-in workflow toggle; enable `security / codeql`, `security / supply-chain`, PR dependency review, and release checks on protected branches.
496
+ - **Sandbox/browser protected workflow.** `.github/workflows/sandbox-browser.yml` is scheduled/manual only in protected `sandbox-browser` environment. It runs network-free adversarial eval fixtures by default, optionally enables digest-pinned Docker and Playwright gates via repository variables (`PRISM_TEST_DOCKER_IMAGE`, `PRISM_ENABLE_PLAYWRIGHT_GATE`), receives no provider/npm/OIDC secrets, and uploads only a redacted aggregate status artifact (7-day retention).
357
497
  - **Release attestations.** Tag publication uses GitHub OIDC with only `contents: read`, `id-token: write`, and `attestations: write` at the publish job. `actions/attest-build-provenance` attests every `.tgz` and `sbom.spdx.json` before npm publication; npm still receives `--provenance`. Verify downloaded attestations with GitHub CLI and npm signatures on the release host.
358
498
  - **Install smoke is offline.** The install-smoke test packs core + every package into a temp dir and installs tarballs with `--offline --no-audit --no-fund` into a fresh project. External dependencies are satisfied from the lockfile-backed npm cache prepared by `npm ci`; any attempted uncached registry fetch fails the gate.
359
499
  - **Offline test budget.** The default `npm test` (no `PRISM_LIVE_PROVIDER_TESTS`) is pinned at **< 60s on Node 20** with a measured local baseline of ~45s (build ~18s + network-free tests/workspace tests/packaging smoke ~27s). The full CI `sdk:ready` gate runs on Node 24 because docs tests execute `examples/*.ts` via native TypeScript stripping. `npm run sdk:ready` also runs typecheck and pack dry-run, so it is allowed to exceed the `npm test` budget while remaining network-free. The CI `sdk:ready` step has `timeout-minutes: 5` as a hang backstop; the separate Node 20 compatibility step has `timeout-minutes: 3`. The budget was raised from 30s after the default suite grew to include every first-party package, offline install smoke, packaging guards, docs examples, and workspace tests; optimize before raising it again.
360
500
 
361
- ### 0.0.8 dependency audit decision (2026-07-20)
501
+ ### 0.0.11 dependency audit decision (2026-07-22)
362
502
 
363
- `npm audit --audit-level=high` reports 0 vulnerabilities and `npm ls --all --depth=0` resolves the exact 31-package `0.0.8` graph. Locked-install SPDX contains 183 packages and eight approved license expressions; `scripts/verify-sbom.mjs` passed. New runtime dependencies remain isolated to optional packages: MCP stays pinned to SDK 1.29.0 and web tools add no vendor SDK. Native `better-sqlite3` remains the sole install-script dependency and stays in opt-in SQLite.
503
+ `npm audit --audit-level=high` reports 0 vulnerabilities and `npm ls --all --depth=0` resolves the exact 34-package `0.0.11` graph (including `@arnilo/prism-provider-anthropic`, `@arnilo/prism-provider-google`, and `@arnilo/prism-browser`). Locked-install SPDX and `scripts/verify-sbom.mjs` pass. Browser keeps `playwright-core@1.61.0` as an optional peer and ships no browser binary/image; no Office package/binary enters the graph. Host mode never claims disposable containment.
364
504
 
365
- ### 0.0.8 release-candidate verification — 2026-07-20
366
505
 
367
- Phase 3 validation ran from this working tree without creating a release commit/tag or publishing. Clean protected-branch/tag, GitHub CodeQL/dependency-review, environment approval, OIDC, and actual canary/publication checks remain mandatory in the handoff above.
506
+ ### 0.0.11 release-candidate verification — 2026-07-22
368
507
 
369
508
  | Gate | Result |
370
509
  | --- | --- |
371
- | Node 24 full matrix | `npm run sdk:ready` passed in 87 seconds inside its five-minute backstop: 1,814 tests (1,789 pass, 25 explicit live skips, 0 fail), full typecheck/build/examples, docs/export/package/install smoke, workspace conformance, and 31 dry-run packs. |
372
- | Node 20 compatibility | Docker Node 20.20.1 performed a clean locked install, built all workspaces, and imported all 21 public root export targets. |
373
- | PostgreSQL | Fresh `pgvector/pgvector:pg16`: 17 session-store/persistence plus 14 memory/pgvector checks passed with 0 skips/failures. |
374
- | Packed consumer | Offline install smoke packed all 31 exact `0.0.8` tarballs into a fresh consumer, imported every public code package/core subpath, ran integration/composition journeys, and ran generated `prism init`. |
375
- | Artifact contents | 31 tarballs contain 783 files, about 860 kB packed and 3.28 MB unpacked. Core is 245 files, about 490 kB packed and 1.74 MB unpacked. Packaging deny-list and unpacked-artifact secret scan found no tests/maps/source/plans/secrets. |
376
- | Registry and order | Public preflight found all 31 `@arnilo/*@0.0.8` versions available. Dependency-ordered `release:publish --dry-run` completed 31/31 with explicit public/latest/provenance arguments; no publish occurred. |
377
- | Supply chain | High-severity audit: 0 vulnerabilities; dependency tree clean; SPDX/license policy passed (183 packages/eight expressions); tracked source (2,229 files) and unpacked artifacts (783 files) returned zero secret findings. Immutable-action/permission/attestation policy tests passed. Actual CodeQL/dependency-review and artifact attestations run only in protected GitHub workflows. |
378
- | Benchmarks | Dated 1,000-operation Node 24/Linux x64 results cover actual batched-ledger and in-memory OTel paths, snapshot-cache lookup, and provider/PostgreSQL/MCP/A2A/web local envelope shapes; table and non-live caveats are in `docs/performance.md`. |
379
- | Live prerequisites | Disposable PostgreSQL passed and `PRISM_TEST_KEYCHAIN=1` passed 27/27. Three web-provider live tests and provider/MCP/A2A protected canaries stayed explicitly skipped because this host has no release credentials/endpoints; disabled gate performed no network. |
380
- | Provenance/publication | GitHub OIDC attestations and npm provenance are generated only by authorized execution from clean signed `v0.0.8`; no commit, tag, attestation, or publication was created here. |
381
-
382
- Temporary containers, benchmark JSON, SBOM, packed tarballs, and dry-run reports were deleted or kept only under `/tmp`; protected CI recreates retained release artifacts.
510
+ | Package graph | Root + 33 workspaces = 34 publishable manifests at exact `0.0.11` with exact internal peer/dependency ranges; Anthropic/Google in `@arnilo/prism-providers` and transitively `@arnilo/prism-all`. |
511
+ | Coding harness P1 | SessionIndex/search, contextBudget, steer, ask_user_decision, runCodingGoalVerify; schema v4 FTS migration; `benchmark-0.0.11` search/budget schema green. |
512
+ | Providers | Native Anthropic + Google packages offline-conformant; live gates remain `PRISM_LIVE_PROVIDER_TESTS=1` + host keys. |
513
+ | SDK readiness | `npm run sdk:ready`: 2,047 tests (2,014 pass / 33 skip / 0 fail); pack 1,041,760 / 4,041,551 / 889 files; core 549,565 / 1,938,287 / 253. |
514
+ | Registry/order | Public `release:check` found all 34 `@arnilo/*@0.0.11` versions available. Dependency-ordered `release:publish --dry-run --allow-dirty --allow-untagged` completed 34/34 dry-run with explicit public/latest/provenance; no commit, tag, or publication created. |
515
+
383
516
 
384
517
  ## Release checklist
385
518
 
@@ -393,7 +526,7 @@ Every release gate maps to an exact enforcement test or command, so the checklis
393
526
  | Root SDK export surface freeze | `public-export-contract.test.ts` `root export surface is frozen` snapshots every value and type export of `src/index.ts` (107 value + 69 type) so any add/remove is a deliberate test update; `every frozen value export resolves at runtime` rebuilds `dist/index.js` and asserts each value export is present (catches build drift), and `every frozen type export appears in the built type declarations` asserts each type export is in `dist/index.d.ts`. |
394
527
  | Examples compile and are listed; runnable demos execute | `npm run typecheck` runs `tsc -p examples --noEmit`; `docs.test.ts` checks every `examples/*.ts` file is listed in `examples/README.md`, then runs demos offline and scans output for secrets. |
395
528
  | Examples run to completion with no secret leakage | `docs.test.ts` `examples_demos_run_to_completion_and_emit_no_secret` runs each demo (Node strips TypeScript types natively) with exit-0 and real-secret scans; `external_app_example_*` pins the DB-backed adapter reference exercising the `RunLedger`, branch-handle checkout, fork, and prior-run resume. |
396
- | Tarball excludes built tests, source maps, and source | `packaging.test.ts` rejects `dist/__tests__/`, `*.map`, `src/`, `plans/`, and internal files; confirms every package ships README/changelog (and code packages ship LICENSE), core ships docs + CLI, exported targets exist (`dist/index.js` + `dist/index.d.ts` for NeuralWatt), and `prism-all` transitively reaches all 31 published first-party manifests. |
529
+ | Tarball excludes built tests, source maps, and source | `packaging.test.ts` rejects `dist/__tests__/`, `*.map`, `src/`, `plans/`, and internal files; confirms every package ships README/changelog (and code packages ship LICENSE), core ships docs + CLI, exported targets exist (`dist/index.js` + `dist/index.d.ts` for NeuralWatt), and `prism-all` transitively reaches all 32 published first-party manifests. |
397
530
  | NeuralWatt package/docs/examples release gate | `packaging.test.ts` pins `@arnilo/prism-provider-neuralwatt` package exports/type declarations and `@arnilo/prism-providers`/`@arnilo/prism-all` membership; `docs.test.ts` asserts `docs/index.md` links `providers/neuralwatt.md` and `provider-caching.md`, and that `examples/cache-aware-prompt-assembly.ts` plus `examples/neuralwatt-agent-run.ts` exist and are listed. |
398
531
  | Version graph and resumable publication | `release.test.ts` covers exact package/lock/range validation, topological order, registry collisions, dry-run, interrupted reports/resume, clean tagged git state, provenance/public/tag arguments, and token-safe errors. `release:check` and `release:publish` derive the workspace graph without a manual package list. |
399
532
  | Supply-chain and live-canary policy | `supply-chain-security.test.ts` verifies SPDX allow/deny behavior, bounded source/artifact secret detection, credential-free canary reports, timeout/redacted failures, immutable action revisions, no `pull_request_target`, protected live environment, attestation paths, and publish dependency on `supply-chain`; CI adds CodeQL and PR dependency review. |