@pulse-compute/cli 0.0.0 → 1.0.0-beta.1

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 (190) hide show
  1. package/API.md +539 -0
  2. package/CHANGELOG.md +47 -0
  3. package/README.md +70 -1
  4. package/bin/pulse.js +15 -0
  5. package/bin/pulsewasm-extract.js +22 -0
  6. package/cli-spec.json +575 -0
  7. package/completions/_pulse +106 -0
  8. package/completions/pulse.bash +31 -0
  9. package/completions/pulse.fish +76 -0
  10. package/docs/README.md +77 -0
  11. package/docs/architecture/current-contracts.md +381 -0
  12. package/docs/architecture/overview.md +93 -0
  13. package/docs/architecture/vision.md +515 -0
  14. package/docs/concepts/bodies.md +186 -0
  15. package/docs/concepts/compilation-and-lowering.md +496 -0
  16. package/docs/concepts/contracts-and-providers.md +158 -0
  17. package/docs/concepts/effects-and-continuations.md +243 -0
  18. package/docs/concepts/entities-and-adapters.md +71 -0
  19. package/docs/concepts/package-owned-lowering.md +175 -0
  20. package/docs/concepts/targets-and-hosts.md +62 -0
  21. package/docs/contributing/README.md +38 -0
  22. package/docs/contributing/adding-core-provider.md +315 -0
  23. package/docs/contributing/adding-first-party-lowerer.md +327 -0
  24. package/docs/contributing/entities-lowering.md +91 -0
  25. package/docs/contributing/package-lowerer-contract.md +383 -0
  26. package/docs/contributing/pulse-aware-packages.md +149 -0
  27. package/docs/examples.md +112 -0
  28. package/docs/fixtures/inspect-fetch-composition.selected.json +181 -0
  29. package/docs/getting-started.md +128 -0
  30. package/docs/guides/compatibility-imports.md +60 -0
  31. package/docs/guides/deploying-fastly.md +188 -0
  32. package/docs/guides/deploying-node.md +143 -0
  33. package/docs/guides/events.md +233 -0
  34. package/docs/guides/fastly-capabilities.md +153 -0
  35. package/docs/guides/fetching-and-composition.md +101 -0
  36. package/docs/guides/grip.md +94 -0
  37. package/docs/guides/json-schemas.md +233 -0
  38. package/docs/guides/migrating-from-express.md +192 -0
  39. package/docs/guides/project-lifecycle.md +143 -0
  40. package/docs/guides/routing.md +184 -0
  41. package/docs/guides/troubleshooting.md +47 -0
  42. package/docs/maintainers/README.md +60 -0
  43. package/docs/maintainers/codex-maintainer.md +71 -0
  44. package/docs/maintainers/documentation-deployment.md +147 -0
  45. package/docs/maintainers/documentation-system.md +58 -0
  46. package/docs/maintainers/documentation-versioning.md +65 -0
  47. package/docs/maintainers/maintainer-charter.md +84 -0
  48. package/docs/maintainers/maintenance-policy.json +778 -0
  49. package/docs/maintainers/maintenance-policy.md +124 -0
  50. package/docs/maintainers/npm-publishing.md +154 -0
  51. package/docs/maintainers/plugin-readiness.json +19 -0
  52. package/docs/maintainers/plugin-readiness.md +31 -0
  53. package/docs/maintainers/public-site.md +158 -0
  54. package/docs/maintainers/release-acceptance.md +250 -0
  55. package/docs/maintainers/release-manifest.md +88 -0
  56. package/docs/maintainers/repository-setup.md +145 -0
  57. package/docs/maintainers/scope-policy.md +93 -0
  58. package/docs/maintainers/support-and-triage.md +74 -0
  59. package/docs/maintainers/testing.md +288 -0
  60. package/docs/packages/README.md +59 -0
  61. package/docs/packages/assets.md +85 -0
  62. package/docs/packages/cli.md +190 -0
  63. package/docs/packages/crypto.md +71 -0
  64. package/docs/packages/entities.md +129 -0
  65. package/docs/packages/grip.md +82 -0
  66. package/docs/packages/implementation-packages.md +113 -0
  67. package/docs/packages/jwt.md +55 -0
  68. package/docs/packages/provider-fastly.md +217 -0
  69. package/docs/packages/pulse.md +159 -0
  70. package/docs/packages/runtime.md +256 -0
  71. package/docs/preview-scope.md +142 -0
  72. package/docs/reference/README.md +33 -0
  73. package/docs/reference/cli-spec.json +575 -0
  74. package/docs/reference/cli.md +457 -0
  75. package/docs/reference/compatibility-matrix.md +169 -0
  76. package/docs/reference/diagnostics.md +1872 -0
  77. package/docs/reference/documentation-versions.json +14 -0
  78. package/docs/reference/environment.md +347 -0
  79. package/docs/reference/handler-authoring.md +264 -0
  80. package/docs/reference/project-config.md +554 -0
  81. package/docs/reference/project-config.schema.json +918 -0
  82. package/docs/reference/release-manifest.json +427 -0
  83. package/docs/reference/shell-completion.md +23 -0
  84. package/documentation-site.json +661 -0
  85. package/documentation-versions.json +14 -0
  86. package/examples/01-hello-json/.pulse/.gitignore +3 -0
  87. package/examples/01-hello-json/.pulse/config.ts +16 -0
  88. package/examples/01-hello-json/README.md +119 -0
  89. package/examples/01-hello-json/package.json +20 -0
  90. package/examples/01-hello-json/src/index.ts +9 -0
  91. package/examples/01-hello-json/tests/pulse.harness.ts +22 -0
  92. package/examples/01-hello-json/tsconfig.json +14 -0
  93. package/examples/02-request-schema/.pulse/.gitignore +3 -0
  94. package/examples/02-request-schema/.pulse/config.ts +17 -0
  95. package/examples/02-request-schema/README.md +145 -0
  96. package/examples/02-request-schema/package.json +20 -0
  97. package/examples/02-request-schema/src/index.ts +18 -0
  98. package/examples/02-request-schema/src/schemas.ts +20 -0
  99. package/examples/02-request-schema/tests/pulse.harness.ts +37 -0
  100. package/examples/02-request-schema/tsconfig.json +14 -0
  101. package/examples/03-fetch-composition/.pulse/.gitignore +3 -0
  102. package/examples/03-fetch-composition/.pulse/config.ts +31 -0
  103. package/examples/03-fetch-composition/README.md +210 -0
  104. package/examples/03-fetch-composition/package.json +20 -0
  105. package/examples/03-fetch-composition/src/index.ts +60 -0
  106. package/examples/03-fetch-composition/tests/pulse.harness.ts +47 -0
  107. package/examples/03-fetch-composition/tsconfig.json +14 -0
  108. package/examples/05-fastly-capabilities/.pulse/.gitignore +3 -0
  109. package/examples/05-fastly-capabilities/.pulse/config.ts +57 -0
  110. package/examples/05-fastly-capabilities/README.md +257 -0
  111. package/examples/05-fastly-capabilities/package.json +22 -0
  112. package/examples/05-fastly-capabilities/src/index.ts +55 -0
  113. package/examples/05-fastly-capabilities/tests/pulse.harness.ts +66 -0
  114. package/examples/05-fastly-capabilities/tsconfig.json +14 -0
  115. package/examples/07-opaque-proxy/.pulse/.gitignore +3 -0
  116. package/examples/07-opaque-proxy/.pulse/config.ts +38 -0
  117. package/examples/07-opaque-proxy/README.md +150 -0
  118. package/examples/07-opaque-proxy/package.json +21 -0
  119. package/examples/07-opaque-proxy/src/index.ts +9 -0
  120. package/examples/07-opaque-proxy/tests/pulse.harness.ts +25 -0
  121. package/examples/07-opaque-proxy/tsconfig.json +14 -0
  122. package/examples/09-router-lowering/.pulse/.gitignore +3 -0
  123. package/examples/09-router-lowering/.pulse/config.ts +22 -0
  124. package/examples/09-router-lowering/README.md +287 -0
  125. package/examples/09-router-lowering/package.json +22 -0
  126. package/examples/09-router-lowering/src/index.ts +65 -0
  127. package/examples/09-router-lowering/tests/pulse.harness.ts +91 -0
  128. package/examples/09-router-lowering/tsconfig.json +14 -0
  129. package/examples/10-entities-tools/.pulse/.gitignore +4 -0
  130. package/examples/10-entities-tools/.pulse/config.ts +23 -0
  131. package/examples/10-entities-tools/README.md +165 -0
  132. package/examples/10-entities-tools/package.json +21 -0
  133. package/examples/10-entities-tools/src/handlers.ts +15 -0
  134. package/examples/10-entities-tools/src/index.ts +31 -0
  135. package/examples/10-entities-tools/src/schemas.ts +18 -0
  136. package/examples/10-entities-tools/tests/pulse.harness.ts +40 -0
  137. package/examples/10-entities-tools/tools-facade.cjs +158 -0
  138. package/examples/10-entities-tools/tsconfig.json +14 -0
  139. package/examples/11-events/.pulse/.gitignore +4 -0
  140. package/examples/11-events/.pulse/config.ts +24 -0
  141. package/examples/11-events/README.md +194 -0
  142. package/examples/11-events/package.json +20 -0
  143. package/examples/11-events/src/index.ts +27 -0
  144. package/examples/11-events/src/schemas.ts +19 -0
  145. package/examples/11-events/tests/pulse.harness.ts +34 -0
  146. package/examples/11-events/tsconfig.json +15 -0
  147. package/examples/12-mcp-proxy/.pulse/.gitignore +3 -0
  148. package/examples/12-mcp-proxy/.pulse/config.ts +25 -0
  149. package/examples/12-mcp-proxy/README.md +149 -0
  150. package/examples/12-mcp-proxy/package.json +20 -0
  151. package/examples/12-mcp-proxy/src/index.ts +17 -0
  152. package/examples/12-mcp-proxy/tests/pulse.harness.ts +29 -0
  153. package/examples/12-mcp-proxy/tsconfig.json +14 -0
  154. package/examples/13-jwt-es256/.pulse/config.ts +19 -0
  155. package/examples/13-jwt-es256/README.md +195 -0
  156. package/examples/13-jwt-es256/package.json +21 -0
  157. package/examples/13-jwt-es256/src/index.ts +21 -0
  158. package/examples/13-jwt-es256/tests/pulse.harness.ts +54 -0
  159. package/examples/13-jwt-es256/tsconfig.json +14 -0
  160. package/examples/README.md +36 -0
  161. package/package.json +66 -6
  162. package/project-config.schema.json +918 -0
  163. package/release-manifest.json +427 -0
  164. package/src/command-spec.js +279 -0
  165. package/src/completion.js +113 -0
  166. package/src/diagnostics.js +350 -0
  167. package/src/documentation.js +45 -0
  168. package/src/index.d.ts +133 -0
  169. package/src/index.js +15 -0
  170. package/src/internal/command-executor.d.ts +29 -0
  171. package/src/internal/command-executor.js +143 -0
  172. package/src/internal/command-plan.d.ts +9 -0
  173. package/src/internal/command-plan.js +73 -0
  174. package/src/internal/command-reporter.d.ts +15 -0
  175. package/src/internal/command-reporter.js +133 -0
  176. package/src/internal/command-request.d.ts +35 -0
  177. package/src/internal/command-request.js +154 -0
  178. package/src/internal/node-http.js +54 -0
  179. package/src/internal/project-context.d.ts +66 -0
  180. package/src/internal/project-context.js +175 -0
  181. package/src/project-config-reference.js +4 -0
  182. package/src/project-config-schema.d.ts +23 -0
  183. package/src/project-config-schema.js +271 -0
  184. package/src/project-config.js +724 -0
  185. package/src/project-execution.js +2930 -0
  186. package/src/provider-drivers.js +3 -0
  187. package/src/target-support.js +3 -0
  188. package/src/typescript-module-loader.js +269 -0
  189. package/src/workflow.js +78 -0
  190. package/src/workspace.js +82 -0
