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

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 (191) hide show
  1. package/API.md +572 -0
  2. package/CHANGELOG.md +71 -0
  3. package/README.md +71 -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 +470 -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 +300 -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 +70 -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 +202 -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 +100 -0
  48. package/docs/maintainers/maintenance-policy.json +809 -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 +293 -0
  55. package/docs/maintainers/release-manifest.md +89 -0
  56. package/docs/maintainers/repository-setup.md +145 -0
  57. package/docs/maintainers/scope-policy.md +105 -0
  58. package/docs/maintainers/support-and-triage.md +74 -0
  59. package/docs/maintainers/testing.md +334 -0
  60. package/docs/packages/README.md +60 -0
  61. package/docs/packages/assets.md +85 -0
  62. package/docs/packages/cli.md +190 -0
  63. package/docs/packages/crypto.md +78 -0
  64. package/docs/packages/entities.md +129 -0
  65. package/docs/packages/grip.md +82 -0
  66. package/docs/packages/implementation-packages.md +122 -0
  67. package/docs/packages/jwt.md +55 -0
  68. package/docs/packages/provider-fastly.md +243 -0
  69. package/docs/packages/pulse.md +159 -0
  70. package/docs/packages/runtime.md +265 -0
  71. package/docs/packages/s3.md +101 -0
  72. package/docs/preview-scope.md +142 -0
  73. package/docs/reference/README.md +33 -0
  74. package/docs/reference/cli-spec.json +575 -0
  75. package/docs/reference/cli.md +457 -0
  76. package/docs/reference/compatibility-matrix.md +169 -0
  77. package/docs/reference/diagnostics.md +1872 -0
  78. package/docs/reference/documentation-versions.json +22 -0
  79. package/docs/reference/environment.md +347 -0
  80. package/docs/reference/handler-authoring.md +264 -0
  81. package/docs/reference/project-config.md +582 -0
  82. package/docs/reference/project-config.schema.json +981 -0
  83. package/docs/reference/release-manifest.json +441 -0
  84. package/docs/reference/shell-completion.md +23 -0
  85. package/documentation-site.json +668 -0
  86. package/documentation-versions.json +22 -0
  87. package/examples/01-hello-json/.pulse/.gitignore +3 -0
  88. package/examples/01-hello-json/.pulse/config.ts +16 -0
  89. package/examples/01-hello-json/README.md +119 -0
  90. package/examples/01-hello-json/package.json +20 -0
  91. package/examples/01-hello-json/src/index.ts +9 -0
  92. package/examples/01-hello-json/tests/pulse.harness.ts +22 -0
  93. package/examples/01-hello-json/tsconfig.json +14 -0
  94. package/examples/02-request-schema/.pulse/.gitignore +3 -0
  95. package/examples/02-request-schema/.pulse/config.ts +17 -0
  96. package/examples/02-request-schema/README.md +145 -0
  97. package/examples/02-request-schema/package.json +20 -0
  98. package/examples/02-request-schema/src/index.ts +18 -0
  99. package/examples/02-request-schema/src/schemas.ts +20 -0
  100. package/examples/02-request-schema/tests/pulse.harness.ts +37 -0
  101. package/examples/02-request-schema/tsconfig.json +14 -0
  102. package/examples/03-fetch-composition/.pulse/.gitignore +3 -0
  103. package/examples/03-fetch-composition/.pulse/config.ts +31 -0
  104. package/examples/03-fetch-composition/README.md +210 -0
  105. package/examples/03-fetch-composition/package.json +20 -0
  106. package/examples/03-fetch-composition/src/index.ts +60 -0
  107. package/examples/03-fetch-composition/tests/pulse.harness.ts +47 -0
  108. package/examples/03-fetch-composition/tsconfig.json +14 -0
  109. package/examples/05-fastly-capabilities/.pulse/.gitignore +3 -0
  110. package/examples/05-fastly-capabilities/.pulse/config.ts +57 -0
  111. package/examples/05-fastly-capabilities/README.md +257 -0
  112. package/examples/05-fastly-capabilities/package.json +22 -0
  113. package/examples/05-fastly-capabilities/src/index.ts +55 -0
  114. package/examples/05-fastly-capabilities/tests/pulse.harness.ts +66 -0
  115. package/examples/05-fastly-capabilities/tsconfig.json +14 -0
  116. package/examples/07-opaque-proxy/.pulse/.gitignore +3 -0
  117. package/examples/07-opaque-proxy/.pulse/config.ts +38 -0
  118. package/examples/07-opaque-proxy/README.md +150 -0
  119. package/examples/07-opaque-proxy/package.json +21 -0
  120. package/examples/07-opaque-proxy/src/index.ts +9 -0
  121. package/examples/07-opaque-proxy/tests/pulse.harness.ts +25 -0
  122. package/examples/07-opaque-proxy/tsconfig.json +14 -0
  123. package/examples/09-router-lowering/.pulse/.gitignore +3 -0
  124. package/examples/09-router-lowering/.pulse/config.ts +22 -0
  125. package/examples/09-router-lowering/README.md +287 -0
  126. package/examples/09-router-lowering/package.json +22 -0
  127. package/examples/09-router-lowering/src/index.ts +65 -0
  128. package/examples/09-router-lowering/tests/pulse.harness.ts +91 -0
  129. package/examples/09-router-lowering/tsconfig.json +14 -0
  130. package/examples/10-entities-tools/.pulse/.gitignore +4 -0
  131. package/examples/10-entities-tools/.pulse/config.ts +23 -0
  132. package/examples/10-entities-tools/README.md +165 -0
  133. package/examples/10-entities-tools/package.json +21 -0
  134. package/examples/10-entities-tools/src/handlers.ts +15 -0
  135. package/examples/10-entities-tools/src/index.ts +31 -0
  136. package/examples/10-entities-tools/src/schemas.ts +18 -0
  137. package/examples/10-entities-tools/tests/pulse.harness.ts +40 -0
  138. package/examples/10-entities-tools/tools-facade.cjs +158 -0
  139. package/examples/10-entities-tools/tsconfig.json +14 -0
  140. package/examples/11-events/.pulse/.gitignore +4 -0
  141. package/examples/11-events/.pulse/config.ts +24 -0
  142. package/examples/11-events/README.md +194 -0
  143. package/examples/11-events/package.json +20 -0
  144. package/examples/11-events/src/index.ts +27 -0
  145. package/examples/11-events/src/schemas.ts +19 -0
  146. package/examples/11-events/tests/pulse.harness.ts +34 -0
  147. package/examples/11-events/tsconfig.json +15 -0
  148. package/examples/12-mcp-proxy/.pulse/.gitignore +3 -0
  149. package/examples/12-mcp-proxy/.pulse/config.ts +25 -0
  150. package/examples/12-mcp-proxy/README.md +149 -0
  151. package/examples/12-mcp-proxy/package.json +20 -0
  152. package/examples/12-mcp-proxy/src/index.ts +17 -0
  153. package/examples/12-mcp-proxy/tests/pulse.harness.ts +29 -0
  154. package/examples/12-mcp-proxy/tsconfig.json +14 -0
  155. package/examples/13-jwt-es256/.pulse/config.ts +19 -0
  156. package/examples/13-jwt-es256/README.md +195 -0
  157. package/examples/13-jwt-es256/package.json +21 -0
  158. package/examples/13-jwt-es256/src/index.ts +21 -0
  159. package/examples/13-jwt-es256/tests/pulse.harness.ts +54 -0
  160. package/examples/13-jwt-es256/tsconfig.json +14 -0
  161. package/examples/README.md +36 -0
  162. package/package.json +66 -6
  163. package/project-config.schema.json +981 -0
  164. package/release-manifest.json +441 -0
  165. package/src/command-spec.js +279 -0
  166. package/src/completion.js +113 -0
  167. package/src/diagnostics.js +350 -0
  168. package/src/documentation.js +45 -0
  169. package/src/index.d.ts +133 -0
  170. package/src/index.js +15 -0
  171. package/src/internal/command-executor.d.ts +29 -0
  172. package/src/internal/command-executor.js +143 -0
  173. package/src/internal/command-plan.d.ts +9 -0
  174. package/src/internal/command-plan.js +73 -0
  175. package/src/internal/command-reporter.d.ts +15 -0
  176. package/src/internal/command-reporter.js +133 -0
  177. package/src/internal/command-request.d.ts +35 -0
  178. package/src/internal/command-request.js +154 -0
  179. package/src/internal/node-http.js +54 -0
  180. package/src/internal/project-context.d.ts +66 -0
  181. package/src/internal/project-context.js +175 -0
  182. package/src/project-config-reference.js +4 -0
  183. package/src/project-config-schema.d.ts +23 -0
  184. package/src/project-config-schema.js +271 -0
  185. package/src/project-config.js +724 -0
  186. package/src/project-execution.js +2946 -0
  187. package/src/provider-drivers.js +3 -0
  188. package/src/target-support.js +3 -0
  189. package/src/typescript-module-loader.js +269 -0
  190. package/src/workflow.js +78 -0
  191. package/src/workspace.js +82 -0
