@zlink-systems/framework 0.25.0 → 0.27.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 (557) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
  3. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  4. package/dist/contracts/Common/CoreTypes.js +7 -0
  5. package/dist/contracts/Common/index.d.ts +1 -1
  6. package/dist/contracts/Common/index.js +0 -1
  7. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  8. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  9. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  10. package/dist/contracts/Configuration/Registration.js +58 -36
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  14. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  15. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  16. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  17. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  18. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  19. package/dist/contracts/Handlers/JsonContract.js +10 -4
  20. package/dist/contracts/Locations/Authority.d.ts +1 -1
  21. package/dist/contracts/Locations/Authority.js +3 -2
  22. package/dist/contracts/Locations/Options.js +1 -1
  23. package/dist/contracts/Locations/Stores.d.ts +12 -0
  24. package/dist/contracts/Locations/Stores.js +9 -0
  25. package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
  26. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  27. package/dist/internal.d.ts +5 -0
  28. package/dist/internal.js +16 -1
  29. package/dist/nest-integration.d.ts +4 -2
  30. package/dist/nest-integration.js +14 -4
  31. package/dist/runtime/abort.d.ts +1 -0
  32. package/dist/runtime/abort.js +8 -5
  33. package/dist/runtime/activation-admission.d.ts +28 -0
  34. package/dist/runtime/activation-admission.js +57 -0
  35. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  36. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  37. package/dist/runtime/actors/actor-client.d.ts +2 -2
  38. package/dist/runtime/actors/actor-client.js +42 -143
  39. package/dist/runtime/actors/actor-context.d.ts +3 -5
  40. package/dist/runtime/actors/actor-context.js +19 -17
  41. package/dist/runtime/actors/actor-handoff.d.ts +13 -7
  42. package/dist/runtime/actors/actor-handoff.js +36 -25
  43. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  44. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  45. package/dist/runtime/actors/actor-local-native-join.js +85 -123
  46. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  47. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  48. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  49. package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
  50. package/dist/runtime/actors/actor-remote-joiner.js +11 -17
  51. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  52. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  53. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  54. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  55. package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
  56. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  57. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  58. package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
  59. package/dist/runtime/actors/bound-session-wire.js +2 -7
  60. package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
  61. package/dist/runtime/actors/deferred-join-completion.js +21 -0
  62. package/dist/runtime/actors/index.d.ts +10 -8
  63. package/dist/runtime/actors/index.js +101 -73
  64. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  65. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  66. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  67. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  68. package/dist/runtime/admission.d.ts +7 -1
  69. package/dist/runtime/admission.js +11 -1
  70. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  71. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  72. package/dist/runtime/backend/contracts/index.d.ts +8 -33
  73. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
  74. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  75. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  76. package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
  77. package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
  78. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
  79. package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
  80. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  81. package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
  82. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  83. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
  84. package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
  85. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
  86. package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
  87. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  88. package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
  89. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  90. package/dist/runtime/backend/runtime-values.js +2 -0
  91. package/dist/runtime/channels/channel-clients.d.ts +20 -9
  92. package/dist/runtime/channels/channel-clients.js +68 -60
  93. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  94. package/dist/runtime/channels/channel-envelope.js +47 -29
  95. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  96. package/dist/runtime/channels/channel-outbound-operations.js +9 -18
  97. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  98. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  99. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  100. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  101. package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
  102. package/dist/runtime/channels/channel-runtime-manager.js +4 -12
  103. package/dist/runtime/channels/channel-socket-options.js +3 -2
  104. package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
  105. package/dist/runtime/channels/channel-socket-registry.js +296 -235
  106. package/dist/runtime/channels/channel-transports.d.ts +11 -20
  107. package/dist/runtime/channels/channel-transports.js +68 -47
  108. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  109. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  110. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  111. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  112. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  113. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  114. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  115. package/dist/runtime/channels/fanout-location-runtime.js +133 -81
  116. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  117. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  118. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  119. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  120. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  121. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  122. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  123. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  124. package/dist/runtime/diagnostics/flow-context.js +16 -2
  125. package/dist/runtime/diagnostics/index.d.ts +4 -2
  126. package/dist/runtime/diagnostics/index.js +14 -4
  127. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  128. package/dist/runtime/diagnostics/message-flow.js +10 -19
  129. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  130. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  131. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  132. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  133. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  134. package/dist/runtime/disposal.d.ts +5 -0
  135. package/dist/runtime/disposal.js +22 -0
  136. package/dist/runtime/execution/index.d.ts +22 -9
  137. package/dist/runtime/execution/index.js +107 -37
  138. package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
  139. package/dist/runtime/execution/serial-execution-queue.js +99 -26
  140. package/dist/runtime/execution/state-lane.d.ts +8 -1
  141. package/dist/runtime/execution/state-lane.js +118 -3
  142. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  143. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  144. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  145. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  146. package/dist/runtime/foundation/listener-records.d.ts +11 -0
  147. package/dist/runtime/foundation/listener-records.js +20 -0
  148. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  149. package/dist/runtime/foundation/operation-identity.js +9 -5
  150. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  151. package/dist/runtime/foundation/operation-registry.js +34 -44
  152. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
  153. package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
  154. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  155. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  156. package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
  157. package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
  158. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  159. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  160. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  161. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  162. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  163. package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
  164. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  165. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  166. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  167. package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
  168. package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
  169. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
  170. package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
  171. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  172. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  173. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  174. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
  175. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  176. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  177. package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
  178. package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
  179. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
  180. package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
  181. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
  182. package/dist/runtime/foundation/service-topology-registry.js +22 -61
  183. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  184. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  185. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  186. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  187. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  188. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  189. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  190. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  191. package/dist/runtime/framework-errors-internal.js +343 -122
  192. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  193. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  194. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  195. package/dist/runtime/host/actor-packet-relay.js +48 -91
  196. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  197. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  198. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  199. package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
  200. package/dist/runtime/host/actor-transfer-runtime.js +210 -256
  201. package/dist/runtime/host/application-job-queue.js +16 -33
  202. package/dist/runtime/host/bound-session-relay.js +1 -1
  203. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  204. package/dist/runtime/host/index.d.ts +19 -14
  205. package/dist/runtime/host/index.js +234 -175
  206. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  207. package/dist/runtime/host/instance-activation-authority.js +17 -45
  208. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  209. package/dist/runtime/host/location-runtime-owner.js +2 -2
  210. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  211. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  212. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  213. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  214. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  215. package/dist/runtime/host/remote-bound-session-relay.js +11 -23
  216. package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
  217. package/dist/runtime/host/route-mesh-runtime.js +178 -257
  218. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  219. package/dist/runtime/host/runtime-shutdown.js +18 -21
  220. package/dist/runtime/host/service-relocation-control.js +6 -1
  221. package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
  222. package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
  223. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  224. package/dist/runtime/host/spot-address-transport.js +34 -136
  225. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  226. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  227. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
  228. package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
  229. package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
  230. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
  231. package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
  232. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  233. package/dist/runtime/locations/authority-key-codec.js +4 -3
  234. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  235. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  236. package/dist/runtime/locations/creation-operation-id.js +6 -4
  237. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  238. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  239. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  240. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  241. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  242. package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
  243. package/dist/runtime/locations/key-codec.js +3 -2
  244. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  245. package/dist/runtime/locations/lease-tracker.js +7 -11
  246. package/dist/runtime/locations/lifecycle.d.ts +5 -10
  247. package/dist/runtime/locations/lifecycle.js +4 -33
  248. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  249. package/dist/runtime/locations/location-store-failure.js +7 -0
  250. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  251. package/dist/runtime/locations/location-store-pages.js +13 -0
  252. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  253. package/dist/runtime/locations/location-store-repository.js +303 -332
  254. package/dist/runtime/locations/relocation-blob.js +18 -5
  255. package/dist/runtime/locations/resolvers.d.ts +5 -5
  256. package/dist/runtime/locations/resolvers.js +44 -30
  257. package/dist/runtime/locations/runtime.d.ts +5 -4
  258. package/dist/runtime/locations/runtime.js +123 -92
  259. package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
  260. package/dist/runtime/locations/spot-location-claims.js +40 -23
  261. package/dist/runtime/messaging/payload-codec.js +26 -20
  262. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  263. package/dist/runtime/messaging/submission-result.js +48 -0
  264. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
  265. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
  266. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
  267. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
  268. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
  269. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
  270. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
  271. package/dist/runtime/spots/index.d.ts +29 -29
  272. package/dist/runtime/spots/index.js +441 -313
  273. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
  274. package/dist/runtime/spots/spot-activation-registry.js +27 -60
  275. package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
  276. package/dist/runtime/spots/spot-activation-state.js +4 -17
  277. package/dist/runtime/spots/spot-activation.d.ts +10 -9
  278. package/dist/runtime/spots/spot-activation.js +103 -81
  279. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  280. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  281. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  282. package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
  283. package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
  284. package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
  285. package/dist/runtime/spots/spot-actor-membership.js +44 -53
  286. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  287. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  288. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  289. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  290. package/dist/runtime/spots/spot-context.d.ts +2 -2
  291. package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
  292. package/dist/runtime/spots/spot-entry-activation.js +9 -21
  293. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  294. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  295. package/dist/runtime/spots/spot-manager-public.js +6 -5
  296. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  297. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
  298. package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
  299. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  300. package/dist/runtime/spots/spot-outbound.js +10 -37
  301. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  302. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  303. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  304. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  305. package/dist/runtime/spots/spot-route-replies.js +3 -1
  306. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
  307. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
  308. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
  309. package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
  310. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  311. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  312. package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
  313. package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
  314. package/dist/runtime/spots/spot-serial-executor.js +9 -2
  315. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
  316. package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
  317. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  318. package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
  319. package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
  320. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
  321. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  322. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  323. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  324. package/dist/runtime/streams/bound-session-service.js +12 -19
  325. package/dist/runtime/streams/index.d.ts +15 -14
  326. package/dist/runtime/streams/index.js +38 -39
  327. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  328. package/dist/runtime/streams/managed-stream.js +17 -8
  329. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  330. package/dist/runtime/streams/protocol.d.ts +6 -33
  331. package/dist/runtime/streams/protocol.js +38 -110
  332. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  333. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  334. package/dist/runtime/streams/session-calls.d.ts +1 -1
  335. package/dist/runtime/streams/session-calls.js +5 -4
  336. package/dist/runtime/streams/session-context.d.ts +6 -6
  337. package/dist/runtime/streams/session-context.js +22 -4
  338. package/dist/runtime/streams/session-requests.js +2 -1
  339. package/dist/runtime/streams/session-serial-executor.js +2 -2
  340. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  341. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  342. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  343. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  344. package/dist/runtime/workers/index.d.ts +2 -2
  345. package/dist/runtime/workers/index.js +5 -4
  346. package/package.json +3 -3
  347. package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
  348. package/src/contracts/Common/CoreTypes.ts +7 -0
  349. package/src/contracts/Common/index.ts +1 -1
  350. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  351. package/src/contracts/Configuration/Registration.ts +92 -48
  352. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  353. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  354. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  355. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  356. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  357. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  358. package/src/contracts/Handlers/JsonContract.ts +14 -4
  359. package/src/contracts/Locations/Authority.ts +7 -3
  360. package/src/contracts/Locations/Options.ts +1 -1
  361. package/src/contracts/Locations/Stores.ts +14 -0
  362. package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
  363. package/src/contracts/Spots/Contracts.ts +1 -1
  364. package/src/internal.ts +15 -0
  365. package/src/nest-integration.ts +28 -10
  366. package/src/runtime/abort.ts +6 -5
  367. package/src/runtime/activation-admission.ts +72 -0
  368. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  369. package/src/runtime/actors/actor-client.ts +77 -204
  370. package/src/runtime/actors/actor-context.ts +45 -39
  371. package/src/runtime/actors/actor-handoff.ts +55 -45
  372. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  373. package/src/runtime/actors/actor-local-native-join.ts +174 -215
  374. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  375. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  376. package/src/runtime/actors/actor-remote-joiner.ts +15 -36
  377. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  378. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  379. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  380. package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
  381. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  382. package/src/runtime/actors/actor-source-transfer.ts +5 -18
  383. package/src/runtime/actors/bound-session-wire.ts +2 -8
  384. package/src/runtime/actors/deferred-join-completion.ts +44 -0
  385. package/src/runtime/actors/index.ts +122 -88
  386. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  387. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  388. package/src/runtime/admission.ts +13 -2
  389. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  390. package/src/runtime/backend/contracts/index.ts +15 -42
  391. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
  392. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  393. package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
  394. package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
  395. package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
  396. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  397. package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
  398. package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
  399. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
  400. package/src/runtime/backend/raw-binding-port.ts +14 -1
  401. package/src/runtime/backend/runtime-values.ts +4 -1
  402. package/src/runtime/channels/channel-clients.ts +132 -96
  403. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  404. package/src/runtime/channels/channel-envelope.ts +58 -29
  405. package/src/runtime/channels/channel-outbound-operations.ts +10 -31
  406. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  407. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  408. package/src/runtime/channels/channel-runtime-manager.ts +8 -15
  409. package/src/runtime/channels/channel-socket-options.ts +8 -2
  410. package/src/runtime/channels/channel-socket-registry.ts +369 -262
  411. package/src/runtime/channels/channel-transports.ts +161 -115
  412. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  413. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  414. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  415. package/src/runtime/channels/fanout-location-runtime.ts +175 -106
  416. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  417. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  418. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  419. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  420. package/src/runtime/diagnostics/flow-context.ts +16 -2
  421. package/src/runtime/diagnostics/index.ts +27 -17
  422. package/src/runtime/diagnostics/message-flow.ts +15 -25
  423. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  424. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  425. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  426. package/src/runtime/disposal.ts +19 -0
  427. package/src/runtime/execution/index.ts +116 -38
  428. package/src/runtime/execution/serial-execution-queue.ts +179 -34
  429. package/src/runtime/execution/state-lane.ts +142 -4
  430. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  431. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  432. package/src/runtime/foundation/listener-records.ts +21 -0
  433. package/src/runtime/foundation/operation-identity.ts +11 -5
  434. package/src/runtime/foundation/operation-registry.ts +33 -50
  435. package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
  436. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  437. package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
  438. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  439. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  440. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  441. package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
  442. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  443. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  444. package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
  445. package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
  446. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  447. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  448. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
  449. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  450. package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
  451. package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
  452. package/src/runtime/foundation/service-topology-registry.ts +30 -79
  453. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  454. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  455. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  456. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  457. package/src/runtime/framework-errors-internal.ts +380 -134
  458. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  459. package/src/runtime/host/actor-packet-relay.ts +57 -147
  460. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  461. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  462. package/src/runtime/host/actor-transfer-runtime.ts +266 -418
  463. package/src/runtime/host/application-job-queue.ts +28 -34
  464. package/src/runtime/host/bound-session-relay.ts +1 -2
  465. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  466. package/src/runtime/host/index.ts +408 -312
  467. package/src/runtime/host/instance-activation-authority.ts +89 -109
  468. package/src/runtime/host/location-runtime-owner.ts +4 -2
  469. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  470. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  471. package/src/runtime/host/remote-bound-session-relay.ts +12 -44
  472. package/src/runtime/host/route-mesh-runtime.ts +236 -275
  473. package/src/runtime/host/runtime-shutdown.ts +17 -21
  474. package/src/runtime/host/service-relocation-control.ts +14 -1
  475. package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
  476. package/src/runtime/host/spot-address-transport.ts +73 -195
  477. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  478. package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
  479. package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
  480. package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
  481. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  482. package/src/runtime/locations/authority-key-codec.ts +7 -3
  483. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  484. package/src/runtime/locations/creation-operation-id.ts +6 -3
  485. package/src/runtime/locations/domain-store-contract.ts +12 -3
  486. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  487. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  488. package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
  489. package/src/runtime/locations/key-codec.ts +3 -2
  490. package/src/runtime/locations/lease-tracker.ts +8 -14
  491. package/src/runtime/locations/lifecycle.ts +16 -45
  492. package/src/runtime/locations/location-store-failure.ts +4 -0
  493. package/src/runtime/locations/location-store-pages.ts +18 -0
  494. package/src/runtime/locations/location-store-repository.ts +450 -478
  495. package/src/runtime/locations/relocation-blob.ts +17 -6
  496. package/src/runtime/locations/resolvers.ts +90 -58
  497. package/src/runtime/locations/runtime.ts +220 -110
  498. package/src/runtime/locations/spot-location-claims.ts +54 -26
  499. package/src/runtime/messaging/payload-codec.ts +35 -24
  500. package/src/runtime/messaging/submission-result.ts +57 -1
  501. package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
  502. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
  503. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
  504. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
  505. package/src/runtime/spots/index.ts +687 -437
  506. package/src/runtime/spots/spot-activation-registry.ts +42 -71
  507. package/src/runtime/spots/spot-activation-state.ts +4 -16
  508. package/src/runtime/spots/spot-activation.ts +167 -115
  509. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  510. package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
  511. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
  512. package/src/runtime/spots/spot-actor-membership.ts +107 -75
  513. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  514. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  515. package/src/runtime/spots/spot-context.ts +3 -3
  516. package/src/runtime/spots/spot-entry-activation.ts +13 -33
  517. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  518. package/src/runtime/spots/spot-manager-public.ts +29 -21
  519. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  520. package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
  521. package/src/runtime/spots/spot-outbound.ts +47 -68
  522. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  523. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  524. package/src/runtime/spots/spot-route-replies.ts +6 -4
  525. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
  526. package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
  527. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  528. package/src/runtime/spots/spot-runtime-ports.ts +10 -43
  529. package/src/runtime/spots/spot-serial-executor.ts +10 -2
  530. package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
  531. package/src/runtime/spots/spot-timer.ts +3 -2
  532. package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
  533. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
  534. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  535. package/src/runtime/streams/bound-session-service.ts +23 -37
  536. package/src/runtime/streams/index.ts +102 -88
  537. package/src/runtime/streams/managed-stream.ts +29 -10
  538. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  539. package/src/runtime/streams/protocol.ts +34 -88
  540. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  541. package/src/runtime/streams/session-calls.ts +6 -5
  542. package/src/runtime/streams/session-context.ts +54 -10
  543. package/src/runtime/streams/session-requests.ts +2 -1
  544. package/src/runtime/streams/session-serial-executor.ts +2 -2
  545. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  546. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  547. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  548. package/src/runtime/workers/index.ts +13 -12
  549. package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
  550. package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
  551. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  552. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  553. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  554. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  555. package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
  556. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  557. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -66,17 +66,15 @@ export class ZLinkSpotSerialTurn {
66
66
  readonly yieldAllowed: boolean
67
67
  ) {}
