@chidchanun/bcp 0.2.9 → 0.2.11

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/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # BCP Framework
2
2
 
3
- BCP Framework is a React full-stack framework for file-based routing, SSR, SPA navigation, server data loading, guarded application flows, API routes, authentication, authorization, database access, background jobs, recurring scheduling, observability, validation, uploads, storage and standalone Node.js production deployment.
3
+ BCP Framework is a React full-stack framework for file-based routing, SSR, SPA navigation, server data loading, guarded application flows, API routes, authentication, authorization, database access, background jobs, recurring scheduling, workflow orchestration, observability, validation, uploads, storage and standalone Node.js production deployment.
4
4
 
5
- > **Development target:** `0.2.9Job Scheduling Platform`
5
+ > **Development target:** `0.2.11Workflow Orchestration`
6
6
  >
7
- > `0.2.9` is an unreleased development target until local validation, RC checks, tagging and npm publication complete.
7
+ > `0.2.11` is an unreleased development target until local validation, RC checks, tagging and npm publication complete.
8
8
 
9
9
  ## 0.2 platform
10
10
 
11
- `0.2.0` established the Framework Platform baseline, `0.2.1` added the Documentation Platform, `0.2.2` added Configuration & Environment v2, `0.2.3` added Database Platform v2, `0.2.4` added Application Packaging, `0.2.5` added Authentication Platform v2, `0.2.6` added Authorization & Security v2, `0.2.7` added Observability Platform v2, `0.2.8` added Background Jobs Platform, and `0.2.9` adds recurring interval/UTC-cron scheduling with lease-aware shared-store contracts.
11
+ `0.2.0` established the Framework Platform baseline, `0.2.1` added the Documentation Platform, `0.2.2` added Configuration & Environment v2, `0.2.3` added Database Platform v2, `0.2.4` added Application Packaging, `0.2.5` added Authentication Platform v2, `0.2.6` added Authorization & Security v2, `0.2.7` added Observability Platform v2, `0.2.8` added Background Jobs Platform, `0.2.9` added recurring scheduling, `0.2.10` added durable worker leases/DLQ/Redis adapters, and `0.2.11` adds persistent multi-step workflow orchestration.
12
12
 
13
13
  Machine-readable platform contracts:
14
14
 
@@ -35,8 +35,10 @@ docs/api-manifest.json
35
35
  | Authorization | Auth/guest/role/permission route guards, flat permissions and resource-aware policies |
36
36
  | Request security | Same-origin validation and signed CSRF tokens for unsafe mutations |
37
37
  | Middleware | Middleware System v2 with onion execution |
38
- | Background jobs | Adapter contract, in-memory queue, delayed jobs, retries/backoff, cancellation and concurrent workers |
38
+ | Background jobs | Delayed jobs, retries/backoff, cancellation, concurrent workers, visibility leases, heartbeat, stale recovery and DLQ |
39
39
  | Scheduling | Recurring interval jobs, UTC cron, schedule-store leases and deterministic scheduled run IDs |
40
+ | Durable jobs | Redis-compatible queue/schedule adapters, retention cleanup, requeue and queue statistics |
41
+ | Workflows | Sequential/parallel steps, retries, persisted delays, compensation, run leases and optional queue-backed execution |
40
42
  | Observability | Structured logs, counters/gauges/histograms, Prometheus output, request metrics and health/readiness checks |
41
43
  | Validation | Typed validators and structured validation errors |
42
44
  | Error handling | HTTP error helpers and consistent error responses |
@@ -131,8 +133,6 @@ Read more:
131
133
 
132
134
  ## Database Platform v2 — 0.2.3
133
135
 
134
- Application code uses one server-only database entrypoint across supported SQL providers:
135
-
136
136
  ```ts
137
137
  import {
138
138
  db,
@@ -148,16 +148,6 @@ postgresql
148
148
  sqlite
149
149
  ```
150
150
 
