@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
@@ -31,8 +31,11 @@ import type { Message } from '../../contracts/Common/Message';
31
31
  import type { ZLinkMessageFollowOrigin } from '../foundation/service-runtime-contracts';
32
32
  import { throwIfAborted } from '../abort';
33
33
  import { ZLinkConfigurationException } from '../configuration';
34
+ import {
35
+ ZLinkFrameworkInternalErrorKind,
36
+ createInternalFrameworkException
37
+ } from '../framework-errors-internal';
34
38
  import type {
35
- ZLinkBackendReceived,
36
39
  ZLinkBackendSpot,
37
40
  ZLinkBackendSpotNode,
38
41
  ZLinkBackendTopicMessage
@@ -77,7 +80,7 @@ import type {
77
80
  } from './spot-actor-join-dispatch';
78
81
  import { ZLinkSpotActorAdmissionCoordinator } from './spot-actor-admission-coordinator';
79
82
  import type { ZLinkRouteToActorJoinPrewarm } from './spot-actor-packet-dispatch';
80
- import { ZLinkSpotActivation, ZLinkSpotCloseOccupiedError } from './spot-activation-state';
83
+ import { ZLinkSpotActivation } from './spot-activation-state';
81
84
  import type { ZLinkSpotLocationClaim } from './spot-location-claim';
82
85
  import type {
83
86
  ZLinkSpotActorHandoffRuntime,
@@ -111,9 +114,9 @@ export interface ZLinkSpotActivationLifecycleOptions {
111
114
  readonly routedTransport?: ZLinkSpotRoutedTransport;
112
115
  readonly addressTransport?: ZLinkSpotAddressTransport;
113
116
  readonly spotRouterChannelIdForMesh?: (meshName: string) => string;
114
- readonly channelMeshNameForChannel?: (channelName: string) => string | undefined;
115
117
  readonly providerResolver?: ZLinkProviderResolver;
116
118
  readonly dispatchErrors?: ZLinkDispatchErrorReporter;
119
+ readonly closeErrorSink?: import('../diagnostics/dispatch-error-port').ZLinkDispatchErrorSink;
117
120
  readonly runtimeEventPublisher?: ZLinkRuntimeEventPublisher;
118
121
  readonly workerRuntime: ZLinkWorkerRuntime;
119
122
  readonly messageSerializers?: ReadonlyMap<string, ZLinkMessageSerializer>;
@@ -123,14 +126,13 @@ export interface ZLinkSpotActivationLifecycleOptions {
123
126
  spotId: RoutingId,
124
127
  authority?: ZLinkNativeSpotAuthority
125
128
  ) => ZLinkBackendSpot | undefined;
126
- readonly createReceived?: () => ZLinkBackendReceived;
127
129
  readonly createTopicMessage?: () => ZLinkBackendTopicMessage;
128
130
  readonly nativeSpotNodeProvider?: (meshName: string) => ZLinkBackendSpotNode | undefined;
129
131
  readonly actorResolver?: (actorId: string) => ZLinkActor | undefined;
130
132
  readonly actorTransferRuntime?: ZLinkSpotActorTransferRuntime;
131
133
  readonly boundSessionRuntime?: ZLinkSpotBoundSessionRuntime;
132
134
  readonly actorHandoffRuntime?: ZLinkSpotActorHandoffRuntime;
133
- readonly detachedTaskRunner?: ZLinkDetachedTaskRunner;
135
+ readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
134
136
  readonly admission?: ZLinkRuntimeAdmissionGate;
135
137
  readonly statefulExecutionAllowed?: () => boolean;
136
138
  readonly leaveActor: (
@@ -139,11 +141,11 @@ export interface ZLinkSpotActivationLifecycleOptions {
139
141
  signal?: AbortSignal,
140
142
  meshName?: string
141
143
  ) => Promise<void>;
142
- readonly closeSpot: (
143
- meshName: string,
144
- spotId: RoutingId,
145
- signal?: AbortSignal,
146
- reason?: ZLinkSpotCloseReason
144
+ /** Starts a context Close request after its calling turn has ended. */
145
+ readonly requestContextClose: (
146
+ activation: ZLinkSpotActivation,
147
+ objectGeneration: bigint,
148
+ signal?: AbortSignal
147
149
  ) => Promise<boolean>;
148
150
  readonly registerActivation: (activation: ZLinkSpotActivation) => void;
149
151
  readonly routeToActorJoinPrewarm?: ZLinkRouteToActorJoinPrewarm;
@@ -173,14 +175,19 @@ export class ZLinkSpotActivationLifecycle {
173
175
  {
174
176
  closingAttempted: boolean;
175
177
  timersDisposed: boolean;
178
+ serialDisposed: boolean;
176
179
  handlersDisposed: boolean;
180
+ actorDispatchDisposed: boolean;
177
181
  nativeDisposed: boolean;
178
182
  locationReleased: boolean;
179
- inFlight?: Promise<void>;
183
+ inFlight?: Promise<unknown>;
180
184
  }
181
185
  >();
182
186
 
183
187
  constructor(private readonly options: ZLinkSpotActivationLifecycleOptions) {
188
+ if ((options.detachedTaskRunner as unknown) === undefined) {
189
+ throw new ZLinkConfigurationException('Spot activation requires a detached task runner.');
190
+ }
184
191
  this.actorAdmission = new ZLinkSpotActorAdmissionCoordinator(options);
185
192
  }
186
193
 
@@ -249,7 +256,7 @@ export class ZLinkSpotActivationLifecycle {
249
256
  const common = {
250
257
  meshName,
251
258
  spotId,
252
- objectGeneration: toContextGeneration(objectGeneration),
259
+ objectGeneration: objectGeneration,
253
260
  outbound,
254
261
  timers,
255
262
  serial,
@@ -259,7 +266,7 @@ export class ZLinkSpotActivationLifecycle {
259
266
  providerResolver: this.options.providerResolver,
260
267
  runtimeEventPublisher: this.options.runtimeEventPublisher,
261
268
  workerRuntime: this.options.workerRuntime,
262
- close: this.contextClose(meshName, spotId, () => activation)
269
+ close: this.contextClose(objectGeneration, () => activation)
263
270
  };
264
271
  const context =
265
272
  objectKind === 'user_spot'
@@ -314,6 +321,7 @@ export class ZLinkSpotActivationLifecycle {
314
321
  objectKind === 'user_spot'
315
322
  ? {
316
323
  kind: 'user',
324
+ objectGeneration,
317
325
  executionMode,
318
326
  relocationCoordinationMode:
319
327
  this.options.userSpotRelocationCoordinationMode?.(
@@ -336,11 +344,22 @@ export class ZLinkSpotActivationLifecycle {
336
344
  this.options.registerActivation(activation);
337
345
  return activation;
338
346
  } catch (error) {
339
- await timers.dispose().catch(() => undefined);
340
- if (instance !== undefined) {
341
- await disposeLifecycleHandlers(instance).catch(() => undefined);
347
+ const cleanup = await Promise.allSettled([
348
+ timers.dispose(),
349
+ ...(instance === undefined
350
+ ? []
351
+ : [disposeLifecycleHandlers(instance, this.options.detachedTaskRunner)]),
352
+ ...(nativeSpot === undefined ? [] : [Promise.resolve().then(() => nativeSpot.dispose())])
353
+ ]);
354
+ const cleanupErrors = cleanup
355
+ .filter((result): result is PromiseRejectedResult => result.status === 'rejected')
356
+ .map((result) => result.reason);
357
+ if (cleanupErrors.length > 0) {
358
+ throw new AggregateError(
359
+ [error, ...cleanupErrors],
360
+ `Spot '${spotId}' relocation materialization cleanup failed.`
361
+ );
342
362
  }
343
- await nativeSpot?.dispose().catch(() => undefined);
344
363
  throw error;
345
364
  }
346
365
  }
@@ -351,9 +370,10 @@ export class ZLinkSpotActivationLifecycle {
351
370
  implementation: Type<TSpot>,
352
371
  spotId: RoutingId,
353
372
  objectGeneration: bigint,
354
- signal?: AbortSignal
373
+ signal?: AbortSignal,
374
+ serialOwner?: ZLinkSpotActivation
355
375
  ): Promise<ZLinkSpotActivation> {
356
- const serial = new ZLinkSpotSerialTurnExecutor(true, spotId);
376
+ const serial = serialOwner?.serial ?? new ZLinkSpotSerialTurnExecutor(true, spotId);
357
377
  const serialExecutor = new ZLinkSpotSerialExecutor(
358
378
  serial,
359
379
  ZLinkUserSpotExecutionMode.SpotWide,
@@ -387,7 +407,7 @@ export class ZLinkSpotActivationLifecycle {
387
407
  const context = createInstanceSpotContext({
388
408
  meshName,
389
409
  spotId,
390
- objectGeneration: toContextGeneration(objectGeneration),
410
+ objectGeneration: objectGeneration,
391
411
  handlers: instanceHandlers,
392
412
  outbound,
393
413
  timers,
@@ -398,7 +418,7 @@ export class ZLinkSpotActivationLifecycle {
398
418
  providerResolver: this.options.providerResolver,
399
419
  runtimeEventPublisher: this.options.runtimeEventPublisher,
400
420
  workerRuntime: this.options.workerRuntime,
401
- close: this.contextClose(meshName, spotId, () => activation)
421
+ close: this.contextClose(objectGeneration, () => activation)
402
422
  });
403
423
  instance = await createFreshProviderInstance(
404
424
  implementation,
@@ -421,6 +441,7 @@ export class ZLinkSpotActivationLifecycle {
421
441
  timers,
422
442
  actorHandlers,
423
443
  handlers,
444
+ executionBarrier: serialOwner?.executionBarrier,
424
445
  externalActorCount: () => this.options.actorCountProvider?.(spotId) ?? 0
425
446
  });
426
447
  try {
@@ -438,14 +459,21 @@ export class ZLinkSpotActivationLifecycle {
438
459
  signal
439
460
  }
440
461
  );
441
- await serial.execute(() => instance!.onInitialize?.());
462
+ await (serialOwner === undefined
463
+ ? serial.execute(() => instance!.onInitialize?.())
464
+ : serial.postBarrierTurn(() => instance!.onInitialize?.()));
442
465
  this.options.registerActivation(activation);
443
466
  return activation;
444
467
  } catch (error) {
445
- await timers.dispose();
446
- await disposeLifecycleHandlers(instance);
468
+ const cleanup = await Promise.allSettled([
469
+ timers.dispose(),
470
+ disposeLifecycleHandlers(instance, this.options.detachedTaskRunner)
471
+ ]);
472
+ const cleanupErrors = cleanup
473
+ .filter((result): result is PromiseRejectedResult => result.status === 'rejected')
474
+ .map((result) => result.reason);
447
475
  throw new AggregateError(
448
- [error],
476
+ [error, ...cleanupErrors],
449
477
  `Instance Spot '${instanceType}' materialization failed for '${String(spotId)}'.`
450
478
  );
451
479
  }
@@ -474,7 +502,7 @@ export class ZLinkSpotActivationLifecycle {
474
502
  errors.push(error);
475
503
  }
476
504
  try {
477
- await disposeLifecycleHandlers(activation.spot);
505
+ await disposeLifecycleHandlers(activation.spot, this.options.detachedTaskRunner);
478
506
  } catch (error) {
479
507
  errors.push(error);
480
508
  }
@@ -487,16 +515,6 @@ export class ZLinkSpotActivationLifecycle {
487
515
  }
488
516
  }
489
517
 
490
- resourcesReleased(activation: ZLinkSpotActivation): boolean {
491
- const state = this.cleanupStates.get(activation);
492
- return (
493
- state?.timersDisposed === true &&
494
- state.handlersDisposed === true &&
495
- state.nativeDisposed === true &&
496
- state.locationReleased === true
497
- );
498
- }
499
-
500
518
  async create<TSpot extends ZLinkSpot>(
501
519
  meshName: string,
502
520
  spotType: Type<TSpot>,
@@ -585,7 +603,7 @@ export class ZLinkSpotActivationLifecycle {
585
603
  const context = createSpotContext({
586
604
  meshName,
587
605
  spotId,
588
- objectGeneration: toContextGeneration(spotGeneration),
606
+ objectGeneration: spotGeneration,
589
607
  handlers,
590
608
  outbound,
591
609
  timers,
@@ -607,7 +625,7 @@ export class ZLinkSpotActivationLifecycle {
607
625
  ensureOperationAllowed: () => activation?.ensureContextOperationAllowed(),
608
626
  leaveActor: (actor, contextSignal) =>
609
627
  this.options.leaveActor(spotId, actor, contextSignal, meshName),
610
- close: this.contextClose(meshName, spotId, () => activation)
628
+ close: this.contextClose(spotGeneration, () => activation)
611
629
  });
612
630
  try {
613
631
  spot = await createFreshProviderInstance(spotType, this.options.providerResolver, context);
@@ -624,6 +642,7 @@ export class ZLinkSpotActivationLifecycle {
624
642
  spotId,
625
643
  domain: {
626
644
  kind: 'user',
645
+ objectGeneration: spotGeneration,
627
646
  executionMode,
628
647
  relocationCoordinationMode:
629
648
  this.options.userSpotRelocationCoordinationMode?.(meshName, spotType) ??
@@ -667,9 +686,13 @@ export class ZLinkSpotActivationLifecycle {
667
686
  } else {
668
687
  const partialCleanup = await Promise.allSettled([
669
688
  timers.dispose(),
670
- ...(spot === undefined ? [] : [disposeLifecycleHandlers(spot)]),
671
- nativeSpot.dispose(),
672
- this.options.locationClaim.release(locationClaim.meshName, spotId)
689
+ ...(spot === undefined
690
+ ? []
691
+ : [disposeLifecycleHandlers(spot, this.options.detachedTaskRunner)]),
692
+ Promise.resolve().then(() => nativeSpot.dispose()),
693
+ Promise.resolve().then(() =>
694
+ this.options.locationClaim.release(locationClaim.meshName, spotId)
695
+ )
673
696
  ]);
674
697
  const partialErrors = partialCleanup
675
698
  .filter((result): result is PromiseRejectedResult => result.status === 'rejected')
@@ -716,7 +739,7 @@ export class ZLinkSpotActivationLifecycle {
716
739
  const context = createSpotContext({
717
740
  meshName,
718
741
  spotId,
719
- objectGeneration: toContextGeneration(objectGeneration),
742
+ objectGeneration: objectGeneration,
720
743
  handlers,
721
744
  outbound,
722
745
  timers,
@@ -738,7 +761,7 @@ export class ZLinkSpotActivationLifecycle {
738
761
  ensureOperationAllowed: () => activation?.ensureContextOperationAllowed(),
739
762
  leaveActor: (actor, contextSignal) =>
740
763
  this.options.leaveActor(spotId, actor, contextSignal, meshName),
741
- close: this.contextClose(meshName, spotId, () => activation)
764
+ close: this.contextClose(objectGeneration, () => activation)
742
765
  });
743
766
  spot = await createFreshProviderInstance(spotType, this.options.providerResolver, context);
744
767
  Object.defineProperty(spot, 'context', {
@@ -751,6 +774,7 @@ export class ZLinkSpotActivationLifecycle {
751
774
  spotId,
752
775
  domain: {
753
776
  kind: 'user',
777
+ objectGeneration,
754
778
  executionMode,
755
779
  relocationCoordinationMode:
756
780
  this.options.userSpotRelocationCoordinationMode?.(meshName, spotType) ??
@@ -777,67 +801,59 @@ export class ZLinkSpotActivationLifecycle {
777
801
  }
778
802
 
779
803
  private contextClose(
780
- meshName: string,
781
- spotId: RoutingId,
804
+ objectGeneration: bigint,
782
805
  activationProvider: () => ZLinkSpotActivation | undefined
783
806
  ): (signal?: AbortSignal) => Promise<boolean> {
784
- return async (signal) => {
807
+ return (signal) => {
785
808
  const activation = activationProvider();
786
- // Native callbacks can cross a promise boundary that does not retain
787
- // the serial turn context. Queue the close before calling the manager
788
- // so the callback never waits for work behind its own serial turn.
789
- if (activation?.serial.isExecuting === true && !activation.serial.isCurrentTurn) {
790
- activation.requestClose();
791
- const retry = activation.serial.post(() =>
792
- this.options.closeSpot(meshName, spotId, signal)
809
+ if (activation === undefined) {
810
+ throw createInternalFrameworkException(
811
+ ZLinkFrameworkInternalErrorKind.InvalidOperation,
812
+ 'Spot context Close requires its active generation.'
793
813
  );
794
- this.options.detachedTaskRunner?.runDetached(`spot close ${String(spotId)}`, async () => {
795
- await retry;
796
- });
797
- if (this.options.detachedTaskRunner === undefined) {
798
- void retry.catch(() => undefined);
799
- }
800
- return true;
801
814
  }
802
- return await this.options.closeSpot(meshName, spotId, signal);
815
+ return this.options.requestContextClose(activation, objectGeneration, signal);
803
816
  };
804
817
  }
805
818
 
806
- async close(
819
+ async sealForClose(
807
820
  activation: ZLinkSpotActivation,
808
- signal?: AbortSignal,
809
- reason = ZLinkSpotCloseReason.ExplicitClose
821
+ seal: import('../execution').ZLinkExecutionBarrierSeal,
822
+ signal?: AbortSignal
810
823
  ): Promise<void> {
811
- const seal = activation.sealExecution();
812
- await this.closeAfterSeal(activation, seal, signal, reason);
824
+ await activation.waitForExecutionQuiescence(seal, signal);
825
+ if (!activation.commitExecutionSeal(seal)) {
826
+ throw new Error(`Spot '${String(activation.spotId)}' close seal is stale.`);
827
+ }
813
828
  }
814
829
 
815
- async closeAfterSeal(
830
+ /** Returns the OnClosing failure, which cleanup records and does not rethrow. */
831
+ async cleanupClosedActivation(
816
832
  activation: ZLinkSpotActivation,
817
- seal: import('../execution').ZLinkExecutionBarrierSeal,
818
- signal?: AbortSignal,
819
833
  reason = ZLinkSpotCloseReason.ExplicitClose,
820
834
  deadline?: Date
821
- ): Promise<void> {
822
- try {
823
- await activation.waitForExecutionQuiescence(seal, signal);
824
- } catch (error) {
825
- activation.abortExecutionSeal(seal);
826
- throw error;
827
- }
828
- // The eager occupancy check that authorized this seal (startClose ->
829
- // canClose()) ran before quiescence, so it can miss an actor join that
830
- // was already queued on the serial executor at that moment. Recheck now
831
- // that every turn admitted before the seal has finished, and release the
832
- // seal instead of closing an occupied Spot.
833
- if (!activation.canClose(reason)) {
834
- activation.abortExecutionSeal(seal);
835
- throw new ZLinkSpotCloseOccupiedError(activation.spotId);
836
- }
837
- if (!activation.commitExecutionSeal(seal)) {
838
- throw new Error(`Spot '${String(activation.spotId)}' close seal is stale.`);
839
- }
840
- await this.cleanupActivation(activation, activation.meshName, true, signal, reason, deadline);
835
+ ): Promise<unknown> {
836
+ return await this.cleanupActivation(
837
+ activation,
838
+ activation.meshName,
839
+ true,
840
+ undefined,
841
+ reason,
842
+ deadline,
843
+ true
844
+ );
845
+ }
846
+
847
+ async cleanupFailedIncarnation(activation: ZLinkSpotActivation): Promise<void> {
848
+ await this.cleanupActivation(
849
+ activation,
850
+ activation.meshName,
851
+ false,
852
+ undefined,
853
+ ZLinkSpotCloseReason.ExplicitClose,
854
+ undefined,
855
+ true
856
+ );
841
857
  }
842
858
 
843
859
  async dispatchActorPacket(
@@ -961,13 +977,16 @@ export class ZLinkSpotActivationLifecycle {
961
977
  notifyClosing: boolean,
962
978
  signal?: AbortSignal,
963
979
  reason = ZLinkSpotCloseReason.ExplicitClose,
964
- deadline?: Date
965
- ): Promise<void> {
980
+ deadline?: Date,
981
+ owningLifecycle = false
982
+ ): Promise<unknown> {
966
983
  throwIfAborted(signal);
967
984
  const state = this.cleanupStates.get(activation) ?? {
968
985
  closingAttempted: false,
969
986
  timersDisposed: false,
987
+ serialDisposed: false,
970
988
  handlersDisposed: false,
989
+ actorDispatchDisposed: false,
971
990
  nativeDisposed: false,
972
991
  locationReleased: false
973
992
  };
@@ -979,7 +998,8 @@ export class ZLinkSpotActivationLifecycle {
979
998
  notifyClosing,
980
999
  reason,
981
1000
  state,
982
- deadline
1001
+ deadline,
1002
+ owningLifecycle
983
1003
  ).finally(() => {
984
1004
  state.inFlight = undefined;
985
1005
  });
@@ -994,13 +1014,17 @@ export class ZLinkSpotActivationLifecycle {
994
1014
  state: {
995
1015
  closingAttempted: boolean;
996
1016
  timersDisposed: boolean;
1017
+ serialDisposed: boolean;
997
1018
  handlersDisposed: boolean;
1019
+ actorDispatchDisposed: boolean;
998
1020
  nativeDisposed: boolean;
999
1021
  locationReleased: boolean;
1000
1022
  },
1001
- deadline?: Date
1002
- ): Promise<void> {
1023
+ deadline?: Date,
1024
+ owningLifecycle = false
1025
+ ): Promise<unknown> {
1003
1026
  const errors: unknown[] = [];
1027
+ let closingFailure: unknown;
1004
1028
  const cleanup = async (operation: () => Promise<void> | void, completed: () => void) => {
1005
1029
  try {
1006
1030
  await operation();
@@ -1011,10 +1035,21 @@ export class ZLinkSpotActivationLifecycle {
1011
1035
  };
1012
1036
  if (notifyClosing && !state.closingAttempted) {
1013
1037
  state.closingAttempted = true;
1014
- await cleanup(
1015
- () => invokeSpotClosing(activation.spot.onClosing?.bind(activation.spot), reason, deadline),
1016
- () => undefined
1017
- );
1038
+ try {
1039
+ // OnClosing is user code: it runs as a Framework turn through the
1040
+ // execution gate while the Close lifecycle item keeps its FIFO slot.
1041
+ await activation.serial.postBarrierTurn(() =>
1042
+ invokeSpotClosing(activation.spot.onClosing?.bind(activation.spot), reason, deadline)
1043
+ );
1044
+ } catch (error) {
1045
+ // An OnClosing failure is diagnostic and cleanup continues. It is
1046
+ // returned so host shutdown can classify its teardown outcome.
1047
+ this.options.closeErrorSink?.reportRuntimeTaskException(
1048
+ `spot ${String(activation.spotId)} onClosing`,
1049
+ error
1050
+ );
1051
+ closingFailure = error;
1052
+ }
1018
1053
  }
1019
1054
  if (!state.timersDisposed) {
1020
1055
  await cleanup(
@@ -1024,23 +1059,34 @@ export class ZLinkSpotActivationLifecycle {
1024
1059
  }
1025
1060
  );
1026
1061
  }
1027
- await cleanup(
1028
- () => activation.serialExecutor.close(),
1029
- () => undefined
1030
- );
1062
+ if (!state.serialDisposed && state.timersDisposed) {
1063
+ await cleanup(
1064
+ () =>
1065
+ owningLifecycle
1066
+ ? activation.serialExecutor.closeChildren()
1067
+ : activation.serialExecutor.close(),
1068
+ () => {
1069
+ state.serialDisposed = true;
1070
+ }
1071
+ );
1072
+ }
1031
1073
  if (!state.handlersDisposed) {
1032
1074
  await cleanup(
1033
- () => disposeLifecycleHandlers(activation.spot),
1075
+ () => disposeLifecycleHandlers(activation.spot, this.options.detachedTaskRunner),
1034
1076
  () => {
1035
1077
  state.handlersDisposed = true;
1036
1078
  }
1037
1079
  );
1038
1080
  }
1039
- if (!state.nativeDisposed) {
1081
+ if (!state.actorDispatchDisposed) {
1040
1082
  await cleanup(
1041
1083
  () => activation.actorDispatch?.dispose(),
1042
- () => undefined
1084
+ () => {
1085
+ state.actorDispatchDisposed = true;
1086
+ }
1043
1087
  );
1088
+ }
1089
+ if (!state.nativeDisposed) {
1044
1090
  await cleanup(
1045
1091
  () => activation.nativeSpot?.dispose(),
1046
1092
  () => {
@@ -1048,7 +1094,21 @@ export class ZLinkSpotActivationLifecycle {
1048
1094
  }
1049
1095
  );
1050
1096
  }
1051
- if (!state.locationReleased) {
1097
+ if (
1098
+ !state.locationReleased &&
1099
+ // Spot messaging §7 step 3: an Instance Spot's ExplicitClose releases its authority
1100
+ // through the Close operation's Closing fence; a User Spot still releases its location.
1101
+ !(
1102
+ owningLifecycle &&
1103
+ reason === ZLinkSpotCloseReason.ExplicitClose &&
1104
+ activation.domain.kind === 'instance'
1105
+ ) &&
1106
+ state.timersDisposed &&
1107
+ state.serialDisposed &&
1108
+ state.handlersDisposed &&
1109
+ state.actorDispatchDisposed &&
1110
+ state.nativeDisposed
1111
+ ) {
1052
1112
  await cleanup(
1053
1113
  () => this.options.releaseLocation(activation, locationMeshName, activation.spotId),
1054
1114
  () => {
@@ -1060,6 +1120,7 @@ export class ZLinkSpotActivationLifecycle {
1060
1120
  if (errors.length > 1) {
1061
1121
  throw new AggregateError(errors, `Spot '${activation.spotId}' cleanup failed.`);
1062
1122
  }
1123
+ return closingFailure;
1063
1124
  }
1064
1125
 
1065
1126
  private decodeCreateReply(reply: unknown): unknown {
@@ -1079,12 +1140,3 @@ export class ZLinkSpotActivationLifecycle {
1079
1140
  }
1080
1141
  }
1081
1142
  }
1082
-
1083
- function toContextGeneration(generation: bigint): number {
1084
- if (generation < 0n || generation > BigInt(Number.MAX_SAFE_INTEGER)) {
1085
- throw new ZLinkConfigurationException(
1086
- `Spot object generation '${generation}' cannot be represented by the Node.js public context.`
1087
- );
1088
- }
1089
- return Number(generation);
1090
- }
@@ -16,7 +16,6 @@ import { ZLinkSpotActivation } from './spot-activation-state';
16
16
  import { ZLinkSpotActorJoinDispatch } from './spot-actor-join-dispatch';
17
17
  import { ZLinkSpotActorPacketDispatch } from './spot-actor-packet-dispatch';
18
18
  import type { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
19
- import type { ZLinkNativeActorJoinSnapshot } from './spot-runtime-ports';
20
19
 
21
20
  type AdmissionOptions = Pick<
22
21
  ZLinkSpotActivationLifecycleOptions,
@@ -30,7 +29,6 @@ type AdmissionOptions = Pick<
30
29
  | 'locationClaim'
31
30
  | 'messageSerializers'
32
31
  | 'nativeSpotNodeProvider'
33
- | 'createReceived'
34
32
  | 'createTopicMessage'
35
33
  | 'providerResolver'
36
34
  | 'runtimeEventPublisher'
@@ -92,7 +90,6 @@ export class ZLinkSpotActorAdmissionCoordinator {
92
90
  if (nativeSpot === undefined) return undefined;
93
91
  const nativeDispatch = new ZLinkSpotActorJoinDispatch({
94
92
  nativeSpot,
95
- createReceived: requireBackendValueFactory(this.options.createReceived, 'Received'),
96
93
  createTopicMessage: requireBackendValueFactory(
97
94
  this.options.createTopicMessage,
98
95
  'TopicMessage'
@@ -112,10 +109,9 @@ export class ZLinkSpotActorAdmissionCoordinator {
112
109
  kind: 'enabled',
113
110
  runtime: this.options.actorTransferRuntime
114
111
  },
115
- commitNativeActor: (actor) => this.commitNativeActorTransaction(activation, actor),
116
112
  commitActorDeparture: (actorId) => activation.commitActorDeparture(actorId),
117
- commitTransferredActor: (actor, backlog) =>
118
- this.commitTransferredActorTransaction(activation, actor, backlog)
113
+ commitTransferredActor: (actor, backlog, sealedSession) =>
114
+ this.commitTransferredActorTransaction(activation, actor, backlog, sealedSession)
119
115
  },
120
116
  packets: {
121
117
  handle: (delivery) =>
@@ -130,16 +126,6 @@ export class ZLinkSpotActorAdmissionCoordinator {
130
126
  bindRemoteSession: (actor, sourceNodeRid, sourceSessionRid) => {
131
127
  const node = this.options.nativeSpotNodeProvider?.(activation.meshName);
132
128
  if (node === undefined || routingIdsEqual(sourceNodeRid, node.routingId)) return;
133
- const target = this.options.boundSessionRuntime?.resolveRemoteBoundSessionTarget(
134
- sourceNodeRid,
135
- sourceSessionRid
136
- );
137
- if (target !== undefined) {
138
- this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(
139
- actor.actorId,
140
- target
141
- );
142
- }
143
129
  node.bindRemoteActorSession(actor, sourceNodeRid, sourceSessionRid);
144
130
  },
145
131
  replyNoBind: (info, parts, result) =>
@@ -251,8 +237,6 @@ export class ZLinkSpotActorAdmissionCoordinator {
251
237
  : (activation.resolveJoinedActor(targetActorId) ??
252
238
  this.options.actorResolver?.(targetActorId)),
253
239
  actorLeft: (targetActorId) => activation.hasDepartedActor(targetActorId),
254
- onRemoteBoundSessionTarget: (targetActorId, target) =>
255
- this.options.boundSessionRuntime?.rememberRemoteBoundSessionTarget(targetActorId, target),
256
240
  onDisconnectActor: (actor) =>
257
241
  activation.serial.execute(() => activation.spot.onDisconnectActor?.(actor)),
258
242
  actorResponseSender: this.options.boundSessionRuntime?.sendActorResponse.bind(
@@ -275,47 +259,11 @@ export class ZLinkSpotActorAdmissionCoordinator {
275
259
  );
276
260
  }
277
261
 
278
- private async commitNativeActorTransaction(
279
- activation: ZLinkSpotActivation,
280
- actor: ZLinkActor
281
- ): Promise<void> {
282
- const transfer = this.options.actorTransferRuntime;
283
- let snapshot: ZLinkNativeActorJoinSnapshot | undefined;
284
- let rollbackMembership: (() => void) | undefined;
285
- let routeSwitchStarted = false;
286
- try {
287
- snapshot = await transfer?.claimNativeActorLocation(
288
- actor,
289
- activation.spotId,
290
- activation.meshName
291
- );
292
- transfer?.commitRoutedActor(actor, activation.spotId, activation.spot);
293
- rollbackMembership = activation.commitActorJoin(actor);
294
- activation.beginActorTransfer(actor.context.actorId);
295
- await activation.serial.execute(() => activation.spot.onJoinedActor(actor));
296
- routeSwitchStarted = true;
297
- await transfer?.publishRoutedActorOwnership(actor);
298
- await transfer?.openRoutedActorSession(actor);
299
- activation.cancelActorTransfer(actor.context.actorId);
300
- } catch (error) {
301
- if (routeSwitchStarted) throw error;
302
- rollbackMembership?.();
303
- try {
304
- if (snapshot !== undefined) await transfer?.rollbackNativeActorJoin(actor, snapshot);
305
- } catch (rollbackError) {
306
- throw new AggregateError(
307
- [error, rollbackError],
308
- 'Native actor admission and rollback both failed.'
309
- );
310
- }
311
- throw error;
312
- }
313
- }
314
-
315
262
  private async commitTransferredActorTransaction(
316
263
  activation: ZLinkSpotActivation,
317
264
  actor: ZLinkActor,
318
- backlog: readonly ZLinkActorHandoffPacket[]
265
+ backlog: readonly ZLinkActorHandoffPacket[],
266
+ sealedSession: ZLinkRemoteBoundSessionTarget | undefined
319
267
  ): Promise<readonly ZLinkActorHandoffResult[]> {
320
268
  const transfer = this.options.actorTransferRuntime;
321
269
  let routeSwitchStarted = false;
@@ -328,7 +276,7 @@ export class ZLinkSpotActorAdmissionCoordinator {
328
276
  backlog.length === 0 ? [] : await this.replayActorBacklog(activation, actor, backlog);
329
277
  await transfer?.claimRoutedActorLocation(actor, activation.spotId, activation.meshName);
330
278
  routeSwitchStarted = true;
331
- await transfer?.publishRoutedActorOwnership(actor);
279
+ await transfer?.publishRoutedActorOwnership(actor, sealedSession);
332
280
  await transfer?.openRoutedActorSession(actor);
333
281
  activation.cancelActorTransfer(actor.context.actorId);
334
282
  return results;