68
68
 
69
- bindExecutionClaim(claim: ZLinkExecutionBarrierClaim | undefined): void {
70
- if (this.executionClaim !== undefined) {
71
- throw new Error('ZLink Spot serial turn already owns an execution claim.');
72
- }
73
- this.executionClaim = claim;
74
- }
75
-
76
69
  get isSuspended(): boolean {
77
70
  return this.suspendSignaled;
78
71
  }
79
72
 
73
+ /** False when a seal that does not drain yielded turns won before this resume. */
74
+ resumeExecutionClaim(): boolean {
75
+ return this.executionClaim?.resume() ?? true;
76
+ }
77
+
80
78
  releaseBoundExecutionClaim(): void {
81
79
  this.executionClaim?.release();
82
80
  this.executionClaim = undefined;
@@ -96,6 +94,14 @@ export class ZLinkSpotSerialTurn {
96
94
  this.owner = owner;
97
95
  }
98
96
 
97
+ /** Settles when the whole turn ends by any path, including yielded continuations. */
98
+ get completion(): Promise<void> {
99
+ return (this.owner ?? Promise.resolve()).then(
100
+ () => undefined,
101
+ () => undefined
102
+ );
103
+ }
104
+
99
105
  blockFrameworkOperations(): void {
100
106
  this.frameworkOperationsBlocked = true;
101
107
  }
@@ -150,7 +156,7 @@ export class ZLinkSpotSerialTurn {
150
156
  return;
151
157
  }
152
158
  this.suspendSignaled = true;
153
- this.releaseBoundExecutionClaim();
159
+ this.executionClaim?.suspend();
154
160
  this.suspendedResolve?.();
155
161
  }