151
- Lifecycle control:
152
-
153
- ```ts
154
- await db.connect();
155
-
156
- // application work
157
-
158
- await db.disconnect();
159
- ```
160
-
161
151
  Migration CLI:
162
152
 
163
153
  ```bash
@@ -180,23 +170,10 @@ Create a fresh production build and deployment package:
180
170
  bcp package
181
171
  ```
182
172
 
183
- Output:
173
+ Output is written under:
184
174
 
185
175
  ```text
186
176
  .bcp-framework/package/
187
- ├─ client/
188
- ├─ server/
189
- │ └─ server.mjs
190
- ├─ public/ # when present
191
- ├─ manifest.json
192
- ├─ package.json
193
- ├─ package-lock.json # when a safe npm v3 production lock can be derived
194
- ├─ bcp.package.json
195
- ├─ bcp.deployment.json
196
- ├─ bcp.env.json
197
- ├─ Dockerfile
198
- ├─ .dockerignore
199
- └─ README.md
200
177
  ```
201
178
 
202
179
  Read more:
@@ -206,35 +183,17 @@ Read more:
206
183
 
207
184
  ## Authentication Platform v2 — 0.2.5
208
185
 
209
- Stateless signed JWT-cookie authentication remains supported:
210
-
211
186
  ```ts
212
187
  import {
213
188
  auth,
214
- login,
215
- logout,
216
- } from "bcp/auth";
217
- ```
218
-
219
- Applications that need centralized revocation can add a server-side session store:
220
-
221
- ```ts
222
- import {
223
189
  createAuth,
224
190
  createMemoryAuthSessionStore,
191
+ login,
192
+ logout,
225
193
  } from "bcp/auth";
226
-
227
- const sessionStore =
228
- createMemoryAuthSessionStore();
229
-
230
- export const appAuth =
231
- createAuth({
232
- store: sessionStore,
233
- idleTimeout: 60 * 30,
234
- });
235
194
  ```
236
195
 
237
- With a store configured, authentication requires both a valid signed JWT cookie and an active `sid` record. The built-in memory store is intended for development/tests; production multi-instance deployments should implement `AuthSessionStore` with shared storage.
196
+ Stateless signed JWT-cookie authentication remains supported. Applications that need centralized revocation can configure an `AuthSessionStore`.
238
197
 
239
198
  Read more:
240
199
 
@@ -244,37 +203,12 @@ Read more:
244
203
 
245
204
  ## Authorization & Security v2 — 0.2.6
246
205
 
247
- Use flat permissions directly from `bcp/auth`:
248
-
249
206
  ```ts
250
207
  import {
208
+ authorize,
251
209
  hasPermission,
252
210
  requirePermission,
253
211
  } from "bcp/auth";
254
-
255
- hasPermission(
256
- user,
257
- "users.read"
258
- );
259
-
260
- await requirePermission(
261
- [
262
- "users.read",
263
- "users.write",
264
- ],
265
- {
266
- match: "all",
267
- }
268
- );
269
- ```
270
-
271
- Resource-aware policies:
272
-
273
- ```ts
274
- import {
275
- authorize,
276
- defineAuthorizationPolicy,
277
- } from "bcp/auth";
278
212
  ```
279
213
 
280
214
  Request-security helpers are exposed from `bcp/server`:
@@ -303,8 +237,6 @@ Read more: [Observability Platform v2](docs/observability.md)
303
237
 
304
238
  ## Background Jobs Platform — 0.2.8
305
239
 
306
- Create a server-side queue:
307
-
308
240
  ```ts
309
241
  import {
310
242
  createJobQueue,
@@ -314,7 +246,7 @@ export const jobs =
314
246
  createJobQueue();
315
247
  ```
316
248
 
317
- Register a handler:
249
+ Register work:
318
250
 
319
251
  ```ts
320
252
  jobs.register<{
@@ -329,7 +261,7 @@ jobs.register<{
329
261
  );
330
262
  ```
