@adonis-agora/durable 0.47.0 → 0.49.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.
Files changed (183) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/assets/spa/assets/index-6nmSTfT7.css +1 -0
  3. package/dist/assets/spa/assets/index-DdB9zxuX.js +16 -0
  4. package/dist/assets/spa/assets/index-DdB9zxuX.js.map +1 -0
  5. package/dist/assets/spa/index.html +2 -2
  6. package/dist/configure.d.ts.map +1 -1
  7. package/dist/configure.js +1 -0
  8. package/dist/configure.js.map +1 -1
  9. package/dist/providers/dashboard_provider.d.ts +3 -1
  10. package/dist/providers/dashboard_provider.d.ts.map +1 -1
  11. package/dist/providers/dashboard_provider.js +7 -2
  12. package/dist/providers/dashboard_provider.js.map +1 -1
  13. package/dist/providers/durable_provider.d.ts +0 -25
  14. package/dist/providers/durable_provider.d.ts.map +1 -1
  15. package/dist/providers/durable_provider.js +30 -5
  16. package/dist/providers/durable_provider.js.map +1 -1
  17. package/dist/src/codec-state-store.d.ts +2 -0
  18. package/dist/src/codec-state-store.d.ts.map +1 -1
  19. package/dist/src/codec-state-store.js +6 -0
  20. package/dist/src/codec-state-store.js.map +1 -1
  21. package/dist/src/completion.d.ts +11 -0
  22. package/dist/src/completion.d.ts.map +1 -1
  23. package/dist/src/completion.js +18 -1
  24. package/dist/src/completion.js.map +1 -1
  25. package/dist/src/dashboard/gateway-adapter.d.ts.map +1 -1
  26. package/dist/src/dashboard/gateway-adapter.js +10 -0
  27. package/dist/src/dashboard/gateway-adapter.js.map +1 -1
  28. package/dist/src/dashboard/handlers.d.ts +22 -1
  29. package/dist/src/dashboard/handlers.d.ts.map +1 -1
  30. package/dist/src/dashboard/handlers.js +63 -10
  31. package/dist/src/dashboard/handlers.js.map +1 -1
  32. package/dist/src/dashboard/index.d.ts +1 -1
  33. package/dist/src/dashboard/index.js +1 -1
  34. package/dist/src/dashboard/openapi.d.ts.map +1 -1
  35. package/dist/src/dashboard/openapi.js +26 -2
  36. package/dist/src/dashboard/openapi.js.map +1 -1
  37. package/dist/src/define_config.d.ts +6 -0
  38. package/dist/src/define_config.d.ts.map +1 -1
  39. package/dist/src/define_config.js.map +1 -1
  40. package/dist/src/engine.d.ts +89 -3
  41. package/dist/src/engine.d.ts.map +1 -1
  42. package/dist/src/engine.js +448 -39
  43. package/dist/src/engine.js.map +1 -1
  44. package/dist/src/errors.d.ts +30 -12
  45. package/dist/src/errors.d.ts.map +1 -1
  46. package/dist/src/errors.js +17 -8
  47. package/dist/src/errors.js.map +1 -1
  48. package/dist/src/fan-join.d.ts +36 -6
  49. package/dist/src/fan-join.d.ts.map +1 -1
  50. package/dist/src/fan-join.js +63 -8
  51. package/dist/src/fan-join.js.map +1 -1
  52. package/dist/src/handshake/announced.d.ts +94 -0
  53. package/dist/src/handshake/announced.d.ts.map +1 -0
  54. package/dist/src/handshake/announced.js +113 -0
  55. package/dist/src/handshake/announced.js.map +1 -0
  56. package/dist/src/handshake/descriptor.d.ts +59 -0
  57. package/dist/src/handshake/descriptor.d.ts.map +1 -1
  58. package/dist/src/handshake/descriptor.js +38 -0
  59. package/dist/src/handshake/descriptor.js.map +1 -1
  60. package/dist/src/index.d.ts +6 -3
  61. package/dist/src/index.d.ts.map +1 -1
  62. package/dist/src/index.js +5 -2
  63. package/dist/src/index.js.map +1 -1
  64. package/dist/src/interfaces.d.ts +85 -4
  65. package/dist/src/interfaces.d.ts.map +1 -1
  66. package/dist/src/interfaces.js.map +1 -1
  67. package/dist/src/metrics.d.ts +5 -0
  68. package/dist/src/metrics.d.ts.map +1 -1
  69. package/dist/src/metrics.js +14 -1
  70. package/dist/src/metrics.js.map +1 -1
  71. package/dist/src/on-error.d.ts +59 -0
  72. package/dist/src/on-error.d.ts.map +1 -0
  73. package/dist/src/on-error.js +71 -0
  74. package/dist/src/on-error.js.map +1 -0
  75. package/dist/src/otel/durable-metrics.d.ts +6 -0
  76. package/dist/src/otel/durable-metrics.d.ts.map +1 -1
  77. package/dist/src/otel/durable-metrics.js +22 -2
  78. package/dist/src/otel/durable-metrics.js.map +1 -1
  79. package/dist/src/otel/durable-otel.d.ts.map +1 -1
  80. package/dist/src/otel/durable-otel.js +15 -0
  81. package/dist/src/otel/durable-otel.js.map +1 -1
  82. package/dist/src/protocol.d.ts.map +1 -1
  83. package/dist/src/protocol.js +1 -0
  84. package/dist/src/protocol.js.map +1 -1
  85. package/dist/src/run-detail-summary.d.ts +98 -0
  86. package/dist/src/run-detail-summary.d.ts.map +1 -0
  87. package/dist/src/run-detail-summary.js +150 -0
  88. package/dist/src/run-detail-summary.js.map +1 -0
  89. package/dist/src/run-gateway/interface.d.ts +11 -0
  90. package/dist/src/run-gateway/interface.d.ts.map +1 -1
  91. package/dist/src/run-gateway/proxy-run-gateway.d.ts +3 -0
  92. package/dist/src/run-gateway/proxy-run-gateway.d.ts.map +1 -1
  93. package/dist/src/run-gateway/proxy-run-gateway.js +8 -0
  94. package/dist/src/run-gateway/proxy-run-gateway.js.map +1 -1
  95. package/dist/src/run-gateway/run-request-responder.d.ts +4 -3
  96. package/dist/src/run-gateway/run-request-responder.d.ts.map +1 -1
  97. package/dist/src/run-gateway/run-request-responder.js +23 -3
  98. package/dist/src/run-gateway/run-request-responder.js.map +1 -1
  99. package/dist/src/run-gateway/store-run-gateway.d.ts +3 -0
  100. package/dist/src/run-gateway/store-run-gateway.d.ts.map +1 -1
  101. package/dist/src/run-gateway/store-run-gateway.js +7 -0
  102. package/dist/src/run-gateway/store-run-gateway.js.map +1 -1
  103. package/dist/src/stores/lucid.d.ts +1 -0
  104. package/dist/src/stores/lucid.d.ts.map +1 -1
  105. package/dist/src/stores/lucid.js +17 -4
  106. package/dist/src/stores/lucid.js.map +1 -1
  107. package/dist/src/testing/in-memory-state-store.d.ts +1 -0
  108. package/dist/src/testing/in-memory-state-store.d.ts.map +1 -1
  109. package/dist/src/testing/in-memory-state-store.js +14 -6
  110. package/dist/src/testing/in-memory-state-store.js.map +1 -1
  111. package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
  112. package/dist/src/testing-kit/state-store-conformance.js +59 -0
  113. package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
  114. package/dist/src/transports/bullmq/adaptive-concurrency.d.ts +144 -0
  115. package/dist/src/transports/bullmq/adaptive-concurrency.d.ts.map +1 -0
  116. package/dist/src/transports/bullmq/adaptive-concurrency.js +312 -0
  117. package/dist/src/transports/bullmq/adaptive-concurrency.js.map +1 -0
  118. package/dist/src/transports/bullmq/bullmq-transport.d.ts +18 -1
  119. package/dist/src/transports/bullmq/bullmq-transport.d.ts.map +1 -1
  120. package/dist/src/transports/bullmq/bullmq-transport.js +50 -49
  121. package/dist/src/transports/bullmq/bullmq-transport.js.map +1 -1
  122. package/dist/src/transports/bullmq/deps.d.ts +11 -1
  123. package/dist/src/transports/bullmq/deps.d.ts.map +1 -1
  124. package/dist/src/transports/bullmq/deps.js +12 -1
  125. package/dist/src/transports/bullmq/deps.js.map +1 -1
  126. package/dist/src/transports/bullmq/index.d.ts +1 -0
  127. package/dist/src/transports/bullmq/index.d.ts.map +1 -1
  128. package/dist/src/transports/bullmq/index.js +1 -0
  129. package/dist/src/transports/bullmq/index.js.map +1 -1
  130. package/dist/src/transports/db-schema.d.ts +12 -0
  131. package/dist/src/transports/db-schema.d.ts.map +1 -1
  132. package/dist/src/transports/db-schema.js +24 -0
  133. package/dist/src/transports/db-schema.js.map +1 -1
  134. package/dist/src/transports/db.d.ts +14 -0
  135. package/dist/src/transports/db.d.ts.map +1 -1
  136. package/dist/src/transports/db.js +34 -0
  137. package/dist/src/transports/db.js.map +1 -1
  138. package/dist/src/transports/event-emitter.d.ts +8 -0
  139. package/dist/src/transports/event-emitter.d.ts.map +1 -1
  140. package/dist/src/transports/event-emitter.js +27 -0
  141. package/dist/src/transports/event-emitter.js.map +1 -1
  142. package/dist/src/transports/factory.d.ts +33 -2
  143. package/dist/src/transports/factory.d.ts.map +1 -1
  144. package/dist/src/transports/factory.js +29 -1
  145. package/dist/src/transports/factory.js.map +1 -1
  146. package/dist/src/transports/queue.d.ts +19 -0
  147. package/dist/src/transports/queue.d.ts.map +1 -1
  148. package/dist/src/transports/queue.js +17 -0
  149. package/dist/src/transports/queue.js.map +1 -1
  150. package/dist/src/transports/worker-keys-db.d.ts +17 -0
  151. package/dist/src/transports/worker-keys-db.d.ts.map +1 -0
  152. package/dist/src/transports/worker-keys-db.js +43 -0
  153. package/dist/src/transports/worker-keys-db.js.map +1 -0
  154. package/dist/src/transports/worker-keys.d.ts +56 -0
  155. package/dist/src/transports/worker-keys.d.ts.map +1 -0
  156. package/dist/src/transports/worker-keys.js +92 -0
  157. package/dist/src/transports/worker-keys.js.map +1 -0
  158. package/dist/src/worker-runtime/index.d.ts +1 -1
  159. package/dist/src/worker-runtime/index.d.ts.map +1 -1
  160. package/dist/src/worker-runtime/index.js.map +1 -1
  161. package/dist/src/worker-runtime/worker-runtime.d.ts +7 -2
  162. package/dist/src/worker-runtime/worker-runtime.d.ts.map +1 -1
  163. package/dist/src/worker-runtime/worker-runtime.js +22 -20
  164. package/dist/src/worker-runtime/worker-runtime.js.map +1 -1
  165. package/dist/src/workflow-ctx.d.ts +13 -1
  166. package/dist/src/workflow-ctx.d.ts.map +1 -1
  167. package/dist/src/workflow-ctx.js +44 -6
  168. package/dist/src/workflow-ctx.js.map +1 -1
  169. package/dist/src/workflow-discovery.d.ts.map +1 -1
  170. package/dist/src/workflow-discovery.js +2 -1
  171. package/dist/src/workflow-discovery.js.map +1 -1
  172. package/dist/src/workflow-ref.d.ts +31 -0
  173. package/dist/src/workflow-ref.d.ts.map +1 -1
  174. package/dist/src/workflow-ref.js +22 -0
  175. package/dist/src/workflow-ref.js.map +1 -1
  176. package/dist/stubs/database/migrations/create_durable_transport_worker_keys.stub +24 -0
  177. package/package.json +5 -5
  178. package/skills/durable-cluster/SKILL.md +10 -0
  179. package/skills/durable-transports-stores/SKILL.md +37 -0
  180. package/skills/durable-workflows/SKILL.md +22 -1
  181. package/dist/assets/spa/assets/index-CL6q2kMB.js +0 -16
  182. package/dist/assets/spa/assets/index-CL6q2kMB.js.map +0 -1
  183. package/dist/assets/spa/assets/index-DU6cGcJz.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-discovery.d.ts","sourceRoot":"","sources":["../../src/workflow-discovery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,KAAK,YAAY,EAAmC,MAAM,mBAAmB,CAAC;AAEvF;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,GAAG,UAAU;IAC9C,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC/D,CAAC;AAEF;2CAC2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,uBAAuB,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,IAAI,EAAE,uBAAuB,KAC1B,uBAAuB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC;AAQ1F;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,oBAA6C,GACrD,OAAO,CAAC,OAAO,CAAC,CAkClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAY9E;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAyBlF;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,YAAY,EAAE,CAAC,CAIzB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAErF;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,YAAY,EAAE,CAAC,CAezB"}
