@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.
- package/API.md +539 -0
- package/CHANGELOG.md +47 -0
- package/README.md +70 -1
- package/bin/pulse.js +15 -0
- package/bin/pulsewasm-extract.js +22 -0
- package/cli-spec.json +575 -0
- package/completions/_pulse +106 -0
- package/completions/pulse.bash +31 -0
- package/completions/pulse.fish +76 -0
- package/docs/README.md +77 -0
- package/docs/architecture/current-contracts.md +381 -0
- package/docs/architecture/overview.md +93 -0
- package/docs/architecture/vision.md +515 -0
- package/docs/concepts/bodies.md +186 -0
- package/docs/concepts/compilation-and-lowering.md +496 -0
- package/docs/concepts/contracts-and-providers.md +158 -0
- package/docs/concepts/effects-and-continuations.md +243 -0
- package/docs/concepts/entities-and-adapters.md +71 -0
- package/docs/concepts/package-owned-lowering.md +175 -0
- package/docs/concepts/targets-and-hosts.md +62 -0
- package/docs/contributing/README.md +38 -0
- package/docs/contributing/adding-core-provider.md +315 -0
- package/docs/contributing/adding-first-party-lowerer.md +327 -0
- package/docs/contributing/entities-lowering.md +91 -0
- package/docs/contributing/package-lowerer-contract.md +383 -0
- package/docs/contributing/pulse-aware-packages.md +149 -0
- package/docs/examples.md +112 -0
- package/docs/fixtures/inspect-fetch-composition.selected.json +181 -0
- package/docs/getting-started.md +128 -0
- package/docs/guides/compatibility-imports.md +60 -0
- package/docs/guides/deploying-fastly.md +188 -0
- package/docs/guides/deploying-node.md +143 -0
- package/docs/guides/events.md +233 -0
- package/docs/guides/fastly-capabilities.md +153 -0
- package/docs/guides/fetching-and-composition.md +101 -0
- package/docs/guides/grip.md +94 -0
- package/docs/guides/json-schemas.md +233 -0
- package/docs/guides/migrating-from-express.md +192 -0
- package/docs/guides/project-lifecycle.md +143 -0
- package/docs/guides/routing.md +184 -0
- package/docs/guides/troubleshooting.md +47 -0
- package/docs/maintainers/README.md +60 -0
- package/docs/maintainers/codex-maintainer.md +71 -0
- package/docs/maintainers/documentation-deployment.md +147 -0
- package/docs/maintainers/documentation-system.md +58 -0
- package/docs/maintainers/documentation-versioning.md +65 -0
- package/docs/maintainers/maintainer-charter.md +84 -0
- package/docs/maintainers/maintenance-policy.json +778 -0
- package/docs/maintainers/maintenance-policy.md +124 -0
- package/docs/maintainers/npm-publishing.md +154 -0
- package/docs/maintainers/plugin-readiness.json +19 -0
- package/docs/maintainers/plugin-readiness.md +31 -0
- package/docs/maintainers/public-site.md +158 -0
- package/docs/maintainers/release-acceptance.md +250 -0
- package/docs/maintainers/release-manifest.md +88 -0
- package/docs/maintainers/repository-setup.md +145 -0
- package/docs/maintainers/scope-policy.md +93 -0
- package/docs/maintainers/support-and-triage.md +74 -0
- package/docs/maintainers/testing.md +288 -0
- package/docs/packages/README.md +59 -0
- package/docs/packages/assets.md +85 -0
- package/docs/packages/cli.md +190 -0
- package/docs/packages/crypto.md +71 -0
- package/docs/packages/entities.md +129 -0
- package/docs/packages/grip.md +82 -0
- package/docs/packages/implementation-packages.md +113 -0
- package/docs/packages/jwt.md +55 -0
- package/docs/packages/provider-fastly.md +217 -0
- package/docs/packages/pulse.md +159 -0
- package/docs/packages/runtime.md +256 -0
- package/docs/preview-scope.md +142 -0
- package/docs/reference/README.md +33 -0
- package/docs/reference/cli-spec.json +575 -0
- package/docs/reference/cli.md +457 -0
- package/docs/reference/compatibility-matrix.md +169 -0
- package/docs/reference/diagnostics.md +1872 -0
- package/docs/reference/documentation-versions.json +14 -0
- package/docs/reference/environment.md +347 -0
- package/docs/reference/handler-authoring.md +264 -0
- package/docs/reference/project-config.md +554 -0
- package/docs/reference/project-config.schema.json +918 -0
- package/docs/reference/release-manifest.json +427 -0
- package/docs/reference/shell-completion.md +23 -0
- package/documentation-site.json +661 -0
- package/documentation-versions.json +14 -0
- package/examples/01-hello-json/.pulse/.gitignore +3 -0
- package/examples/01-hello-json/.pulse/config.ts +16 -0
- package/examples/01-hello-json/README.md +119 -0
- package/examples/01-hello-json/package.json +20 -0
- package/examples/01-hello-json/src/index.ts +9 -0
- package/examples/01-hello-json/tests/pulse.harness.ts +22 -0
- package/examples/01-hello-json/tsconfig.json +14 -0
- package/examples/02-request-schema/.pulse/.gitignore +3 -0
- package/examples/02-request-schema/.pulse/config.ts +17 -0
- package/examples/02-request-schema/README.md +145 -0
- package/examples/02-request-schema/package.json +20 -0
- package/examples/02-request-schema/src/index.ts +18 -0
- package/examples/02-request-schema/src/schemas.ts +20 -0
- package/examples/02-request-schema/tests/pulse.harness.ts +37 -0
- package/examples/02-request-schema/tsconfig.json +14 -0
- package/examples/03-fetch-composition/.pulse/.gitignore +3 -0
- package/examples/03-fetch-composition/.pulse/config.ts +31 -0
- package/examples/03-fetch-composition/README.md +210 -0
- package/examples/03-fetch-composition/package.json +20 -0
- package/examples/03-fetch-composition/src/index.ts +60 -0
- package/examples/03-fetch-composition/tests/pulse.harness.ts +47 -0
- package/examples/03-fetch-composition/tsconfig.json +14 -0
- package/examples/05-fastly-capabilities/.pulse/.gitignore +3 -0
- package/examples/05-fastly-capabilities/.pulse/config.ts +57 -0
- package/examples/05-fastly-capabilities/README.md +257 -0
- package/examples/05-fastly-capabilities/package.json +22 -0
- package/examples/05-fastly-capabilities/src/index.ts +55 -0
- package/examples/05-fastly-capabilities/tests/pulse.harness.ts +66 -0
- package/examples/05-fastly-capabilities/tsconfig.json +14 -0
- package/examples/07-opaque-proxy/.pulse/.gitignore +3 -0
- package/examples/07-opaque-proxy/.pulse/config.ts +38 -0
- package/examples/07-opaque-proxy/README.md +150 -0
- package/examples/07-opaque-proxy/package.json +21 -0
- package/examples/07-opaque-proxy/src/index.ts +9 -0
- package/examples/07-opaque-proxy/tests/pulse.harness.ts +25 -0
- package/examples/07-opaque-proxy/tsconfig.json +14 -0
- package/examples/09-router-lowering/.pulse/.gitignore +3 -0
- package/examples/09-router-lowering/.pulse/config.ts +22 -0
- package/examples/09-router-lowering/README.md +287 -0
- package/examples/09-router-lowering/package.json +22 -0
- package/examples/09-router-lowering/src/index.ts +65 -0
- package/examples/09-router-lowering/tests/pulse.harness.ts +91 -0
- package/examples/09-router-lowering/tsconfig.json +14 -0
- package/examples/10-entities-tools/.pulse/.gitignore +4 -0
- package/examples/10-entities-tools/.pulse/config.ts +23 -0
- package/examples/10-entities-tools/README.md +165 -0
- package/examples/10-entities-tools/package.json +21 -0
- package/examples/10-entities-tools/src/handlers.ts +15 -0
- package/examples/10-entities-tools/src/index.ts +31 -0
- package/examples/10-entities-tools/src/schemas.ts +18 -0
- package/examples/10-entities-tools/tests/pulse.harness.ts +40 -0
- package/examples/10-entities-tools/tools-facade.cjs +158 -0
- package/examples/10-entities-tools/tsconfig.json +14 -0
- package/examples/11-events/.pulse/.gitignore +4 -0
- package/examples/11-events/.pulse/config.ts +24 -0
- package/examples/11-events/README.md +194 -0
- package/examples/11-events/package.json +20 -0
- package/examples/11-events/src/index.ts +27 -0
- package/examples/11-events/src/schemas.ts +19 -0
- package/examples/11-events/tests/pulse.harness.ts +34 -0
- package/examples/11-events/tsconfig.json +15 -0
- package/examples/12-mcp-proxy/.pulse/.gitignore +3 -0
- package/examples/12-mcp-proxy/.pulse/config.ts +25 -0
- package/examples/12-mcp-proxy/README.md +149 -0
- package/examples/12-mcp-proxy/package.json +20 -0
- package/examples/12-mcp-proxy/src/index.ts +17 -0
- package/examples/12-mcp-proxy/tests/pulse.harness.ts +29 -0
- package/examples/12-mcp-proxy/tsconfig.json +14 -0
- package/examples/13-jwt-es256/.pulse/config.ts +19 -0
- package/examples/13-jwt-es256/README.md +195 -0
- package/examples/13-jwt-es256/package.json +21 -0
- package/examples/13-jwt-es256/src/index.ts +21 -0
- package/examples/13-jwt-es256/tests/pulse.harness.ts +54 -0
- package/examples/13-jwt-es256/tsconfig.json +14 -0
- package/examples/README.md +36 -0
- package/package.json +66 -6
- package/project-config.schema.json +918 -0
- package/release-manifest.json +427 -0
- package/src/command-spec.js +279 -0
- package/src/completion.js +113 -0
- package/src/diagnostics.js +350 -0
- package/src/documentation.js +45 -0
- package/src/index.d.ts +133 -0
- package/src/index.js +15 -0
- package/src/internal/command-executor.d.ts +29 -0
- package/src/internal/command-executor.js +143 -0
- package/src/internal/command-plan.d.ts +9 -0
- package/src/internal/command-plan.js +73 -0
- package/src/internal/command-reporter.d.ts +15 -0
- package/src/internal/command-reporter.js +133 -0
- package/src/internal/command-request.d.ts +35 -0
- package/src/internal/command-request.js +154 -0
- package/src/internal/node-http.js +54 -0
- package/src/internal/project-context.d.ts +66 -0
- package/src/internal/project-context.js +175 -0
- package/src/project-config-reference.js +4 -0
- package/src/project-config-schema.d.ts +23 -0
- package/src/project-config-schema.js +271 -0
- package/src/project-config.js +724 -0
- package/src/project-execution.js +2930 -0
- package/src/provider-drivers.js +3 -0
- package/src/target-support.js +3 -0
- package/src/typescript-module-loader.js +269 -0
- package/src/workflow.js +78 -0
- 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
|
+
<!-- pulse-doc-source: examples/01-hello-json/src/index.ts -->
|
|
200
|
+
<exact fenced source block>
|
|
201
|
+
<!-- /pulse-doc-source -->
|
|
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)
|