@ewhauser/world-celld 0.5.0 → 0.7.0
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/CHANGELOG.md +26 -0
- package/README.md +43 -15
- package/celld-queue-worker/README.md +2 -2
- package/celld-queue-worker/wrangler.jsonc +3 -1
- package/celld-worker/README.md +3 -3
- package/dist/index.d.ts +44 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +113 -99
- package/dist/index.js.map +1 -1
- package/dist/queue-consumer.js +1 -1
- package/dist/{queue-protocol-Ds44uuND.js → queue-protocol-CtH7UUCO.js} +2 -2
- package/dist/{queue-protocol-Ds44uuND.js.map → queue-protocol-CtH7UUCO.js.map} +1 -1
- package/dist/{queue-protocol-CmJNMH_5.js → run-list-B__jKuE7.js} +124 -18
- package/dist/run-list-B__jKuE7.js.map +1 -0
- package/dist/testing.d.ts +2 -2
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +211 -25
- package/dist/testing.js.map +1 -1
- package/dist/worker.d.ts +19 -0
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +313 -33
- package/dist/worker.js.map +1 -1
- package/docs/celld-v0.6-upgrade.md +121 -0
- package/package.json +7 -5
- package/dist/queue-protocol-CmJNMH_5.js.map +0 -1
- package/docs/celld-v0.5-upgrade.md +0 -130
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.7.0 (2026-09-27)
|
|
6
|
+
|
|
7
|
+
## What's Changed
|
|
8
|
+
* test(perf): cover mixed workflows, sustained load, and node failover by @ewhauser in https://github.com/ewhauser/world-celld/pull/64
|
|
9
|
+
* feat!: require celld v0.6.0 by @ewhauser in https://github.com/ewhauser/world-celld/pull/67
|
|
10
|
+
* perf(queue): dispatch consumer batches without a fill wait by @ewhauser in https://github.com/ewhauser/world-celld/pull/69
|
|
11
|
+
* perf(codec): use native base64 and a faster fallback by @ewhauser in https://github.com/ewhauser/world-celld/pull/70
|
|
12
|
+
* perf(runs): list runs inside the fleet in one round trip by @ewhauser in https://github.com/ewhauser/world-celld/pull/74
|
|
13
|
+
* perf(indexes): publish run mutations to indexes inside the fleet by @ewhauser in https://github.com/ewhauser/world-celld/pull/72
|
|
14
|
+
* perf(runs): keep idempotent run replays read-only by @ewhauser in https://github.com/ewhauser/world-celld/pull/75
|
|
15
|
+
* perf(events): honor preloadEvents on lazy hook resume by @ewhauser in https://github.com/ewhauser/world-celld/pull/71
|
|
16
|
+
* perf(streams): negotiate 512-chunk stream batches by @ewhauser in https://github.com/ewhauser/world-celld/pull/73
|
|
17
|
+
* perf(retention): finish small terminal cleanups in one pass by @ewhauser in https://github.com/ewhauser/world-celld/pull/76
|
|
18
|
+
* perf(retention): expire streams in pages of up to 256 chunks by @ewhauser in https://github.com/ewhauser/world-celld/pull/77
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
**Full Changelog**: https://github.com/ewhauser/world-celld/compare/v0.6.0...v0.7.0
|
|
22
|
+
|
|
23
|
+
## 0.6.0 (2026-09-16)
|
|
24
|
+
|
|
25
|
+
## What's Changed
|
|
26
|
+
* feat!: upgrade Workflow packages and require World spec v7 by @ewhauser in https://github.com/ewhauser/world-celld/pull/59
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
**Full Changelog**: https://github.com/ewhauser/world-celld/compare/v0.5.0...v0.6.0
|
|
30
|
+
|
|
5
31
|
## 0.5.0 (unreleased)
|
|
6
32
|
|
|
7
33
|
### Breaking changes
|
package/README.md
CHANGED
|
@@ -12,6 +12,17 @@ self-hosted alternative to platform-specific Workflow backends.
|
|
|
12
12
|
> `world-celld` is experimental and has not been proven in production. Its API
|
|
13
13
|
> and storage layout may change before 1.0.
|
|
14
14
|
|
|
15
|
+
## World protocol compatibility
|
|
16
|
+
|
|
17
|
+
This adapter supports World spec v7 with the Workflow 5 beta packages. Event
|
|
18
|
+
slots are allocated in the same transaction that stores each event, so reads
|
|
19
|
+
see a dense log and failed writes leave no gaps. No background sealing or
|
|
20
|
+
`noop` events are needed. Runs stamped with earlier spec versions are rejected
|
|
21
|
+
when applying events; finish existing runs before upgrading.
|
|
22
|
+
|
|
23
|
+
Run listing accepts either a single status or an array of statuses (OR matching).
|
|
24
|
+
An empty status array matches no runs.
|
|
25
|
+
|
|
15
26
|
## What it provides
|
|
16
27
|
|
|
17
28
|
- Workflow run, step, event, and hook persistence
|
|
@@ -76,16 +87,17 @@ requests. It must be reachable from every celld node.
|
|
|
76
87
|
|
|
77
88
|
## Deploy the worker
|
|
78
89
|
|
|
79
|
-
Before deploying, you need a celld v0.
|
|
90
|
+
Before deploying, you need a celld v0.6.0 fleet, `esbuild` on `PATH`, and an
|
|
80
91
|
object store that meets celld's conditional-write requirements. Refer to the
|
|
81
92
|
[celld documentation](https://github.com/denoland/celld) for fleet and storage
|
|
82
93
|
setup.
|
|
83
94
|
|
|
84
|
-
**world-celld
|
|
85
|
-
|
|
95
|
+
**world-celld requires celld v0.6.0.** Older runtimes and node-level
|
|
96
|
+
worker-variable overrides are unsupported.
|
|
86
97
|
|
|
87
|
-
For an existing fleet, follow the [v0.
|
|
88
|
-
|
|
98
|
+
For an existing fleet, follow the [v0.6.0 upgrade and feature review](docs/celld-v0.6-upgrade.md).
|
|
99
|
+
A multi-node fleet uses fleet durability by default; stop every old celld node
|
|
100
|
+
before starting v0.6.0, because that is not a rolling upgrade.
|
|
89
101
|
|
|
90
102
|
Before either deploy, set `vars.WORLD_SECRET` in both copied Wrangler configs
|
|
91
103
|
to the same secret from your secret manager. Set optional
|
|
@@ -93,10 +105,10 @@ to the same secret from your secret manager. Set optional
|
|
|
93
105
|
`vars.WORKFLOW_RETENTION_MS` there to the desired maximum workflow age
|
|
94
106
|
(for example, `"7776000000"` for 90 days). Use private deployment copies outside
|
|
95
107
|
source control: celld persists these variables in the deployment stored in the
|
|
96
|
-
fleet bucket.
|
|
108
|
+
fleet bucket. celld rejects `CELLD_VAR_*`; `.dev.vars` is read only by
|
|
97
109
|
`celld dev`, not by `celld deploy`.
|
|
98
110
|
|
|
99
|
-
No second storage service is required for queue payloads. celld v0.
|
|
111
|
+
No second storage service is required for queue payloads. celld v0.6.0 serves
|
|
100
112
|
the `WORKFLOW_QUEUE_PAYLOADS` binding from the existing fleet bucket under
|
|
101
113
|
`r2/workflow-world-queue-payloads/`. `r2_buckets` is the Wrangler-compatible
|
|
102
114
|
configuration key for that binding; it does not require Cloudflare R2.
|
|
@@ -152,7 +164,7 @@ More deployment detail is in [`celld-worker/README.md`](./celld-worker/README.md
|
|
|
152
164
|
and [`celld-queue-worker/README.md`](./celld-queue-worker/README.md).
|
|
153
165
|
|
|
154
166
|
For opt-in bucket or collector telemetry and local `.dev.vars` setup, see
|
|
155
|
-
the [operational examples](docs/celld-v0.
|
|
167
|
+
the [operational examples](docs/celld-v0.6-upgrade.md#adopt-telemetry).
|
|
156
168
|
|
|
157
169
|
## How it works
|
|
158
170
|
|
|
@@ -336,7 +348,7 @@ pnpm test:integration
|
|
|
336
348
|
|
|
337
349
|
### Real celld restart smoke
|
|
338
350
|
|
|
339
|
-
The required CI smoke owns native celld v0.
|
|
351
|
+
The required CI smoke owns native celld v0.6.0 and MinIO processes on loopback,
|
|
340
352
|
uses fresh temporary bucket and runtime state, and kills celld with `SIGKILL`
|
|
341
353
|
before deleting its local working state and starting a new process against the
|
|
342
354
|
bucket-backed state. It checks that:
|
|
@@ -371,12 +383,11 @@ failover correctness.
|
|
|
371
383
|
|
|
372
384
|
The opt-in performance harness starts a fresh MinIO bucket and a single celld
|
|
373
385
|
node with Docker Compose. Its queue workload verifies that every accepted
|
|
374
|
-
message reaches a successful callback, including forced `503` redeliveries.
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
two-script native Queue topology as the restart smoke.
|
|
386
|
+
message reaches a successful callback, including forced `503` redeliveries. It
|
|
387
|
+
also measures a mixed run/step/hook/stream/queue lifecycle and terminal-run
|
|
388
|
+
cleanup. Results include throughput plus p50, p95, p99, and maximum latency and
|
|
389
|
+
are saved under `.perf-results/`. The harness pins celld v0.6.0 and deploys the
|
|
390
|
+
same two-script native Queue topology as the restart smoke.
|
|
380
391
|
|
|
381
392
|
> This harness runs a single celld node and leaves the required storage-contract
|
|
382
393
|
> probe enabled. Passing it does not establish multi-node fencing, ownership
|
|
@@ -411,6 +422,23 @@ Useful controls are `PERF_PAYLOAD_BYTES`, `PERF_RETRY_EVERY`,
|
|
|
411
422
|
because local machines vary. Message-loss, message-ID, callback validity, and
|
|
412
423
|
duplicate-success checks are always enforced.
|
|
413
424
|
|
|
425
|
+
`PERF_WORKFLOW_RUNS` and `PERF_WORKFLOW_CONCURRENCY` control the mixed workload.
|
|
426
|
+
Set `PERF_STEADY_SECONDS` to enable a duration-based queue run at
|
|
427
|
+
`PERF_STEADY_RATE` arrivals per second; its JSON records schedule lag and
|
|
428
|
+
one-second backlog samples. For a repeatable concurrency/payload sweep, run
|
|
429
|
+
`pnpm test:perf:minio:matrix`. It runs four isolated profiles and writes a
|
|
430
|
+
manifest with the Git commit, hardware, workload settings, and result paths.
|
|
431
|
+
`PERF_MATRIX_SOAK_SECONDS` changes the final steady profile's duration (60
|
|
432
|
+
seconds by default). Compare runs on the same host with the same profile and
|
|
433
|
+
without unrelated load; the harness does not set portable latency budgets.
|
|
434
|
+
|
|
435
|
+
`pnpm test:perf:minio:failover` starts one celld node, seeds a run, stream, and
|
|
436
|
+
queue workload (including accepted deliveries forced to retry), starts a peer
|
|
437
|
+
against the same bucket, kills the first node, then measures peer recovery and
|
|
438
|
+
delivery of both pending and new messages. Its output is
|
|
439
|
+
`minio-failover-latest.json`. This is a two-node local handoff test, not a
|
|
440
|
+
production object-store or fleet qualification.
|
|
441
|
+
|
|
414
442
|
Bug reports and focused pull requests are welcome. Please include a regression
|
|
415
443
|
test for behavior changes and run the checks above before submitting a PR.
|
|
416
444
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# world-celld Queue consumer
|
|
2
2
|
|
|
3
|
-
This companion celld v0.
|
|
3
|
+
This companion celld v0.6.0 script consumes the native `workflow-world` Queue
|
|
4
4
|
and forwards each delivery to the primary `workflow-world` script through a
|
|
5
5
|
`QueueDeliveryRpc` named service binding. The consumer calls
|
|
6
6
|
`deliver(secret, envelope, attempt)` and handles `complete`, `suspend`, or `retry`
|
|
@@ -16,7 +16,7 @@ celld deploy ./workflow-world-queue --bucket s3://my-cells-bucket
|
|
|
16
16
|
|
|
17
17
|
Before deploying, set `vars.WORLD_SECRET` in the copied Wrangler config to the
|
|
18
18
|
same bearer secret used by the primary worker. Keep that private deployment
|
|
19
|
-
config out of source control.
|
|
19
|
+
config out of source control. celld rejects `CELLD_VAR_*` node overrides.
|
|
20
20
|
Deploy the primary worker after this script so it remains the fleet's
|
|
21
21
|
public application. Native Queue operations are available through `celld queue
|
|
22
22
|
info`, `peek`, `pause`, `resume`, `purge`, and `redrive`.
|
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
{
|
|
12
12
|
"queue": "workflow-world",
|
|
13
13
|
"max_batch_size": 10,
|
|
14
|
-
|
|
14
|
+
// Dispatch as soon as a message is ready. Every workflow step hop
|
|
15
|
+
// goes through this queue, so a batch-fill wait adds to each hop.
|
|
16
|
+
"max_batch_timeout": 0,
|
|
15
17
|
"max_retries": 100,
|
|
16
18
|
"dead_letter_queue": "workflow-world-dlq",
|
|
17
19
|
"max_concurrency": 25,
|
package/celld-worker/README.md
CHANGED
|
@@ -15,7 +15,7 @@ Copy this directory and the companion Queue consumer out of `node_modules` so
|
|
|
15
15
|
worker last. Before deploying, set `vars.WORLD_SECRET` in both copied
|
|
16
16
|
Wrangler configs to the same secret from your secret manager. Keep those
|
|
17
17
|
private deployment copies out of source control; celld stores their variables
|
|
18
|
-
in the fleet bucket. Stop the whole old fleet before starting v0.
|
|
18
|
+
in the fleet bucket. Stop the whole old fleet before starting v0.6.0 nodes:
|
|
19
19
|
|
|
20
20
|
```sh
|
|
21
21
|
cp -r node_modules/@ewhauser/world-celld/celld-worker ./workflow-world
|
|
@@ -30,7 +30,7 @@ to the native Queue.
|
|
|
30
30
|
|
|
31
31
|
Requirements:
|
|
32
32
|
|
|
33
|
-
- celld v0.
|
|
33
|
+
- celld v0.6.0 (the currently tested runtime baseline).
|
|
34
34
|
- `esbuild` on PATH (celld shells out to it).
|
|
35
35
|
- A bucket with conditional-write support (celld's fencing requirement).
|
|
36
36
|
- `WORLD_SECRET` set in the deployment config (`vars.WORLD_SECRET`) —
|
|
@@ -46,7 +46,7 @@ names the Workers-compatible binding API; it does not require Cloudflare R2.
|
|
|
46
46
|
The bundled `wrangler.jsonc` declares an hourly UTC cron trigger. It does no
|
|
47
47
|
catalog work by default. Set `vars.WORKFLOW_RETENTION_MS` to `"7776000000"`
|
|
48
48
|
in the primary Wrangler config and redeploy to enable a maximum workflow age
|
|
49
|
-
measured from run creation.
|
|
49
|
+
measured from run creation. celld rejects `CELLD_VAR_*` node overrides.
|
|
50
50
|
`.dev.vars` overrides apply only to `celld dev`, not production deployments.
|
|
51
51
|
|
|
52
52
|
`7776000000` is 90 days. The policy includes pending and running workflows as
|
package/dist/index.d.ts
CHANGED
|
@@ -149,6 +149,15 @@ interface ApplyEventSuccess {
|
|
|
149
149
|
maxEvents?: number;
|
|
150
150
|
/** Deadline for publishing this authoritative mutation to derivative indexes. */
|
|
151
151
|
indexPublicationExpiresAt?: number;
|
|
152
|
+
/** Set by the worker router after it published `run` to the run catalog. */
|
|
153
|
+
runIndexPublished?: true;
|
|
154
|
+
/** Set by the worker router after it released `releasedHooks` from the hook indexes. */
|
|
155
|
+
hookIndexesReleased?: true;
|
|
156
|
+
/**
|
|
157
|
+
* The unchanged run returned with a `preloadEvents` hook_received replay
|
|
158
|
+
* log. It is not a run mutation, so it carries no index publication.
|
|
159
|
+
*/
|
|
160
|
+
replayRun?: WorkflowRun;
|
|
152
161
|
}
|
|
153
162
|
type ApplyEventOutcome = ApplyEventSuccess | ApplyEventFailure;
|
|
154
163
|
//#endregion
|
|
@@ -211,12 +220,16 @@ interface DurableObjectIdLike {
|
|
|
211
220
|
}
|
|
212
221
|
//#endregion
|
|
213
222
|
//#region src/stream-protocol.d.ts
|
|
214
|
-
/**
|
|
223
|
+
/**
|
|
224
|
+
* Chunks per write request that every worker accepts. A client sends larger
|
|
225
|
+
* batches only after a worker advertises {@link STREAM_CHUNK_LIMIT_HEADER}.
|
|
226
|
+
*/
|
|
215
227
|
declare const MAX_STREAM_WRITE_CHUNKS = 32;
|
|
216
228
|
/** A chunk remains below the 2 MiB SQLite-backed DO key/value limit. */
|
|
217
229
|
declare const MAX_STREAM_CHUNK_BYTES: number;
|
|
218
230
|
/** Keeps serialized RPC bodies well below the 32 MiB Workers RPC limit. */
|
|
219
231
|
declare const MAX_STREAM_BATCH_BYTES: number;
|
|
232
|
+
/** Chunks per read request that every worker accepts; see {@link MAX_STREAM_WRITE_CHUNKS}. */
|
|
220
233
|
declare const MAX_STREAM_READ_CHUNKS = 32;
|
|
221
234
|
declare const MAX_STREAM_READ_BYTES: number;
|
|
222
235
|
declare const MAX_STREAM_ERROR_BYTES: number;
|
|
@@ -264,6 +277,13 @@ interface CelldStreamer extends Omit<Streamer, 'streams'> {
|
|
|
264
277
|
}
|
|
265
278
|
/** Direct StreamDO RPC surface. Remote stubs specialize read/write as binary HTTP. */
|
|
266
279
|
interface StreamDOStub {
|
|
280
|
+
/**
|
|
281
|
+
* Remote stubs only: the per-request chunk limit the fleet has advertised.
|
|
282
|
+
* Stubs without it are held to the baseline every worker accepts.
|
|
283
|
+
*/
|
|
284
|
+
streamChunkLimit?(): number;
|
|
285
|
+
/** Remote stubs only: drop an advertised limit an older worker rejected. */
|
|
286
|
+
resetStreamChunkLimit?(): void;
|
|
267
287
|
writeChunks(runId: string, chunks: Uint8Array[]): Promise<StreamWriteResult>;
|
|
268
288
|
readChunks(request: StreamReadRequest, signal?: AbortSignal): Promise<StreamReadResult>;
|
|
269
289
|
closeStream(runId: string): Promise<void>;
|
|
@@ -323,6 +343,24 @@ interface CelldQueueProducer {
|
|
|
323
343
|
send(envelope: NativeQueueEnvelope, options?: NativeQueueSendOptions): Promise<NativeQueueSendResult>;
|
|
324
344
|
}
|
|
325
345
|
//#endregion
|
|
346
|
+
//#region src/run-list.d.ts
|
|
347
|
+
type RunStatus = WorkflowRun['status'];
|
|
348
|
+
/** Wire shape of a run listing, shared by the client and the worker router. */
|
|
349
|
+
interface RunListRequest {
|
|
350
|
+
workflowName?: string;
|
|
351
|
+
statuses?: RunStatus[];
|
|
352
|
+
limit: number;
|
|
353
|
+
cursor?: string;
|
|
354
|
+
sortOrder?: 'asc' | 'desc';
|
|
355
|
+
/** 'none' strips run input and output from the returned page. */
|
|
356
|
+
resolveData?: 'none' | 'all';
|
|
357
|
+
}
|
|
358
|
+
interface RunListPage {
|
|
359
|
+
data: WorkflowRun[];
|
|
360
|
+
cursor: string | null;
|
|
361
|
+
hasMore: boolean;
|
|
362
|
+
}
|
|
363
|
+
//#endregion
|
|
326
364
|
//#region src/indexes.d.ts
|
|
327
365
|
interface IndexListOptions {
|
|
328
366
|
prefix?: string;
|
|
@@ -360,6 +398,11 @@ interface WorkflowIndex {
|
|
|
360
398
|
stored: boolean;
|
|
361
399
|
}>;
|
|
362
400
|
listRuns(options?: IndexListOptions): Promise<IndexListPage>;
|
|
401
|
+
/**
|
|
402
|
+
* Remote only: the complete run listing performed inside the fleet. Resolves
|
|
403
|
+
* to null when the worker predates the route; the caller then lists itself.
|
|
404
|
+
*/
|
|
405
|
+
listResolvedRuns?(request: RunListRequest): Promise<RunListPage | null>;
|
|
363
406
|
getHookByToken(token: string): Promise<string | null>;
|
|
364
407
|
getHookById(hookId: string): Promise<string | null>;
|
|
365
408
|
reserveHook(token: string, owner: HookTokenOwner): Promise<HookReservationResult>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/retention.ts","../src/apply-event.ts","../src/storage.ts","../src/stream-protocol.ts","../src/streamer.ts","../src/queue-protocol.ts","../src/queue.ts","../src/indexes.ts","../src/config.ts","../src/index.ts"],"mappings":";;KAOY;UAEK;EACf;EACA;EACA;EACA,WAAW;;EAEX,SAAS;;EAET,cAAc;;EAEd,iBAAiB;EACjB;EACA,OAAO;EACP,OAAO;;EAEP;EACA;EACA;EACA,gBAAgB;EAChB,eAAe;EACf;EACA;;EAEA;;UAGe;EACf;EACA;;EAEA,SAAS;EACT,cAAc;EACd,iBAAiB;EACjB,WAAW;EACX,cAAc;;EAEd,SAAS;;KAGC;KAEA,eAAe;EACrB;EAAU,OAAO;;EACjB;EAAW;EAAqB;EAAiB,WAAW;;UAEjD;EACf;EACA;;UAae;EACf;EACA,OAAO;;UAGQ;EACf;;UAGe;EACf;EACA,OAAO;EACP;;UAGe;EACf;;UAGe;EACf;;UAGe;;EAEf;EACA;;UAGe;;EAEf;;EAEA;;EAEA;EACA;;UAGe;EACf;;;;UC0Ce;;EAEf;EACA,MAAM,qBAAqB;;EAE3B,SAAS;;;;;EAKT;IAAgB;IAAe;;;EAE/B;;EAEA,UAAU;;KAiFA;UAWK;EACf;EACA,MAAM;EACN;;EAEA;;EAEA;;UAGe;EACf;;EAEA,QAAQ;EACR,MAAM;EACN,OAAO;EACP,OAAO;EACP,OAAO;;EAEP;;EAEA,eAAe;IAAQ;IAAgB;;;EAEvC;IAAe;IAAsB,WAAW;;;EAEhD,cAAc;;EAEd,SAAS;;EAET;EACA;;EAEA;;EAEA;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/retention.ts","../src/apply-event.ts","../src/storage.ts","../src/stream-protocol.ts","../src/streamer.ts","../src/queue-protocol.ts","../src/queue.ts","../src/run-list.ts","../src/indexes.ts","../src/config.ts","../src/index.ts"],"mappings":"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"}
|