@@ -0,0 +1,288 @@
1
+ <!-- pulse-doc-meta:start
2
+ owner: maintainer-council
3
+ status: active
4
+ last-reviewed: 2026-07-16
5
+ review-by: 2027-01-16
6
+ pulse-doc-meta:end -->
7
+
8
+ # Testing Pulse
9
+
10
+ Pulse organizes evidence by product behavior. Every task has one registry entry, a finite timeout, an isolated temporary root, and an optional ephemeral report.
11
+
12
+ ## Workspace checks
13
+
14
+ ```bash
15
+ pnpm build
16
+ pnpm test
17
+ ```
18
+
19
+ These commands cover the TypeScript workspace and package-level unit tests.
20
+
21
+ ## Functional profiles
22
+
23
+ | Profile | Evidence |
24
+ |---|---|
25
+ | `unit` | package exports, repository boundaries, workspace hygiene, API shape, project graphs, schema registry, and continuation registry |
26
+ | `native` | lowering, canonical runtime behavior, AssemblyScript compilation, and provider-neutral Wasm execution |
27
+ | `javascript` | explicit JavaScript target support, request-owned effects, and package JavaScript realization |
28
+ | `conformance` | Node/Fastly Native/JavaScript Router, fetch, binding, schema, GRIP, logging, and target-integrity parity |
29
+ | `providers` | Fastly Native and JavaScript packaging, runtime, capability, tooling, HTTP, and platform realization |
30
+ | `cli` | commands, diagnostics, clean projects, live development, and executable documentation examples |
31
+ | `release` | every functional profile plus package construction, deterministic artifacts, packed clean-consumer acceptance, evidence authority, and offline deployment candidates |
32
+
33
+ Run one profile or task:
34
+
35
+ ```bash
36
+ node wasm/scripts/run-wasm-tests.cjs --profile unit
37
+ node wasm/scripts/run-wasm-tests.cjs --profile conformance
38
+ node wasm/scripts/run-wasm-tests.cjs --task schema-codecs
39
+ node wasm/scripts/run-wasm-tests.cjs --list
40
+ ```
41
+
42
+ The event mechanism has focused provider-neutral tasks, plus one project-level
43
+ workflow task included in the `cli` and `release` profiles:
44
+
45
+ ```bash
46
+ node wasm/scripts/run-wasm-tests.cjs --task events-static-topology --no-report
47
+ node wasm/scripts/run-wasm-tests.cjs --task events-javascript-runtime --no-report
48
+ node wasm/scripts/run-wasm-tests.cjs --task events-emit-javascript --no-report
49
+ node wasm/scripts/run-wasm-tests.cjs --task events-native-runtime --no-report
50
+ node wasm/scripts/run-wasm-tests.cjs --task events-node-reference --no-report
51
+ node wasm/scripts/run-wasm-tests.cjs --task events-cli-workflow --no-report
52
+ node wasm/scripts/run-wasm-tests.cjs --task events-conformance --no-report
53
+ node wasm/scripts/run-wasm-tests.cjs --task events-candidate-seal --no-report
54
+ ```
55
+
56
+ `events-native-runtime` proves exact event dispatch, schema payload handles,
57
+ effect/continuation resume, event-only and mixed artifacts, conditional ABI
58
+ shape, two-build reproducibility, and HTTP-only byte identity. It is a
59
+ provider-neutral runtime proof and does not activate provider event transport.
60
+ `events-node-reference` proves Node JavaScript/Native direct parity, Native emit
61
+ suspension/resume, exact accepted frames, bounded FIFO ingress, cancellation,
62
+ failure categories, instance isolation, no loopback, zero JavaScript/Asyncify
63
+ imports, and zero fallback. It does not exercise a public listener or Fastly.
64
+ `events-cli-workflow` proves mixed HTTP/event harness cases, exact emitted-frame
65
+ expectations, Node JavaScript/Native project parity, event catalog packaging,
66
+ compile-only inspection, and the exact Fastly fail-closed eligibility boundary.
67
+ `events-conformance` drives the canonical bounded corpus through Node
68
+ JavaScript and Native and compares every semantic projection exactly, including
69
+ limits, queues, cancellation, redaction, state isolation, completion, and the
70
+ absence of loopback or a call surface. `events-candidate-seal` packs the
71
+ event-facing public package closure, installs it offline, type-checks author and
72
+ host consumers, verifies deterministic tarballs, and emits the EV9 candidate
73
+ decision plus blocker ledger. The candidate seal is evidence-only and does not
74
+ assign a release or publish anything.
75
+
76
+ Replay the existing Fastly HTTP regression through an explicitly selected
77
+ workspace-local Viceroy 0.20.1 binary; this does not claim Fastly event support:
78
+
79
+ ```bash
80
+ PULSE_VICEROY_BIN=/path/to/viceroy-0.20.1/viceroy \
81
+ node wasm/scripts/run-wasm-tests.cjs \
82
+ --task provider-fastly-compute-reality \
83
+ --no-report
84
+ ```
85
+
86
+ Event cases are an explicit harness discriminant; existing request cases remain
87
+ unchanged:
88
+
89
+ ```ts
90
+ export default [
91
+ {
92
+ name: 'health',
93
+ request: { method: 'GET', path: '/health' },
94
+ expect: { status: 200, text: 'ok' },
95
+ },
96
+ {
97
+ name: 'ingress',
98
+ kind: 'event',
99
+ event: {
100
+ type: 'input.received',
101
+ schema: 'events.Input',
102
+ payload: { sequence: 7 },
103
+ },
104
+ expect: {
105
+ status: 'completed',
106
+ emitted: [{
107
+ type: 'output.accepted',
108
+ schema: 'events.Output',
109
+ payload: { accepted: true, sequence: 7 },
110
+ }],
111
+ },
112
+ },
113
+ ]
114
+ ```
115
+
116
+ `expect.emitted` is ordered and exact. It proves host acceptance only; it does
117
+ not imply delivery, automatic loopback, or a public injection command.
118
+
119
+ The source-bound [`examples/11-events`](../../examples/11-events/) project runs
120
+ the same mixed HTTP/event topology through `doctor`, `inspect`, `test`, and
121
+ `build`. Its `dev` command remains HTTP-only.
122
+
123
+ Maintainers may bound a diagnostic rerun:
124
+
125
+ ```bash
126
+ node wasm/scripts/run-wasm-tests.cjs --profile release --from cli-project-workflow
127
+ node wasm/scripts/run-wasm-tests.cjs --profile cli --through docs-example-03-fetch-composition
128
+ ```
129
+
130
+ `--from` and `--through` aid investigation. A release claim requires the complete release profile.
131
+
132
+ ## Aggregate release seal
133
+
134
+ ```bash
135
+ npm run release:seal
136
+ ```
137
+
138
+ The seal restores the lockfile-pinned dependency graph, regenerates production
139
+ vulnerability and license evidence, validates maintenance and source publication
140
+ controls, builds and unit-tests the workspace, checks synchronized documentation,
141
+ runs the release profile, and records revision-bound evidence under
142
+ `wasm/.test-results/`. The release profile creates deterministic Fastly
143
+ Native and JavaScript candidate inputs and invokes the pinned downstream
144
+ JavaScript compiler locally. It does not deploy or publish either candidate.
145
+
146
+ External npm organization settings, trusted publishers, protected publication
147
+ environments, public repository administration, and the production documentation
148
+ origin do not authorize or block candidate construction. They remain explicit
149
+ publication and documentation-deployment gates after the candidate is sealed.
150
+
151
+ When the Fastly CLI and its managed local Compute engine are available, the same command also runs the external native-host proof. Require that environment explicitly with:
152
+
153
+ ```bash
154
+ npm run release:seal -- --require-fastly
155
+ ```
156
+
157
+ To validate an already restored dependency graph:
158
+
159
+ ```bash
160
+ npm run release:seal -- --skip-install
161
+ ```
162
+
163
+ The Docker-built offline dependency bundle is created and restored with:
164
+
165
+ ```bash
166
+ ./scripts/bundle_deps.sh
167
+ ./scripts/restore_deps.sh ./pulse-wasm-deps-....tar.zst
168
+ ```
169
+
170
+ The restore script reconstructs the dependency graph only. The release seal owns product validation.
171
+
172
+ After a clean passing seal, aggregate the persisted reports into the sixteen
173
+ release evidence shards and verify an exact binary patch replay:
174
+
175
+ ```bash
176
+ npm run release:evidence -- \
177
+ --base <accepted-source-ref> \
178
+ --head HEAD \
179
+ --label <delivery-name> \
180
+ --out <new-output-directory>
181
+ ```
182
+
183
+ The authority creates a source-only archive, binary patch, independent replay,
184
+ four-mode and target-integrity reports, migration ledger, maintainer scope,
185
+ Fastly Native and JavaScript candidates, checksums, and one delivery bundle. It
186
+ requires a clean tree and matching source revisions in every persisted report.
187
+
188
+ ## Executable documentation
189
+
190
+ Documentation execution belongs to the `cli` profile because every public example is driven through installed command behavior. Separate tasks cover:
191
+
192
+ - source-bound documentation contracts;
193
+ - clean `pulse init` and live `pulse dev`;
194
+ - each canonical example’s `doctor`, `inspect`, `test`, and `build` flow.
195
+
196
+ Source-backed blocks use:
197
+
198
+ ```text
199
+ &lt;!-- pulse-doc-source: examples/01-hello-json/src/index.ts --&gt;
200
+ <exact fenced source block>
201
+ &lt;!-- /pulse-doc-source --&gt;
202
+ ```
203
+
204
+ Synchronize or check generated documentation with:
205
+
206
+ ```bash
207
+ pnpm docs:sync
208
+ pnpm docs:check
209
+ ```
210
+
211
+ Command/result blocks use `pulse-doc-run` metadata and compare stable semantic fields rather than durations or absolute paths.
212
+
213
+ ## Package and consumer evidence
214
+
215
+ The release profile:
216
+
217
+ - constructs all publishable package tarballs from the canonical release catalog;
218
+ - checks package metadata, exports, exact versions, dependency rewriting, and payload hygiene;
219
+ - builds release packages and the documentation site twice and compares byte identities;
220
+ - installs every exact Pulse candidate while a loopback-only read-only registry keeps the `@pulse-compute` scope fail-closed;
221
+ - resolves third-party dependencies from the canonical npm registry instead of repacking development-install artifacts;
222
+ - exercises fresh Native Node, JavaScript Node, Native Fastly, GRIP, and Router projects without workspace links;
223
+ - builds the representative Fastly JavaScript source closure twice, compiles one exact closure with the pinned runtime toolchain, and records the no-deploy/no-publish boundary.
224
+
225
+ Run a focused package or consumer proof when diagnosing:
226
+
227
+ ```bash
228
+ node wasm/scripts/run-wasm-tests.cjs --task release-packages --no-report
229
+ node wasm/scripts/run-wasm-tests.cjs --task clean-machine-acceptance --no-report
230
+ node wasm/scripts/run-wasm-tests.cjs --task deployment-candidates --no-report
231
+ ```
232
+
233
+ ## JWT and crypto proof seals
234
+
235
+ The `1.0.0-beta.1` JWT/crypto packages build on the focused crypto seal,
236
+ which replays the
237
+ configuration, JavaScript runtime, Native guest-source, shared cross-target
238
+ corpus, and real Fastly Compute proofs. First record the one phase-boundary
239
+ aggregate replay, then run the seal:
240
+
241
+ ```bash
242
+ node wasm/scripts/run-wasm-tests.cjs \
243
+ --profile unit \
244
+ --profile native \
245
+ --profile javascript \
246
+ --profile conformance \
247
+ --profile providers \
248
+ --report .test-results/crypto-c4/relevant-aggregate.json
249
+ node wasm/scripts/run-wasm-tests.cjs --task crypto-verification-seal --no-report
250
+ ```
251
+
252
+ The seal writes `wasm/.test-results/crypto-c4/phase-c-seal.json` and the shared
253
+ corpus proof writes
254
+ `wasm/.test-results/crypto-c4/crypto-cross-target-conformance.json`. Both
255
+ reports contain status, target realization, toolchain, boundary, and size
256
+ evidence; neither contains keys, messages, authenticators, or ambient backend
257
+ errors. The preserved Phase C seal records the earlier package boundary. JWT
258
+ composition is now sealed in
259
+ `wasm/.test-results/jwt-d4/jwt-phase-d-seal.json`, and the complete four-cell
260
+ target proof is sealed in
261
+ `wasm/.test-results/jwt-e4/jwt-phase-e-seal.json`.
262
+
263
+ Consolidate those records with the guest-memory decision, guest-link pipeline,
264
+ current documentation, and synchronized package identity using:
265
+
266
+ ```bash
267
+ node wasm/scripts/run-wasm-tests.cjs \
268
+ --task jwt-evidence-consolidation \
269
+ --no-report
270
+ ```
271
+
272
+ The task writes
273
+ `wasm/.test-results/jwt-f0/jwt-f0-evidence-consolidation.json`, verifies
274
+ preserved hashes, and proves the JWT/crypto implementation evidence remains
275
+ internally consistent. It does not publish, promote, deploy, or activate
276
+ anything.
277
+
278
+ ## Runner evidence
279
+
280
+ The runner writes `wasm/.test-results/last-run.json` atomically after every task and stores one log per task. When a task fails, task-owned `*.log` files such as npm debug logs are copied into that run's durable diagnostics directory before the temporary root is removed. On timeout it captures a Node diagnostic report, terminates the entire task process group, and reports any surviving descendants. The directory is ephemeral and should contain only evidence produced from the current tree.
281
+
282
+ ## Redundancy policy
283
+
284
+ - Add a task once to `wasm/test/suite/registry.cjs`; do not add a package script per test.
285
+ - Prefer the strongest end-to-end oracle that proves the behavior.
286
+ - Keep compiler goldens, runtime traces, provider results, CLI subprocess output, build manifests, and executable docs at their owning boundary.
287
+ - Do not derive expected constants from the implementation being tested.
288
+ - Remove a weaker fixture when a stronger oracle covers the same claim.
@@ -0,0 +1,59 @@
1
+ # Package support policy
2
+
3
+ <!-- Generated by wasm/scripts/sync-reference-docs.cjs. Edit the source catalog, not this file. -->
4
+
5
+ Pulse 1.0.0-beta.1 publishes one synchronized 18-package release set. Publication does not make every package an application-author SDK: the support tier and listed entry points define the release promise.
6
+
7
+ | Package | Support tier | Install directly | Release promise |
8
+ |---|---|---:|---|
9
+ | [`@pulse-compute/runtime`](./runtime.md) | Canonical application surface | Yes | Supported application authoring and execution contract. |
10
+ | [`@pulse-compute/pulse`](./pulse.md) | Canonical application surface | Yes | Supported conventional application, project-configuration, and schema-authoring contract. |
11
+ | [`@pulse-compute/cli`](./cli.md) | Canonical application surface | Yes | Supported Beta workflow and project-configuration contract. |
12
+ | [`@pulse-compute/provider-fastly`](./provider-fastly.md) | Supported provider/extension surface | Yes | The listed entry points are supported for the Beta; all other exported subpaths are implementation-only. |
13
+ | [`@pulse-compute/grip`](./grip.md) | Supported provider/extension surface | Yes | The package root has bounded JavaScript and Native HTTP-framing realization plus configured Node/Fastly broadcast; /pulsewasm remains compatibility-only. |
14
+ | [`@pulse-compute/assets`](./assets.md) | Supported provider/extension surface | Yes | The package root is the supported JavaScript API and canonical Native authoring surface; /pulsewasm remains a compatibility subpath, while manifest/compiler subpaths are toolchain integration. |
15
+ | [`@pulse-compute/crypto`](./crypto.md) | Supported provider/extension surface | Yes | The package root is the supported bounded verification contract; realization and Native integration subpaths remain toolchain-only. |
16
+ | [`@pulse-compute/jwt`](./jwt.md) | Supported provider/extension surface | Yes | The package root is the supported provider-neutral verification contract; provider and compiler integration subpaths are not application APIs. |
17
+ | [`@pulse-compute/entities`](./entities.md) | Supported provider/extension surface | Yes | The package root and first-party JSON-RPC adapter are supported Beta contracts; compiler integration subpaths remain toolchain-only. |
18
+ | [`@pulse-compute/wasm-build-support`](./implementation-packages.md) | Implementation/transitive surface | No | Internal release-set interface; exported modules may change with compiler implementation needs. |
19
+ | [`@pulse-compute/wasm-compiler`](./implementation-packages.md) | Implementation/transitive surface | No | Internal compiler interface; no application-author compatibility guarantee. |
20
+ | [`@pulse-compute/wasm-guest-link`](./implementation-packages.md) | Implementation/transitive surface | No | Internal first-party prebuilt guest-link interface synchronized with the compiler; no application-author or third-party guest compatibility guarantee. |
21
+ | [`@pulse-compute/wasm-contracts`](./implementation-packages.md) | Implementation/transitive surface | No | The provider toolchain contract is versioned and supported for the Beta; other protocol and proof interfaces remain internal. |
22
+ | [`@pulse-compute/wasm-host-runtime`](./implementation-packages.md) | Implementation/transitive surface | No | Internal compiler/runtime interface synchronized with this release set. |
23
+ | [`@pulse-compute/wasm-library-kit`](./implementation-packages.md) | Implementation/transitive surface | No | Internal package-lowering interface synchronized with this release set. |
24
+ | [`@pulse-compute/provider-node`](./implementation-packages.md) | Implementation/transitive surface | No | The listed built-in toolchain entry is synchronized with the Beta bootstrap contract; other canonical Node provider interfaces remain internal. |
25
+ | [`@pulse-compute/wasm-runtime-core-as`](./implementation-packages.md) | Implementation/transitive surface | No | Internal code-generation interface synchronized with this release set. |
26
+ | [`@pulse-compute/wasm-schema-json`](./implementation-packages.md) | Implementation/transitive surface | No | Internal schema compiler interface synchronized with this release set. |
27
+
28
+ ## Tier definitions
29
+
30
+ ### Canonical application surface
31
+
32
+ Fully documented and supported as the Pulse application authoring or workflow contract.
33
+
34
+ ### Supported provider/extension surface
35
+
36
+ Documented entry points are supported; implementation and toolchain subpaths are explicitly excluded.
37
+
38
+ ### Implementation/transitive surface
39
+
40
+ Installable as part of the synchronized release set, without an application-author compatibility guarantee.
41
+
42
+ ## Reading package READMEs
43
+
44
+ Every packed README begins with a generated status block covering audience, direct-install guidance, supported entry points, and stability. An export that is not listed in that block is not automatically a supported application-author entry point.
45
+
46
+ ## Extension and provider boundary in 1.0.0-beta.1
47
+
48
+ Pulse supports the documented package-owned assets and GRIP facades and the documented Fastly provider entry points. Their implementation demonstrates the internal contract, but `1.0.0-beta.1` does **not** expose a general third-party plugin registry:
49
+
50
+ - lowerer manifests are accepted only from trusted first-party release packages;
51
+ - arbitrary external lowerer discovery and execution are not supported;
52
+ - provider selection is limited to `node`, `fastly`, and compile-only `none`;
53
+ - adding a new lowerer or provider currently means changing and testing the synchronized Pulse release set.
54
+
55
+ Documentation may explain lowering and the internal contract, but it must not promise that an external npm package can self-register a lowerer or provider. A future public plugin API requires an explicit trust model, discovery, version negotiation, security policy, and compatibility contract.
56
+
57
+ ## Installed documentation
58
+
59
+ `@pulse-compute/runtime` ships its canonical API reference and Beta scope. `@pulse-compute/cli` ships the public documentation hierarchy, CLI/config/diagnostic references, bounded compatibility material, and runnable example sources. Package README links must resolve either inside their own tarball or to an exact-version hosted Pulse documentation URL.
@@ -0,0 +1,85 @@
1
+ # `@pulse-compute/assets`
2
+
3
+ `@pulse-compute/assets` is the supported application entry point for both direct JavaScript execution and supported Native lowering.
4
+
5
+ The package root exposes the complete JavaScript asset implementation—local files, hosted origins, S3-compatible buckets, and SigV4 support—plus the narrow request-bound surface that Native compilation can recognize.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install @pulse-compute/assets@1.0.0-beta.1
11
+ ```
12
+
13
+ ## Portable lookup surface
14
+
15
+ ```ts
16
+ import { assets } from '@pulse-compute/assets'
17
+
18
+ const found = await assets.lookup(ctx, 'public', '/app.js', {
19
+ method: 'GET',
20
+ cacheControl: 'public, max-age=60',
21
+ })
22
+
23
+ return assets.respond(found)
24
+ ```
25
+
26
+ The portable surface is:
27
+
28
+ - `assets.lookup(ctx, store, key, options?)` — a request-bound package effect that may be directly awaited or used inside `ctx.parallel({ ... })`;
29
+ - `assets.respond(response, options?)` — a pure response-adoption and decoration helper;
30
+ - equivalent named exports `lookup` and `respond`.
31
+
32
+ JavaScript executes the real package implementation through the request-owned package-effect bridge. Native compilation recognizes the same package-root call and emits the canonical `assets.lookup` package effect. Supported Native argument restrictions are enforced by package lowering eligibility and diagnostics rather than by changing the JavaScript API.
33
+
34
+ ## JavaScript middleware
35
+
36
+ The package root also exports:
37
+
38
+ ```ts
39
+ import {
40
+ AssetManager,
41
+ AssetBucket,
42
+ createAssets,
43
+ signSigV4,
44
+ } from '@pulse-compute/assets'
45
+ ```
46
+
47
+ `createAssets()` supports local, hosted, and bucket-backed middleware. Hosted and bucket responses adopt upstream Web streams directly, preserving status, headers, and host-owned response-body ownership. Local assets currently follow the restored implementation and materialize the selected file. Broader request/response resource limits belong at a shared core ownership boundary rather than in an Assets-only policy.
48
+
49
+ ## Response ownership
50
+
51
+ A direct asset response preserves:
52
+
53
+ - status, including range responses such as `206`;
54
+ - repeated and ordinary headers;
55
+ - `GET` and `HEAD` behavior;
56
+ - upstream Web stream identity for hosted and bucket modes;
57
+ - cancellation of discarded upstream bodies during pass-through or bodyless responses.
58
+
59
+ The portable response is opaque to Native application code. Structured request-body and fetched-response projection bounds remain separate core contracts.
60
+
61
+ ## Compatibility subpath
62
+
63
+ `@pulse-compute/assets/pulsewasm` remains a compatibility subpath. New
64
+ applications should import from `@pulse-compute/assets`. The manifest and
65
+ compiler subpaths are trusted toolchain integration, not application APIs. See
66
+ [Compatibility imports and migration](../guides/compatibility-imports.md).
67
+
68
+ ## Package-owned files
69
+
70
+ The release tarball includes:
71
+
72
+ - the built JavaScript implementation and type declarations;
73
+ - `pulse.package.json` product and target metadata;
74
+ - `pulsewasm.manifest.cjs` trusted package-lowering identity;
75
+ - `pulsewasm.compiler.cjs` package-specific static validation and lowering;
76
+ - `as/index.as.ts` sidecar declarations used by compiled-Wasm integration.
77
+
78
+ See [Package-owned lowering](../concepts/package-owned-lowering.md) and [Add a first-party package-owned lowerer](../contributing/adding-first-party-lowerer.md).
79
+
80
+ ## Related documentation
81
+
82
+ - [Compilation and lowering](../concepts/compilation-and-lowering.md)
83
+ - [Structured and opaque bodies](../concepts/bodies.md)
84
+ - [Package support policy](./README.md)
85
+ - [Implementation packages](./implementation-packages.md)
@@ -0,0 +1,190 @@
1
+ # `@pulse-compute/cli`
2
+
3
+ `@pulse-compute/cli` owns the supported `pulse` command, project configuration types, project discovery, compilation workflow, local execution, and target builds.
4
+
5
+ ## Install and initialize
6
+
7
+ The current repository CLI is a source candidate. Its conventional initializer
8
+ depends on the public `@pulse-compute/pulse` package and is validated from both
9
+ the checkout and the exact packed acceptance set:
10
+
11
+ ```bash
12
+ pnpm pulse -- init ./my-app
13
+ cd ./my-app
14
+ npm install
15
+ pulse doctor
16
+ ```
17
+
18
+ `pulse init` writes a conventional `.pulse/config.ts` workspace, an async
19
+ `Pulse` application root, a dedicated `tests/pulse.harness.ts`, strict
20
+ TypeScript configuration, and exact source-candidate package versions. It does
21
+ not run a package manager or perform hidden network work. Public npm
22
+ availability is defined by the synchronized 18-package release manifest.
23
+
24
+ ## Daily workflow
25
+
26
+ ```bash
27
+ pulse doctor
28
+ pulse inspect
29
+ pulse test
30
+ pulse dev
31
+ pulse compile
32
+ pulse build
33
+ ```
34
+
35
+ - `doctor` validates project, provider, dependencies, and external toolchain readiness.
36
+ - `inspect` compiles and reports effects, continuations, schemas, event registrations/callsites, capabilities, target eligibility, and provider lowering without executing cases.
37
+ - `test` executes configured request and explicit `kind: 'event'` cases through the provider-owned local conformance runtime.
38
+ - `dev` runs a foreground local server and watches the project by default.
39
+ - `compile` writes deterministic provider-neutral Pulse Wasm plus its native plan, generated AssemblyScript, WAT, and manifests.
40
+ - `build` writes the configured target realization: Native profiles emit provider Wasm, while JavaScript profiles emit deterministic source packages. Eligible event projects also emit `event-catalog.json` and `event-inspection.json` beside the target output. Fastly JavaScript packages carry exact downstream compiler pins and deployment-candidate metadata.
41
+
42
+ See the generated [CLI reference](../reference/cli.md) for every option, positional form, output, side effect, and exit behavior.
43
+
44
+ ## Project configuration
45
+
46
+ ```ts
47
+ import { defineConfig } from '@pulse-compute/pulse'
48
+
49
+ export default defineConfig((_scope) => ({
50
+ pulse: {
51
+ entry: 'src/index.ts',
52
+ tests: 'tests/pulse.harness.ts',
53
+ defaultProfile: 'local',
54
+ strict: true,
55
+ },
56
+ local: {
57
+ host: 'node',
58
+ target: 'native',
59
+ outDir: 'dist',
60
+ dev: { host: '127.0.0.1', port: 8787 },
61
+ },
62
+ }))
63
+ ```
64
+
65
+ The generated application imports `Pulse` from `@pulse-compute/pulse`, declares
66
+ managed handlers `async`, and keeps deterministic request cases in the separate
67
+ harness module. Workspace discovery starts from `.pulse/config.ts`.
68
+
69
+ Harness event cases require the explicit `kind: 'event'` discriminant, one
70
+ canonical input frame, and an ordered exact `expect.emitted` array. HTTP cases
71
+ retain their existing shape and default behavior. There is no public `pulse
72
+ event` command and `pulse dev` remains HTTP-only.
73
+
74
+ The complete event workflow, queue, artifact, target, and diagnostic boundary
75
+ is in [Static events and outbound emission](../guides/events.md).
76
+
77
+ ## Machine-readable contracts and shell completion
78
+
79
+ The installed package exposes release-owned machine interfaces for editors, automation, validation, and documentation tooling:
80
+
81
+ | Export or command | Contract |
82
+ |---|---|
83
+ | `pulse completion bash` | Bash completion generated from the public command specification. |
84
+ | `pulse completion zsh` | Zsh completion generated from the same specification. |
85
+ | `pulse completion fish` | Fish completion generated from the same specification. |
86
+ | `@pulse-compute/cli/cli-spec.json` | Seven commands, public options, aliases, positional forms, provider restrictions, output modes, and completion metadata. |
87
+ | `@pulse-compute/cli/project-config.schema.json` | JSON Schema bundle plus discovery, precedence, defaults, runtime rules, and provider configuration schemas. |
88
+ | `@pulse-compute/cli/release-manifest.json` | Exact release, hosted-documentation routes, package tiers, supported entry points, and publication policy. |
89
+ | `@pulse-compute/cli/documentation-versions.json` | Available documentation versions and the current `latest` target. |
90
+ | `@pulse-compute/cli/project-config-schema` | Programmatic schema, defaults, structural validation, and reference metadata. |
91
+
92
+ These files are generated from the same modules used by the parser, runtime configuration loader, package packer, and documentation release gate. See [Shell completion](../reference/shell-completion.md), the [CLI specification](../reference/cli-spec.json), the [project configuration schema](../reference/project-config.schema.json), and the [release manifest reference](../maintainers/release-manifest.md).
93
+
94
+ ## Public entry points
95
+
96
+ The supported package surface is:
97
+
98
+ | Entry point | Intended use |
99
+ |---|---|
100
+ | `pulse` binary | Application and CI workflow. |
101
+ | `@pulse-compute/cli` | `defineConfig`, project-config types, diagnostics helper, and programmatic workflow entry. |
102
+ | `@pulse-compute/cli/workflow` | CLI parsing and execution integration. |
103
+ | `@pulse-compute/cli/project-config` | Project discovery and normalization integration. |
104
+ | `@pulse-compute/cli/project-execution` | Canonical doctor/inspect/test/dev/compile/build orchestration. |
105
+ | `@pulse-compute/cli/diagnostics` | Stable public diagnostic descriptors and mappings. |
106
+
107
+ Other files present in the tarball are not automatically public APIs.
108
+
109
+ ## JSON output
110
+
111
+ Completed commands emit one JSON object with a trailing newline when `--json` is used. `pulse dev --json` emits newline-delimited event objects instead of one enclosing document. Supported events include `compiled`, `ready`, `reloaded`, `request`, `compile-error`, and `request-error`.
112
+
113
+ Stable failures include a public diagnostic code, remediation, exit class, and exact-version documentation URL. See [Diagnostics and remediation](../reference/diagnostics.md).
114
+
115
+ ## Provider behavior
116
+
117
+ The CLI supports `node`, `fastly`, and compile-only `none`. Node and Fastly each
118
+ accept an explicit `native` or `javascript` execution target:
119
+
120
+ - Node Native lowers to Pulse-owned Wasm and executes through the Node host.
121
+ - Node JavaScript loads the reachable application graph and runs the live runtime and package implementations.
122
+ - Fastly Native emits compact direct-host-ABI `bin/main.wasm`.
123
+ - Fastly JavaScript emits a deterministic source/deployment package and a structurally deployable downstream runtime candidate.
124
+ - `none` can inspect or compile canonical output but cannot serve or run tests.
125
+
126
+ For projects with reachable event registrations or `ctx.emit` callsites, Node
127
+ Native and Node JavaScript are eligible for the bounded reference workflow.
128
+ `inspect`, `doctor`, compile/build manifests, and event inspection artifacts
129
+ report the catalog, schema IDs, callsites, host requirements, and per-command
130
+ target support. `none` remains useful for compile-only catalog inspection.
131
+ Fastly Native and JavaScript fail closed with exact event-ingress or event-emit
132
+ diagnostics; Pulse does not translate that plane through HTTP or GRIP and never
133
+ changes targets automatically.
134
+
135
+ `pulse compile` is provider-neutral regardless of the configured provider. It produces the portable Pulse-owned Wasm boundary directly; `pulse build` continues to own provider realization.
136
+
137
+ Those provider IDs are configuration data, not command-layer implementation
138
+ branches. The CLI consumes a neutral facade over the compiler-owned fixed
139
+ registry; concrete provider imports, configuration policy, and target adapters
140
+ remain outside the CLI package. Node retains a deliberate reference/smoke role
141
+ for canonical Native behavior.
142
+
143
+ Both JavaScript declarations satisfy full-target-support and report general
144
+ availability. Project eligibility remains separate, and target selection never
145
+ falls back automatically. Fastly JavaScript `test` and `dev` identify their
146
+ execution mode as provider emulation; the offline candidate gate compiles a real
147
+ Fastly JavaScript runtime artifact but performs no deployment or publication.
148
+
149
+ Provider and target selection change realization, not handler APIs. See
150
+ [Contracts and providers](../concepts/contracts-and-providers.md).
151
+
152
+ ## Installed documentation payload
153
+
154
+ The CLI npm package ships:
155
+
156
+ - this public documentation hierarchy;
157
+ - the canonical API reference;
158
+ - CLI, configuration, diagnostics, environment, release, and version references;
159
+ - generated command/config/release machine interfaces and shell completions;
160
+ - package and contributor guides;
161
+ - ten complete lifecycle example projects plus the focused Entities candidate,
162
+ including static Router lowering and mixed HTTP/event authoring.
163
+
164
+ This makes diagnostic links and package README links usable from an installed exact-version release rather than depending on monorepo paths.
165
+
166
+ ## Safety boundaries
167
+
168
+ - Build output must remain a real descendant of the project root.
169
+ - `--no-clean` does not disable traversal or symbolic-link safety checks.
170
+ - Raw configured secrets are redacted from public JSON and diagnostics.
171
+ - `dev` is a foreground process, not a hidden daemon.
172
+ - Repository-only fixture/profile/task flags are excluded from installed help and the public reference.
173
+ - Fastly external execution is delegated to the Fastly CLI; the reality gate may pass an inspected Viceroy path, but Pulse does not launch Viceroy directly.
174
+
175
+ ## Related documentation
176
+
177
+ - [Getting started](../getting-started.md)
178
+ - [Project lifecycle](../guides/project-lifecycle.md)
179
+ - [Static events and outbound emission](../guides/events.md)
180
+ - [Provider and target compatibility](../reference/compatibility-matrix.md)
181
+ - [Managed handler TypeScript and JavaScript](../reference/handler-authoring.md)
182
+ - [Node build and execution](../guides/deploying-node.md)
183
+ - [Fastly deployment candidates](../guides/deploying-fastly.md)
184
+ - [CLI reference](../reference/cli.md)
185
+ - [Shell completion](../reference/shell-completion.md)
186
+ - [Project configuration](../reference/project-config.md)
187
+ - [Release manifest and package policy](../maintainers/release-manifest.md)
188
+ - [Documentation versioning](../maintainers/documentation-versioning.md)
189
+ - [Environment-variable reference](../reference/environment.md)
190
+ - [Release acceptance](../maintainers/release-acceptance.md)