1
+ {"version":3,"file":"workflow-discovery.d.ts","sourceRoot":"","sources":["../../src/workflow-discovery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAEL,KAAK,YAAY,EAGlB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,GAAG,UAAU;IAC9C,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC/D,CAAC;AAEF;2CAC2C;AAC3C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,uBAAuB,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,IAAI,EAAE,uBAAuB,KAC1B,uBAAuB,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC;AAQ1F;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,oBAA6C,GACrD,OAAO,CAAC,OAAO,CAAC,CAmClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAY9E;AAED;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAyBlF;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,YAAY,EAAE,CAAC,CAIzB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAErF;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,YAAY,EAAE,CAAC,CAezB"}
@@ -2,7 +2,7 @@ import { readdir } from 'node:fs/promises';
2
2
  import { extname, join } from 'node:path';
3
3
  import { pathToFileURL } from 'node:url';
4
4
  import { eventTriggerCanonicalName, workflowEvents } from './workflow-events.js';
5
- import { workflowMeta, workflowSchedules } from './workflow-ref.js';
5
+ import { onErrorRoutesOf, workflowMeta, workflowSchedules, } from './workflow-ref.js';
6
6
  function defaultWorkflowFactory(ctor) {
7
7
  return new ctor();
8
8
  }
@@ -41,6 +41,7 @@ export async function registerWorkflowClass(engine, cls, factory = defaultWorkfl
41
41
  ...(meta.singleton ? { singleton: meta.singleton } : {}),
42
42
  ...(meta.concurrency ? { concurrency: meta.concurrency } : {}),
43
43
  ...(meta.origin ? { origin: meta.origin } : {}),
44
+ ...(meta.onError?.length ? { onError: onErrorRoutesOf(meta) } : {}),
44
45
  });