331
263
 
332
- Enqueue immediately or with a delay:
264
+ Enqueue work:
333
265
 
334
266
  ```ts
335
267
  await jobs.enqueue(
@@ -344,24 +276,10 @@ await jobs.enqueue(
344
276
  );
345
277
  ```
346
278
 
347
- Start concurrent workers:
348
-
349
- ```ts
350
- const worker =
351
- jobs.startWorker({
352
- concurrency: 4,
353
- pollIntervalMs: 250,
354
- });
355
- ```
356
-
357
- The default memory adapter is process-local. Durable multi-process deployments should implement `JobQueueAdapter` against shared infrastructure.
358
-
359
279
  Read more: [Background Jobs Platform](docs/background-jobs.md)
360
280
 
361
281
  ## Job Scheduling Platform — 0.2.9
362
282
 
363
- Create a scheduler on top of the same queue:
364
-
365
283
  ```ts
366
284
  import {
367
285
  createJobScheduler,
@@ -398,29 +316,179 @@ await scheduler.schedule(
398
316
  );
399
317
  ```
400
318
 
401
- Supported cron shape:
319
+ Read more: [Job Scheduling Platform](docs/job-scheduling.md)
402
320
 
403
- ```text
404
- minute hour day-of-month month day-of-week
321
+ ## Durable Jobs Platform — 0.2.10
322
+
323
+ Workers support visibility leases, heartbeat renewal and stale-running recovery when the configured adapter implements those capabilities:
324
+
325
+ ```ts
326
+ const worker =
327
+ jobs.startWorker({
328
+ workerId: "email-worker",
329
+ concurrency: 4,
330
+ visibilityTimeoutMs: 30_000,
331
+ heartbeatIntervalMs: 10_000,
332
+ pollIntervalMs: 250,
333
+ });
405
334
  ```
406
335
 
407
- The scheduler runner polls due schedules and enqueues normal BCP jobs:
336
+ Retry-exhausted jobs can be inspected and requeued:
408
337
 
409
338
  ```ts
