@zlink-systems/framework 0.26.0 → 0.28.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 (561) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActorClient.d.ts +1 -1
  3. package/dist/contracts/Channels/Calls.d.ts +1 -1
  4. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  5. package/dist/contracts/Common/CoreTypes.js +7 -0
  6. package/dist/contracts/Common/index.d.ts +1 -1
  7. package/dist/contracts/Common/index.js +0 -1
  8. package/dist/contracts/Configuration/Builders.d.ts +0 -1
  9. package/dist/contracts/Configuration/Configs.d.ts +0 -1
  10. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  11. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  12. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  13. package/dist/contracts/Configuration/Registration.js +58 -36
  14. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  15. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  16. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  17. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  18. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -5
  19. package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
  20. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  21. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  22. package/dist/contracts/Handlers/JsonContract.js +10 -4
  23. package/dist/contracts/Locations/Authority.d.ts +1 -1
  24. package/dist/contracts/Locations/Authority.js +3 -2
  25. package/dist/contracts/Locations/Options.js +1 -1
  26. package/dist/contracts/Locations/Stores.d.ts +12 -0
  27. package/dist/contracts/Locations/Stores.js +9 -0
  28. package/dist/contracts/Spots/Contracts.d.ts +2 -2
  29. package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
  30. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
  31. package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
  32. package/dist/internal.d.ts +4 -0
  33. package/dist/internal.js +15 -1
  34. package/dist/nest-integration.d.ts +4 -2
  35. package/dist/nest-integration.js +14 -4
  36. package/dist/runtime/abort.d.ts +1 -0
  37. package/dist/runtime/abort.js +8 -5
  38. package/dist/runtime/activation-admission.d.ts +1 -2
  39. package/dist/runtime/activation-admission.js +2 -6
  40. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  41. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  42. package/dist/runtime/actors/actor-client.d.ts +2 -2
  43. package/dist/runtime/actors/actor-client.js +49 -153
  44. package/dist/runtime/actors/actor-context.d.ts +3 -5
  45. package/dist/runtime/actors/actor-context.js +13 -11
  46. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  47. package/dist/runtime/actors/actor-handoff.js +8 -8
  48. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  49. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  50. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  51. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  52. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  53. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  54. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  55. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  56. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  57. package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
  58. package/dist/runtime/actors/actor-request-deadline.js +6 -0
  59. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  60. package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
  61. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  62. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  63. package/dist/runtime/actors/bound-session-wire.js +2 -7
  64. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  65. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  66. package/dist/runtime/actors/index.d.ts +9 -7
  67. package/dist/runtime/actors/index.js +87 -69
  68. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  69. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  70. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  71. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  72. package/dist/runtime/admission.d.ts +2 -0
  73. package/dist/runtime/admission.js +7 -1
  74. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  75. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  76. package/dist/runtime/backend/contracts/index.d.ts +7 -27
  77. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  78. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  79. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  80. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
  81. package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
  82. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  83. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
  84. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  85. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  86. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  87. package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
  88. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  89. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  90. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  91. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  92. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  93. package/dist/runtime/backend/runtime-values.js +2 -0
  94. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  95. package/dist/runtime/channels/channel-clients.js +73 -59
  96. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  97. package/dist/runtime/channels/channel-envelope.d.ts +1 -1
  98. package/dist/runtime/channels/channel-envelope.js +51 -39
  99. package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
  100. package/dist/runtime/channels/channel-outbound-operations.js +25 -42
  101. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  102. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  103. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  104. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  105. package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
  106. package/dist/runtime/channels/channel-runtime-manager.js +13 -10
  107. package/dist/runtime/channels/channel-socket-options.js +3 -12
  108. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  109. package/dist/runtime/channels/channel-socket-registry.js +240 -177
  110. package/dist/runtime/channels/channel-transports.d.ts +21 -31
  111. package/dist/runtime/channels/channel-transports.js +80 -62
  112. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  113. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  114. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  115. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  116. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  117. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  118. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  119. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  120. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  121. package/dist/runtime/channels/local-spot-route-transport.js +1 -3
  122. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
  123. package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
  124. package/dist/runtime/channels/source-spot-router.d.ts +1 -1
  125. package/dist/runtime/channels/source-spot-router.js +2 -4
  126. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  127. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  128. package/dist/runtime/channels/spot-node-route-transport.d.ts +1 -1
  129. package/dist/runtime/channels/spot-node-route-transport.js +5 -5
  130. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
  131. package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
  132. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
  133. package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
  134. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  135. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  136. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  137. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  138. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  139. package/dist/runtime/diagnostics/flow-context.js +16 -2
  140. package/dist/runtime/diagnostics/index.d.ts +4 -2
  141. package/dist/runtime/diagnostics/index.js +14 -4
  142. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  143. package/dist/runtime/diagnostics/message-flow.js +10 -19
  144. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  145. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  146. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  147. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  148. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  149. package/dist/runtime/disposal.d.ts +5 -0
  150. package/dist/runtime/disposal.js +22 -0
  151. package/dist/runtime/execution/index.d.ts +12 -9
  152. package/dist/runtime/execution/index.js +58 -14
  153. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  154. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  155. package/dist/runtime/execution/state-lane.d.ts +8 -1
  156. package/dist/runtime/execution/state-lane.js +118 -3
  157. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  158. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  159. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  160. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  161. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  162. package/dist/runtime/foundation/operation-identity.js +9 -5
  163. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  164. package/dist/runtime/foundation/operation-registry.js +34 -44
  165. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  166. package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
  167. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  168. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  169. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  170. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  171. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  172. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  173. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  174. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  175. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  176. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  177. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  178. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  179. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  180. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  181. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  182. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  183. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  184. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  185. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  186. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  187. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  188. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  189. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  190. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  191. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  192. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  193. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  194. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  195. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  196. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  197. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  198. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  199. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  200. package/dist/runtime/framework-errors-internal.js +343 -122
  201. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  202. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  203. package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
  204. package/dist/runtime/host/actor-packet-relay.js +54 -99
  205. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  206. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  207. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  208. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  209. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  210. package/dist/runtime/host/application-job-queue.js +16 -33
  211. package/dist/runtime/host/bound-session-relay.js +1 -1
  212. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  213. package/dist/runtime/host/index.d.ts +14 -13
  214. package/dist/runtime/host/index.js +190 -171
  215. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  216. package/dist/runtime/host/instance-activation-authority.js +17 -45
  217. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  218. package/dist/runtime/host/location-runtime-owner.js +2 -2
  219. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  220. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  221. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  222. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  223. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  224. package/dist/runtime/host/remote-bound-session-relay.js +15 -28
  225. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  226. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  227. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  228. package/dist/runtime/host/runtime-shutdown.js +18 -21
  229. package/dist/runtime/host/service-relocation-control.js +6 -1
  230. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  231. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  232. package/dist/runtime/host/spot-address-transport.d.ts +3 -12
  233. package/dist/runtime/host/spot-address-transport.js +78 -220
  234. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  235. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  236. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  237. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  238. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  239. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  240. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  241. package/dist/runtime/locations/authority-key-codec.js +4 -3
  242. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  243. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  244. package/dist/runtime/locations/creation-operation-id.js +6 -4
  245. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  246. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  247. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  248. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  249. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  250. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  251. package/dist/runtime/locations/key-codec.js +3 -2
  252. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  253. package/dist/runtime/locations/lease-tracker.js +7 -11
  254. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  255. package/dist/runtime/locations/lifecycle.js +2 -31
  256. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  257. package/dist/runtime/locations/location-store-failure.js +7 -0
  258. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  259. package/dist/runtime/locations/location-store-pages.js +13 -0
  260. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  261. package/dist/runtime/locations/location-store-repository.js +309 -336
  262. package/dist/runtime/locations/relocation-blob.js +18 -5
  263. package/dist/runtime/locations/resolvers.d.ts +5 -5
  264. package/dist/runtime/locations/resolvers.js +37 -28
  265. package/dist/runtime/locations/runtime.d.ts +5 -4
  266. package/dist/runtime/locations/runtime.js +123 -92
  267. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  268. package/dist/runtime/locations/spot-location-claims.js +42 -1
  269. package/dist/runtime/messaging/payload-codec.js +26 -20
  270. package/dist/runtime/messaging/request-deadline.d.ts +3 -0
  271. package/dist/runtime/messaging/request-deadline.js +39 -0
  272. package/dist/runtime/messaging/submission-result.d.ts +4 -0
  273. package/dist/runtime/messaging/submission-result.js +56 -1
  274. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  275. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  276. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  277. package/dist/runtime/spots/index.d.ts +14 -20
  278. package/dist/runtime/spots/index.js +302 -176
  279. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  280. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  281. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  282. package/dist/runtime/spots/spot-activation-state.js +2 -2
  283. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  284. package/dist/runtime/spots/spot-activation.js +49 -32
  285. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  286. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  287. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  288. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  289. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  290. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  291. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  292. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  293. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  294. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  295. package/dist/runtime/spots/spot-context.d.ts +2 -2
  296. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  297. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  298. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  299. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  300. package/dist/runtime/spots/spot-manager-public.js +5 -4
  301. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  302. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  303. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  304. package/dist/runtime/spots/spot-outbound.d.ts +7 -8
  305. package/dist/runtime/spots/spot-outbound.js +21 -23
  306. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  307. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  308. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  309. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  310. package/dist/runtime/spots/spot-route-replies.js +3 -1
  311. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  312. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  313. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  314. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  315. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  316. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  317. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  318. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  319. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  320. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  321. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  322. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  323. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  324. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  325. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
  326. package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
  327. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  328. package/dist/runtime/streams/bound-session-service.js +12 -2
  329. package/dist/runtime/streams/index.d.ts +16 -17
  330. package/dist/runtime/streams/index.js +22 -23
  331. package/dist/runtime/streams/managed-stream.d.ts +5 -2
  332. package/dist/runtime/streams/managed-stream.js +20 -13
  333. package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
  334. package/dist/runtime/streams/protocol.d.ts +6 -33
  335. package/dist/runtime/streams/protocol.js +38 -110
  336. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  337. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  338. package/dist/runtime/streams/session-calls.d.ts +6 -8
  339. package/dist/runtime/streams/session-calls.js +6 -22
  340. package/dist/runtime/streams/session-context.d.ts +10 -10
  341. package/dist/runtime/streams/session-context.js +25 -10
  342. package/dist/runtime/streams/session-requests.js +2 -1
  343. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  344. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  345. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  346. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  347. package/dist/runtime/workers/index.d.ts +2 -2
  348. package/dist/runtime/workers/index.js +5 -4
  349. package/package.json +3 -3
  350. package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
  351. package/src/contracts/Channels/Calls.ts +1 -1
  352. package/src/contracts/Common/CoreTypes.ts +7 -0
  353. package/src/contracts/Common/index.ts +1 -1
  354. package/src/contracts/Configuration/Builders.ts +0 -1
  355. package/src/contracts/Configuration/Configs.ts +0 -1
  356. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  357. package/src/contracts/Configuration/Registration.ts +92 -48
  358. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  359. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -71
  360. package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
  361. package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
  362. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  363. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  364. package/src/contracts/Handlers/JsonContract.ts +14 -4
  365. package/src/contracts/Locations/Authority.ts +7 -3
  366. package/src/contracts/Locations/Options.ts +1 -1
  367. package/src/contracts/Locations/Stores.ts +14 -0
  368. package/src/contracts/Spots/Contracts.ts +2 -2
  369. package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
  370. package/src/contracts/Streams/IZLinkSession.ts +2 -3
  371. package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
  372. package/src/internal.ts +14 -0
  373. package/src/nest-integration.ts +28 -10
  374. package/src/runtime/abort.ts +6 -5
  375. package/src/runtime/activation-admission.ts +2 -8
  376. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  377. package/src/runtime/actors/actor-client.ts +85 -218
  378. package/src/runtime/actors/actor-context.ts +39 -33
  379. package/src/runtime/actors/actor-handoff.ts +24 -22
  380. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  381. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  382. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  383. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  384. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  385. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  386. package/src/runtime/actors/actor-request-deadline.ts +4 -0
  387. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  388. package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
  389. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  390. package/src/runtime/actors/bound-session-wire.ts +2 -8
  391. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  392. package/src/runtime/actors/index.ts +100 -79
  393. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  394. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  395. package/src/runtime/admission.ts +8 -1
  396. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  397. package/src/runtime/backend/contracts/index.ts +14 -37
  398. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  399. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  400. package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
  401. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
  402. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  403. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  404. package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
  405. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  406. package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
  407. package/src/runtime/backend/raw-binding-port.ts +1 -1
  408. package/src/runtime/backend/runtime-values.ts +4 -1
  409. package/src/runtime/channels/channel-clients.ts +139 -102
  410. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  411. package/src/runtime/channels/channel-envelope.ts +74 -57
  412. package/src/runtime/channels/channel-outbound-operations.ts +40 -55
  413. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  414. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  415. package/src/runtime/channels/channel-runtime-manager.ts +12 -30
  416. package/src/runtime/channels/channel-socket-options.ts +8 -15
  417. package/src/runtime/channels/channel-socket-registry.ts +291 -196
  418. package/src/runtime/channels/channel-transports.ts +168 -145
  419. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  420. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  421. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  422. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  423. package/src/runtime/channels/local-spot-route-transport.ts +1 -5
  424. package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
  425. package/src/runtime/channels/source-spot-router.ts +2 -9
  426. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  427. package/src/runtime/channels/spot-node-route-transport.ts +7 -9
  428. package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
  429. package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
  430. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  431. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  432. package/src/runtime/diagnostics/flow-context.ts +16 -2
  433. package/src/runtime/diagnostics/index.ts +27 -17
  434. package/src/runtime/diagnostics/message-flow.ts +15 -25
  435. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  436. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  437. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  438. package/src/runtime/disposal.ts +19 -0
  439. package/src/runtime/execution/index.ts +60 -20
  440. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  441. package/src/runtime/execution/state-lane.ts +142 -4
  442. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  443. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  444. package/src/runtime/foundation/operation-identity.ts +11 -5
  445. package/src/runtime/foundation/operation-registry.ts +33 -50
  446. package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
  447. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  448. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  449. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  450. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  451. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  452. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  453. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  454. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  455. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  456. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  457. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  458. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  459. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  460. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  461. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  462. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  463. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  464. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  465. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  466. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  467. package/src/runtime/framework-errors-internal.ts +380 -134
  468. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  469. package/src/runtime/host/actor-packet-relay.ts +63 -160
  470. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  471. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  472. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  473. package/src/runtime/host/application-job-queue.ts +28 -34
  474. package/src/runtime/host/bound-session-relay.ts +1 -2
  475. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  476. package/src/runtime/host/index.ts +327 -320
  477. package/src/runtime/host/instance-activation-authority.ts +89 -109
  478. package/src/runtime/host/location-runtime-owner.ts +4 -2
  479. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  480. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  481. package/src/runtime/host/remote-bound-session-relay.ts +16 -57
  482. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  483. package/src/runtime/host/runtime-shutdown.ts +17 -21
  484. package/src/runtime/host/service-relocation-control.ts +14 -1
  485. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  486. package/src/runtime/host/spot-address-transport.ts +175 -356
  487. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  488. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  489. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  490. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  491. package/src/runtime/locations/authority-key-codec.ts +7 -3
  492. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  493. package/src/runtime/locations/creation-operation-id.ts +6 -3
  494. package/src/runtime/locations/domain-store-contract.ts +12 -3
  495. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  496. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  497. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  498. package/src/runtime/locations/key-codec.ts +3 -2
  499. package/src/runtime/locations/lease-tracker.ts +8 -14
  500. package/src/runtime/locations/lifecycle.ts +13 -43
  501. package/src/runtime/locations/location-store-failure.ts +4 -0
  502. package/src/runtime/locations/location-store-pages.ts +18 -0
  503. package/src/runtime/locations/location-store-repository.ts +457 -482
  504. package/src/runtime/locations/relocation-blob.ts +17 -6
  505. package/src/runtime/locations/resolvers.ts +75 -49
  506. package/src/runtime/locations/runtime.ts +220 -110
  507. package/src/runtime/locations/spot-location-claims.ts +58 -1
  508. package/src/runtime/messaging/payload-codec.ts +35 -24
  509. package/src/runtime/messaging/request-deadline.ts +58 -0
  510. package/src/runtime/messaging/submission-result.ts +72 -2
  511. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  512. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  513. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  514. package/src/runtime/spots/index.ts +433 -229
  515. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  516. package/src/runtime/spots/spot-activation-state.ts +2 -2
  517. package/src/runtime/spots/spot-activation.ts +67 -37
  518. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  519. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  520. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  521. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  522. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  523. package/src/runtime/spots/spot-context.ts +3 -3
  524. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  525. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  526. package/src/runtime/spots/spot-manager-public.ts +21 -17
  527. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  528. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  529. package/src/runtime/spots/spot-outbound.ts +59 -47
  530. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  531. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  532. package/src/runtime/spots/spot-route-replies.ts +6 -4
  533. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  534. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  535. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  536. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  537. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  538. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  539. package/src/runtime/spots/spot-timer.ts +3 -2
  540. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  541. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  542. package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
  543. package/src/runtime/streams/bound-session-service.ts +22 -2
  544. package/src/runtime/streams/index.ts +78 -68
  545. package/src/runtime/streams/managed-stream.ts +32 -23
  546. package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
  547. package/src/runtime/streams/protocol.ts +34 -88
  548. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  549. package/src/runtime/streams/session-calls.ts +11 -36
  550. package/src/runtime/streams/session-context.ts +60 -25
  551. package/src/runtime/streams/session-requests.ts +2 -1
  552. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  553. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  554. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  555. package/src/runtime/workers/index.ts +13 -12
  556. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  557. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  558. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  559. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  560. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  561. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,3 +1,4 @@