156
162
 
@@ -235,10 +241,14 @@ export function isCurrentZLinkSpotSerialTurn(executor: ZLinkSpotSerialTurnExecut
235
241
 
236
242
  export interface ZLinkExecutionBarrierSeal {
237
243
  readonly generation: bigint;
244
+ readonly kind: 'close' | 'relocation';
238
245
  }
239
246
 
240
247
  export interface ZLinkExecutionBarrierClaim {
241
248
  release(): void;
249
+ /** The turn yielded; it no longer runs until resume() admits it again. */
250
+ suspend(): void;
251
+ resume(): boolean;
242
252
  }
243
253
 
244
254
  interface ZLinkExecutionBarrierWaiter {
@@ -254,40 +264,47 @@ interface ZLinkExecutionBarrierWaiter {
254
264
  export class ZLinkExecutionBarrier {
255
265
  private generation = 0n;
256
266
  private activeClaims = 0;
267
+ private suspendedClaims = 0;
268
+ /** Claims whose turn has started and yielded at least once, until released. */
269
+ private yieldedTurnClaims = 0;
257
270
  private currentSeal: ZLinkExecutionBarrierSeal | undefined;
258
271
  private readonly admissionWaiters: ZLinkExecutionBarrierWaiter[] = [];
259
272
  private readonly quiescenceWaiters = new Set<() => void>();
260
- private committed = false;
273
+ private committedSeal?: ZLinkExecutionBarrierSeal;
274
+
275
+ get isSealed(): boolean {
276
+ return this.currentSeal !== undefined || this.committedSeal !== undefined;
277
+ }
278
+
279
+ get isCloseSealed(): boolean {
280
+ return (this.currentSeal ?? this.committedSeal)?.kind === 'close';
281
+ }
261
282
 
262
- async enter(): Promise<ZLinkExecutionBarrierClaim> {
263
- if (this.committed) {
283
+ enter(): ZLinkExecutionBarrierClaim | Promise<ZLinkExecutionBarrierClaim> {
284
+ if (this.committedSeal !== undefined) {
264
285
  throw createInternalFrameworkException(
265
- ZLinkFrameworkInternalErrorKind.SpotMoving,
286
+ this.committedSeal.kind === 'close'
287
+ ? ZLinkFrameworkInternalErrorKind.RequestRejected
288
+ : ZLinkFrameworkInternalErrorKind.SpotMoving,
266
289
  'ZLink execution barrier is committed.'
267
290
  );
268
291
  }
269
292
  if (this.currentSeal !== undefined) {
270
- return await new Promise<ZLinkExecutionBarrierClaim>((resolve, reject) => {
293
+ if (this.currentSeal.kind === 'close') {
294
+ throw createInternalFrameworkException(
295
+ ZLinkFrameworkInternalErrorKind.RequestRejected,
296
+ 'ZLink execution barrier is sealed for Close.'
297
+ );
298
+ }
299
+ return new Promise<ZLinkExecutionBarrierClaim>((resolve, reject) => {
271
300
  this.admissionWaiters.push({ resolve, reject });
272
301
  });
273
302
  }
274
303
  return this.createClaim();
275
304
  }
276
305
 
277
- /**
278
- * Re-enters a previously yielded application turn only while admission is
279
- * open. A continuation must fail instead of waiting behind a relocation
280
- * seal that already won the turn-boundary race.
281
- */
282
- tryEnter(): ZLinkExecutionBarrierClaim | undefined {
283
- if (this.committed || this.currentSeal !== undefined) {
284
- return undefined;
285
- }
286
- return this.createClaim();
287
- }
288
-
289
- seal(): ZLinkExecutionBarrierSeal {
290
- if (this.committed) {
306
+ seal(kind: ZLinkExecutionBarrierSeal['kind'] = 'relocation'): ZLinkExecutionBarrierSeal {
307
+ if (this.committedSeal !== undefined) {
291
308
  throw createInternalFrameworkException(
292
309
  ZLinkFrameworkInternalErrorKind.SpotMoving,
293
310
  'ZLink execution barrier is committed.'
@@ -296,17 +313,19 @@ export class ZLinkExecutionBarrier {
296
313
  if (this.currentSeal !== undefined) {
297
314
  throw new Error('ZLink execution barrier is already sealed.');
298
315
  }
299
- const seal = Object.freeze({ generation: ++this.generation });
316
+ const seal = Object.freeze({ generation: ++this.generation, kind });
300
317
  this.currentSeal = seal;
301
318
  return seal;
302
319
  }
303
320
 
304
321
  async waitForQuiescence(seal: ZLinkExecutionBarrierSeal, signal?: AbortSignal): Promise<void> {
305
322
  this.requireCurrent(seal);
306
- if (this.activeClaims === 0) return;
323
+ if (this.isQuiescent(seal)) return;
307
324
  if (signal?.aborted === true) throw signal.reason;
308
325
  await new Promise<void>((resolve, reject) => {
309
326
  const complete = () => {
327
+ if (!this.isQuiescent(seal)) return;
328
+ this.quiescenceWaiters.delete(complete);
310
329
  signal?.removeEventListener('abort', abort);
311
330
  resolve();
312
331
  };
@@ -320,6 +339,29 @@ export class ZLinkExecutionBarrier {
320
339
  this.requireCurrent(seal);
321
340
  }
322
341
 
342
+ /**
343
+ * Spot messaging §7 step 1: a Close that keeps admission open still lets every
344
+ * already-started (yielded) turn finish in its generation before cleanup.
345
+ */
346
+ async waitForStartedTurns(signal?: AbortSignal): Promise<void> {
347
+ if (this.yieldedTurnClaims === 0) return;
348
+ if (signal?.aborted === true) throw signal.reason;
349
+ await new Promise<void>((resolve, reject) => {
350
+ const complete = () => {
351
+ if (this.yieldedTurnClaims !== 0) return;
352
+ this.quiescenceWaiters.delete(complete);
353
+ signal?.removeEventListener('abort', abort);
354
+ resolve();
355
+ };
356
+ const abort = () => {
357
+ this.quiescenceWaiters.delete(complete);
358
+ reject(signal?.reason);
359
+ };
360
+ this.quiescenceWaiters.add(complete);
361
+ signal?.addEventListener('abort', abort, { once: true });
362
+ });
363
+ }
364
+
323
365
  abort(seal: ZLinkExecutionBarrierSeal): boolean {
324
366
  if (!this.isCurrent(seal)) return false;
325
367
  this.currentSeal = undefined;
@@ -331,9 +373,11 @@ export class ZLinkExecutionBarrier {
331
373
  commit(seal: ZLinkExecutionBarrierSeal): boolean {
332
374
  if (!this.isCurrent(seal)) return false;
333
375
  this.currentSeal = undefined;
334
- this.committed = true;
376
+ this.committedSeal = seal;
335
377
  const error = createInternalFrameworkException(
336
- ZLinkFrameworkInternalErrorKind.SpotMoving,
378
+ seal.kind === 'close'
379
+ ? ZLinkFrameworkInternalErrorKind.RequestRejected
380
+ : ZLinkFrameworkInternalErrorKind.SpotMoving,
337
381
  'ZLink execution barrier is committed.'
338
382
  );
339
383
  for (const waiter of this.admissionWaiters) waiter.reject(error);
@@ -345,18 +389,52 @@ export class ZLinkExecutionBarrier {
345
389
  return this.currentSeal?.generation === seal.generation;
346
390
  }
347
391
 
392
+ private isQuiescent(seal: ZLinkExecutionBarrierSeal): boolean {
393
+ return this.activeClaims === 0 && (seal.kind !== 'close' || this.suspendedClaims === 0);
394
+ }
395
+
396
+ private notifyQuiescence(): void {
397
+ for (const waiter of [...this.quiescenceWaiters]) waiter();
398
+ }
399
+
348
400
  private createClaim(): ZLinkExecutionBarrierClaim {
349
401
  this.activeClaims++;
350
- let released = false;
402
+ let state: 'active' | 'suspended' | 'released' = 'active';
403
+ let yielded = false;
404
+ const release = () => {
405
+ if (state === 'released') return;
406
+ if (state === 'active') this.activeClaims--;
407
+ else this.suspendedClaims--;
408
+ if (yielded) this.yieldedTurnClaims--;
409
+ state = 'released';
410
+ this.notifyQuiescence();
411
+ };
351
412
  return {
352
- release: () => {
353
- if (released) return;
354
- released = true;
413
+ release,
414
+ suspend: () => {
415
+ if (state !== 'active') return;
416
+ state = 'suspended';
417
+ if (!yielded) {
418
+ yielded = true;
419
+ this.yieldedTurnClaims++;
420
+ }
355
421
  this.activeClaims--;
356
- if (this.activeClaims === 0) {
357
- for (const waiter of this.quiescenceWaiters) waiter();
358
- this.quiescenceWaiters.clear();
422
+ this.suspendedClaims++;
423
+ this.notifyQuiescence();
424
+ },
425
+ resume: () => {
426
+ if (state !== 'suspended') return state === 'active';
427
+ if (
428
+ this.committedSeal !== undefined ||
429
+ (this.currentSeal !== undefined && this.currentSeal.kind !== 'close')
430
+ ) {
431
+ release();
432
+ return false;
359
433
  }
434
+ state = 'active';
435
+ this.suspendedClaims--;
436
+ this.activeClaims++;
437
+ return true;
360
438
  }
361
439
  };
362
440
  }
@@ -1,3 +1,11 @@
1
+ import { macrotaskBoundary } from '../abort';
2
+ import {
3
+ diagnosticWorkName,
4
+ guardStateLaneCompletion,
5
+ isStructuralGuardEnabled,
6
+ trackDiagnosticCompletion
7
+ } from './state-lane';
8
+
1
9
  export type ZLinkSerialWorkLane = 'application' | 'lifecycle';
2
10
 
3
11
  export interface ZLinkSerialWorkOptions {
@@ -21,7 +29,7 @@ export const ZLINK_DEFAULT_SERIAL_SCHEDULER_OPTIONS: Required<ZLinkSerialSchedul
21
29
  export interface ZLinkSerialWorkRecord<T> {
22
30
  readonly acceptedSequence: bigint;
23
31
  readonly lane: ZLinkSerialWorkLane;
24
- readonly operation: () => Promise<T> | T;
32
+ operation: () => Promise<T> | T;
25
33
  readonly context?: unknown;
26
34
  resolve(value: T): void;
27
35
  reject(reason: unknown): void;
@@ -30,6 +38,11 @@ export interface ZLinkSerialWorkRecord<T> {
30
38
  fail(reason: unknown): void;
31
39
  }
32
40
 
41
+ /** The active lifecycle owner decides which existing application records can run. */
42
+ export interface ZLinkSerialLifecycleContext {
43
+ canExecuteApplication(record: ZLinkSerialWorkRecord<unknown>): boolean;
44
+ }
45
+
33
46
  /** Readiness work that must complete without claiming the serial owner. */
34
47
  export interface ZLinkSerialWorkPreparation {
35
48
  prepare(signal: AbortSignal): Promise<void>;
@@ -38,6 +51,7 @@ export interface ZLinkSerialWorkPreparation {
38
51
 
39
52
  type SerialWorkRecord<T> = Omit<ZLinkSerialWorkRecord<T>, 'acceptedSequence'> & {
40
53
  acceptedSequence: bigint;
54
+ readonly operationEnvelope: boolean;
41
55
  readonly preparation?: ZLinkSerialWorkPreparation;
42
56
  preparationState: 'idle' | 'pending' | 'canceling' | 'ready' | 'failed';
43
57
  preparationController?: AbortController;
@@ -55,6 +69,7 @@ interface ZLinkSerialAdmissionLane {
55
69
  export class ZLinkSerialExecutionQueue {
56
70
  private readonly application: ZLinkSerialAdmissionLane;
57
71
  private readonly lifecycle: ZLinkSerialAdmissionLane;
72
+ private activeLifecycle?: ZLinkSerialWorkRecord<unknown>;
58
73
  private readonly ownerTimeBudget: number;
59
74
  private readonly lifecycleBurstLimit: number;
60
75
  private nextAcceptedSequence = 1n;
@@ -138,23 +153,24 @@ export class ZLinkSerialExecutionQueue {
138
153
  return this.admit(operation, options, context);
139
154
  }
140
155
 
141
- snapshot(): {
142
- readonly applicationMessages: number;
143
- readonly applicationBytes: number;
144
- readonly lifecycleMessages: number;
145
- readonly lifecycleBytes: number;
146
- } {
147
- return {
148
- applicationMessages: this.application.records.length,
149
- applicationBytes: 0,
150
- lifecycleMessages: this.lifecycle.records.length,
151
- lifecycleBytes: 0
152
- };
156
+ /** Holds lifecycle FIFO through an operation result while its application turns can run. */
157
+ submitLifecycleOperation<T>(
158
+ operation: () => Promise<T> | T,
159
+ context?: ZLinkSerialLifecycleContext
160
+ ): Promise<T> {
161
+ return this.admit(operation, { lane: 'lifecycle' }, context, undefined, true);
162
+ }
163
+
164
+ visitPendingApplication(visitor: (record: ZLinkSerialWorkRecord<unknown>) => void): void {
165
+ for (const record of this.application.records) visitor(record);
153
166
  }
154
167
 
155
168
  get hasPendingWork(): boolean {
156
169
  return (
157
- this.draining || this.application.records.length > 0 || this.lifecycle.records.length > 0
170
+ this.draining ||
171
+ this.activeLifecycle !== undefined ||
172
+ this.application.records.length > 0 ||
173
+ this.lifecycle.records.length > 0
158
174
  );
159
175
  }
160
176
 
@@ -165,15 +181,25 @@ export class ZLinkSerialExecutionQueue {
165
181
 
166
182
  /** Stops new submissions while allowing the accepted FIFO to finish. */
167
183
  close(): Promise<void> {
168
- this.closed = true;
184
+ this.closeAdmission();
169
185
  return this.whenIdle();
170
186
  }
171
187
 
188
+ /** Stops admission within the lifecycle operation that owns this queue's close. */
189
+ closeAdmission(): void {
190
+ this.closed = true;
191
+ }
192
+
193
+ get admissionClosed(): boolean {
194
+ return this.closed;
195
+ }
196
+
172
197
  private admit<T>(
173
198
  operation: () => Promise<T> | T,
174
199
  options: ZLinkSerialWorkOptions,
175
200
  context?: unknown,
176
- preparation?: ZLinkSerialWorkPreparation
201
+ preparation?: ZLinkSerialWorkPreparation,
202
+ operationEnvelope = false
177
203
  ): Promise<T> {
178
204
  if (this.closed) throw new Error('The serial execution queue is closed.');
179
205
  const lane = options.lane ?? 'application';
@@ -189,6 +215,14 @@ export class ZLinkSerialExecutionQueue {
189
215
  const release = (): void => {
190
216
  if (released) return;
191
217
  released = true;
218
+ if (this.activeLifecycle === record) {
219
+ this.activeLifecycle = undefined;
220
+ if (this.application.records.length > 0 || this.lifecycle.records.length > 0) {
221
+ this.scheduleDrain();
222
+ } else if (!this.draining) {
223
+ this.resolveIdleWaiters();
224
+ }
225
+ }
192
226
  };
193
227
  const resolve = (value: T): void => {
194
228
  if (settled) return;
@@ -204,6 +238,7 @@ export class ZLinkSerialExecutionQueue {
204
238
  acceptedSequence: 0n,
205
239
  lane,
206
240
  operation,
241
+ operationEnvelope,
207
242
  context,
208
243
  preparation,
209
244
  preparationState: preparation === undefined ? 'ready' : 'idle',
@@ -275,7 +310,25 @@ export class ZLinkSerialExecutionQueue {
275
310
  }
276
311
  this.claimStartedAt ??= performance.now();
277
312
  try {
278
- await this.executeRecord(record);
313
+ if (record.operationEnvelope) {
314
+ try {
315
+ const outcome = record.operation();
316
+ void Promise.resolve(outcome).then(
317
+ (value) => {
318
+ record.resolve(value);
319
+ record.release();
320
+ },
321
+ (error) => {
322
+ record.reject(error);
323
+ record.release();
324
+ }
325
+ );
326
+ } catch (error) {
327
+ record.fail(error);
328
+ }
329
+ } else {
330
+ await this.executeRecord(record);
331
+ }
279
332
  } catch (error) {
280
333
  record.fail(error);
281
334
  } finally {
@@ -289,13 +342,10 @@ export class ZLinkSerialExecutionQueue {
289
342
  } finally {
290
343
  this.draining = false;
291
344
  this.claimStartedAt = undefined;
292
- if (
293
- !waitingForPreparation &&
294
- (this.application.records.length > 0 || this.lifecycle.records.length > 0)
295
- ) {
345
+ if (!waitingForPreparation && this.selectNext() !== undefined) {
296
346
  this.scheduleDrain();
297
347
  } else {
298
- if (this.application.records.length === 0 && this.lifecycle.records.length === 0) {
348
+ if (!this.hasPendingWork) {
299
349
  this.resolveIdleWaiters();
300
350
  }
301
351
  }
@@ -308,26 +358,34 @@ export class ZLinkSerialExecutionQueue {
308
358
  readonly record: SerialWorkRecord<unknown>;
309
359
  }
310
360
  | undefined {
311
- const applicationReady = this.application.records.length > 0;
312
- const lifecycleReady = this.lifecycle.records.length > 0;
361
+ const lifecycleOwner = this.activeLifecycle?.context as ZLinkSerialLifecycleContext | undefined;
362
+ const applicationRecord =
363
+ lifecycleOwner === undefined
364
+ ? this.application.records[0]
365
+ : this.application.records.find((record) => lifecycleOwner.canExecuteApplication(record));
366
+ const applicationReady = applicationRecord !== undefined;
367
+ const lifecycleReady = this.activeLifecycle === undefined && this.lifecycle.records.length > 0;
313
368
  if (!applicationReady && !lifecycleReady) return undefined;
314
369
  if (!applicationReady) {
315
370
  return { lane: 'lifecycle', record: this.lifecycle.records[0]! };
316
371
  }
317
372
  if (!lifecycleReady) {
318
- return { lane: 'application', record: this.application.records[0]! };
373
+ return { lane: 'application', record: applicationRecord! };
319
374
  }
320
375
  if (!this.lifecycleDebt && this.lifecycleStreak < this.lifecycleBurstLimit) {
321
376
  return { lane: 'lifecycle', record: this.lifecycle.records[0]! };
322
377
  }
323
- return { lane: 'application', record: this.application.records[0]! };
378
+ return { lane: 'application', record: applicationRecord! };
324
379
  }
325
380
 
326
381
  private takeSelected(selection: {
327
382
  readonly lane: ZLinkSerialWorkLane;
328
383
  readonly record: SerialWorkRecord<unknown>;
329
384
  }): ZLinkSerialWorkRecord<unknown> {
330
- const record = selection.lane === 'lifecycle' ? this.takeLifecycle() : this.takeApplication();
385
+ const record =
386
+ selection.lane === 'lifecycle'
387
+ ? this.takeLifecycle()
388
+ : this.takeApplication(selection.record);
331
389
  if (record !== selection.record) {
332
390
  throw new Error('The selected serial work record changed before owner claim.');
333
391
  }
@@ -339,13 +397,17 @@ export class ZLinkSerialExecutionQueue {
339
397
  if (this.application.records.length > 0 && this.lifecycleStreak >= this.lifecycleBurstLimit) {
340
398
  this.lifecycleDebt = true;
341
399
  }
342
- return this.lifecycle.records.shift()!;
400
+ const record = this.lifecycle.records.shift()!;
401
+ this.activeLifecycle = record;
402
+ return record;
343
403
  }
344
404
 
345
- private takeApplication(): ZLinkSerialWorkRecord<unknown> {
405
+ private takeApplication(selected: SerialWorkRecord<unknown>): ZLinkSerialWorkRecord<unknown> {
346
406
  this.lifecycleStreak = 0;
347
407
  this.lifecycleDebt = false;
348
- return this.application.records.shift()!;
408
+ if (this.application.records[0] === selected) return this.application.records.shift()!;
409
+ const index = this.application.records.indexOf(selected);
410
+ return this.application.records.splice(index, 1)[0]!;
349
411
  }
350
412
 
351
413
  private startPreparation(record: SerialWorkRecord<unknown>): void {
@@ -410,6 +472,93 @@ export class ZLinkSerialExecutionQueue {
410
472
  }
411
473
  }
412
474
 
475
+ if (isStructuralGuardEnabled()) {
476
+ const submit = ZLinkSerialExecutionQueue.prototype.submit;
477
+ ZLinkSerialExecutionQueue.prototype.submit = function <T>(
478
+ this: ZLinkSerialExecutionQueue,
479
+ operation: () => Promise<T> | T,
480
+ options: ZLinkSerialWorkOptions = {},
481
+ context?: unknown
482
+ ): Promise<T> {
483
+ return guardStateLaneCompletion(
484
+ trackDiagnosticCompletion(
485
+ submit.call(this, operation, options, context) as Promise<T>,
486
+ `serial ${options.lane ?? 'application'} ${diagnosticWorkName(operation)}`
487
+ ),
488
+ 'serial completion'
489
+ );
490
+ };
491
+
492
+ const submitPreAdmitted = ZLinkSerialExecutionQueue.prototype.submitPreAdmitted;
493
+ ZLinkSerialExecutionQueue.prototype.submitPreAdmitted = function <T>(
494
+ this: ZLinkSerialExecutionQueue,
495
+ operation: () => Promise<T> | T,
496
+ options: ZLinkSerialWorkOptions = {},
497
+ context?: unknown
498
+ ): Promise<T> {
499
+ return guardStateLaneCompletion(
500
+ trackDiagnosticCompletion(
501
+ submitPreAdmitted.call(this, operation, options, context) as Promise<T>,
502
+ `serial ${options.lane ?? 'application'} ${diagnosticWorkName(operation)}`
503
+ ),
504
+ 'serial completion'
505
+ );
506
+ };
507
+
508
+ const submitContinuation = ZLinkSerialExecutionQueue.prototype.submitContinuation;
509
+ ZLinkSerialExecutionQueue.prototype.submitContinuation = function <T>(
510
+ this: ZLinkSerialExecutionQueue,
511
+ operation: () => Promise<T> | T,
512
+ context?: unknown
513
+ ): Promise<T> {
514
+ return guardStateLaneCompletion(
515
+ trackDiagnosticCompletion(
516
+ submitContinuation.call(this, operation, context) as Promise<T>,
517
+ `serial continuation ${diagnosticWorkName(operation)}`
518
+ ),
519
+ 'serial completion'
520
+ );
521
+ };
522
+
523
+ const admitDurablePrefix = ZLinkSerialExecutionQueue.prototype.admitDurablePrefix;
524
+ ZLinkSerialExecutionQueue.prototype.admitDurablePrefix = function <T>(
525
+ this: ZLinkSerialExecutionQueue,
526
+ operation: () => Promise<T> | T,
527
+ options: ZLinkSerialWorkOptions = {},
528
+ context?: unknown,
529
+ preparation?: ZLinkSerialWorkPreparation
530
+ ): Promise<T> {
531
+ return guardStateLaneCompletion(
532
+ trackDiagnosticCompletion(
533
+ admitDurablePrefix.call(this, operation, options, context, preparation) as Promise<T>,
534
+ `serial durable ${diagnosticWorkName(operation)}`
535
+ ),
536
+ 'serial completion'
537
+ );
538
+ };
539
+
540
+ const submitLifecycleOperation = ZLinkSerialExecutionQueue.prototype.submitLifecycleOperation;
541
+ ZLinkSerialExecutionQueue.prototype.submitLifecycleOperation = function <T>(
542
+ this: ZLinkSerialExecutionQueue,
543
+ operation: () => Promise<T> | T
544
+ ): Promise<T> {
545
+ return guardStateLaneCompletion(
546
+ trackDiagnosticCompletion(
547
+ submitLifecycleOperation.call(this, operation) as Promise<T>,
548
+ `serial lifecycle ${diagnosticWorkName(operation)}`
549
+ ),
550
+ 'serial completion'
551
+ );
552
+ };
553
+
554
+ const whenIdle = ZLinkSerialExecutionQueue.prototype.whenIdle;
555
+ ZLinkSerialExecutionQueue.prototype.whenIdle = function (
556
+ this: ZLinkSerialExecutionQueue
557
+ ): Promise<void> {
558
+ return guardStateLaneCompletion(whenIdle.call(this), 'serial completion');
559
+ };
560
+ }
561
+
413
562
  function createLane(): ZLinkSerialAdmissionLane {
414
563
  return {
415
564
  records: []
@@ -427,7 +576,3 @@ function validateNonNegative(value: number, field: string): void {
427
576
  throw new RangeError(`${field} must be a non-negative safe integer.`);
428
577
  }
429
578
  }
430
-
431
- function macrotaskBoundary(): Promise<void> {
432
- return new Promise((resolve) => setImmediate(resolve));
433
- }