@@ -0,0 +1,74 @@
1
+ <!-- pulse-doc-meta:start
2
+ owner: maintainer-council
3
+ status: active
4
+ last-reviewed: 2026-07-25
5
+ review-by: 2027-01-25
6
+ pulse-doc-meta:end -->
7
+
8
+ # Support and triage
9
+
10
+ Pulse can launch quietly while still giving users a predictable way to report problems. The support posture favors high-signal evidence and bounded maintenance over an implied service-level agreement.
11
+
12
+ ## Intake routes
13
+
14
+ Use the repository forms for:
15
+
16
+ - supported-behavior defects;
17
+ - documentation problems;
18
+ - scope or architecture proposals;
19
+ - usage questions and support requests.
20
+
21
+ Report suspected vulnerabilities privately through GitHub security advisories. Do not include credentials, proprietary source, private URLs, customer data, or exploitable details in a public issue.
22
+
23
+ ## First response
24
+
25
+ A maintainer or Codex should establish:
26
+
27
+ 1. release and package versions;
28
+ 2. host operating system and Node version;
29
+ 3. target provider;
30
+ 4. the smallest reproducible project or fixture;
31
+ 5. exact command and diagnostic code;
32
+ 6. whether the behavior is documented as supported;
33
+ 7. whether the report suggests a protected-boundary change.
34
+
35
+ Then classify the report as defect, hardening, documentation, evidence, scope expansion, architecture, or release.
36
+
37
+ ## Quiet-launch posture
38
+
39
+ The Beta makes no response-time or compatibility guarantee beyond
40
+ its documented release contract. Normal maintenance priority is:
41
+
42
+ 1. containment, secret exposure, artifact escape, or release-integrity failures;
43
+ 2. regressions in supported examples and canonical CLI behavior;
44
+ 3. incorrect diagnostics, packaging, provider realization, or documentation;
45
+ 4. hardening and usability friction;
46
+ 5. scope requests retained as evidence.
47
+
48
+ A popular request is not automatically a product decision. Repeated evidence should be summarized for the human maintainer, including the affected architectural boundary and the smallest coherent option.
49
+
50
+ ## Patch posture
51
+
52
+ Codex may prepare a patch for an in-scope defect or hardening issue after reproduction. The patch should:
53
+
54
+ - repair the canonical owner;
55
+ - add the smallest contract evidence;
56
+ - preserve explicit rejection and host authority;
57
+ - update diagnostics and documentation when the user-visible contract changes;
58
+ - run the policy-selected portable checks;
59
+ - list dependency-bound checks still required;
60
+ - avoid unrelated cleanup.
61
+
62
+ Scope, architecture, and release proposals remain analysis until the human authority approves direction.
63
+
64
+ ## Closing issues
65
+
66
+ Close an issue with one of four clear outcomes:
67
+
68
+ - fixed in a named release or commit;
69
+ - documented as expected Beta behavior;
70
+ - retained as evidence for a future decision;
71
+ - declined because it conflicts with a stated invariant.
72
+
73
+ Avoid vague “won't fix” responses. Explain the boundary and point to the
74
+ relevant preview-scope, concept, reference, or maintenance-policy page.
@@ -0,0 +1,334 @@
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
+ `wasm/test/suite/registry.cjs` owns the exact task and profile IDs. Agent
43
+ instructions, this guide, release acceptance commands and maintenance-policy
44
+ commands are checked against it by `npm run maintainer:check`. Use explicit
45
+ runner commands for named selections so stale references are detectable.
46
+
47
+ The event mechanism has focused provider-neutral tasks, plus one project-level
48
+ workflow task included in the `cli` and `release` profiles:
49
+
50
+ ```bash
51
+ node wasm/scripts/run-wasm-tests.cjs --task events-static-topology --no-report
52
+ node wasm/scripts/run-wasm-tests.cjs --task events-javascript-runtime --no-report
53
+ node wasm/scripts/run-wasm-tests.cjs --task events-emit-javascript --no-report
54
+ node wasm/scripts/run-wasm-tests.cjs --task events-native-runtime --no-report
55
+ node wasm/scripts/run-wasm-tests.cjs --task events-node-reference --no-report
56
+ node wasm/scripts/run-wasm-tests.cjs --task events-cli-workflow --no-report
57
+ node wasm/scripts/run-wasm-tests.cjs --task events-conformance --no-report
58
+ node wasm/scripts/run-wasm-tests.cjs --task events-candidate-seal --no-report
59
+ ```
60
+
61
+ `events-native-runtime` proves exact event dispatch, schema payload handles,
62
+ effect/continuation resume, event-only and mixed artifacts, conditional ABI
63
+ shape, two-build reproducibility, and HTTP-only byte identity. It is a
64
+ provider-neutral runtime proof and does not activate provider event transport.
65
+ `events-node-reference` proves Node JavaScript/Native direct parity, Native emit
66
+ suspension/resume, exact accepted frames, bounded FIFO ingress, cancellation,
67
+ failure categories, instance isolation, no loopback, zero JavaScript/Asyncify
68
+ imports, and zero fallback. It does not exercise a public listener or Fastly.
69
+ `events-cli-workflow` proves mixed HTTP/event harness cases, exact emitted-frame
70
+ expectations, Node JavaScript/Native project parity, event catalog packaging,
71
+ compile-only inspection, and the exact Fastly fail-closed eligibility boundary.
72
+ `events-conformance` drives the canonical bounded corpus through Node
73
+ JavaScript and Native and compares every semantic projection exactly, including
74
+ limits, queues, cancellation, redaction, state isolation, completion, and the
75
+ absence of loopback or a call surface. `events-candidate-seal` packs the
76
+ event-facing public package closure, installs it offline, type-checks author and
77
+ host consumers, verifies deterministic tarballs, and emits the EV9 candidate
78
+ decision plus blocker ledger. The candidate seal is evidence-only and does not
79
+ assign a release or publish anything.
80
+
81
+ Replay the existing Fastly HTTP regression through an explicitly selected
82
+ workspace-local Viceroy 0.20.1 binary; this does not claim Fastly event support:
83
+
84
+ ```bash
85
+ PULSE_VICEROY_BIN=/path/to/viceroy-0.20.1/viceroy \
86
+ node wasm/scripts/run-wasm-tests.cjs \
87
+ --task provider-fastly-compute-reality \
88
+ --no-report
89
+ ```
90
+
91
+ Event cases are an explicit harness discriminant; existing request cases remain
92
+ unchanged:
93
+
94
+ ```ts
95
+ export default [
96
+ {
97
+ name: 'health',
98
+ request: { method: 'GET', path: '/health' },
99
+ expect: { status: 200, text: 'ok' },
100
+ },
101
+ {
102
+ name: 'ingress',
103
+ kind: 'event',
104
+ event: {
105
+ type: 'input.received',
106
+ schema: 'events.Input',
107
+ payload: { sequence: 7 },
108
+ },
109
+ expect: {
110
+ status: 'completed',
111
+ emitted: [{
112
+ type: 'output.accepted',
113
+ schema: 'events.Output',
114
+ payload: { accepted: true, sequence: 7 },
115
+ }],
116
+ },
117
+ },
118
+ ]
119
+ ```
120
+
121
+ `expect.emitted` is ordered and exact. It proves host acceptance only; it does
122
+ not imply delivery, automatic loopback, or a public injection command.
123
+
124
+ The source-bound [`examples/11-events`](../../examples/11-events/) project runs
125
+ the same mixed HTTP/event topology through `doctor`, `inspect`, `test`, and
126
+ `build`. Its `dev` command remains HTTP-only.
127
+
128
+ Maintainers may bound a diagnostic rerun:
129
+
130
+ ```bash
131
+ node wasm/scripts/run-wasm-tests.cjs --profile release --from cli-project-workflow
132
+ node wasm/scripts/run-wasm-tests.cjs --profile cli --through docs-example-03-fetch-composition
133
+ ```
134
+
135
+ `--from` and `--through` aid investigation. A release claim requires the complete release profile.
136
+
137
+ ## Aggregate release seal
138
+
139
+ ```bash
140
+ npm run release:seal
141
+ ```
142
+
143
+ The seal restores the lockfile-pinned dependency graph, regenerates production
144
+ vulnerability and license evidence, validates maintenance and source publication
145
+ controls, builds and unit-tests the workspace, checks synchronized documentation,
146
+ runs the release profile, and records revision-bound evidence under
147
+ `wasm/.test-results/`. The release profile creates deterministic Fastly
148
+ Native and JavaScript candidate inputs and invokes the pinned downstream
149
+ JavaScript compiler locally. It does not deploy or publish either candidate.
150
+
151
+ External npm organization settings, trusted publishers, protected publication
152
+ environments, public repository administration, and the production documentation
153
+ origin do not authorize or block candidate construction. They remain explicit
154
+ publication and documentation-deployment gates after the candidate is sealed.
155
+
156
+ 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:
157
+
158
+ ```bash
159
+ npm run release:seal -- --require-fastly
160
+ ```
161
+
162
+ To validate an already restored dependency graph:
163
+
164
+ ```bash
165
+ npm run release:seal -- --skip-install
166
+ ```
167
+
168
+ The Docker-built offline dependency bundle is created and restored with:
169
+
170
+ ```bash
171
+ ./scripts/bundle_deps.sh
172
+ ./scripts/restore_deps.sh ./pulse-wasm-deps-....tar.zst
173
+ ```
174
+
175
+ The restore script reconstructs the dependency graph only. The release seal owns product validation.
176
+
177
+ After a clean passing seal, aggregate the persisted reports into the sixteen
178
+ release evidence shards and verify an exact binary patch replay:
179
+
180
+ ```bash
181
+ npm run release:evidence -- \
182
+ --base <accepted-source-ref> \
183
+ --head HEAD \
184
+ --label <delivery-name> \
185
+ --out <new-output-directory>
186
+ ```
187
+
188
+ The authority creates a source-only archive, binary patch, independent replay,
189
+ four-mode and target-integrity reports, migration ledger, maintainer scope,
190
+ Fastly Native and JavaScript candidates, checksums, and one delivery bundle. It
191
+ requires a clean tree and matching source revisions in every persisted report.
192
+
193
+ ## Executable documentation
194
+
195
+ Documentation execution belongs to the `cli` profile because every public example is driven through installed command behavior. Separate tasks cover:
196
+
197
+ - source-bound documentation contracts;
198
+ - clean `pulse init` and live `pulse dev`;
199
+ - each canonical example’s `doctor`, `inspect`, `test`, and `build` flow.
200
+
201
+ Source-backed blocks use:
202
+
203
+ ```text
204
+ &lt;!-- pulse-doc-source: examples/01-hello-json/src/index.ts --&gt;
205
+ <exact fenced source block>
206
+ &lt;!-- /pulse-doc-source --&gt;
207
+ ```
208
+
209
+ Synchronize or check generated documentation with:
210
+
211
+ ```bash
212
+ pnpm docs:sync
213
+ pnpm docs:check
214
+ ```
215
+
216
+ Command/result blocks use `pulse-doc-run` metadata and compare stable semantic fields rather than durations or absolute paths.
217
+
218
+ ## Package and consumer evidence
219
+
220
+ The release profile:
221
+
222
+ - constructs all publishable package tarballs from the canonical release catalog;
223
+ - checks package metadata, exports, exact versions, dependency rewriting, and payload hygiene;
224
+ - builds release packages and the documentation site twice and compares byte identities;
225
+ - installs every exact Pulse candidate while a loopback-only read-only registry keeps the `@pulse-compute` scope fail-closed;
226
+ - resolves third-party dependencies from the canonical npm registry instead of repacking development-install artifacts;
227
+ - exercises fresh Native Node, JavaScript Node, Native Fastly, GRIP, and Router projects without workspace links;
228
+ - 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.
229
+
230
+ Run a focused package or consumer proof when diagnosing:
231
+
232
+ ```bash
233
+ node wasm/scripts/run-wasm-tests.cjs --task release-packages --no-report
234
+ node wasm/scripts/run-wasm-tests.cjs --task clean-machine-acceptance --no-report
235
+ node wasm/scripts/run-wasm-tests.cjs --task deployment-candidates --no-report
236
+ ```
237
+
238
+ ## JWT and crypto proof seals
239
+
240
+ The `1.0.0-beta.2` JWT/crypto packages build on the focused crypto seal,
241
+ which replays the
242
+ configuration, JavaScript runtime, Native guest-source, shared cross-target
243
+ corpus, and real Fastly Compute proofs. First record the one phase-boundary
244
+ aggregate replay, then run the seal:
245
+
246
+ ```bash
247
+ node wasm/scripts/run-wasm-tests.cjs \
248
+ --profile unit \
249
+ --profile native \
250
+ --profile javascript \
251
+ --profile conformance \
252
+ --profile providers \
253
+ --report .test-results/crypto-c4/relevant-aggregate.json
254
+ node wasm/scripts/run-wasm-tests.cjs --task crypto-verification-seal --no-report
255
+ ```
256
+
257
+ The seal writes `wasm/.test-results/crypto-c4/phase-c-seal.json` and the shared
258
+ corpus proof writes
259
+ `wasm/.test-results/crypto-c4/crypto-cross-target-conformance.json`. Both
260
+ reports contain status, target realization, toolchain, boundary, and size
261
+ evidence; neither contains keys, messages, authenticators, or ambient backend
262
+ errors. The preserved Phase C seal records the earlier package boundary. JWT
263
+ composition is now sealed in
264
+ `wasm/.test-results/jwt-d4/jwt-phase-d-seal.json`, and the complete four-cell
265
+ target proof is sealed in
266
+ `wasm/.test-results/jwt-e4/jwt-phase-e-seal.json`.
267
+
268
+ Consolidate those records with the guest-memory decision, guest-link pipeline,
269
+ current documentation, and synchronized package identity using:
270
+
271
+ ```bash
272
+ node wasm/scripts/run-wasm-tests.cjs \
273
+ --task jwt-evidence-consolidation \
274
+ --no-report
275
+ ```
276
+
277
+ The task writes
278
+ `wasm/.test-results/jwt-f0/jwt-f0-evidence-consolidation.json`, verifies
279
+ preserved hashes, and proves the JWT/crypto implementation evidence remains
280
+ internally consistent. It does not publish, promote, deploy, or activate
281
+ anything.
282
+
283
+ ## Runner evidence
284
+
285
+ 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.
286
+
287
+ Before reporting a run as passed, verify process exit, terminal report status,
288
+ the requested/selected task set, completed task count and each task result. A
289
+ zero exit with a missing or incomplete expected report is unresolved. When
290
+ `--no-report` is used, retain the terminal task results and aggregate summary;
291
+ exit status alone does not establish coverage.
292
+
293
+ Record the source revision and working-tree state alongside the toolchain,
294
+ command and artifact identities. The runner's Git commit identity alone does not
295
+ identify uncommitted changes. Label those runs as development evidence and retain
296
+ the tested diff or tree digest. Preserve failures when retrying, identify why the
297
+ rerun was bounded, and report the retry separately. Focused, split or resumed
298
+ development runs do not substitute for the complete clean-candidate release
299
+ replay or permit combining reports from different source trees.
300
+
301
+ On an interruption or handoff, record the branch, base/head, uncommitted work,
302
+ report/artifact paths, completed and running checks, blockers and the next action.
303
+ A task handoff must distinguish implemented, validated, pushed and merged work.
304
+
305
+ ## Provider evidence boundaries
306
+
307
+ | Evidence | Establishes | Does not establish |
308
+ | --- | --- | --- |
309
+ | Injected host or ABI fixture | Behavior under the modeled host outcomes | Real engine or deployed service behavior |
310
+ | Fastly CLI/Viceroy execution | The identified artifact ran on the identified local engine | Deployed Fastly behavior |
311
+ | Standalone live SDK probe | The tested service cases through that probe | Pulse package acceptance or untested concurrent/cross-location behavior |
312
+ | Deployed Pulse acceptance | The identified Pulse artifact passed the bounded deployed corpus | Exhaustive consistency or guarantees outside that corpus |
313
+
314
+ Report tool versions, artifact identity, execution/deployment identity where
315
+ applicable, corpus scope and pass/fail/inconclusive status separately. Executing
316
+ a real engine is not itself a passing semantic result. A caller-supplied Wasm
317
+ hash is not deployed binary attestation.
318
+
319
+ For conditional KV, the Fastly JavaScript SDK is incomplete capability mapping,
320
+ not semantic canon or an acceptance gate for other targets. Keep provider docs,
321
+ wire observations and executable behavior distinguishable when they disagree.
322
+ Retain the discrepancy and the unchanged Pulse assertion; do not compensate with
323
+ hidden retries, non-atomic prechecks or weaker expected results. Substituting one
324
+ kind of evidence for a required gate needs an explicit human-directed acceptance
325
+ policy change. See [conditional KV acceptance](./release-acceptance.md#conditional-kv-acceptance)
326
+ for the currently unresolved gates.
327
+
328
+ ## Redundancy policy
329
+
330
+ - Add a task once to `wasm/test/suite/registry.cjs`; do not add a package script per test.
331
+ - Prefer the strongest end-to-end oracle that proves the behavior.
332
+ - Keep compiler goldens, runtime traces, provider results, CLI subprocess output, build manifests, and executable docs at their owning boundary.
333
+ - Do not derive expected constants from the implementation being tested.
334
+ - Remove a weaker fixture when a stronger oracle covers the same claim.
@@ -0,0 +1,60 @@
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.2 publishes one synchronized 19-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 on npm | Guide | Support tier | Install directly | Release promise |
8
+ |---|---|---|---:|---|
9
+ | [`@pulse-compute/runtime`](https://www.npmjs.com/package/@pulse-compute/runtime) | [Guide](./runtime.md) | Canonical application surface | Yes | Supported application authoring and execution contract. |
10
+ | [`@pulse-compute/pulse`](https://www.npmjs.com/package/@pulse-compute/pulse) | [Guide](./pulse.md) | Canonical application surface | Yes | Supported conventional application, project-configuration, and schema-authoring contract. |
11
+ | [`@pulse-compute/cli`](https://www.npmjs.com/package/@pulse-compute/cli) | [Guide](./cli.md) | Canonical application surface | Yes | Supported Beta workflow and project-configuration contract. |
12
+ | [`@pulse-compute/provider-fastly`](https://www.npmjs.com/package/@pulse-compute/provider-fastly) | [Guide](./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`](https://www.npmjs.com/package/@pulse-compute/grip) | [Guide](./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`](https://www.npmjs.com/package/@pulse-compute/assets) | [Guide](./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`](https://www.npmjs.com/package/@pulse-compute/crypto) | [Guide](./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`](https://www.npmjs.com/package/@pulse-compute/jwt) | [Guide](./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`](https://www.npmjs.com/package/@pulse-compute/entities) | [Guide](./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/s3`](https://www.npmjs.com/package/@pulse-compute/s3) | [Guide](./s3.md) | Supported provider/extension surface | Yes | The package root supports head, getText and putText on Node Native, Node JavaScript and Fastly Native. Fastly JavaScript is ineligible. Provider and lowering subpaths are toolchain-only; live origin acceptance is separate. |
19
+ | [`@pulse-compute/wasm-build-support`](https://www.npmjs.com/package/@pulse-compute/wasm-build-support) | [Guide](./implementation-packages.md) | Implementation/transitive surface | No | Internal release-set interface; exported modules may change with compiler implementation needs. |
20
+ | [`@pulse-compute/wasm-compiler`](https://www.npmjs.com/package/@pulse-compute/wasm-compiler) | [Guide](./implementation-packages.md) | Implementation/transitive surface | No | Internal compiler interface; no application-author compatibility guarantee. |
21
+ | [`@pulse-compute/wasm-guest-link`](https://www.npmjs.com/package/@pulse-compute/wasm-guest-link) | [Guide](./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. |
22
+ | [`@pulse-compute/wasm-contracts`](https://www.npmjs.com/package/@pulse-compute/wasm-contracts) | [Guide](./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. |
23
+ | [`@pulse-compute/wasm-host-runtime`](https://www.npmjs.com/package/@pulse-compute/wasm-host-runtime) | [Guide](./implementation-packages.md) | Implementation/transitive surface | No | Internal compiler/runtime interface synchronized with this release set. |
24
+ | [`@pulse-compute/wasm-library-kit`](https://www.npmjs.com/package/@pulse-compute/wasm-library-kit) | [Guide](./implementation-packages.md) | Implementation/transitive surface | No | Internal package-lowering interface synchronized with this release set. |
25
+ | [`@pulse-compute/provider-node`](https://www.npmjs.com/package/@pulse-compute/provider-node) | [Guide](./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. |
26
+ | [`@pulse-compute/wasm-runtime-core-as`](https://www.npmjs.com/package/@pulse-compute/wasm-runtime-core-as) | [Guide](./implementation-packages.md) | Implementation/transitive surface | No | Internal code-generation interface synchronized with this release set. |
27
+ | [`@pulse-compute/wasm-schema-json`](https://www.npmjs.com/package/@pulse-compute/wasm-schema-json) | [Guide](./implementation-packages.md) | Implementation/transitive surface | No | Internal schema compiler interface synchronized with this release set. |
28
+
29
+ ## Tier definitions
30
+
31
+ ### Canonical application surface
32
+
33
+ Fully documented and supported as the Pulse application authoring or workflow contract.
34
+
35
+ ### Supported provider/extension surface
36
+
37
+ Documented entry points are supported; implementation and toolchain subpaths are explicitly excluded.
38
+
39
+ ### Implementation/transitive surface
40
+
41
+ Installable as part of the synchronized release set, without an application-author compatibility guarantee.
42
+
43
+ ## Reading package READMEs
44
+
45
+ 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.
46
+
47
+ ## Extension and provider boundary in 1.0.0-beta.2
48
+
49
+ 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.2` does **not** expose a general third-party plugin registry:
50
+
51
+ - lowerer manifests are accepted only from trusted first-party release packages;
52
+ - arbitrary external lowerer discovery and execution are not supported;
53
+ - provider selection is limited to `node`, `fastly`, and compile-only `none`;
54
+ - adding a new lowerer or provider currently means changing and testing the synchronized Pulse release set.
55
+
56
+ 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.
57
+
58
+ ## Installed documentation
59
+
60
+ `@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.2
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)