1
+ import { dispatchReasonFromError } from '../diagnostics/dispatch-error-details';
1
2
  import type {
2
3
  RoutingId,
3
4
  Type,
@@ -7,7 +8,7 @@ import type {
7
8
  } from '../../contracts';
8
9
  import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
9
10
  import type { ZLinkApplicationWorkClaim } from '../admission';
10
- import { ZLinkFrameworkException, zlinkMessageMetadata } from '../../contracts';
11
+ import { zlinkMessageMetadata } from '../../contracts';
11
12
  import {
12
13
  ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
13
14
  ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason,
@@ -18,8 +19,7 @@ import type { ZLinkDispatchErrorReporter } from '../channels';
18
19
  import { ZLinkConfigurationException } from '../configuration';
19
20
  import {
20
21
  ZLinkFrameworkInternalErrorKind,
21
- createInternalFrameworkException,
22
- internalFrameworkErrorKind
22
+ createInternalFrameworkException
23
23
  } from '../framework-errors-internal';
24
24
  import { resolveLifecycleHandler } from '../handlers/handler-instance-scope';
25
25
  import type { ZLinkSpotHandlerRegistration } from './spot-handler-registry';
@@ -31,6 +31,7 @@ import {
31
31
  } from '../application-jobs/application-job-queue-scope';
32
32
 
33
33
  interface ZLinkRoutedSpotPacketActivation {
34
+ readonly objectGeneration?: bigint;
34
35
  readonly meshName?: string;
35
36
  readonly spotId: RoutingId;
36
37
  readonly spot: ZLinkSpot;
@@ -55,6 +56,9 @@ interface ZLinkRoutedSpotPacketContext {
55
56
  readonly signal?: AbortSignal;
56
57
  /** Wait until a recovered activation has actually entered its first handler. */
57
58
  readonly awaitFirstHandlerTurn?: boolean;
59
+ readonly onOneWayError?: (error: unknown) => void;
60
+ /** Retains the caller's Instance address intent through an incarnation boundary. */
61
+ readonly activationRecord?: import('../foundation/service-runtime-contracts').ReceiveRecord;
58
62
  }
59
63
 
60
64
  export class ZLinkRoutedSpotPacketDispatch {
@@ -143,14 +147,52 @@ export class ZLinkRoutedSpotPacketDispatch {
143
147
  activation.meshName === undefined
144
148
  ? undefined
145
149
  : this.options.claimApplicationWork?.(activation.meshName);
146
- const runHandler = async () => {
150
+ const originalRecord = context.activationRecord?.activationRecord;
151
+ const instanceIntent =
152
+ originalRecord?.activation === 'missing' ||
153
+ (originalRecord?.activation === 'ready' && originalRecord.instanceIntent);
154
+ const runHandler = async (failure?: unknown) => {
147
155
  try {
156
+ if (failure !== undefined) throw failure;
157
+ const current = this.options.resolveActivation(spotId);
158
+ if (
159
+ current === undefined ||
160
+ (!instanceIntent &&
161
+ (current !== activation ||
162
+ (originalRecord?.activation === 'ready' &&
163
+ originalRecord.route.objectGeneration !== current.objectGeneration)))
164
+ ) {
165
+ throw createInternalFrameworkException(
166
+ ZLinkFrameworkInternalErrorKind.RequestTargetNotFound,
167
+ `Spot '${String(spotId)}' is not active.`
168
+ );
169
+ }
170
+ if (
171
+ context.activationRecord?.deadlineUnixMs !== undefined &&
172
+ context.activationRecord.deadlineUnixMs < BigInt(Date.now())
173
+ ) {
174
+ throw createInternalFrameworkException(
175
+ ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
176
+ `Spot '${String(spotId)}' request deadline has expired.`
177
+ );
178
+ }
179
+ const currentRegistrations =
180
+ current === activation
181
+ ? registrations
182
+ : current.handlers
183
+ .snapshot()
184
+ .filter(
185
+ (registration) =>
186
+ registration.kind === 'packet' &&
187
+ (registration.packetName ?? registration.handlerType.name) ===
188
+ (packetName ?? '')
189
+ );
148
190
  // Decode only after the Spot has acquired both application admission
149
191
  // and its execution authority.
150
192
  const payload = decodePayload();
151
- for (const registration of registrations) {
193
+ for (const registration of currentRegistrations) {
152
194
  const handler = await resolveLifecycleHandler(
153
- activation.spot,
195
+ current.spot,
154
196
  registration.handlerType as Type<
155
197
  | ZLinkSpotPacketHandler<ZLinkSpot, unknown>
156
198
  | ZLinkSpotRequestHandler<ZLinkSpot, unknown, unknown>
@@ -159,8 +201,9 @@ export class ZLinkRoutedSpotPacketDispatch {
159
201
  );
160
202
  resolveFirstHandlerTurn?.();
161
203
  resolveFirstHandlerTurn = undefined;
204
+ context.activationRecord?.onHandlerTurnStarted?.();
162
205
  releaseApplicationJobPermitBeforeHandler();
163
- response = await handler.handle(activation.spot, payload, {
206
+ response = await handler.handle(current.spot, payload, {
164
207
  channelName: context.channelName,
165
208
  contentType: context.contentType,
166
209
  packetName: packetName!,
@@ -186,17 +229,33 @@ export class ZLinkRoutedSpotPacketDispatch {
186
229
  applicationClaim?.close();
187
230
  }
188
231
  },
189
- (error) => this.reportFailure(spotId, packetName, context, false, error),
232
+ (error) => {
233
+ if (context.onOneWayError === undefined) {
234
+ this.reportFailure(spotId, packetName, context, false, error);
235
+ } else if (resolveFirstHandlerTurn === undefined) {
236
+ context.onOneWayError(error);
237
+ }
238
+ },
190
239
  context.workOptions,
191
- { signal: context.signal }
240
+ { signal: context.signal },
241
+ instanceIntent
242
+ ? async (failure?: unknown) => {
243
+ try {
244
+ await runHandler(failure);
245
+ } finally {
246
+ detachedApplicationPermit?.releaseAfterInternalProcessing();
247
+ applicationClaim?.close();
248
+ }
249
+ }
250
+ : undefined
192
251
  );
193
- await firstHandlerTurn;
194
252
  } catch (error) {
195
253
  detached = false;
196
254
  detachedApplicationPermit?.releaseAfterInternalProcessing();
197
255
  rejectFirstHandlerTurn?.(error);
198
256
  throw error;
199
257
  }
258
+ await firstHandlerTurn;
200
259
  } else {
201
260
  if (activation.serial.isCurrentTurn) {
202
261
  throw createInternalFrameworkException(
@@ -204,10 +263,15 @@ export class ZLinkRoutedSpotPacketDispatch {
204
263
  `Spot '${spotId}' cannot await a request to its current serial turn.`
205
264
  );
206
265
  }
207
- await activation.serial.execute(runHandler, context.workOptions);
266
+ await activation.serial.execute(
267
+ runHandler,
268
+ context.workOptions,
269
+ instanceIntent ? runHandler : undefined
270
+ );
208
271
  }
209
272
  } catch (error) {
210
- this.reportFailure(spotId, packetName, context, returnResponse, error);
273
+ if (context.activationRecord?.activationRecord === undefined)
274
+ this.reportFailure(spotId, packetName, context, returnResponse, error);
211
275
  throw error;
212
276
  } finally {
213
277
  if (!detached) applicationClaim?.close();
@@ -222,18 +286,17 @@ export class ZLinkRoutedSpotPacketDispatch {
222
286
  returnResponse: boolean,
223
287
  error: unknown
224
288
  ): void {
225
- const frameworkErrorKind =
226
- error instanceof ZLinkFrameworkException ? internalFrameworkErrorKind(error) : undefined;
227
- this.options.dispatchErrors?.report({
228
- surface: ZLinkDispatchErrorSurface.SpotRoute,
289
+ const reporter = this.options.dispatchErrors;
290
+ if (reporter?.captureEnabled() !== true) return;
291
+ reporter.report({
292
+ surface:
293
+ context.activationRecord?.activationRecord?.kind === 'instanceSpot'
294
+ ? ZLinkDispatchErrorSurface.InstanceSpot
295
+ : ZLinkDispatchErrorSurface.SpotRoute,
229
296
  messageKind: returnResponse
230
297
  ? ZLinkDispatchMessageKind.Request
231
298
  : ZLinkDispatchMessageKind.Send,
232
- reason:
233
- frameworkErrorKind === ZLinkFrameworkInternalErrorKind.WorkerQueueFull ||
234
- frameworkErrorKind === ZLinkFrameworkInternalErrorKind.DeadlineExceeded
235
- ? ZLinkDispatchErrorReason.Backpressure
236
- : ZLinkDispatchErrorReason.HandlerException,
299
+ reason: dispatchReasonFromError(error),
237
300
  action: returnResponse ? ZLinkDispatchErrorAction.FailCaller : ZLinkDispatchErrorAction.Drop,
238
301
  packetName,
239
302
  channelName: context.channelName,
@@ -245,9 +308,19 @@ export class ZLinkRoutedSpotPacketDispatch {
245
308
  private reportMissing(
246
309
  spotId: RoutingId,
247
310
  packetName: string | undefined,
248
- context: { readonly channelName: string },
311
+ context: ZLinkRoutedSpotPacketContext,
249
312
  returnResponse: boolean
250
313
  ): void {
314
+ if (context.activationRecord?.activationRecord !== undefined) {
315
+ if (!returnResponse && context.onOneWayError !== undefined)
316
+ context.onOneWayError(
317
+ createInternalFrameworkException(
318
+ ZLinkFrameworkInternalErrorKind.HandlerNotFound,
319
+ `SPOT route handler not found: ${packetName}`
320
+ )
321
+ );
322
+ return;
323
+ }
251
324
  this.options.dispatchErrors?.report({
252
325
  surface: ZLinkDispatchErrorSurface.SpotRoute,
253
326
  messageKind: returnResponse
@@ -46,7 +46,7 @@ export interface ZLinkSpotActorTransferRuntime {
46
46
  rawReply: Uint8Array,
47
47
  replyContentType?: string
48
48
  ): ZLinkDeferredJoinCompletion;
49
- deliverDeferredJoinAccepted(
49
+ deliverDeferredJoinCompletion(
50
50
  completion: ZLinkDeferredJoinCompletion,
51
51
  actor: ZLinkActor,
52
52
  actorRef: ActorRef,
@@ -72,15 +72,6 @@ export interface ZLinkSpotActorTransferRuntime {
72
72
  deadlineAtMs: number,
73
73
  signal?: AbortSignal
74
74
  ): Promise<import('../locations/internal-location-contracts').ZLinkAuthoritySnapshot>;
75
- rememberRoutedActorTransferTarget(
76
- actorId: string,
77
- target: ZLinkRemoteBoundSessionTarget | undefined
78
- ): void;
79
- claimNativeActorLocation(
80
- actor: ZLinkActor,
81
- spotId: RoutingId,
82
- spotMeshName: string
83
- ): Promise<ZLinkNativeActorJoinSnapshot>;
84
75
  claimRoutedActorLocation(
85
76
  actor: ZLinkActor,
86
77
  spotId: RoutingId,
@@ -90,28 +81,19 @@ export interface ZLinkSpotActorTransferRuntime {
90
81
  readonly membershipEpoch: bigint;
91
82
  }
92
83
  ): Promise<void>;
93
- publishRoutedActorOwnership(actor: ZLinkActor): Promise<void>;
84
+ publishRoutedActorOwnership(
85
+ actor: ZLinkActor,
86
+ sealedSession: ZLinkRemoteBoundSessionTarget | undefined
87
+ ): Promise<void>;
94
88
  openRoutedActorSession(actor: ZLinkActor): Promise<void>;
95
89
  bindRoutedActorRef(actor: ZLinkActor, actorRef: ActorRef): void;
96
90
  commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void;
97
91
  clearRoutedActor(actor: ZLinkActor): void;
98
- rollbackNativeActorJoin(actor: ZLinkActor, snapshot: ZLinkNativeActorJoinSnapshot): Promise<void>;
99
92
  rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
100
93
  notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void>;
101
94
  actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined;
102
95
  }
103
96
 
104
- export interface ZLinkNativeActorJoinSnapshot {
105
- readonly spotId?: RoutingId;
106
- readonly spot?: ZLinkSpot;
107
- readonly locationSpotId?: RoutingId;
108
- readonly spotMeshName?: string;
109
- readonly actorRef?: ActorRef;
110
- readonly spotGeneration?: bigint;
111
- readonly membershipEpoch?: bigint;
112
- readonly ownerNodeGeneration?: bigint;
113
- }
114
-
115
97
  export interface ZLinkSpotBoundSessionRuntime {
116
98
  receiveRoutedBoundSession(
117
99
  actorId: string,
@@ -140,10 +122,6 @@ export interface ZLinkSpotBoundSessionRuntime {
140
122
  actorPacketTarget?: unknown,
141
123
  signal?: AbortSignal
142
124
  ): Promise<void>;
143
- rememberRemoteBoundSessionTarget(
144
- actorId: string,
145
- target: ZLinkRemoteBoundSessionTarget | undefined
146
- ): void;
147
125
  resolveRemoteBoundSessionTarget(
148
126
  sourceNodeRid: RoutingId,
149
127
  sourceSessionRid: RoutingId
@@ -108,7 +108,7 @@ export class ZLinkSpotSerialExecutor {
108
108
  */
109
109
  close(): Promise<void> {
110
110
  const children = this.closeChildren();
111
- return Promise.all([children, this.spotSerial.close()]).then(() => undefined);
111
+ return Promise.all([children, this.spotSerial.whenIdle()]).then(() => undefined);
112
112
  }
113
113
 
114
114
  /**
@@ -124,7 +124,7 @@ export class ZLinkSpotSerialExecutor {
124
124
  this.timerSerials.clear();
125
125
  this.actorExecutors.clear();
126
126
  this.closePromise = Promise.all([
127
- ...childSerials.map((serial) => serial.close()),
127
+ ...childSerials.map((serial) => serial.whenIdle()),
128
128
  ...actorExecutors.map((executor) => executor.close())
129
129
  ]).then(() => undefined);
130
130
  return this.closePromise;
@@ -7,6 +7,7 @@ import {
7
7
  ZLinkSpotSerialTurn
8
8
  } from '../execution';
9
9
  import type { SpotId } from '../../contracts';
10
+ import type { ZLinkFrameworkException } from '../../contracts/Errors/ZLinkFrameworkException';
10
11
  import {
11
12
  ZLinkFrameworkInternalErrorKind,
12
13
  createInternalFrameworkException
@@ -17,6 +18,11 @@ import {
17
18
  type ZLinkSerialWorkOptions,
18
19
  type ZLinkSerialWorkRecord
19
20
  } from '../execution/serial-execution-queue';
21
+ import type { ZLinkSerialLifecycleContext } from '../execution/serial-execution-queue';
22
+
23
+ export type ZLinkSpotApplicationTurnContext = ZLinkExecutionBarrierClaim & {
24
+ readonly replay?: (failure?: unknown) => Promise<unknown> | unknown;
25
+ };
20
26
  import {
21
27
  bindApplicationJobPermit,
22
28
  hasApplicationJobPermit
@@ -29,6 +35,7 @@ export class ZLinkSpotSerialTurnExecutor {
29
35
  private executionBarrier: ZLinkExecutionBarrier | undefined;
30
36
  private resumedOwnerTurn: ZLinkSpotSerialTurn | undefined;
31
37
  private lastActivityAtMs = performance.now();
38
+ private lifecycleAdmissionClosed = false;
32
39
  activeTurnId = 0;
33
40
 
34
41
  constructor(
@@ -62,15 +69,41 @@ export class ZLinkSpotSerialTurnExecutor {
62
69
  return captureZLinkSpotSerialTurn(this);
63
70
  }
64
71
 
65
- /** Stops new turns while allowing turns accepted before close to complete. */
66
- close(): Promise<void> {
67
- return this.scheduler.close();
72
+ /** Waits for turns admitted through the execution barrier to complete. */
73
+ whenIdle(): Promise<void> {
74
+ return this.scheduler.whenIdle();
68
75
  }
69
76
 
70
77
  closeAdmission(): void {
71
78
  this.scheduler.closeAdmission();
72
79
  }
73
80
 
81
+ /**
82
+ * Spot messaging §7 step 3: after Close ends this queue's admission, an Instance
83
+ * intent message is refused before admission as a released owner fence, and any
84
+ * other message finds no incarnation. Undefined while admission is open.
85
+ */
86
+ applicationAdmissionRefusal(instanceIntent: boolean): ZLinkFrameworkException | undefined {
87
+ if (!this.scheduler.admissionClosed) return undefined;
88
+ return instanceIntent
89
+ ? createInternalFrameworkException(
90
+ ZLinkFrameworkInternalErrorKind.SpotMoving,
91
+ 'The Spot incarnation released its authority before admitting this Instance intent message.'
92
+ )
93
+ : createInternalFrameworkException(
94
+ ZLinkFrameworkInternalErrorKind.RequestTargetNotFound,
95
+ 'The Spot incarnation is closed.'
96
+ );
97
+ }
98
+
99
+ /**
100
+ * Spot messaging §7: once Close commits Closing, membership work can no longer
101
+ * enter this incarnation while Instance intent messages still queue behind Close.
102
+ */
103
+ setLifecycleAdmissionClosed(closed: boolean): void {
104
+ this.lifecycleAdmissionClosed = closed;
105
+ }
106
+
74
107
  /** Distinguishes a gate-owning turn from a suspended AsyncLocalStorage tail. */
75
108
  isActiveTurn(turn: ZLinkSpotSerialTurn, turnId: number): boolean {
76
109
  return (
@@ -90,14 +123,18 @@ export class ZLinkSpotSerialTurnExecutor {
90
123
  }
91
124
 
92
125
  /** Runs `operation` in serial order, one turn at a time. */
93
- execute<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T> {
126
+ execute<T>(
127
+ operation: () => Promise<T> | T,
128
+ workOptions?: ZLinkSerialWorkOptions,
129
+ replay?: (failure?: unknown) => Promise<T>
130
+ ): Promise<T> {
94
131
  if (this.isCurrentTurn) {
95
132
  throw createInternalFrameworkException(
96
133
  ZLinkFrameworkInternalErrorKind.InvalidOperation,
97
134
  'A Spot serial turn cannot implicitly execute another turn for the same owner.'
98
135
  );
99
136
  }
100
- return this.enqueueApplicationTurn(operation, workOptions);
137
+ return this.enqueueApplicationTurn(operation, workOptions, replay);
101
138
  }
102
139
 
103
140
  /**
@@ -119,12 +156,19 @@ export class ZLinkSpotSerialTurnExecutor {
119
156
  workOptions: ZLinkSerialWorkOptions = {},
120
157
  admission: {
121
158
  readonly signal?: AbortSignal;
122
- } = {}
159
+ } = {},
160
+ replay?: (failure?: unknown) => Promise<unknown>
123
161
  ): Promise<void> {
124
162
  this.lastActivityAtMs = performance.now();
125
163
  let barrierClaim: ZLinkExecutionBarrierClaim | undefined;
126
164
  try {
127
- barrierClaim = await this.executionBarrier?.enter();
165
+ const entry = this.executionBarrier?.enter();
166
+ barrierClaim = entry instanceof Promise ? await entry : entry;
167
+ const refusal = this.applicationAdmissionRefusal(replay !== undefined);
168
+ if (refusal !== undefined) throw refusal;
169
+ if (barrierClaim !== undefined && replay !== undefined) {
170
+ Object.assign(barrierClaim, { replay: bindApplicationJobPermit(replay) });
171
+ }
128
172
  if (admission.signal?.aborted === true) {
129
173
  throw new DOMException('The operation was aborted.', 'AbortError');
130
174
  }
@@ -161,19 +205,63 @@ export class ZLinkSpotSerialTurnExecutor {
161
205
  return this.enqueueFrameworkTurn(operation, workOptions);
162
206
  }
163
207
 
164
- /** Holds this Spot's lifecycle FIFO until the full operation result settles. */
208
+ /** Admits membership work and holds the lifecycle FIFO until its result settles. */
165
209
  executeLifecycleOperation<T>(operation: () => Promise<T> | T): Promise<T> {
166
- return this.scheduler.submitLifecycleOperation(operation);
210
+ let entry: ZLinkExecutionBarrierClaim | Promise<ZLinkExecutionBarrierClaim> | undefined;
211
+ try {
212
+ if (this.lifecycleAdmissionClosed) {
213
+ throw createInternalFrameworkException(
214
+ ZLinkFrameworkInternalErrorKind.RequestRejected,
215
+ 'Spot lifecycle admission is closed by a committed Close.'
216
+ );
217
+ }
218
+ entry = this.executionBarrier?.enter();
219
+ } catch (error) {
220
+ return Promise.reject(error);
221
+ }
222
+ const submit = (claim?: ZLinkExecutionBarrierClaim): Promise<T> => {
223
+ try {
224
+ return this.scheduler.submitLifecycleOperation(operation);
225
+ } catch (error) {
226
+ return Promise.reject(error);
227
+ } finally {
228
+ claim?.release();
229
+ }
230
+ };
231
+ return entry instanceof Promise ? entry.then(submit) : submit(entry);
232
+ }
233
+
234
+ /** Runs owner control work that establishes or completes its own admission seal. */
235
+ executeControlLifecycleOperation<T>(
236
+ operation: () => Promise<T> | T,
237
+ context?: ZLinkSerialLifecycleContext
238
+ ): Promise<T> {
239
+ try {
240
+ return this.scheduler.submitLifecycleOperation(operation, context);
241
+ } catch (error) {
242
+ return Promise.reject(error);
243
+ }
244
+ }
245
+
246
+ visitPendingApplication(visitor: (record: ZLinkSerialWorkRecord<unknown>) => void): void {
247
+ this.scheduler.visitPendingApplication(visitor);
167
248
  }
168
249
 
169
250
  private async enqueueApplicationTurn<T>(
170
251
  operation: () => Promise<T> | T,
171
- workOptions: ZLinkSerialWorkOptions = {}
252
+ workOptions: ZLinkSerialWorkOptions = {},
253
+ replay?: (failure?: unknown) => Promise<T>
172
254
  ): Promise<T> {
173
255
  this.lastActivityAtMs = performance.now();
174
256
  let barrierClaim: ZLinkExecutionBarrierClaim | undefined;
175
257
  try {
176
- barrierClaim = await this.executionBarrier?.enter();
258
+ const entry = this.executionBarrier?.enter();
259
+ barrierClaim = entry instanceof Promise ? await entry : entry;
260
+ const refusal = this.applicationAdmissionRefusal(replay !== undefined);
261
+ if (refusal !== undefined) throw refusal;
262
+ if (barrierClaim !== undefined && replay !== undefined) {
263
+ Object.assign(barrierClaim, { replay: bindApplicationJobPermit(replay) });
264
+ }
177
265
  return await this.submitQueuedTurn(operation, workOptions, barrierClaim);
178
266
  } catch (error) {
179
267
  barrierClaim?.release();
@@ -215,6 +303,19 @@ export class ZLinkSpotSerialTurnExecutor {
215
303
  }
216
304
 
217
305
  private runQueuedRecord(record: ZLinkSerialWorkRecord<unknown>): Promise<void> {
306
+ const context = record.context as ZLinkSpotApplicationTurnContext | undefined;
307
+ if (context?.replay !== undefined && record.operation === context.replay) {
308
+ context.release();
309
+ return Promise.resolve(this.executionBarrier?.enter()).then((claim) =>
310
+ this.runTurn(
311
+ record.operation,
312
+ (value) => record.resolve(value),
313
+ (error) => record.reject(error),
314
+ claim,
315
+ record.release
316
+ )
317
+ );
318
+ }
218
319
  return this.runTurn(
219
320
  record.operation,
220
321
  (value) => record.resolve(value),
@@ -24,13 +24,14 @@ import { createInboundFlow, runWithFlow } from '../diagnostics/flow-context';
24
24
  import type { ZLinkExecutionBarrier } from '../execution';
25
25
  import { ZLinkStateLane } from '../execution/state-lane';
26
26
  import { AsyncResource } from 'node:async_hooks';
27
- import type { OperationClock } from '../foundation/operation-registry';
28
27
 
29
28
  const detachedTimerStateLaneResource = new AsyncResource('zlink:spot-timer');
30
29
 
31
- export interface ZLinkTimerClock extends OperationClock {
30
+ export interface ZLinkTimerClock {
32
31
  now(): number;
33
32
  utcNow(): number;
33
+ setTimeout(callback: () => void, delayMs: number): unknown;
34
+ clearTimeout(handle: unknown): void;
34
35
  }
35
36
 
36
37
  const systemTimerClock: ZLinkTimerClock = {