410
- const scheduleRunner =
411
- scheduler.start({
412
- pollIntervalMs: 1_000,
413
- leaseMs: 30_000,
339
+ const failed =
340
+ await jobs.deadLetters();
341
+
342
+ await jobs.requeueDeadLetter(
343
+ failed[0].id,
344
+ {
345
+ delayMs: 5_000,
346
+ resetAttempts: true,
347
+ }
348
+ );
349
+ ```
350
+
351
+ Redis-compatible durable adapters:
352
+
353
+ ```ts
354
+ import {
355
+ createJobQueue,
356
+ createJobScheduler,
357
+ createRedisJobQueueAdapter,
358
+ createRedisJobScheduleStore,
359
+ } from "bcp/jobs";
360
+
361
+ const queueAdapter =
362
+ createRedisJobQueueAdapter({
363
+ client: redisCommandClient,
364
+ namespace: "my-app:{jobs}",
414
365
  });
415
366
 
416
- // graceful shutdown
417
- await scheduleRunner.stop();
418
- await scheduler.close();
367
+ export const jobs =
368
+ createJobQueue({
369
+ adapter: queueAdapter,
370
+ });
371
+
372
+ const scheduleStore =
373
+ createRedisJobScheduleStore({
374
+ client: redisCommandClient,
375
+ namespace: "my-app:{jobs}",
376
+ });
377
+
378
+ export const scheduler =
379
+ createJobScheduler({
380
+ queue: jobs,
381
+ store: scheduleStore,
382
+ ownerId: "scheduler-a",
383
+ });
419
384
  ```
420
385
 
421
- The built-in `createMemoryJobScheduleStore()` is process-local. Multi-instance production deployments should implement a shared `JobScheduleStore` whose `acquireDue()` operation atomically claims schedules with lease ownership/expiry. Scheduled occurrences also use deterministic queue ids for duplicate protection.
386
+ BCP does not read `REDIS_URL` or own the Redis client connection lifecycle automatically.
422
387
 
423
- Read more: [Job Scheduling Platform](docs/job-scheduling.md)
388
+ Read more: [Durable Jobs Platform](docs/durable-jobs.md)
389
+
390
+ ## Workflow Orchestration — 0.2.11
391
+
392
+ Create a server-only workflow with typed input:
393
+
394
+ ```ts
395
+ import {
396
+ createWorkflow,
397
+ } from "bcp/workflow";
398
+
399
+ export const onboarding =
400
+ createWorkflow<{
401
+ userId: number;
402
+ }>(
403
+ "user.onboarding",
404
+ workflow => {
405
+ workflow.step(
406
+ "profile",
407
+ async ({ input }) => {
408
+ await createProfile(
409
+ input.userId
410
+ );
411
+ }
412
+ );
413
+
414
+ workflow.parallel(
415
+ "initialize",
416
+ parallel => {
417
+ parallel.step(
418
+ "preferences",
419
+ createPreferences
420
+ );
421
+ parallel.step(
422
+ "workspace",
423
+ createWorkspace
424
+ );
425
+ }
426
+ );
427
+
428
+ workflow.delay(
429
+ "cooldown",
430
+ 1_000
431
+ );
432
+ }
433
+ );
434
+ ```
435
+
436
+ Per-step retries:
437
+
438
+ ```ts
439
+ workflow.step(
440
+ "charge-card",
441
+ chargeCard,
442
+ {
443
+ maxAttempts: 3,
444
+ retryDelayMs:
445
+ attempt =>
446
+ attempt * 1_000,
447
+ }
448
+ );
449
+ ```
450
+
451
+ Saga-style compensation:
452
+
453
+ ```ts
454
+ workflow.step(
455
+ "reserve-stock",
456
+ reserveStock,
457
+ {
458
+ compensate:
459
+ releaseStock,
460
+ }
461
+ );
462
+ ```
463
+
464
+ A failed run can be compensated in reverse completion order:
465
+
466
+ ```ts
467
+ await onboarding.compensate(
468
+ runId
469
+ );
470
+ ```
471
+
472
+ For durable execution, supply an existing BCP job queue and a shared workflow store:
473
+
474
+ ```ts
475
+ export const fulfillment =
476
+ createWorkflow(
477
+ "order.fulfillment",
478
+ defineWorkflow,
479
+ {
480
+ queue: jobs,
481
+ store:
482
+ workflowStore,
483
+ }
484
+ );
485
+ ```
486
+
487
+ With a queue configured, `start()`, `retry()`, `resume()` and delay continuations execute through `bcp/jobs`. `WorkflowStore.claim()` is the atomic run-level concurrency boundary for multi-instance deployments.
488
+
489
+ The built-in `createMemoryWorkflowStore()` is intended for local development and tests. External side effects should remain idempotent because durable job delivery is at-least-once.
490
+
491
+ Read more: [Workflow Orchestration](docs/workflow-orchestration.md)
424
492
 
425
493
  ## Public entrypoints
426
494
 
@@ -436,6 +504,7 @@ bcp/error
436
504
  bcp/database
437
505
  bcp/auth
438
506
  bcp/jobs
507
+ bcp/workflow
439
508
  bcp/observability
440
509
  bcp/server
441
510
  bcp/server-only
@@ -485,27 +554,25 @@ bcp generate middleware
485
554
  bcp generate migration create_users
486
555
  ```
487
556
 
488
- ## Application model
557
+ ## Production model
489
558
 
490
559
  ```text
491
- Browser
492
-
493
- Origin / CSRF / middleware / cache
494
-
495
- Authentication + authorization guard
496
-
497
- Loader / action / API route
498
-
499
- React SSR
500
-
501
- Hydration / SPA navigation
560
+ Browser / API clients
561
+
562
+ security + middleware + auth
563
+
564
+ loaders / actions / API routes
565
+
566
+ SSR / application responses
502
567
 
503
568
  Operational side channels:
504
- background jobs + scheduler + structured logs + metrics + health/readiness
569
+ workflow orchestration
570
+
571
+ shared jobs + scheduler
572
+
573
+ workers + structured logs + metrics + health/readiness
505
574
  ```
506
575
 
507
- ## Production build
508
-
509
576
  Raw standalone build:
510
577
 
511
578
  ```bash
@@ -519,8 +586,6 @@ Deployment package:
519
586
  bcp package
520
587
  ```
521
588
 
522
- Both current targets remain Node.js `standalone-node` applications.
523
-
524
589
  ## Documentation Platform
525
590
 
526
591
  The framework repository is the documentation source of truth.
@@ -547,7 +612,7 @@ npm run test:e2e
547
612
  npm run rc:check
548
613
  ```
549
614
 
550
- `0.2.9` adds Job Scheduling Platform unit and prepared-package smoke checks covering interval schedules, UTC cron parsing, standard day matching, schedule-store leases, deterministic scheduled run ids, retry propagation and lifecycle validation.
615
+ `0.2.11` adds Workflow Orchestration unit and prepared-package smoke checks covering sequential/parallel execution, retries, persisted delay/resume behavior, compensation, queue-backed continuation, run leases, browser boundary enforcement and the compiled `bcp/workflow` runtime.
551
616
 
552
617
  Do not tag or publish until the final release commit passes the complete RC sequence.
553
618
 
@@ -571,12 +636,14 @@ Do not tag or publish until the final release commit passes the complete RC sequ
571
636
  | `0.2.7` | Observability Platform v2 |
572
637
  | `0.2.8` | Background Jobs Platform |
573
638
  | `0.2.9` | Job Scheduling Platform |
639
+ | `0.2.10` | Durable Jobs Platform |
640
+ | `0.2.11` | Workflow Orchestration |
574
641
 
575
642
  ## Roadmap
576
643
 
577
- `0.2.9Job Scheduling Platform` establishes recurring scheduling and the durable schedule-store contract on top of the provider-neutral queue introduced in `0.2.8`.
644
+ `0.2.11Workflow Orchestration` establishes persistent multi-step backend workflows on top of the provider-neutral jobs foundation.
578
645
 
579
- Future work can add first-party durable queue/schedule adapters, dead-letter queues or workflow orchestration without changing the base queue and scheduler contracts. Native `.exe`, desktop and mobile compilation remain later roadmap work.
646
+ The next logical `0.2.x` milestone is transactional outbox/event delivery so a database change and later asynchronous workflow/job publication can be coordinated without pretending a Redis publish is part of the database transaction. Realtime, testing, plugin/module and broader deployment work remain later roadmap items. Native `.exe`, desktop and mobile compilation remain later roadmap work.
580
647
 
581
648
  ## License
582
649
 
package/docs/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  The `docs/` directory is the documentation source of truth for BCP Framework and is organized for **`bcp-docs-web`**.
4
4
 
5
- > **Documentation target:** BCP Framework `0.2.9Job Scheduling Platform`
5
+ > **Documentation target:** BCP Framework `0.2.11Workflow Orchestration`
6
6
  >
7
7
  > **Release state:** unreleased development target until RC validation, tagging and npm publication complete.
8
8
 
@@ -37,51 +37,55 @@ Framework source and tests remain authoritative for runtime behavior.
37
37
  | `0.2.7` | Observability Platform v2 |
38
38
  | `0.2.8` | Background Jobs Platform |
39
39
  | `0.2.9` | Job Scheduling Platform |
40
+ | `0.2.10` | Durable Jobs Platform |
41
+ | `0.2.11` | Workflow Orchestration |
40
42
 
41
- ## 0.2.9Job Scheduling Platform
43
+ ## 0.2.11Workflow Orchestration
42
44
 
43
- `0.2.9` extends `bcp/jobs` with recurring interval jobs, dependency-free UTC cron schedules, scheduler runners, deterministic scheduled occurrence IDs and a lease-aware `JobScheduleStore` contract.
45
+ `0.2.11` adds a new server-only `bcp/workflow` public entrypoint for persistent multi-step backend orchestration.
44
46
 
45
47
  New/updated documentation sources:
46
48
 
47
49
  | Source | Purpose |
48
50
  | --- | --- |
49
- | `background-jobs.md` | Base queue/worker contract from `0.2.8` |
50
- | `job-scheduling.md` | Interval/cron schedules, leases and durable schedule-store guidance |
51
- | `api-reference.md` | Public queue + scheduler APIs under `bcp/jobs` |
52
- | `platform-manifest.json` | Job Scheduling capability flags |
53
- | `api-manifest.json` | `bcp/jobs` guide ownership |
54
- | `docs-web-manifest.json` | Scheduling navigation and `0.2.9` release route |
55
- | `releases/0.2.9.md` | Job Scheduling Platform release notes |
51
+ | `workflow-orchestration.md` | Workflow definition, persistence, delays, retries, queue execution and compensation |
52
+ | `durable-jobs.md` | Durable execution layer used by queue-backed workflows |
53
+ | `api-reference.md` | Public `bcp/workflow` APIs |
54
+ | `platform-manifest.json` | Workflow capability flags and public entrypoint |
55
+ | `api-manifest.json` | `bcp/workflow` source/guide ownership |
56
+ | `docs-web-manifest.json` | Workflow docs navigation and `0.2.11` release route |
57
+ | `releases/0.2.11.md` | Workflow Orchestration release notes |
56
58
 
57
- Primary scheduling APIs:
59
+ Primary APIs:
58
60
 
59
61
  ```ts
60
62
  import {
61
- createJobScheduler,
62
- createMemoryJobScheduleStore,
63
- nextCronTime,
64
- nextScheduleTime,
65
- } from "bcp/jobs";
63
+ createMemoryWorkflowStore,
64
+ createWorkflow,
65
+ } from "bcp/workflow";
66
66
  ```
67
67
 
68
68
  Runtime model:
69
69
 
70
70
  ```text
71
- recurring schedule
72
- |
73
- v
74
- JobScheduleStore.acquireDue()
75
- |
76
- | lease + deterministic run id
77
- v
78
- JobQueueAdapter.enqueue()
79
- |
80
- v
81
- queue worker(s)
71
+ application / API
72
+ |
73
+ v
74
+ WorkflowStore
75
+ |
76
+ v
77
+ BCP Workflow
78
+ |
79
+ +--> sequential steps
80
+ +--> parallel groups
81
+ +--> retry / delay
82
+ +--> compensation
83
+ |
84
+ v
85
+ optional durable bcp/jobs queue
82
86
  ```
83
87
 
84
- The built-in schedule store and queue are process-local. Multi-process/container production deployments should implement shared durable `JobScheduleStore` and `JobQueueAdapter` contracts.
88
+ The memory workflow store is local-only. Multi-instance deployments should implement a shared durable `WorkflowStore` whose `claim()` method atomically leases one run to one executor.
85
89
 
86
90
  ## Update rule
87
91
 
@@ -98,8 +102,6 @@ When framework behavior or public surface changes:
98
102
 
99
103
  ## Docs-web navigation
100
104
 
101
- `docs/docs-web-manifest.json` is the authoritative ordered navigation contract.
102
-
103
105
  Important current routes:
104
106
 
105
107
  | Website route | Markdown source |
@@ -109,10 +111,12 @@ Important current routes:
109
111
  | `/docs/observability` | `observability.md` |
110
112
  | `/docs/background-jobs` | `background-jobs.md` |
111
113
  | `/docs/job-scheduling` | `job-scheduling.md` |
114
+ | `/docs/durable-jobs` | `durable-jobs.md` |
115
+ | `/docs/workflow-orchestration` | `workflow-orchestration.md` |
112
116
  | `/docs/application-packaging` | `application-packaging.md` |
113
117
  | `/docs/database` | `database.md` |
114
118
  | `/docs/api-reference` | `api-reference.md` |
115
- | `/releases/0.2.9` | `releases/0.2.9.md` |
119
+ | `/releases/0.2.11` | `releases/0.2.11.md` |
116
120
 
117
121
  Every route/source pair is validated by unit tests.
118
122
 
@@ -130,6 +134,7 @@ bcp/error
130
134
  bcp/database
131
135
  bcp/auth
132
136
  bcp/jobs
137
+ bcp/workflow
133
138
  bcp/observability
134
139
  bcp/server
135
140
  bcp/server-only
@@ -140,7 +145,7 @@ The API-manifest entrypoint set must match the platform public-entrypoint set ex
140
145
 
141
146
  ## Release validation
142
147
 
143
- Before publishing `0.2.9`:
148
+ Before publishing `0.2.11`:
144
149
 
145
150
  ```bash
146
151
  npm run typecheck
@@ -151,17 +156,18 @@ npm run test:e2e
151
156
  npm run rc:check
152
157
  ```
153
158
 
154
- Job Scheduling Platform validation covers:
155
-
156
- - interval scheduling,
157
- - five-field UTC cron parsing,
158
- - standard day-of-month/day-of-week behavior,
159
- - schedule-store leasing,
160
- - deterministic scheduled run IDs,
161
- - retry-limit propagation into queue jobs,
162
- - schedule inspection/removal,
163
- - scheduler configuration validation,
164
- - prepared npm package contents,
159
+ Workflow Orchestration validation covers:
160
+
161
+ - sequential step execution,
162
+ - step retries,
163
+ - parallel child execution/state,
164
+ - persisted delay/resume behavior,
165
+ - manual retry,
166
+ - reverse-order compensation,
167
+ - queue-backed execution and delayed continuation,
168
+ - workflow store run leases,
169
+ - server-only client boundary enforcement,
170
+ - compiled `workflow.mjs` package execution,
165
171
  - docs/platform/API version parity.
166
172
 
167
173
  The final release tag must point to the exact commit that passed the complete RC sequence.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "framework": "bcp",
4
- "version": "0.2.9",
4
+ "version": "0.2.11",
5
5
  "releaseState": "unreleased",
6
6
  "coverage": "public-entrypoints",
7
7
  "entrypoints": [
@@ -99,10 +99,23 @@
99
99
  "source": "packages/client/src/jobs.ts",
100
100
  "environment": "server",
101
101
  "route": "/docs/api-reference#bcp-jobs",
102
- "summary": "Background job queues plus recurring interval/cron scheduling, schedule-store leases and worker lifecycle APIs.",
102
+ "summary": "Background queues and schedules with visibility leases, heartbeats, stale recovery, DLQ maintenance and Redis-compatible durable adapters.",
103
103
  "guides": [
104
104
  "/docs/background-jobs",
105
105
  "/docs/job-scheduling",
106
+ "/docs/durable-jobs",
107
+ "/docs/observability"
108
+ ]
109
+ },
110
+ {
111
+ "package": "bcp/workflow",
112
+ "source": "packages/client/src/workflow.ts",
113
+ "environment": "server",
114
+ "route": "/docs/api-reference#bcp-workflow",
115
+ "summary": "Persistent workflow orchestration with sequential and parallel steps, retries, delays, compensation, run leases and optional durable queue execution.",
116
+ "guides": [
117
+ "/docs/workflow-orchestration",
118
+ "/docs/durable-jobs",
106
119
  "/docs/observability"
107
120
  ]
108
121
  },