@pulse-compute/cli 1.0.0-beta.1 → 1.0.0-beta.3
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 +37 -4
- package/CHANGELOG.md +30 -0
- package/README.md +4 -3
- package/cli-spec.json +1 -1
- package/docs/README.md +1 -1
- package/docs/architecture/current-contracts.md +108 -7
- package/docs/concepts/compilation-and-lowering.md +1 -1
- package/docs/concepts/contracts-and-providers.md +2 -2
- package/docs/concepts/effects-and-continuations.md +57 -0
- package/docs/concepts/package-owned-lowering.md +1 -1
- package/docs/concepts/targets-and-hosts.md +10 -2
- package/docs/contributing/adding-core-provider.md +1 -1
- package/docs/contributing/adding-first-party-lowerer.md +1 -1
- package/docs/contributing/package-lowerer-contract.md +2 -2
- package/docs/guides/migrating-from-express.md +3 -3
- package/docs/guides/routing.md +19 -1
- package/docs/maintainers/documentation-deployment.md +4 -4
- package/docs/maintainers/documentation-versioning.md +1 -1
- package/docs/maintainers/maintainer-charter.md +17 -1
- package/docs/maintainers/maintenance-policy.json +34 -3
- package/docs/maintainers/maintenance-policy.md +3 -3
- package/docs/maintainers/npm-publishing.md +34 -6
- package/docs/maintainers/plugin-readiness.json +1 -1
- package/docs/maintainers/plugin-readiness.md +1 -1
- package/docs/maintainers/release-acceptance.md +51 -8
- package/docs/maintainers/release-manifest.md +23 -22
- package/docs/maintainers/scope-policy.md +13 -1
- package/docs/maintainers/testing.md +47 -1
- package/docs/packages/README.md +25 -24
- package/docs/packages/assets.md +1 -1
- package/docs/packages/crypto.md +8 -1
- package/docs/packages/entities.md +1 -1
- package/docs/packages/grip.md +1 -1
- package/docs/packages/implementation-packages.md +10 -1
- package/docs/packages/jwt.md +1 -1
- package/docs/packages/provider-fastly.md +29 -3
- package/docs/packages/pulse.md +1 -1
- package/docs/packages/runtime.md +10 -1
- package/docs/packages/s3.md +101 -0
- package/docs/preview-scope.md +2 -2
- package/docs/reference/cli-spec.json +1 -1
- package/docs/reference/cli.md +1 -1
- package/docs/reference/compatibility-matrix.md +2 -2
- package/docs/reference/diagnostics.md +5 -5
- package/docs/reference/documentation-versions.json +19 -3
- package/docs/reference/handler-authoring.md +1 -1
- package/docs/reference/project-config.md +33 -5
- package/docs/reference/project-config.schema.json +70 -7
- package/docs/reference/release-manifest.json +37 -23
- package/documentation-site.json +8 -1
- package/documentation-versions.json +19 -3
- package/examples/01-hello-json/README.md +1 -1
- package/examples/01-hello-json/package.json +2 -2
- package/examples/02-request-schema/README.md +1 -1
- package/examples/02-request-schema/package.json +2 -2
- package/examples/03-fetch-composition/README.md +1 -1
- package/examples/03-fetch-composition/package.json +2 -2
- package/examples/05-fastly-capabilities/README.md +2 -2
- package/examples/05-fastly-capabilities/package.json +4 -4
- package/examples/07-opaque-proxy/README.md +2 -2
- package/examples/07-opaque-proxy/package.json +3 -3
- package/examples/09-router-lowering/README.md +1 -1
- package/examples/09-router-lowering/package.json +3 -3
- package/examples/10-entities-tools/package.json +3 -3
- package/examples/11-events/README.md +1 -1
- package/examples/11-events/package.json +2 -2
- package/examples/12-mcp-proxy/README.md +1 -1
- package/examples/12-mcp-proxy/package.json +2 -2
- package/examples/13-jwt-es256/README.md +1 -1
- package/examples/13-jwt-es256/package.json +3 -3
- package/package.json +7 -7
- package/project-config.schema.json +70 -7
- package/release-manifest.json +37 -23
- package/src/documentation.js +1 -1
- package/src/project-config-schema.js +3 -3
- package/src/project-execution.js +64 -30
package/docs/packages/grip.md
CHANGED
|
@@ -4,12 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
These packages are synchronized parts of the release set for compiler, provider, runtime, and package-lowering maintainers. They are not application-author SDKs.
|
|
6
6
|
|
|
7
|
-
The package status and supported entry-point lists below come from the synchronized Pulse 1.0.0-beta.
|
|
7
|
+
The package status and supported entry-point lists below come from the synchronized Pulse 1.0.0-beta.3 release policy.
|
|
8
8
|
|
|
9
9
|
## `@pulse-compute/wasm-build-support`
|
|
10
10
|
|
|
11
11
|
Pulse release-set and compiler maintainers.
|
|
12
12
|
|
|
13
|
+
- **npm:** [`@pulse-compute/wasm-build-support`](https://www.npmjs.com/package/@pulse-compute/wasm-build-support)
|
|
13
14
|
- **Install directly:** No for application projects; it is installed transitively where required.
|
|
14
15
|
- **Stability:** Internal release-set interface; exported modules may change with compiler implementation needs.
|
|
15
16
|
|
|
@@ -21,6 +22,7 @@ Pulse release-set and compiler maintainers.
|
|
|
21
22
|
|
|
22
23
|
Pulse compiler and release maintainers.
|
|
23
24
|
|
|
25
|
+
- **npm:** [`@pulse-compute/wasm-compiler`](https://www.npmjs.com/package/@pulse-compute/wasm-compiler)
|
|
24
26
|
- **Install directly:** No for application projects; use the pulse CLI.
|
|
25
27
|
- **Stability:** Internal compiler interface; no application-author compatibility guarantee.
|
|
26
28
|
- **Canonical replacement:** `@pulse-compute/cli`
|
|
@@ -33,6 +35,7 @@ Pulse compiler and release maintainers.
|
|
|
33
35
|
|
|
34
36
|
Pulse compiler, release, and first-party guest-unit maintainers.
|
|
35
37
|
|
|
38
|
+
- **npm:** [`@pulse-compute/wasm-guest-link`](https://www.npmjs.com/package/@pulse-compute/wasm-guest-link)
|
|
36
39
|
- **Install directly:** No for application projects; it is an internal synchronized compiler dependency.
|
|
37
40
|
- **Stability:** Internal first-party prebuilt guest-link interface synchronized with the compiler; no application-author or third-party guest compatibility guarantee.
|
|
38
41
|
|
|
@@ -44,6 +47,7 @@ Pulse compiler, release, and first-party guest-unit maintainers.
|
|
|
44
47
|
|
|
45
48
|
Pulse compiler, runtime, provider, and package-lowering maintainers.
|
|
46
49
|
|
|
50
|
+
- **npm:** [`@pulse-compute/wasm-contracts`](https://www.npmjs.com/package/@pulse-compute/wasm-contracts)
|
|
47
51
|
- **Install directly:** Provider toolchain authors may install it for the versioned bootstrap contract; application projects receive it transitively.
|
|
48
52
|
- **Stability:** The provider toolchain contract is versioned and supported for the Beta; other protocol and proof interfaces remain internal.
|
|
49
53
|
|
|
@@ -55,6 +59,7 @@ Pulse compiler, runtime, provider, and package-lowering maintainers.
|
|
|
55
59
|
|
|
56
60
|
Pulse host-runtime and provider maintainers.
|
|
57
61
|
|
|
62
|
+
- **npm:** [`@pulse-compute/wasm-host-runtime`](https://www.npmjs.com/package/@pulse-compute/wasm-host-runtime)
|
|
58
63
|
- **Install directly:** No for application projects; it is installed transitively.
|
|
59
64
|
- **Stability:** Internal compiler/runtime interface synchronized with this release set.
|
|
60
65
|
|
|
@@ -66,6 +71,7 @@ Pulse host-runtime and provider maintainers.
|
|
|
66
71
|
|
|
67
72
|
Pulse package-lowering and compiler maintainers.
|
|
68
73
|
|
|
74
|
+
- **npm:** [`@pulse-compute/wasm-library-kit`](https://www.npmjs.com/package/@pulse-compute/wasm-library-kit)
|
|
69
75
|
- **Install directly:** No for application projects; it is installed transitively.
|
|
70
76
|
- **Stability:** Internal package-lowering interface synchronized with this release set.
|
|
71
77
|
|
|
@@ -77,6 +83,7 @@ Pulse package-lowering and compiler maintainers.
|
|
|
77
83
|
|
|
78
84
|
Pulse canonical Node provider and compiler maintainers.
|
|
79
85
|
|
|
86
|
+
- **npm:** [`@pulse-compute/provider-node`](https://www.npmjs.com/package/@pulse-compute/provider-node)
|
|
80
87
|
- **Install directly:** No for application projects; select provider: node through the CLI.
|
|
81
88
|
- **Stability:** The listed built-in toolchain entry is synchronized with the Beta bootstrap contract; other canonical Node provider interfaces remain internal.
|
|
82
89
|
- **Canonical replacement:** `provider: 'node' through @pulse-compute/cli`
|
|
@@ -89,6 +96,7 @@ Pulse canonical Node provider and compiler maintainers.
|
|
|
89
96
|
|
|
90
97
|
Pulse AssemblyScript runtime-core and compiler maintainers.
|
|
91
98
|
|
|
99
|
+
- **npm:** [`@pulse-compute/wasm-runtime-core-as`](https://www.npmjs.com/package/@pulse-compute/wasm-runtime-core-as)
|
|
92
100
|
- **Install directly:** No for application projects; it is installed transitively.
|
|
93
101
|
- **Stability:** Internal code-generation interface synchronized with this release set.
|
|
94
102
|
|
|
@@ -100,6 +108,7 @@ Pulse AssemblyScript runtime-core and compiler maintainers.
|
|
|
100
108
|
|
|
101
109
|
Pulse schema compiler and runtime maintainers.
|
|
102
110
|
|
|
111
|
+
- **npm:** [`@pulse-compute/wasm-schema-json`](https://www.npmjs.com/package/@pulse-compute/wasm-schema-json)
|
|
103
112
|
- **Install directly:** No for application projects; declare schemas in the selected .pulse/config.ts profile.
|
|
104
113
|
- **Stability:** Internal schema compiler interface synchronized with this release set.
|
|
105
114
|
- **Canonical replacement:** `schemas in .pulse/config.ts through the Pulse project workflow`
|
package/docs/packages/jwt.md
CHANGED
|
@@ -10,7 +10,7 @@ Install it only in projects that select the Fastly provider.
|
|
|
10
10
|
## Install
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
npm install @pulse-compute/provider-fastly@1.0.0-beta.
|
|
13
|
+
npm install @pulse-compute/provider-fastly@1.0.0-beta.3
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
## Configure a project
|
|
@@ -105,8 +105,34 @@ pulse build ./my-app
|
|
|
105
105
|
|
|
106
106
|
`target: 'native'` compiles the provider-neutral plan and emits generated
|
|
107
107
|
`src/main.as.ts` plus compact `bin/main.wasm` importing the required `fastly_*`
|
|
108
|
-
hostcalls directly. It contains no JavaScript runtime image
|
|
109
|
-
WASI
|
|
108
|
+
hostcalls directly. It contains no JavaScript runtime image or `pulse_host`.
|
|
109
|
+
Clock-dependent capabilities import only WASI `clock_time_get`.
|
|
110
|
+
|
|
111
|
+
Conditional KV (`getVersioned`, `insertIfAbsent`, `compareAndSwap`) uses this
|
|
112
|
+
Native path and the existing logical KV bindings. It preserves generation tokens
|
|
113
|
+
without numeric narrowing, stages a bounded Pulse JSON envelope, and distinguishes
|
|
114
|
+
confirmed rejection from unconfirmed dispatch. Pending completion and body reads
|
|
115
|
+
use readiness selection with a monotonic deadline. Read bodies are closed; expired
|
|
116
|
+
pending operations remain owned by invocation teardown, with no rollback promise.
|
|
117
|
+
Fastly JavaScript remains explicitly incomplete for these operations. See
|
|
118
|
+
[conditional KV](../concepts/effects-and-continuations.md#conditional-kv) for the
|
|
119
|
+
portable contract. The generated-Wasm corpus is local evidence; it does not replace
|
|
120
|
+
deployed cross-location acceptance. The legacy JavaScript fixture runner does
|
|
121
|
+
not realize Native conditional KV; it reports a configuration failure. Exercise
|
|
122
|
+
these operations through generated Wasm or the Compute execution lane.
|
|
123
|
+
|
|
124
|
+
The required conditional KV acceptance task is `kv-conditional-acceptance`.
|
|
125
|
+
It builds and installs exact tarballs and executes their Native artifact through
|
|
126
|
+
Fastly CLI/Viceroy; an unavailable engine fails the task. Viceroy 0.21.0 currently
|
|
127
|
+
fails the missing-key CAS contract: it creates the key instead of returning
|
|
128
|
+
`conflict`. A September 12, 2026 standalone Rust SDK probe on deployed Fastly
|
|
129
|
+
rejected CAS on both never-created and deleted keys, which remained absent.
|
|
130
|
+
This resolves the live missing-key concern for those cases and distinguishes it
|
|
131
|
+
from the Viceroy defect. The required local gate still fails, and full Pulse
|
|
132
|
+
deployed cross-location acceptance remains pending the isolated development
|
|
133
|
+
environment. The [K4 acceptance record](https://github.com/pulse-compute/pulse/blob/latest/wasm/test/kv/K4.md)
|
|
134
|
+
retains both captures and their scope. Neither that standalone probe nor passing
|
|
135
|
+
injected-host or portable tests clears the full acceptance gates.
|
|
110
136
|
|
|
111
137
|
### Fastly JavaScript
|
|
112
138
|
|
package/docs/packages/pulse.md
CHANGED
package/docs/packages/runtime.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install @pulse-compute/runtime@1.0.0-beta.
|
|
8
|
+
npm install @pulse-compute/runtime@1.0.0-beta.3
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
A project created by `pulse init` depends on the public
|
|
@@ -212,6 +212,15 @@ const token = await ctx.secret.get('API_TOKEN')
|
|
|
212
212
|
const session = await ctx.kv<{ userId: number }>('sessions').get('current')
|
|
213
213
|
```
|
|
214
214
|
|
|
215
|
+
Conditional KV extends the same namespace with `getVersioned`, `insertIfAbsent`,
|
|
216
|
+
and `compareAndSwap`. The Node reference realizes them through JavaScript and
|
|
217
|
+
compiled Native execution; Fastly Native uses direct conditional KV hostcalls. Reads pair a value with an opaque string generation;
|
|
218
|
+
writes distinguish `stored`, `conflict`, `not-stored`, and `unknown` (possibly
|
|
219
|
+
committed). Pulse snapshots candidates, preserves tokens without numeric
|
|
220
|
+
coercion, and performs no automatic retry. Fastly JavaScript remains incomplete;
|
|
221
|
+
K4 retains the deployed acceptance gate.
|
|
222
|
+
The detailed contract is in [Effects and continuations](../concepts/effects-and-continuations.md#conditional-kv).
|
|
223
|
+
|
|
215
224
|
Those calls are compiled into explicit effects and validated against the selected provider. See [Compilation and lowering](../concepts/compilation-and-lowering.md).
|
|
216
225
|
|
|
217
226
|
## Structured and opaque fetch results
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# `@pulse-compute/s3`
|
|
2
|
+
|
|
3
|
+
S3 provides bounded exact-key `head`, `getText` and `putText` effects. It is a
|
|
4
|
+
supported extension in the synchronized `1.0.0-beta.3` candidate. Candidate
|
|
5
|
+
preparation does not assert that the package has been published to npm. Consume
|
|
6
|
+
the exact compatible S3, Pulse, CLI and provider tarballs from one release pack.
|
|
7
|
+
|
|
8
|
+
## Authoring and lowering
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
import { s3 } from '@pulse-compute/s3'
|
|
12
|
+
|
|
13
|
+
const written = await s3.putText(ctx, 'objects', key, text, {
|
|
14
|
+
contentType: 'application/json',
|
|
15
|
+
})
|
|
16
|
+
const inspected = await ctx.parallel({
|
|
17
|
+
metadata: s3.head(ctx, 'objects', key),
|
|
18
|
+
object: s3.getText(ctx, 'objects', key),
|
|
19
|
+
})
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Use these expressions inside a Pulse handler. Await into a local variable or
|
|
23
|
+
use keyed `ctx.parallel`. The logical binding must be a string literal. Key and
|
|
24
|
+
text may be runtime strings; content type is optional literal metadata and does
|
|
25
|
+
not serialize the text. Strict JSON responses require a response schema.
|
|
26
|
+
|
|
27
|
+
S3 owns its facade, operation contract, compiler recognition, Native lowering,
|
|
28
|
+
key encoding, SigV4 protocol and result interpretation. Native targets compose
|
|
29
|
+
the packaged AssemblyScript implementation with Crypto's SHA-256 and HMAC-SHA256
|
|
30
|
+
primitives. Node JavaScript uses the package protocol and Crypto's bounded Web
|
|
31
|
+
Crypto realization. Providers own fixed authority, credential resolution,
|
|
32
|
+
deadlines, raw metadata and transport. Application imports use only the package
|
|
33
|
+
root; `/provider`, manifest, compiler and Native exports are toolchain integration.
|
|
34
|
+
|
|
35
|
+
## Binding map
|
|
36
|
+
|
|
37
|
+
Declare `crypto: ['SHA-256', 'HMAC-SHA256']` in Pulse configuration. Map each
|
|
38
|
+
logical name under `<profile>.node.bindings.s3` or
|
|
39
|
+
`<profile>.fastly.bindings.s3`.
|
|
40
|
+
|
|
41
|
+
| Field | Contract |
|
|
42
|
+
| --- | --- |
|
|
43
|
+
| `endpoint` | Fixed HTTPS origin, without a path, query or credentials |
|
|
44
|
+
| `bucket`, `region` | Explicit bucket and signing region |
|
|
45
|
+
| `accessKeyIdSecret`, `secretAccessKeySecret` | Names of provider secrets |
|
|
46
|
+
| `sessionTokenSecret` | Optional provider secret name |
|
|
47
|
+
| `maxTextBytes` | 1–32768; default 32768 |
|
|
48
|
+
| `timeoutMs` | 1–30000; default 10000; includes credentials, signing and body completion |
|
|
49
|
+
| `backend` | Fastly requires a named static backend; configure its secret store in `fastly.bindings.secretStore` |
|
|
50
|
+
|
|
51
|
+
Runtime keys cannot select an origin, bucket, region, backend or credentials.
|
|
52
|
+
Keys are 1–1024 UTF-8 bytes, with no controls or `.`/`..` path segments. Slashes,
|
|
53
|
+
repeated slashes and Unicode normalization are preserved; encoding occurs once.
|
|
54
|
+
|
|
55
|
+
## Results and bounds
|
|
56
|
+
|
|
57
|
+
| Operation | Successful result | Other results |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| `head` | `found`: byte length, optional opaque ETag and content type | `not-found` or `failed` with bounded reason and observed HTTP status |
|
|
60
|
+
| `getText` | `found`: exact UTF-8 text, raw byte length and SHA-256, optional metadata | `not-found` or `failed`; malformed UTF-8 is rejected |
|
|
61
|
+
| `putText` | `stored`: sent byte length and SHA-256, optional opaque ETag | `not-stored` before dispatch or for complete explicit 4xx rejection except 408; `unknown` when dispatch may have stored bytes |
|
|
62
|
+
|
|
63
|
+
GET and PUT are bounded to 32768 UTF-8 bytes, or the lower binding limit. Empty
|
|
64
|
+
text is allowed and a BOM is preserved. HEAD requires a safe Content-Length and
|
|
65
|
+
can describe an object larger than the text limit. Metadata is bounded to 16384
|
|
66
|
+
aggregate bytes and 1024 bytes per selected value; duplicate selected headers,
|
|
67
|
+
malformed lengths, truncated bodies and compression fail closed.
|
|
68
|
+
|
|
69
|
+
PUT succeeds only on a complete 200 acknowledgement with an empty body. Its
|
|
70
|
+
digest identifies sent bytes, not origin durability. Cancellation terminates
|
|
71
|
+
the request lifecycle without a typed S3 result or a rollback promise. There
|
|
72
|
+
are no retries, redirects, decompression or caches. For a JSON request carrying
|
|
73
|
+
32768 escaped control characters, configure `schemas.maxBytes: 262144`; the
|
|
74
|
+
object byte limit remains unchanged.
|
|
75
|
+
|
|
76
|
+
## Target support and evidence
|
|
77
|
+
|
|
78
|
+
| Target | S3 support | Local acceptance |
|
|
79
|
+
| --- | --- | --- |
|
|
80
|
+
| Node Native | Supported | Compiled Wasm with the Node provider |
|
|
81
|
+
| Node JavaScript | Supported | Package runtime with bounded Web Crypto |
|
|
82
|
+
| Fastly Native | Supported | Compiled provider Wasm with host ABI fixtures |
|
|
83
|
+
| Fastly JavaScript | Ineligible | SDK header projection loses required raw metadata |
|
|
84
|
+
|
|
85
|
+
The read and write corpus is repeated from isolated exact-version tarball
|
|
86
|
+
installs, using installed compilers, package lowering and provider realizations.
|
|
87
|
+
It covers signatures, key encoding, malformed and truncated data, limits,
|
|
88
|
+
credentials, redaction, deadlines and ambiguous writes. Fastly JavaScript's
|
|
89
|
+
exclusion does not gate these supported targets.
|
|
90
|
+
|
|
91
|
+
Local fixtures do not establish live Fastly Object Storage semantics. Live
|
|
92
|
+
origin acceptance follows infrastructure setup (T2) and records endpoint,
|
|
93
|
+
region, target artifact, exact observed bytes and acknowledgement behavior.
|
|
94
|
+
There is no listing, multipart upload, copy, presigning, arbitrary bucket
|
|
95
|
+
selection or conditional creation. Assets alignment remains separate.
|
|
96
|
+
|
|
97
|
+
## Related material
|
|
98
|
+
|
|
99
|
+
- [Project configuration](../reference/project-config.md)
|
|
100
|
+
- [Package-owned lowering](../concepts/package-owned-lowering.md)
|
|
101
|
+
- [Crypto](./crypto.md)
|
package/docs/preview-scope.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Beta scope
|
|
2
2
|
|
|
3
|
-
Pulse `1.0.0-beta.
|
|
3
|
+
Pulse `1.0.0-beta.3` is a Beta of one provider-neutral application contract
|
|
4
4
|
with explicit Native and JavaScript execution targets. The intended 1.0
|
|
5
5
|
surface is present, but deliberate corrections may still occur before the
|
|
6
6
|
stable `1.0.0` release.
|
|
@@ -15,7 +15,7 @@ targets.
|
|
|
15
15
|
- Async-shaped provider-neutral TypeScript handlers; trusted Pulse awaits lower
|
|
16
16
|
into explicit effects and continuations without a Promise runtime.
|
|
17
17
|
- Static Router v2 with terminal middleware, route fallthrough, error
|
|
18
|
-
middleware, GET/HEAD/POST routes, exact paths, named parameters, trailing
|
|
18
|
+
middleware, GET/HEAD/POST/PUT/PATCH/DELETE routes, exact paths, named parameters, trailing
|
|
19
19
|
wildcards, and acyclic mounts.
|
|
20
20
|
- Basic branching and structured object, array, and scalar manipulation.
|
|
21
21
|
- Request method, URL, path, headers, text, and JSON access.
|
package/docs/reference/cli.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- Generated by wasm/scripts/sync-reference-docs.cjs. Edit the source catalog, not this file. -->
|
|
4
4
|
|
|
5
|
-
The `pulse` CLI in `@pulse-compute/cli@1.0.0-beta.
|
|
5
|
+
The `pulse` CLI in `@pulse-compute/cli@1.0.0-beta.3` is the supported project workflow. One command specification generates this page, installed help, and the shipped Bash, Zsh, and Fish completion scripts, so a public command or option cannot drift between those surfaces.
|
|
6
6
|
|
|
7
7
|
## Meta invocations
|
|
8
8
|
|
|
@@ -29,7 +29,7 @@ the Native build; it does not authorize automatic JavaScript fallback.
|
|
|
29
29
|
| Source form | Node JS | Fastly JS | Node Native | Fastly Native | Notes |
|
|
30
30
|
|---|---:|---:|---:|---:|---|
|
|
31
31
|
| Async-shaped managed handler | Yes | Yes | Yes | Yes | Native erases the authoring wrapper; it does not link Promise, JSPI, or Asyncify semantics. |
|
|
32
|
-
| Static `Router` topology and terminal `next()` | Yes | Yes | Yes | Yes | Covers static `get`, `head`, `post`, middleware, mounts, parameters, trailing wildcard, fallthrough, and the error lane. |
|
|
32
|
+
| Static `Router` topology and terminal `next()` | Yes | Yes | Yes | Yes | Covers static `get`, `head`, `post`, `put`, `patch`, `delete`, middleware, mounts, parameters, trailing wildcard, fallthrough, and the error lane. |
|
|
33
33
|
| Root-only `Pulse.on` and non-HTTP event context | Yes | No | Yes | No | Node owns the bounded reference ingress. Fastly source remains inspectable but execution/build eligibility fails closed. |
|
|
34
34
|
| Awaited one-way `ctx.emit` acceptance | Yes | No | Yes | No | Static schema-bound frames only; no delivery, loopback, public bus, call surface, or target fallback. |
|
|
35
35
|
| Sequential awaits of trusted Pulse effects | Yes | Yes | Yes | Yes | JavaScript preserves source order. Native lowers effects and continuations and may group adjacent independent effects without changing results. |
|
|
@@ -86,7 +86,7 @@ separate ordinary-lifecycle and Fastly Native integration boundaries.
|
|
|
86
86
|
## JWT and crypto Beta packages
|
|
87
87
|
|
|
88
88
|
This table records the sealed Phase D and E behavior of the synchronized
|
|
89
|
-
`1.0.0-beta.
|
|
89
|
+
`1.0.0-beta.3` JWT/crypto packages. Validation does not itself authorize npm
|
|
90
90
|
publication.
|
|
91
91
|
|
|
92
92
|
| Candidate capability | Node JS | Fastly JS | Node Native | Fastly Native | Notes |
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- Generated by wasm/scripts/sync-reference-docs.cjs. Edit the source catalog, not this file. -->
|
|
4
4
|
|
|
5
|
-
Pulse 1.0.0-beta.
|
|
5
|
+
Pulse 1.0.0-beta.3 treats the 114 codes on this page as the stable public CLI diagnostic catalog. Code, category, summary, remediation intent, exit class, and anchor are generated from the same source used by the CLI. Human wording may improve compatibly.
|
|
6
6
|
|
|
7
7
|
Every catalogued failure links to a versioned installed artifact under:
|
|
8
8
|
|
|
9
|
-
`https://pulsecompute.io/v1.0.0-beta.
|
|
9
|
+
`https://pulsecompute.io/v1.0.0-beta.3/reference/diagnostics/`
|
|
10
10
|
|
|
11
11
|
Uncatalogued/internal or forward-compatible codes link to that reference root instead of inventing a nonexistent anchor. Internal `PULSEWASM_*` proof/compiler tokens are not part of this public catalog.
|
|
12
12
|
|
|
@@ -22,7 +22,7 @@ A Native eligibility diagnostic never authorizes automatic JavaScript fallback.
|
|
|
22
22
|
```json
|
|
23
23
|
{
|
|
24
24
|
"status": "error",
|
|
25
|
-
"version": "1.0.0-beta.
|
|
25
|
+
"version": "1.0.0-beta.3",
|
|
26
26
|
"error": {
|
|
27
27
|
"name": "PulseProjectError",
|
|
28
28
|
"code": "PULSE_BUILD_OUT_UNSAFE",
|
|
@@ -35,7 +35,7 @@ A Native eligibility diagnostic never authorizes automatic JavaScript fallback.
|
|
|
35
35
|
],
|
|
36
36
|
"stability": "preview-stable",
|
|
37
37
|
"scope": "public",
|
|
38
|
-
"docs": "https://pulsecompute.io/v1.0.0-beta.
|
|
38
|
+
"docs": "https://pulsecompute.io/v1.0.0-beta.3/reference/diagnostics/#pulse-build-out-unsafe"
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
```
|
|
@@ -89,7 +89,7 @@ pulse test examples/02-request-schema --case invalid-user --json
|
|
|
89
89
|
"expectedError": {
|
|
90
90
|
"code": "PULSE_SCHEMA_DECODE",
|
|
91
91
|
"category": "request",
|
|
92
|
-
"docs": "https://pulsecompute.io/v1.0.0-beta.
|
|
92
|
+
"docs": "https://pulsecompute.io/v1.0.0-beta.3/reference/diagnostics/#pulse-schema-decode"
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
]
|
|
@@ -1,14 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "pulse.documentation-versions.v1",
|
|
3
|
-
"latest": "1.0.0-beta.
|
|
3
|
+
"latest": "1.0.0-beta.3",
|
|
4
4
|
"versions": [
|
|
5
|
+
{
|
|
6
|
+
"version": "1.0.0-beta.3",
|
|
7
|
+
"segment": "v1.0.0-beta.3",
|
|
8
|
+
"channel": "beta",
|
|
9
|
+
"releasedAt": "2026-09-14",
|
|
10
|
+
"status": "current",
|
|
11
|
+
"sourceManifest": "release/pulse-release-manifest.json"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"version": "1.0.0-beta.2",
|
|
15
|
+
"segment": "v1.0.0-beta.2",
|
|
16
|
+
"channel": "beta",
|
|
17
|
+
"releasedAt": "2026-09-13",
|
|
18
|
+
"status": "archived",
|
|
19
|
+
"sourceManifest": "release/documentation-site-archives/v1.0.0-beta.2/release-manifest.json"
|
|
20
|
+
},
|
|
5
21
|
{
|
|
6
22
|
"version": "1.0.0-beta.1",
|
|
7
23
|
"segment": "v1.0.0-beta.1",
|
|
8
24
|
"channel": "beta",
|
|
9
25
|
"releasedAt": "2026-08-01",
|
|
10
|
-
"status": "
|
|
11
|
-
"sourceManifest": "release/
|
|
26
|
+
"status": "archived",
|
|
27
|
+
"sourceManifest": "release/documentation-site-archives/v1.0.0-beta.1/release-manifest.json"
|
|
12
28
|
}
|
|
13
29
|
]
|
|
14
30
|
}
|
|
@@ -189,7 +189,7 @@ compatible merely because both targets are JavaScript.
|
|
|
189
189
|
## Router topology and terminal transfer
|
|
190
190
|
|
|
191
191
|
`Router` is a compile-time authoring marker. The v2 surface supports static
|
|
192
|
-
`get`, `head`, and `
|
|
192
|
+
`get`, `head`, `post`, `put`, `patch`, and `delete` routes; exact, named-parameter, and trailing-wildcard
|
|
193
193
|
paths; global and path-scoped middleware; acyclic mounts; fallthrough; and
|
|
194
194
|
error middleware.
|
|
195
195
|
|
|
@@ -94,15 +94,15 @@ Resolved synchronous logging threshold after the flat profile override is applie
|
|
|
94
94
|
|
|
95
95
|
## Cryptographic requirements
|
|
96
96
|
|
|
97
|
-
Declare exact algorithms for the global or selected profile and resolve one target realization without fallback. This surface is part of the synchronized 1.0.0-beta.
|
|
97
|
+
Declare exact algorithms for the global or selected profile and resolve one target realization without fallback. This surface is part of the synchronized 1.0.0-beta.3 package set.
|
|
98
98
|
|
|
99
99
|
### `pulse.crypto`
|
|
100
100
|
|
|
101
101
|
Declares the complete global algorithm set. Array entries are canonical algorithm names; object entries may pin one exact known realization.
|
|
102
102
|
|
|
103
|
-
- **Type:** readonly
|
|
103
|
+
- **Type:** readonly PulseCryptoAlgorithm[] | Readonly<Partial<Record<PulseCryptoAlgorithm, { readonly realization?: PulseCryptoRealization }>>>
|
|
104
104
|
- **Required/default:** Optional; default implicit no-crypto declaration.
|
|
105
|
-
- **Allowed values or constraints:** `HS256`, `ES256`; exact pins `runtime-builtin`, `guest-source:pulse-hmac-as`, and `guest-linked:pulse-es256-rustcrypto-p256`
|
|
105
|
+
- **Allowed values or constraints:** `HS256`, `ES256`, `SHA-256`, `HMAC-SHA256`; exact pins `runtime-builtin`, `guest-source:pulse-hmac-as`, and `guest-linked:pulse-es256-rustcrypto-p256`
|
|
106
106
|
- **Scope:** global crypto requirement default
|
|
107
107
|
- **Precedence:** Used only when the selected profile omits `crypto`.
|
|
108
108
|
- **Security and safety:** Keys and verification bytes are not configuration values. Target selection is deterministic and never probes or falls back.
|
|
@@ -112,9 +112,9 @@ Declares the complete global algorithm set. Array entries are canonical algorith
|
|
|
112
112
|
|
|
113
113
|
Replaces the complete global crypto declaration for the selected profile. Arrays and objects never merge with `pulse.crypto`.
|
|
114
114
|
|
|
115
|
-
- **Type:** readonly
|
|
115
|
+
- **Type:** readonly PulseCryptoAlgorithm[] | Readonly<Partial<Record<PulseCryptoAlgorithm, { readonly realization?: PulseCryptoRealization }>>>
|
|
116
116
|
- **Required/default:** Optional; default inherit `pulse.crypto` when absent.
|
|
117
|
-
- **Allowed values or constraints:** `[]` and `{}` explicitly select no crypto; otherwise `HS256`
|
|
117
|
+
- **Allowed values or constraints:** `[]` and `{}` explicitly select no crypto; otherwise `HS256`, `ES256`, `SHA-256`, `HMAC-SHA256`
|
|
118
118
|
- **Scope:** selected profile
|
|
119
119
|
- **Precedence:** Selected-profile declaration replaces `pulse.crypto`; absence inherits it.
|
|
120
120
|
- **Security and safety:** Every declared algorithm must resolve for the selected target before lowering. A failed exact realization cannot select another backend.
|
|
@@ -284,10 +284,38 @@ Deterministic fetch fixtures resolved before optional live network fetch.
|
|
|
284
284
|
- **Security and safety:** Prefer fixtures for deterministic tests and offline development.
|
|
285
285
|
- **Related diagnostics:** None specific.
|
|
286
286
|
|
|
287
|
+
## Node provider options
|
|
288
|
+
|
|
289
|
+
Provider-owned Node profile configuration.
|
|
290
|
+
|
|
291
|
+
### `node.bindings.s3`
|
|
292
|
+
|
|
293
|
+
Maps literal logical names to fixed HTTPS endpoint, bucket, region, accessKeyIdSecret, secretAccessKeySecret, optional sessionTokenSecret, maxTextBytes (1–32768, default 32768) and timeoutMs (1–30000, default 10000).
|
|
294
|
+
|
|
295
|
+
- **Type:** Readonly<Record<string, S3Binding>>
|
|
296
|
+
- **Required/default:** Optional; default `{}`.
|
|
297
|
+
- **Allowed values or constraints:** —
|
|
298
|
+
- **Scope:** Node Native and JavaScript S3
|
|
299
|
+
- **Precedence:** Configuration value.
|
|
300
|
+
- **Security and safety:** Only named credential references are configuration. Runtime keys cannot override authority.
|
|
301
|
+
- **Related diagnostics:** None specific.
|
|
302
|
+
|
|
287
303
|
## Fastly provider options
|
|
288
304
|
|
|
289
305
|
Options passed to fastly(...) from @pulse-compute/provider-fastly.
|
|
290
306
|
|
|
307
|
+
### `fastly.bindings.s3`
|
|
308
|
+
|
|
309
|
+
Maps logical names to fixed HTTPS endpoint, bucket, region, named static backend, accessKeyIdSecret, secretAccessKeySecret, optional sessionTokenSecret, maxTextBytes (1–32768, default 32768) and timeoutMs (1–30000, default 10000).
|
|
310
|
+
|
|
311
|
+
- **Type:** Readonly<Record<string, S3Binding & { backend: string }>>
|
|
312
|
+
- **Required/default:** Optional; default `{}`.
|
|
313
|
+
- **Allowed values or constraints:** —
|
|
314
|
+
- **Scope:** Fastly Native S3
|
|
315
|
+
- **Precedence:** Configuration value.
|
|
316
|
+
- **Security and safety:** Credentials resolve through the configured Secret Store at execution. Dynamic backend authority and guest endpoint overrides are forbidden.
|
|
317
|
+
- **Related diagnostics:** None specific.
|
|
318
|
+
|
|
291
319
|
### `fastly.configStore`
|
|
292
320
|
|
|
293
321
|
Fastly Config Store resource name.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "pulse.project-config-schema-bundle.v1",
|
|
3
|
-
"releaseVersion": "1.0.0-beta.
|
|
3
|
+
"releaseVersion": "1.0.0-beta.3",
|
|
4
4
|
"project": {
|
|
5
5
|
"schemaVersion": "pulse.project-config-schema.v1",
|
|
6
6
|
"discovery": [
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
{
|
|
24
24
|
"id": "crypto",
|
|
25
25
|
"title": "Cryptographic requirements",
|
|
26
|
-
"description": "Declare exact algorithms for the global or selected profile and resolve one target realization without fallback. This surface is part of the synchronized 1.0.0-beta.
|
|
26
|
+
"description": "Declare exact algorithms for the global or selected profile and resolve one target realization without fallback. This surface is part of the synchronized 1.0.0-beta.3 package set."
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
29
|
"id": "schemas",
|
|
@@ -35,6 +35,11 @@
|
|
|
35
35
|
"title": "Local development",
|
|
36
36
|
"description": "Configure the foreground local server and local-only provider inputs."
|
|
37
37
|
},
|
|
38
|
+
{
|
|
39
|
+
"description": "Provider-owned Node profile configuration.",
|
|
40
|
+
"id": "node",
|
|
41
|
+
"title": "Node provider options"
|
|
42
|
+
},
|
|
38
43
|
{
|
|
39
44
|
"description": "Options passed to fastly(...) from @pulse-compute/provider-fastly.",
|
|
40
45
|
"id": "fastly",
|
|
@@ -111,7 +116,7 @@
|
|
|
111
116
|
{
|
|
112
117
|
"required": false,
|
|
113
118
|
"default": "implicit no-crypto declaration",
|
|
114
|
-
"allowed": "`HS256`, `ES256`; exact pins `runtime-builtin`, `guest-source:pulse-hmac-as`, and `guest-linked:pulse-es256-rustcrypto-p256`",
|
|
119
|
+
"allowed": "`HS256`, `ES256`, `SHA-256`, `HMAC-SHA256`; exact pins `runtime-builtin`, `guest-source:pulse-hmac-as`, and `guest-linked:pulse-es256-rustcrypto-p256`",
|
|
115
120
|
"precedence": "Used only when the selected profile omits `crypto`.",
|
|
116
121
|
"security": "Keys and verification bytes are not configuration values. Target selection is deterministic and never probes or falls back.",
|
|
117
122
|
"diagnostics": [
|
|
@@ -122,14 +127,14 @@
|
|
|
122
127
|
],
|
|
123
128
|
"section": "crypto",
|
|
124
129
|
"path": "pulse.crypto",
|
|
125
|
-
"type": "readonly
|
|
130
|
+
"type": "readonly PulseCryptoAlgorithm[] | Readonly<Partial<Record<PulseCryptoAlgorithm, { readonly realization?: PulseCryptoRealization }>>>",
|
|
126
131
|
"scope": "global crypto requirement default",
|
|
127
132
|
"description": "Declares the complete global algorithm set. Array entries are canonical algorithm names; object entries may pin one exact known realization."
|
|
128
133
|
},
|
|
129
134
|
{
|
|
130
135
|
"required": false,
|
|
131
136
|
"default": "inherit `pulse.crypto` when absent",
|
|
132
|
-
"allowed": "`[]` and `{}` explicitly select no crypto; otherwise `HS256`
|
|
137
|
+
"allowed": "`[]` and `{}` explicitly select no crypto; otherwise `HS256`, `ES256`, `SHA-256`, `HMAC-SHA256`",
|
|
133
138
|
"precedence": "Selected-profile declaration replaces `pulse.crypto`; absence inherits it.",
|
|
134
139
|
"security": "Every declared algorithm must resolve for the selected target before lowering. A failed exact realization cannot select another backend.",
|
|
135
140
|
"diagnostics": [
|
|
@@ -139,7 +144,7 @@
|
|
|
139
144
|
],
|
|
140
145
|
"section": "crypto",
|
|
141
146
|
"path": "<profile>.crypto",
|
|
142
|
-
"type": "readonly
|
|
147
|
+
"type": "readonly PulseCryptoAlgorithm[] | Readonly<Partial<Record<PulseCryptoAlgorithm, { readonly realization?: PulseCryptoRealization }>>>",
|
|
143
148
|
"scope": "selected profile",
|
|
144
149
|
"description": "Replaces the complete global crypto declaration for the selected profile. Arrays and objects never merge with `pulse.crypto`."
|
|
145
150
|
},
|
|
@@ -330,6 +335,32 @@
|
|
|
330
335
|
"scope": "local fetch capability",
|
|
331
336
|
"description": "Deterministic fetch fixtures resolved before optional live network fetch."
|
|
332
337
|
},
|
|
338
|
+
{
|
|
339
|
+
"required": false,
|
|
340
|
+
"default": "`{}`",
|
|
341
|
+
"allowed": "—",
|
|
342
|
+
"precedence": "Configuration value.",
|
|
343
|
+
"security": "Only named credential references are configuration. Runtime keys cannot override authority.",
|
|
344
|
+
"diagnostics": [],
|
|
345
|
+
"description": "Maps literal logical names to fixed HTTPS endpoint, bucket, region, accessKeyIdSecret, secretAccessKeySecret, optional sessionTokenSecret, maxTextBytes (1–32768, default 32768) and timeoutMs (1–30000, default 10000).",
|
|
346
|
+
"path": "node.bindings.s3",
|
|
347
|
+
"scope": "Node Native and JavaScript S3",
|
|
348
|
+
"section": "node",
|
|
349
|
+
"type": "Readonly<Record<string, S3Binding>>"
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"required": false,
|
|
353
|
+
"default": "`{}`",
|
|
354
|
+
"allowed": "—",
|
|
355
|
+
"precedence": "Configuration value.",
|
|
356
|
+
"security": "Credentials resolve through the configured Secret Store at execution. Dynamic backend authority and guest endpoint overrides are forbidden.",
|
|
357
|
+
"diagnostics": [],
|
|
358
|
+
"description": "Maps logical names to fixed HTTPS endpoint, bucket, region, named static backend, accessKeyIdSecret, secretAccessKeySecret, optional sessionTokenSecret, maxTextBytes (1–32768, default 32768) and timeoutMs (1–30000, default 10000).",
|
|
359
|
+
"path": "fastly.bindings.s3",
|
|
360
|
+
"scope": "Fastly Native S3",
|
|
361
|
+
"section": "fastly",
|
|
362
|
+
"type": "Readonly<Record<string, S3Binding & { backend: string }>>"
|
|
363
|
+
},
|
|
333
364
|
{
|
|
334
365
|
"required": false,
|
|
335
366
|
"default": "`pulse_config`",
|
|
@@ -729,7 +760,9 @@
|
|
|
729
760
|
"items": {
|
|
730
761
|
"enum": [
|
|
731
762
|
"HS256",
|
|
732
|
-
"ES256"
|
|
763
|
+
"ES256",
|
|
764
|
+
"SHA-256",
|
|
765
|
+
"HMAC-SHA256"
|
|
733
766
|
]
|
|
734
767
|
}
|
|
735
768
|
},
|
|
@@ -762,6 +795,32 @@
|
|
|
762
795
|
]
|
|
763
796
|
}
|
|
764
797
|
}
|
|
798
|
+
},
|
|
799
|
+
"SHA-256": {
|
|
800
|
+
"type": "object",
|
|
801
|
+
"additionalProperties": false,
|
|
802
|
+
"properties": {
|
|
803
|
+
"realization": {
|
|
804
|
+
"enum": [
|
|
805
|
+
"runtime-builtin",
|
|
806
|
+
"guest-source:pulse-hmac-as",
|
|
807
|
+
"guest-linked:pulse-es256-rustcrypto-p256"
|
|
808
|
+
]
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
},
|
|
812
|
+
"HMAC-SHA256": {
|
|
813
|
+
"type": "object",
|
|
814
|
+
"additionalProperties": false,
|
|
815
|
+
"properties": {
|
|
816
|
+
"realization": {
|
|
817
|
+
"enum": [
|
|
818
|
+
"runtime-builtin",
|
|
819
|
+
"guest-source:pulse-hmac-as",
|
|
820
|
+
"guest-linked:pulse-es256-rustcrypto-p256"
|
|
821
|
+
]
|
|
822
|
+
}
|
|
823
|
+
}
|
|
765
824
|
}
|
|
766
825
|
}
|
|
767
826
|
}
|
|
@@ -844,6 +903,10 @@
|
|
|
844
903
|
"fastly": {
|
|
845
904
|
"schemaVersion": "pulse.provider-fastly-config-schema.v1",
|
|
846
905
|
"fields": {
|
|
906
|
+
"fastly.bindings.s3": {
|
|
907
|
+
"kind": "object",
|
|
908
|
+
"default": {}
|
|
909
|
+
},
|
|
847
910
|
"fastly.configStore": {
|
|
848
911
|
"kind": "string",
|
|
849
912
|
"default": "pulse_config"
|