45
46
  // Collect any colocated `static schedule` on the class so the worker loop can fire it alongside the
46
47
  // config schedules. Both discovery paths (dir scan + generated barrel) funnel through here, so this
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-discovery.js","sourceRoot":"","sources":["../../src/workflow-discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAqB,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAgCvF,SAAS,sBAAsB,CAC7B,IAA6B;IAE7B,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAsB,EACtB,GAAY,EACZ,OAAO,GAAyB,sBAAsB;IAEtD,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,IAAI,GAAG,GAA8B,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,sFAAsF;IACtF,kFAAkF;IAClF,mFAAmF;IACnF,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,MAAM;SACtB,GAAG,CAAC,yBAAyB,CAAC;SAC9B,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACnD,MAAM,CAAC,QAAQ,CACb,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,OAAO,EACZ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EACzD;QACE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YACvC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE;YACvD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CACF,CAAC;IACF,oGAAoG;IACpG,oGAAoG;IACpG,6CAA6C;IAC7C,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAAC,OAA0B;IACtD,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACtC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,GAAG,KAAK,KAAK;YAAE,KAAK,GAAG,IAAI,CAAC;aAC3B,IAAI,GAAG,KAAK,KAAK;YAAE,KAAK,GAAG,IAAI,CAAC;IACvC,CAAC;IACD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACjD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAChE,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;YAAE,SAAS;QAC/E,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAA4B,CAAC;QAC5F,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACjC,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAmC,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAsB,EACtB,GAAW,EACX,OAA8B;IAE9B,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAChD,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,UAAU;QAAE,MAAM,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACpF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAWD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAAsB,EACtB,MAAuB,EACvB,OAA8B;IAE9B,MAAM,UAAU,GAAmB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC;QACzB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACjC,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnB,MAAM,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"workflow-discovery.js","sourceRoot":"","sources":["../../src/workflow-discovery.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,19 @@ export interface WorkflowOptions {
44
44
  * facet; omit for an app-local workflow (renders as "unknown" until attributed).
45
45
  */
46
46
  origin?: string;
47
+ /**
48
+ * Route failed runs to a handler workflow by error `code`, instead of failing them: when a run ends
49
+ * `failed` with a matching code, the engine starts `workflow` with an `OnErrorInput`
50
+ * (`{ runId, workflow, input, error }`), the run waits for it, and settles with its outcome. `code`
51
+ * is a string or an error class with a `static code`; omit it for the catch-all. e.g.
52
+ * `onError: [{ code: InvalidLine, workflow: LineDeadLetterWorkflow }]`.
53
+ */
54
+ onError?: {
55
+ code?: string | {
56
+ readonly code: string;
57
+ };
58
+ workflow: WorkflowRef;
59
+ }[];
47
60
  }
