@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,250 @@
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
+ # Release packages and clean-consumer acceptance
9
+
10
+ The current Beta candidate contains eighteen publishable packages
11
+ synchronized at version `1.0.0-beta.1`. The product-facing packages are:
12
+
13
+ ```text
14
+ @pulse-compute/pulse
15
+ @pulse-compute/runtime
16
+ @pulse-compute/cli
17
+ @pulse-compute/provider-fastly
18
+ @pulse-compute/grip
19
+ @pulse-compute/assets
20
+ @pulse-compute/crypto
21
+ @pulse-compute/jwt
22
+ @pulse-compute/entities
23
+ ```
24
+
25
+ The CLI and providers depend on additional `@pulse-compute/wasm-*`
26
+ implementation packages. Those packages are installable transitive
27
+ dependencies, not the handler authoring surface. The generated
28
+ [package support policy](../packages/README.md) defines the tier, audience,
29
+ direct-install guidance, and supported entry points for all 18 artifacts.
30
+
31
+ ## Event experimental candidate
32
+
33
+ Before changing release identity or package composition, the event surface has
34
+ its own evidence-only package and consumer seal:
35
+
36
+ ```bash
37
+ node wasm/scripts/run-wasm-tests.cjs --task events-candidate-seal --no-report
38
+ ```
39
+
40
+ That task packs `@pulse-compute/pulse`, `@pulse-compute/runtime`, and their
41
+ public contract dependency, installs the exact tarballs without network access,
42
+ type-checks both application and host-maintainer event consumers, checks legal
43
+ and dependency closure, and compares a second pack byte-for-byte. It also emits
44
+ the event candidate decision and a blocker ledger under `wasm/.test-results`.
45
+
46
+ Passing this focused seal means the event-facing package closure is internally
47
+ consistent. It does not authorize publication or claim Fastly/browser/ESP32
48
+ event support.
49
+
50
+ ## Check documentation release integrity
51
+
52
+ ```bash
53
+ pnpm docs:check
54
+ node scripts/documentation-release.cjs
55
+ ```
56
+
57
+ The documentation checks verify:
58
+
59
+ - generated documentation/package files and source-bound Markdown blocks are synchronized;
60
+ - canonical repository, installed-package, and exact-version hosted links and anchors resolve;
61
+ - every package has one generated status block and required repository metadata derived from the release manifest;
62
+ - each advertised supported package entry point exists in `exports` or `bin`;
63
+ - every public diagnostic has one real anchor and an exact-version docs URL;
64
+ - installed help, the public reference, the machine-readable command specification, and three shell completions agree on the public command and option set;
65
+ - public project, schema, development, test, and Fastly configuration fields and runtime rules agree with the shared schema and runtime normalization;
66
+ - the Fastly provider schema agrees with provider defaults and the compiled package payload;
67
+ - recognized environment variables agree with their generated scope reference;
68
+ - public plugin claims remain blocked until all six trust, discovery, compatibility, loading, and security prerequisites are implemented;
69
+ - contributor and governance pages carry valid owner, status, review, and stale-date metadata;
70
+ - the exact-version documentation site contains release banners, local search, and version navigation.
71
+
72
+ Maintainer-only task and report controls remain available to repository truth suites but are absent from installed help and the public CLI reference.
73
+
74
+ ## Pack a release candidate
75
+
76
+ From the source workspace:
77
+
78
+ ```bash
79
+ pnpm release:pack
80
+ ```
81
+
82
+ This builds the workspace and writes eighteen package tarballs plus `pulse-release-manifest.json` under `.pulse-release/`. It prepares release artifacts; it does not publish them to a registry.
83
+
84
+ Packing fails when:
85
+
86
+ - a package is private or versions diverge;
87
+ - a packed dependency retains `workspace:`;
88
+ - repository-only tests or internal documentation leak into a tarball;
89
+ - required API/CLI reference files are absent;
90
+ - a Markdown link or anchor is dead after extraction;
91
+ - a link escapes its package root;
92
+ - an exact-version Pulse documentation URL does not map to a real file and anchor in the packed release set.
93
+
94
+ `@pulse-compute/runtime` ships its canonical API and preview-scope references.
95
+ `@pulse-compute/cli` ships the public documentation hierarchy,
96
+ API/CLI/config/diagnostic/package references, bounded compatibility material,
97
+ and runnable example sources.
98
+
99
+ ## Clean-consumer acceptance
100
+
101
+ ```bash
102
+ node wasm/scripts/run-wasm-tests.cjs --task clean-machine-acceptance --no-report
103
+ ```
104
+
105
+ The release task creates an isolated npm home and cache, installs exact packed candidates rather than workspace links, and validates:
106
+
107
+ ```text
108
+ install
109
+ → pulse init
110
+ → npm install
111
+ → pulse doctor
112
+ → pulse inspect
113
+ → pulse test
114
+ → pulse dev --once
115
+ → pulse build
116
+ ```
117
+
118
+ It runs that workflow for new Native and JavaScript Node/Fastly projects,
119
+ verifies a real Fastly Native `bin/main.wasm`, and installs/builds the canonical
120
+ GRIP and Router examples from the packed package set. The two JavaScript
121
+ projects prove packed `inspect`, passing `doctor`, `test`, one-request `dev`,
122
+ provider-neutral `compile`, and deterministic `build`. Their executable source
123
+ packages contain exact reachable dependencies, no Native planning artifacts,
124
+ and `automaticFallback: false`. The Node target satisfies all 12 support gates;
125
+ the Fastly target satisfies all six support gates, emits source/deployment
126
+ manifests with provider reality and deployment still false, and does not install
127
+ the downstream Fastly compiler into an ordinary Pulse consumer.
128
+
129
+ ## Offline deployment candidates
130
+
131
+ ```bash
132
+ npm run release:candidates
133
+ ```
134
+
135
+ This gate builds the representative Fastly Native and Fastly JavaScript targets
136
+ twice from the same output location. Native output, including `bin/main.wasm`,
137
+ must be byte-identical. Fastly JavaScript source, deployment metadata, and exact
138
+ toolchain closure must be byte-identical; one closure is then compiled by the
139
+ pinned `@fastly/js-compute` runtime compiler into `bin/main.wasm`.
140
+
141
+ The downstream Wizer snapshot is recorded by exact SHA-256 but is not presented
142
+ as byte-reproducible. The candidate report distinguishes that toolchain-owned
143
+ property from Pulse-owned deterministic input and metadata. It also records zero
144
+ provider-reality runs, zero deployments, and zero publications.
145
+
146
+ The task owns the eighteen publishable Pulse packages, not the packages in the
147
+ development installation. It installs every exact Pulse tarball into clean
148
+ consumer projects and verifies the installed name, version, and real path. An
149
+ ephemeral server bound to `127.0.0.1` is the fail-closed registry for the
150
+ `@pulse-compute` scope, so an undeclared or missing Pulse candidate cannot fall
151
+ through to a previously published package. Third-party dependencies resolve
152
+ from the canonical npm registry according to the packed manifests; the release
153
+ gate does not repack or assume ownership of `assemblyscript`, `long`, `esbuild`,
154
+ or other external packages. Lockfile and dependency evidence remain separate
155
+ workspace inputs.
156
+
157
+ External Fastly Compute execution is also separate:
158
+
159
+ ```bash
160
+ PULSE_FASTLY_BIN=/path/to/fastly \
161
+ node wasm/scripts/run-wasm-tests.cjs --task provider-fastly-compute-reality --no-report
162
+ ```
163
+
164
+ The task records the Fastly CLI version, invokes `fastly compute serve --file`, and lets the CLI own its local Compute engine. It then sends real HTTP requests through the generated native module. `PULSE_VICEROY_BIN` remains available only as an explicit lower-level reproduction override. The fixture covers schemas, configuration, secrets, KV persistence, named-backend fetch, opaque bytes, repeated headers, and GRIP hold/publish. It does not deploy or activate a Fastly service.
165
+
166
+ The aggregate candidate seal is:
167
+
168
+ ```bash
169
+ npm run release:seal
170
+ ```
171
+
172
+ It restores dependencies, validates the repository and generated documentation, runs the complete release profile, and adds the external Fastly task when the Fastly CLI can start its managed local Compute lifecycle. Use `--require-fastly` to make that host proof mandatory.
173
+
174
+ The seal also regenerates the production vulnerability and installed-platform
175
+ license closure. It does not depend on mutable npm trusted-publisher settings,
176
+ GitHub publication environments, public repository administration, or the
177
+ production documentation origin. Those remain blocking at publication or
178
+ documentation deployment, where the corresponding authority is actually used.
179
+
180
+ With a clean passing seal, create the release evidence delivery:
181
+
182
+ ```bash
183
+ npm run release:evidence -- \
184
+ --base <accepted-source-ref> \
185
+ --head HEAD \
186
+ --label <delivery-name> \
187
+ --out <new-output-directory>
188
+ ```
189
+
190
+ The evidence authority checks that all reports belong to the exact head
191
+ revision, aggregates sixteen passing shards, creates source and binary-patch
192
+ artifacts, independently applies the patch to the accepted source archive, and
193
+ compares path, mode, and bytes with the sealed head. The resulting bundle is
194
+ offline evidence only; merge, tagging, deployment, activation, and publication
195
+ remain human-authority operations.
196
+
197
+ ## Publication workflow
198
+
199
+ After all dependency-bound acceptance passes, seal the exact tarballs:
200
+
201
+ ```bash
202
+ npm run release:candidate
203
+ npm run release:verify-bundle
204
+ npm run publication:check
205
+ ```
206
+
207
+ Production publication is performed only by the manually dispatched **npm
208
+ publication** workflow at the exact release tag. Its protected `npm-publish` job
209
+ uses npm trusted publishing through GitHub OIDC, publishes the tarballs from
210
+ `.pulse-publication` in dependency-safe order, accepts an already-published
211
+ version only when registry integrity matches, and verifies every configured
212
+ dist-tag. A separate job installs the published CLI in a clean prefix and
213
+ completes init, install, doctor, test, and build smoke checks.
214
+
215
+ Before the first trusted publication, every package name must exist and authorize the exact repository, `npm-publish.yml` workflow, and `npm-publish` environment. Use the package-name audit and a one-time human 2FA bootstrap for any missing names. No long-lived npm token is part of the normal workflow.
216
+
217
+ ## Publication hold points
218
+
219
+ Before publication, confirm the repository, final documentation host/base path, package policy, and issue-tracker values centralized in `release/pulse-release-manifest.json`. Pulse is licensed under Apache-2.0: the release gate requires the exact root `LICENSE`, SPDX metadata in the workspace and all eighteen publishable packages, and the same license text in every npm tarball. A dependency-license audit and its dispositions remain separate release evidence.
220
+
221
+ A human release authority must approve `npm-publish`. Codex may diagnose or prepare a patch but cannot publish, approve the environment, bootstrap package names, or mutate dist-tags.
222
+
223
+ ## Versioned documentation artifact
224
+
225
+ The release owns a versioned hosted-documentation gate:
226
+
227
+ ```bash
228
+ pnpm docs:site:check
229
+ ```
230
+
231
+ The check builds the exact `v1.0.0-beta.1` site and `latest` tree in a temporary directory, creates one search entry per public page, validates local hosted links, verifies release/version manifests, and requires the search, version, owner, and review UI on every page.
232
+
233
+ The **Documentation** workflow repeats those checks for pull requests and `main`, seals a preview deployment manifest, and uploads artifacts without production credentials. It does not deploy to GitHub Pages.
234
+
235
+ Production delivery uses the manually dispatched **Documentation deployment** workflow and Fastly Object Storage. The workflow:
236
+
237
+ ```text
238
+ build and seal
239
+ → upload/verify v1.0.0-beta.1 and its receipt immutably
240
+ → verify all matching npm packages and configured dist-tags
241
+ → promote root and latest
242
+ → verify representative URLs through Fastly
243
+ ```
244
+
245
+ The deployment never deletes bucket objects. A pre-existing immutable key with different SHA-256 fails before promotion. The `documentation-production` environment, Object Storage credentials, VCL service, final public origin, and service activation remain under human release/infrastructure authority.
246
+
247
+ Release packing also checks the installed CLI command specification,
248
+ configuration schema bundle, release/version manifests, shell completions,
249
+ current architecture and plugin-readiness records, maintenance policy, and
250
+ publication/deployment references.
@@ -0,0 +1,88 @@
1
+ # Release manifest and generated package policy
2
+
3
+ <!-- Generated by wasm/scripts/sync-reference-docs.cjs. Edit the source catalog, not this file. -->
4
+
5
+ `release/pulse-release-manifest.json` is the canonical owner of the synchronized release version, documentation origin and exact segment, repository metadata, support tiers, package roles, direct-install guidance, supported entry points, and stability promises.
6
+
7
+ ## Beta candidate
8
+
9
+ - **Candidate:** Pulse 1.0.0-beta.1 — Beta
10
+ - **Version:** `1.0.0-beta.1`
11
+ - **Activation stage:** `documentation-release`
12
+ - **License:** `Apache-2.0`
13
+ - **Supported Node:** `^22.14.0 || ^24.0.0`
14
+ - **Minimum Node:** `22.14.0`
15
+ - **Release seal Node:** `^24.0.0`; the exact patch used is recorded in seal evidence
16
+ - **Reproducible publication toolchain:** Node `24.18.0` with npm `11.15.0`
17
+ - **Readiness register:** `release/release-preflight.json`
18
+ - **Documentation inventory:** `release/documentation-inventory.json`
19
+ - **Exact documentation:** `https://pulsecompute.io/v1.0.0-beta.1/`
20
+ - **Runtime targets:** 3
21
+ - **Packages:** 18
22
+
23
+ The installed CLI ships the same machine-readable data as
24
+ `release-manifest.json`. The atomic snapshot transaction aligns
25
+ the Beta label, `beta` channel,
26
+ release date, package metadata, and exact-version documentation inputs. Tooling
27
+ can read [the hosted JSON copy](../reference/release-manifest.json) without scraping
28
+ package READMEs.
29
+
30
+ ## Generated consumers
31
+
32
+ The manifest drives:
33
+
34
+ - all package README status blocks;
35
+ - the [package support table](../packages/README.md) and tier pages;
36
+ - package repository, homepage, and bug metadata;
37
+ - supported-entry-point release checks;
38
+ - release prerequisites and documentation classification;
39
+ - exact-version documentation URLs;
40
+ - the homepage target pipeline and release badge;
41
+ - the hosted version banner and release search index.
42
+
43
+ ## Runtime targets
44
+
45
+ | ID | Label | Mode | Contract |
46
+ |---|---|---|---|
47
+ | `node` | Node | `execute` | Explicit Native and generally available JavaScript execution over one canonical application contract. |
48
+ | `fastly` | Fastly Compute | `execute-and-build` | Explicit Native direct-host-ABI Wasm and generally available JavaScript source/deployment candidates. |
49
+ | `none` | Compile only | `compile` | Compilation and inspection without a runnable provider target. |
50
+
51
+ The target list is consumed by the public homepage and must stay aligned with
52
+ the built-in provider support catalog and project configuration schema.
53
+ Project-owned provider packages do not become official release targets merely
54
+ because a project selects them through the namespace convention or an exact
55
+ scoped package name.
56
+
57
+ ## Support tiers
58
+
59
+ | ID | Label | Promise |
60
+ |---|---|---|
61
+ | `canonical-application` | Canonical application surface | Fully documented and supported as the Pulse application authoring or workflow contract. |
62
+ | `supported-extension` | Supported provider/extension surface | Documented entry points are supported; implementation and toolchain subpaths are explicitly excluded. |
63
+ | `implementation` | Implementation/transitive surface | Installable as part of the synchronized release set, without an application-author compatibility guarantee. |
64
+
65
+ ## Synchronized packages
66
+
67
+ | Package | Support tier | Canonical guide | Direct installation |
68
+ |---|---|---|---|
69
+ | `@pulse-compute/runtime` | Canonical application surface | [Guide](../packages/runtime.md) | Yes. Install it in every Pulse application. |
70
+ | `@pulse-compute/pulse` | Canonical application surface | [Guide](../packages/pulse.md) | Yes. Install it in every conventional Pulse project. |
71
+ | `@pulse-compute/cli` | Canonical application surface | [Guide](../packages/cli.md) | Yes. Install the package globally or as a project development dependency. |
72
+ | `@pulse-compute/provider-fastly` | Supported provider/extension surface | [Guide](../packages/provider-fastly.md) | Yes, for Fastly projects. Node-only projects do not need to import it directly. |
73
+ | `@pulse-compute/grip` | Supported provider/extension surface | [Guide](../packages/grip.md) | Yes, only when the application uses GRIP/Fanout behavior. |
74
+ | `@pulse-compute/assets` | Supported provider/extension surface | [Guide](../packages/assets.md) | Yes, only when the application uses the assets capability. |
75
+ | `@pulse-compute/crypto` | Supported provider/extension surface | [Guide](../packages/crypto.md) | Yes, when an application uses the crypto verification surface directly; JWT applications receive it transitively. |
76
+ | `@pulse-compute/jwt` | Supported provider/extension surface | [Guide](../packages/jwt.md) | Yes, when an application verifies JWTs. |
77
+ | `@pulse-compute/entities` | Supported provider/extension surface | [Guide](../packages/entities.md) | Yes, when an application declares entity operations. |
78
+ | `@pulse-compute/wasm-build-support` | Implementation/transitive surface | [Guide](../packages/implementation-packages.md) | No for application projects; it is installed transitively where required. |
79
+ | `@pulse-compute/wasm-compiler` | Implementation/transitive surface | [Guide](../packages/implementation-packages.md) | No for application projects; use the pulse CLI. |
80
+ | `@pulse-compute/wasm-guest-link` | Implementation/transitive surface | [Guide](../packages/implementation-packages.md) | No for application projects; it is an internal synchronized compiler dependency. |
81
+ | `@pulse-compute/wasm-contracts` | Implementation/transitive surface | [Guide](../packages/implementation-packages.md) | Provider toolchain authors may install it for the versioned bootstrap contract; application projects receive it transitively. |
82
+ | `@pulse-compute/wasm-host-runtime` | Implementation/transitive surface | [Guide](../packages/implementation-packages.md) | No for application projects; it is installed transitively. |
83
+ | `@pulse-compute/wasm-library-kit` | Implementation/transitive surface | [Guide](../packages/implementation-packages.md) | No for application projects; it is installed transitively. |
84
+ | `@pulse-compute/provider-node` | Implementation/transitive surface | [Guide](../packages/implementation-packages.md) | No for application projects; select provider: node through the CLI. |
85
+ | `@pulse-compute/wasm-runtime-core-as` | Implementation/transitive surface | [Guide](../packages/implementation-packages.md) | No for application projects; it is installed transitively. |
86
+ | `@pulse-compute/wasm-schema-json` | Implementation/transitive surface | [Guide](../packages/implementation-packages.md) | No for application projects; declare schemas in the selected .pulse/config.ts profile. |
87
+
88
+ A package export that is absent from its manifest entry is not promoted to a supported application-author API merely because Node or npm can resolve it.
@@ -0,0 +1,145 @@
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
+ # Repository setup
9
+
10
+ Files in this repository define the desired control plane, but GitHub teams, rulesets, environments, secrets, connected services, security settings, and production delivery configuration live outside Git. A repository owner must apply these steps after cloning or transferring the repository.
11
+
12
+ ## 1. Create the maintainer team
13
+
14
+ Create a visible organization team with the slug:
15
+
16
+ ```text
17
+ pulse-compute/pulse-maintainers
18
+ ```
19
+
20
+ Give the team write access to the repository and add the human architecture and release authority. The generated `.github/CODEOWNERS` file assigns protected areas to `@pulse-compute/pulse-maintainers`; GitHub cannot request that team until it exists, is visible, and has repository access.
21
+
22
+ ## 2. Restrict Actions and synchronize labels
23
+
24
+ In the repository's Actions settings, allow only GitHub-authored actions and the explicitly required external action, or use an equivalent organization allowlist. Every checked-in action reference is pinned to a reviewed full commit SHA recorded in `release/maintenance-policy.json`.
25
+
26
+ Run the manual **Maintainer labels** workflow from the default branch. It creates or updates the labels generated in `.github/labels.yml` from `release/maintenance-policy.json`.
27
+
28
+ Labels classify intake and review state. They do not authorize implementation or merge.
29
+
30
+ ## 3. Create a branch ruleset for `main`
31
+
32
+ Create a ruleset targeting the default branch and require pull requests. Recommended settings are:
33
+
34
+ - at least one approving review;
35
+ - approval from code owners;
36
+ - dismissal of stale approvals after new commits;
37
+ - conversation resolution;
38
+ - blocked force pushes and deletion;
39
+ - no Codex, Actions-token, or automation-account bypass; and
40
+ - these exact status checks from `release/maintenance-policy.json`:
41
+ - `Maintainer scope / scope`
42
+ - `Repository validation / maintenance`
43
+ - `Repository validation / node-floor`
44
+ - `Repository validation / portable`
45
+ - `Documentation / build`
46
+
47
+ Keep workflow, CODEOWNERS, `AGENTS.md`, release-policy, and governance changes under CODEOWNER review. The deterministic scope workflow executes the classifier from an archive of the pull request's trusted base commit rather than running the proposed classifier.
48
+
49
+ The portable validation job installs the lockfile-pinned workspace graph with lifecycle scripts disabled, builds the workspace outputs needed by tests, and runs the unit, native, JavaScript, and conformance profiles. It does not replace provider, CLI, package, clean-consumer, or external-host evidence in the aggregate release seal.
50
+
51
+ ## 4. Create the protected Codex environment
52
+
53
+ Create a GitHub Actions environment named:
54
+
55
+ ```text
56
+ codex-maintainer
57
+ ```
58
+
59
+ Configure it to allow deployment only from the default branch. When supported by the repository plan and desired operating model, require a human reviewer before the job starts.
60
+
61
+ Add this environment secret:
62
+
63
+ ```text
64
+ OPENAI_API_KEY
65
+ ```
66
+
67
+ Do not add the key as a broadly available repository secret. GitHub releases an environment secret to a job only after the configured environment protection rules pass.
68
+
69
+ The manual **Codex maintainer review** workflow also checks that it was dispatched from the default branch. It checks out the pull-request merge ref only to obtain the Git objects, then runs Codex from a separate nested checkout fixed at the trusted base commit. The proposed head is available through local review refs and cannot replace the `AGENTS.md`, policy, prompt, schema, or classifier governing that run. Before Codex starts, the workflow removes the outer proposed working tree so only the trusted nested checkout remains in the Actions workspace.
70
+
71
+ ## 5. Configure Codex
72
+
73
+ Connect the repository in Codex cloud. Enable native code review when useful and choose whether review should be automatic or explicitly requested. Native review remains advisory and does not replace the repository's required checks.
74
+
75
+ For the policy-specific review, manually dispatch **Codex maintainer review** from the default branch and supply a pull-request number. The workflow uses the `codex-maintainer` environment and the `OPENAI_API_KEY` environment secret. It does not run on `pull_request_target`, forks, issue comments, pushes, or arbitrary untrusted triggers.
76
+
77
+ ## 6. Enable security intake
78
+
79
+ Enable private vulnerability reporting and GitHub security advisories. The public security page directs reporters to the repository's private advisory form rather than a normal issue.
80
+
81
+ ## 7. Configure npm trusted publishing
82
+
83
+ Create a protected GitHub Actions environment named:
84
+
85
+ ```text
86
+ npm-publish
87
+ ```
88
+
89
+ Allow deployment only from release tags and require a human release-authority reviewer. Do not add `NPM_TOKEN` or `NODE_AUTH_TOKEN` to the repository or environment.
90
+
91
+ For every package in `release/pulse-release-manifest.json`, first confirm that the package name exists under the intended npm owner. Missing names need a one-time human 2FA-protected bootstrap publication. Then configure npm trusted publishing with the exact repository, `npm-publish.yml` workflow filename, and `npm-publish` environment.
92
+
93
+ Select the exact `v<releaseVersion>` tag as the workflow ref, then run **npm
94
+ publication** manually. Confirm that the protected job receives OIDC only after
95
+ approval, the registry integrity report covers every package in the sealed
96
+ release catalog, the configured dist-tags point to the synchronized version,
97
+ and the clean published-CLI smoke test passes.
98
+
99
+ ## 8. Configure documentation delivery
100
+
101
+ Create a protected GitHub Actions environment named:
102
+
103
+ ```text
104
+ documentation-production
105
+ ```
106
+
107
+ Allow deployment only from release tags and require a human release/infrastructure reviewer. Add bucket-limited read/write Object Storage credentials as environment secrets:
108
+
109
+ ```text
110
+ FASTLY_OBJECT_STORAGE_ACCESS_KEY_ID
111
+ FASTLY_OBJECT_STORAGE_SECRET_ACCESS_KEY
112
+ ```
113
+
114
+ Add these environment variables:
115
+
116
+ ```text
117
+ FASTLY_OBJECT_STORAGE_BUCKET
118
+ FASTLY_OBJECT_STORAGE_REGION
119
+ FASTLY_OBJECT_STORAGE_ENDPOINT
120
+ PULSE_DOCUMENTATION_ORIGIN
121
+ PULSE_DOCUMENTATION_BASE_PATH
122
+ ```
123
+
124
+ Create a separate bucket-limited read-only key for the Fastly VCL private origin. Do not expose that key to GitHub Actions, and do not place the read/write deployment key in VCL.
125
+
126
+ Install the checked-in snippets under `infra/fastly/documentation/` in a non-production Fastly service version, configure the regional Object Storage backend and protected origin credentials, then verify GET, HEAD, directory indexes, exact-version caching, root/latest caching, branded 404s, and security headers before manual activation.
127
+
128
+ The **Documentation** workflow now validates pull requests and `main` and uploads preview artifacts only. Select the exact release tag as the workflow ref, then manually dispatch **Documentation deployment**. It uploads and verifies immutable exact-version objects, verifies the matching npm catalog, promotes root/latest, and verifies the final route through Fastly. Before activation, change the release-owned documentation origin from the old Pages hostname to the final Fastly-served origin; the workflow rejects a mismatch.
129
+
130
+ ## 9. Verify the installation
131
+
132
+ Open a test pull request that changes one documentation file. Keep the declaration block and set:
133
+
134
+ ```text
135
+ Change class: documentation
136
+ Scope: inside-developer-preview
137
+ Protected boundaries: none
138
+ Human decision: not-required
139
+ ```
140
+
141
+ Confirm that all four required checks report. Then change a control-plane file and confirm that CODEOWNER review is requested and the scope report names `maintenance-control-plane`.
142
+
143
+ Finally, manually run the Codex maintainer review from the default branch against the test pull request. Confirm that the environment protection activates, that one marked structured comment is created or updated, and that no secret is exposed to the posting job.
144
+
145
+ Repository settings are not validated from a source archive. Record completion in the release checklist or repository administration log.
@@ -0,0 +1,93 @@
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
+ # Scope policy
9
+
10
+ The maintenance control plane separates routine work from product decisions. The exact catalog is generated in the [maintenance policy reference](./maintenance-policy.md); this page explains how to use it.
11
+
12
+ ## Classify the intent
13
+
14
+ Every issue and pull request begins with one change class:
15
+
16
+ - **Defect** — documented or tested supported behavior is broken.
17
+ - **Hardening** — reliability, security, performance, diagnostics, or evidence improves without widening behavior.
18
+ - **Documentation** — explanation, examples, generated references, or presentation changes only.
19
+ - **Evidence** — a reproduction, fixture, benchmark, or experiment records information without creating a promise.
20
+ - **Scope expansion** — new syntax, capability, provider, effect, public export, or compatibility promise.
21
+ - **Architecture** — a trust boundary, execution contract, ownership rule, or governance mechanism changes.
22
+ - **Release** — publication, package composition, version, channel, deployment, signing, or provenance changes.
23
+
24
+ The first four classes can normally move to implementation and human review. The last three require a separate human decision before implementation is treated as approved direction.
25
+
26
+ ## Declare affected boundaries
27
+
28
+ Path rules conservatively infer protected boundaries, including the public API, effects and capabilities, continuations, lowerer trust, provider registry, configuration contract, compatibility surface, package publication, maintenance control plane, and release authority.
29
+
30
+ A path match does not claim that every edit changes the contract. It requires the pull request to name the boundary so reviewers can distinguish a mechanical edit from a semantic one.
31
+
32
+ ## Pull-request declaration
33
+
34
+ Every pull request keeps this comment in its body:
35
+
36
+ ```text
37
+ <!-- pulse-maintainer-declaration:start -->
38
+ Change class: defect
39
+ Scope: inside-developer-preview
40
+ Protected boundaries: none
41
+ Human decision: not-required
42
+ <!-- pulse-maintainer-declaration:end -->
43
+ ```
44
+
45
+ Use comma-separated boundary IDs, or `none`. Use `required` when scope, architecture, or release authority needs an explicit decision.
46
+
47
+ The `Maintainer scope / scope` check compares the declaration with changed paths. It has three outcomes:
48
+
49
+ - **pass** — the declaration is present and consistent with the conservative path inference;
50
+ - **decision-required** — the declaration is consistent and a separate human decision is correctly exposed;
51
+ - **fail** — the declaration is missing, uses unknown values, omits inferred boundaries, or contradicts the required decision state.
52
+
53
+ A decision-required result is not an agent approval or denial. Branch rules and CODEOWNER review remain the authority gate.
54
+
55
+ ## Update current contracts
56
+
57
+ For each protected boundary, the maintenance policy records whether an approved
58
+ architecture or release change requires a current contract update. When it
59
+ does, edit the canonical present-tense architecture, concept, contributor,
60
+ governance, or release owner and update its executable evidence. Do not add a
61
+ chronological decision file instead of repairing current truth.
62
+
63
+ The [current architecture contracts](../architecture/current-contracts.md)
64
+ provide the ownership map. Git history and sealed checkpoints preserve the
65
+ superseded state.
66
+
67
+ ## Select validation
68
+
69
+ The classifier returns required checks from the path policy. Portable checks can run in a source snapshot without the complete release dependency bundle. Dependency-bound checks remain mandatory before publication when their affected contract is touched.
70
+
71
+ Run the classifier locally with a pull-request body saved to a file:
72
+
73
+ ```bash
74
+ node scripts/maintainer-scope.cjs \
75
+ --base origin/main \
76
+ --head HEAD \
77
+ --declaration-file /tmp/pulse-pr-body.md \
78
+ --check
79
+ ```
80
+
81
+ Run the control-plane validation independently:
82
+
83
+ ```bash
84
+ npm run maintainer:check
85
+ ```
86
+
87
+ ## Scope requests are evidence first
88
+
89
+ A request for a new provider, npm compatibility, streaming primitive, lowerer
90
+ API, agent facility, or host capability is not rejected merely because it is
91
+ outside the Beta. It is labeled and retained as evidence.
92
+ Implementation begins only when the human authority chooses the product and
93
+ architectural direction.
@@ -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.