48
61
  /** The metadata read off a workflow class's `static workflow` config for discovery + registration. */
49
62
  export interface WorkflowMeta extends WorkflowOptions {
@@ -113,4 +126,22 @@ export type WorkflowOutputOf<C> = C extends abstract new (...args: never[]) => {
113
126
  * no `static workflow` config (so it has no registered name).
114
127
  */
115
128
  export declare function workflowName(ref: WorkflowRef): string;
129
+ /** A class's `onError` routes, with class refs resolved to names and error classes to their codes. */
130
+ export declare function onErrorRoutesOf(meta: WorkflowOptions): {
131
+ code?: string;
132
+ workflow: string;
133
+ }[];
134
+ /**
135
+ * What a worker announces about a workflow class it runs (design §7.9): its version, declaring package
136
+ * and onError routes — pass it as `WorkerRuntime.registerWorkflow`'s `meta`. Undefined for a class
137
+ * carrying no `static workflow` config.
138
+ */
139
+ export declare function workflowAnnouncement(target: unknown): {
140
+ version: string;
141
+ origin?: string;
142
+ onError?: {
143
+ code?: string;
144
+ workflow: string;
145
+ }[];
146
+ } | undefined;
116
147
  //# sourceMappingURL=workflow-ref.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-ref.d.ts","sourceRoot":"","sources":["../../src/workflow-ref.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAEhF,2GAA2G;AAC3G,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,sGAAsG;AACtG,MAAM,WAAW,YAAa,SAAQ,eAAe;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAOtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAWtE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,sBAAsB,GAAG,sBAAsB,EAAE,GACxD,cAAc,CAUhB;AAED,mGAAmG;AACnG,MAAM,MAAM,aAAa,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,QAAQ,MACvE,GAAG,IAAI,EAAE,KAAK,EAAE,KACb;IACH,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC5D,CAAC;AAEF,yGAAyG;AACzG,MAAM,MAAM,WAAW,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IACvD,MAAM,GACN,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnC,uDAAuD;AACvD,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,MACjD,GAAG,IAAI,EAAE,KAAK,EAAE,KACb;IACH,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;CAC1C,GACG,CAAC,GACD,OAAO,CAAC;AAEZ,gFAAgF;AAChF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,MAClD,GAAG,IAAI,EAAE,KAAK,EAAE,KACb;IACH,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;CACxC,GACG,OAAO,CAAC,CAAC,CAAC,GACV,OAAO,CAAC;AAEZ;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CASrD"}
1
+ {"version":3,"file":"workflow-ref.d.ts","sourceRoot":"","sources":["../../src/workflow-ref.ts"],"names":[],"mappings":"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"}
@@ -91,4 +91,26 @@ export function workflowName(ref) {
91
91
  }
92
92
  return name;
93
93
  }
94
+ /** A class's `onError` routes, with class refs resolved to names and error classes to their codes. */
95
+ export function onErrorRoutesOf(meta) {
96
+ return (meta.onError ?? []).map(({ code, workflow }) => ({
97
+ ...(code === undefined ? {} : { code: typeof code === 'string' ? code : code.code }),
98
+ workflow: workflowName(workflow),
99
+ }));
100
+ }
101
+ /**
102
+ * What a worker announces about a workflow class it runs (design §7.9): its version, declaring package
103
+ * and onError routes — pass it as `WorkerRuntime.registerWorkflow`'s `meta`. Undefined for a class
104
+ * carrying no `static workflow` config.
105
+ */
106
+ export function workflowAnnouncement(target) {
107
+ const meta = workflowMeta(target);
108
+ if (!meta)
109
+ return undefined;
110
+ return {
111
+ version: meta.version,
112
+ ...(meta.origin ? { origin: meta.origin } : {}),
113
+ ...(meta.onError?.length ? { onError: onErrorRoutesOf(meta) } : {}),
114
+ };
115
+ }
94
116
  //# sourceMappingURL=workflow-ref.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-ref.js","sourceRoot":"","sources":["../../src/workflow-ref.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiDH;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,MAAM,GAAI,MAAyC,CAAC,QAAQ,CAAC;IACnE,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5E,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,GAAG,GAAI,MAA2E,CAAC,QAAQ,CAAC;IAClG,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxB,GAAG,CAAC;QACJ,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KACjE,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,SAAS,CACvB,MAAyD;IAEzD,OAAO,CAAC,MAAM,EAAE,EAAE;QAChB,MAAM,GAAG,GAAG,MAEX,CAAC;QACF,MAAM,QAAQ,GACZ,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChG,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACxD,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC;AACJ,CAAC;AAgCD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAgB;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,kBAAkB,GAAG,CAAC,IAAI,2EAA2E,CACtG,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"workflow-ref.js","sourceRoot":"","sources":["../../src/workflow-ref.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ {{{
2
+ exports({ to: app.migrationsPath(`${new Date().getTime()}_create_durable_transport_worker_keys.ts`) })
3
+ }}}
4
+ import { BaseSchema } from '@adonisjs/lucid/schema'
5
+
6
+ /**
7
+ * The worker advertisement keys for the @adonis-agora/durable \`db\` transport: the descriptor and
8
+ * heartbeat a worker runtime publishes (what it serves, and that it is alive), each with an expiry so a
9
+ * dead worker drops out. Only needed when you select the \`db\` transport in config/durable.ts.
10
+ */
11
+ export default class extends BaseSchema {
12
+ async up() {
13
+ this.schema.createTable('durable_transport_worker_keys', (table) => {
14
+ table.string('key', 512).primary()
15
+ table.text('value').notNullable()
16
+ table.bigInteger('expires_at').notNullable()
17
+ table.index(['expires_at'], 'durable_transport_worker_keys_expires_idx')
18
+ })
19
+ }
20
+
21
+ async down() {
22
+ this.schema.dropTableIfExists('durable_transport_worker_keys')
23
+ }
24
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonis-agora/durable",
3
- "version": "0.47.0",
3
+ "version": "0.49.0",
4
4
  "description": "Durable cross-app workflows for AdonisJS — deterministic replay engine, AdonisJS binding, ace commands, dashboard, OpenTelemetry, Telescope, testing harness and Redis admission, all in one package. Part of the Agora ecosystem.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -170,8 +170,8 @@
170
170
  }
171
171
  },
172
172
  "devDependencies": {
173
- "@adonis-agora/durable-dashboard": "0.7.0",
174
- "@adonisjs/assembler": "8.5.2",
173
+ "@adonis-agora/durable-dashboard": "0.8.0",
174
+ "@adonisjs/assembler": "8.6.0",
175
175
  "@adonisjs/core": "7.6.0",
176
176
  "@adonisjs/lucid": "22.4.2",
177
177
  "@adonisjs/queue": "0.7.0",
@@ -180,11 +180,11 @@
180
180
  "@opentelemetry/context-async-hooks": "2.12.0",
181
181
  "@opentelemetry/sdk-trace-base": "2.12.0",
182
182
  "@poppinss/hooks": "7.3.1",
183
- "@tanstack/intent": "0.5.5",
183
+ "@tanstack/intent": "0.5.6",
184
184
  "@types/better-sqlite3": "9.6.0",
185
185
  "@types/node": "26.6.5",
186
186
  "better-sqlite3": "13.0.3",
187
- "bullmq": "6.3.16",
187
+ "bullmq": "6.3.17",
188
188
  "cron-parser": "5.10.2",
189
189
  "ioredis": "6.0.0",
190
190
  "typescript": "7.0.2",
@@ -105,8 +105,18 @@ export default class RunsController {
105
105
  ```
106
106
 
107
107
  Verbs: `getRun`, `listRuns`, `getCheckpoints`, `getRunChildren`,
108
+ `getRunDetail` / `getFanMembers` (optional; summarize and page wide fans),
108
109
  `getSearchAttributes`, `start`, `signal`, `cancel`, `redispatchPending`,
109
110
  `workerHealth`, `subscribe`, `topology()`. Never branch on `role`.
111
+
112
+ ```ts
113
+ // Each fan of more than 50 members — or declared wider than 50 — comes back as one FanSummary in `fans`.
114
+ const detail = await runGateway.getRunDetail?.(params.id, { summarizeFansOver: 50 })
115
+ ```
116
+
117
+ A tenant pod's dashboard reads run detail through the `getRunDetail` verb, and
118
+ an older control plane rejects unknown verbs: upgrade the control plane first,
119
+ or with its tenants.
110
120
  Source: `docs/cluster/roles-and-config.mdx`.
111
121
 
112
122
  ### Pattern 2 — capability-aware routing and blocked runs
@@ -23,6 +23,7 @@ sources:
23
23
  - 'DavideCarvalho/adonis-durable:docs/transports/control-plane.mdx'
24
24
  - 'DavideCarvalho/adonis-durable:docs/stores/index.mdx'
25
25
  - 'DavideCarvalho/adonis-durable:docs/stores/lucid.mdx'
26
+ - 'DavideCarvalho/adonis-durable:docs/cluster/interop.mdx'
26
27
  ---
27
28
 
28
29
  # Transports & state stores
@@ -104,6 +105,33 @@ One instance consumes engine-side results; run one or more `node ace
104
105
  durable:work` workers serving the step names. Source:
105
106
  `docs/transports/queue.mdx`.
106
107
 
108
+ For wide fans (`ctx.all` over thousands of steps), raise how many results an
109
+ instance settles at once on `bullmq` (`queue` and `db` have no such option),
110
+ let its workers size their step concurrency, and size the engine's due-timer
111
+ batch:
112
+
113
+ ```ts title="config/durable.ts"
114
+ export default defineConfig({
115
+ timerBatchSize: 1000, // due runs per timer pass, most overdue first (default 500)
116
+ transports: {
117
+ bullmq: transports.bullmq({
118
+ connection: { host: '127.0.0.1', port: 6379 },
119
+ resultConcurrency: 16, // default 1
120
+ // A number pins each task queue's concurrency (default 1). 'adaptive' moves it
121
+ // every tickMs: +1 while steps saturate the limit at steady latency, down by the
122
+ // latency gradient when they queue, -1 on >20% errors / a stall / the CPU ceiling,
123
+ // -20% at ramCeilingPct of the cgroup (else host) memory limit.
124
+ concurrency: { mode: 'adaptive', min: 1, max: 32, start: 1, tickMs: 2000, ramCeilingPct: 85 },
125
+ }),
126
+ },
127
+ })
128
+ ```
129
+
130
+ Only step durations feed the adaptive window (workflow turns count as in-flight
131
+ work and progress); a non-finite or out-of-range field falls back to its default, and
132
+ `cpuCeilingPct` is off unless set. In adaptive mode the decisions, step-events, start-run and run-request consumers run
133
+ at 1 (results run at `resultConcurrency`). Sources: `docs/transports/index.mdx`, `docs/cluster/interop.mdx`.
134
+
107
135
  ### Pattern 3 — multi-replica fan-out: the control plane
108
136
 
109
137
  The task transport is point-to-point; lifecycle events and cancellation need a
@@ -178,6 +206,15 @@ export default defineConfig({
178
206
  })
179
207
  ```
180
208
 
209
+ A custom store should implement `countCheckpoints(runId, fromSeq, toSeq,
210
+ statuses)` as a `COUNT` (the step-fan join barrier calls it on every result;
211
+ without it the engine loads the run's checkpoints per result), implement
212
+ `saveCheckpointIfPending` as one conditional `UPDATE ... WHERE status = 'pending'`
213
+ (without it a blind save can put a settled step back to `pending`), and return
214
+ `listDueTimers` most overdue first, with or without a `limit`. Run
215
+ `runStateStoreContract` from `@adonis-agora/durable/testing/conformance`, which
216
+ covers all three and fails a store missing either method.
217
+
181
218
  Source: `docs/stores/lucid.mdx`, `docs/stores/index.mdx`.
182
219
 
183
220
  ## Common mistakes
@@ -176,12 +176,33 @@ if (input.n < 3) await ctx.continueAsNew({ n: input.n + 1 }) // clean history pe
176
176
 
177
177
  `ctx.all` default mode is `waitAll`: every sibling finishes, then the call throws
178
178
  a `GatherError` carrying `.failures`; `{ mode: 'failFast' }` cancels remaining
179
- siblings (plain cancel — no saga). Child ids derive from the call position and
179
+ siblings (plain cancel — no saga). When some items failing is an expected outcome,
180
+ use `ctx.allSettled(Workflow, inputs, { concurrency })` instead: the same fan,
181
+ resolving with `{ status: 'fulfilled', value } | { status: 'rejected', id, error, code?, details? }`
182
+ per input and never throwing for a child. Child ids derive from the call position and
180
183
  are replay-stable; never pass a random one. `{ concurrency: n }` caps how many
181
184
  children run at once (waves of `floor(n / 2)`, two at a time), and the wave goes into each child
182
185
  id), so changing it for an in-flight run is non-deterministic, like changing
183
186
  `inputs`.
184
187
 
188
+ For the same step over many inputs, pass the step reference (`defineStep` ref
189
+ or `@Step` method) to `ctx.all`. It
190
+ dispatches one step per input, wakes the workflow once per settled wave instead
191
+ of once per result, and returns the outputs in input order (a `GatherError`
192
+ carries the failed indexes, as for a child fan):
193
+
194
+ ```ts
195
+ const results = await ctx.all(processLine, lines, { concurrency: 500 })
196
+ ```
197
+
198
+ `ctx.allSettled(processLine, lines, { concurrency })` is the same step fan,
199
+ resolving with a `Settled` per input instead of throwing.
200
+
201
+ Prefer it to `Promise.all` past a handful of steps (every result of a
202
+ `Promise.all` replays the workflow: O(N²) checkpoint reads), and to a
203
+ child-workflow `ctx.all` when each item is just a step. A `queue` or a
204
+ `timeoutMs` is rejected on a step fan.
205
+
185
206
  Serialize runs per subject with a singleton — runs sharing a key queue FIFO and
186
207
  are race-free across instances:
187
208