@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
@@ -4,15 +4,18 @@ exports.ZLinkActorTransferRuntime = void 0;
4
4
  exports.committedActorOwnerFence = committedActorOwnerFence;
5
5
  const node_crypto_1 = require("node:crypto");
6
6
  const contracts_1 = require("../../contracts");
7
- const authority_key_codec_1 = require("../locations/authority-key-codec");
8
7
  const actors_1 = require("../actors");
9
- const actor_retry_delay_1 = require("../actors/actor-retry-delay");
10
- const routing_id_1 = require("../routing-id");
11
- const payload_codec_1 = require("../messaging/payload-codec");
12
8
  const actor_message_follow_context_1 = require("../actors/actor-message-follow-context");
13
- const service_stateful_wire_codec_1 = require("../foundation/service-stateful-wire-codec");
9
+ const runtime_message_1 = require("../backend/runtime-message");
10
+ const diagnostics_1 = require("../diagnostics");
14
11
  const operation_identity_1 = require("../foundation/operation-identity");
12
+ const service_stateful_wire_codec_1 = require("../foundation/service-stateful-wire-codec");
13
+ const authority_key_codec_1 = require("../locations/authority-key-codec");
14
+ const payload_codec_1 = require("../messaging/payload-codec");
15
+ const routing_id_1 = require("../routing-id");
15
16
  const bounded_replay_map_1 = require("./bounded-replay-map");
17
+ const TRANSFER_RESOLUTION_TIMEOUT_MS = 5_000;
18
+ const TRANSFER_POLL_INTERVAL_MS = 10;
16
19
  const DEFERRED_JOIN_TERMINAL_CAPACITY = 4096;
17
20
  /** Converts only committed actor authority evidence into a Message Follow fence. */
18
21
  function committedActorOwnerFence(actorId, targetActorRef, authority) {
@@ -54,21 +57,22 @@ function createHandoffReplayGate() {
54
57
  }
55
58
  class ZLinkActorTransferRuntime {
56
59
  options;
57
- sourceDepartureTasks = new Map();
58
60
  coreSourceLeaves = new Map();
61
+ // Spot Actor membership sections 4-5: Join completion idempotency is
62
+ // process-local. These maps end with the process; nothing is replayed.
59
63
  activeDeferredJoinTerminals = new Map();
60
64
  deferredJoinTerminals = new bounded_replay_map_1.BoundedReplayMap(DEFERRED_JOIN_TERMINAL_CAPACITY);
61
65
  constructor(options) {
62
66
  this.options = options;
63
67
  }
64
- beginDeferredActorHandoff(actor, state, operationId) {
68
+ beginDeferredActorHandoff(actor, state) {
65
69
  const actorId = actor.context.actorId;
66
- this.options.actorHandoff.beginProvisional(actorId, operationId, requireSourceObjectGeneration(actorId, state));
70
+ this.options.actorHandoff.beginProvisional(actorId, requireSourceObjectGeneration(actorId, state));
67
71
  }
68
- promoteDeferredActorHandoff(actor, _state, operationId) {
69
- this.options.actorHandoff.promoteProvisional(actor.context.actorId, operationId);
72
+ promoteDeferredActorHandoff(actor, _state) {
73
+ this.options.actorHandoff.promoteProvisional(actor.context.actorId);
70
74
  }
71
- async completeDeferredActorHandoff(actor, target, _targetActorRef, operationId) {
75
+ async completeDeferredActorHandoff(actor, target, _targetActorRef) {
72
76
  const actorId = actor.context.actorId;
73
77
  if (!this.options.actorHandoff.isProvisional(actorId))
74
78
  return;
@@ -76,91 +80,77 @@ class ZLinkActorTransferRuntime {
76
80
  if (manager === undefined) {
77
81
  throw new Error(`Actor '${actorId}' same-node Join has no local Spot manager.`);
78
82
  }
79
- const admitted = this.options.actorHandoff.admitDeferredPrefix(actorId, operationId, (drain) => manager.admitRoutedActorPacketPrefix(target.spotId, actorId, drain), this.options.prepareApplicationJob);
83
+ const admitted = this.options.actorHandoff.admitDeferredPrefix(actorId, (drain) => manager.admitRoutedActorPacketPrefix(target.spotId, actorId, drain), this.options.prepareApplicationJob);
80
84
  void this.observeHandoffReplay(admitted.terminal);
81
85
  }
82
- async cancelDeferredActorHandoff(actor, _state, operationId) {
83
- const admitted = this.admitDeferredSourcePrefix(actor, _state, operationId);
86
+ async cancelDeferredActorHandoff(actor, state) {
87
+ const admitted = this.admitDeferredSourcePrefix(actor, state);
84
88
  void this.observeHandoffReplay(admitted.terminal);
85
89
  }
86
- async prepareDeferredJoinAccepted(actorId, operationId, actorRef, rawReply, replyContentType, signal, canonicalInventoryDigest) {
87
- return await this.requireDeferredJoinJournal().prepare(actorId, operationId, actorRef, rawReply, replyContentType, signal, canonicalInventoryDigest);
88
- }
89
- async isDeferredJoinAcceptedRootPublication(reference, checksumCrc32c, expected, signal) {
90
- const relocation = this.options.relocationStore();
91
- return relocation === undefined
92
- ? false
93
- : await (0, actors_1.isDeferredJoinAcceptedRootPublication)(relocation, reference, checksumCrc32c, expected, signal);
94
- }
95
- async discardDeferredJoinAccepted(root, signal) {
96
- await this.requireDeferredJoinJournal().discardPrepared(root, signal);
90
+ prepareDeferredJoinAccepted(actorId, operationId, actorRef, rawReply, replyContentType) {
91
+ return (0, actors_1.createDeferredJoinCompletion)(actorId, operationId, actorRef, rawReply, replyContentType);
97
92
  }
98
- markDeferredJoinAcceptedCommitted(root, actorRef, signal) {
99
- return this.requireDeferredJoinJournal().markCommitted(root, actorRef, signal);
100
- }
101
- async commitAndDeliverDeferredJoinAccepted(root, actor, actorRef, submitMailbox, signal) {
102
- const terminalKey = deferredJoinTerminalKey(root);
103
- const terminal = this.deferredJoinTerminals.get(terminalKey);
104
- if (terminal !== undefined) {
93
+ /**
94
+ * Runs the completion callback once in the target Actor mailbox.
95
+ * A repeated delivery of the same OperationId in this process observes the
96
+ * first terminal (completion idempotency only).
97
+ */
98
+ async deliverDeferredJoinCompletion(completion, actor, actorRef, submitMailbox, signal) {
99
+ const terminalKey = deferredJoinTerminalKey(completion);
100
+ if (this.deferredJoinTerminals.get(terminalKey) !== undefined) {
105
101
  this.deferredJoinTerminals.touch(terminalKey);
106
- return terminal;
102
+ return;
107
103
  }
108
104
  const active = this.activeDeferredJoinTerminals.get(terminalKey);
109
105
  if (active !== undefined)
110
106
  return await waitForOperation(active, signal);
111
- const completion = this.commitAndDeliverDeferredJoinAcceptedCore(root, actor, actorRef, submitMailbox);
112
- this.activeDeferredJoinTerminals.set(terminalKey, completion);
113
- void completion.then((completed) => {
114
- this.deferredJoinTerminals.remember(terminalKey, completed);
115
- if (this.activeDeferredJoinTerminals.get(terminalKey) === completion) {
107
+ const delivery = this.deliverDeferredJoinCompletionCore(completion, actor, actorRef, submitMailbox);
108
+ this.activeDeferredJoinTerminals.set(terminalKey, delivery);
109
+ void delivery.then(() => {
110
+ this.deferredJoinTerminals.remember(terminalKey, true);
111
+ if (this.activeDeferredJoinTerminals.get(terminalKey) === delivery) {
116
112
  this.activeDeferredJoinTerminals.delete(terminalKey);
117
113
  }
118
114
  }, () => {
119
- if (this.activeDeferredJoinTerminals.get(terminalKey) === completion) {
115
+ if (this.activeDeferredJoinTerminals.get(terminalKey) === delivery) {
120
116
  this.activeDeferredJoinTerminals.delete(terminalKey);
121
117
  }
122
118
  });
123
- return await waitForOperation(completion, signal);
119
+ return await waitForOperation(delivery, signal);
124
120
  }
125
- async commitAndDeliverDeferredJoinAcceptedCore(root, actor, actorRef, submitMailbox) {
121
+ async deliverDeferredJoinCompletionCore(completion, actor, actorRef, submitMailbox) {
126
122
  const targetActorRef = this.options
127
123
  .actorManager()
128
124
  ?.getState(actor.context.actorId)?.nativeActorRef;
129
125
  const currentActorRef = targetActorRef === undefined
130
126
  ? actorRef
131
127
  : (0, actors_1.toFrameworkActorRef)(targetActorRef, actor.context.meshName);
132
- let current = root.cursor === 'prepared'
133
- ? await this.requireDeferredJoinJournal().markCommitted(root, currentActorRef)
134
- : root;
135
- if (current.cursor === 'delivered')
136
- return current;
137
- let lastError;
138
- for (let attempt = 0; attempt < 3; attempt++) {
139
- try {
140
- current = await this.requireDeferredJoinJournal().deliver(current, actor, currentActorRef, submitMailbox);
141
- return current;
142
- }
143
- catch (error) {
144
- lastError = error;
145
- if (attempt < 2) {
146
- await new Promise((resolve) => {
147
- const timer = setTimeout(resolve, 10 << attempt);
148
- timer.unref();
149
- });
150
- current =
151
- (await this.requireDeferredJoinJournal().recover(currentActorRef.actorId)) ?? current;
152
- }
128
+ if (completion.actor.actorId !== currentActorRef.actorId ||
129
+ completion.actor.objectGeneration !== currentActorRef.objectGeneration) {
130
+ throw new Error('Deferred Join completion generation fence is stale ' +
131
+ `(completion ${completion.actor.actorId}/${completion.actor.objectGeneration}, ` +
132
+ `actor ${currentActorRef.actorId}/${currentActorRef.objectGeneration}).`);
133
+ }
134
+ await submitMailbox(async () => {
135
+ if (completion.status === 'failed') {
136
+ await actor.onJoinCompleted?.({
137
+ status: 'failed',
138
+ operationId: completion.operationId,
139
+ kind: completion.kind
140
+ });
141
+ return;
153
142
  }
154
- }
155
- throw lastError;
156
- }
157
- requireDeferredJoinJournal() {
158
- const authority = this.options.authorityStore();
159
- const relocation = this.options.relocationStore();
160
- if (authority === undefined || relocation === undefined) {
161
- throw new Error('Cross-node deferred Actor Join requires Location and Relocation Stores.');
162
- }
163
- return new actors_1.ZLinkDeferredJoinAcceptedJournal(authority, relocation, this.options.messageSerializers);
143
+ await actor.onJoinCompleted?.({
144
+ status: 'accepted',
145
+ operationId: completion.operationId,
146
+ actor: currentActorRef,
147
+ reply: completion.rawReply.byteLength === 0
148
+ ? undefined
149
+ : completion.replyContentType === undefined
150
+ ? contracts_1.ZLinkMessage.fromEncoded(contracts_1.ZLinkEncodedPayload.from(completion.rawReply))
151
+ : (0, payload_codec_1.wrapFrameworkPayloadMessage)(runtime_message_1.ZLinkBufferMessage.from(completion.rawReply), this.options.messageSerializers, completion.replyContentType, undefined, 'reply')
152
+ });
153
+ });
164
154
  }
165
155
  async prepareSourceActorLeave(actor, sourceSpotId, signal) {
166
156
  if (sourceSpotId !== undefined) {
@@ -182,10 +172,9 @@ class ZLinkActorTransferRuntime {
182
172
  }
183
173
  await this.options.restoreEntrySpotActorJoined(actor, signal);
184
174
  }
185
- async beginSourceActorMove(actor, state, deferredOperationId) {
186
- if (deferredOperationId !== undefined &&
187
- this.options.actorHandoff.isProvisional(actor.context.actorId)) {
188
- this.promoteDeferredActorHandoff(actor, state, deferredOperationId);
175
+ async beginSourceActorMove(actor, state, deferredJoin = false) {
176
+ if (deferredJoin && this.options.actorHandoff.isProvisional(actor.context.actorId)) {
177
+ this.promoteDeferredActorHandoff(actor, state);
189
178
  }
190
179
  state.beginMove();
191
180
  if (!this.options.actorHandoff.isActive(actor.context.actorId)) {
@@ -193,30 +182,34 @@ class ZLinkActorTransferRuntime {
193
182
  }
194
183
  try {
195
184
  if (state.spotId !== undefined) {
196
- relocationDebug('source_actor_move.await_spot_transfer', {
197
- actorId: actor.context.actorId,
198
- spotId: String(state.spotId)
199
- });
185
+ if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
186
+ (0, diagnostics_1.relocationDebug)('source_actor_move.await_spot_transfer', {
187
+ actorId: actor.context.actorId,
188
+ spotId: String(state.spotId)
189
+ });
190
+ }
200
191
  await this.options.spotManager()?.beginActorTransfer(state.spotId, actor.context.actorId);
201
- relocationDebug('source_actor_move.spot_transfer_complete', {
202
- actorId: actor.context.actorId,
203
- spotId: String(state.spotId)
204
- });
192
+ if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
193
+ (0, diagnostics_1.relocationDebug)('source_actor_move.spot_transfer_complete', {
194
+ actorId: actor.context.actorId,
195
+ spotId: String(state.spotId)
196
+ });
197
+ }
205
198
  }
206
199
  }
207
200
  catch (error) {
208
- if (deferredOperationId === undefined) {
201
+ if (!deferredJoin) {
209
202
  this.options.actorHandoff.cancel(actor.context.actorId);
210
203
  }
211
204
  else {
212
- const admitted = this.admitDeferredSourcePrefix(actor, state, deferredOperationId);
205
+ const admitted = this.admitDeferredSourcePrefix(actor, state);
213
206
  void this.observeHandoffReplay(admitted.terminal);
214
207
  }
215
208
  state.endMove();
216
209
  throw error;
217
210
  }
218
211
  }
219
- async cancelSourceActorMove(actor, state, deferredOperationId, replayStart = Promise.resolve()) {
212
+ async cancelSourceActorMove(actor, state, deferredJoin = false, replayStart = Promise.resolve()) {
220
213
  try {
221
214
  if (state.spotId !== undefined) {
222
215
  await this.options.spotManager()?.cancelActorTransfer(state.spotId, actor.context.actorId);
@@ -224,12 +217,12 @@ class ZLinkActorTransferRuntime {
224
217
  }
225
218
  finally {
226
219
  try {
227
- if (deferredOperationId === undefined) {
220
+ if (!deferredJoin) {
228
221
  const admitted = this.admitCanceledSourcePrefix(actor, state, replayStart);
229
222
  void this.observeHandoffReplay(admitted.terminal);
230
223
  }
231
224
  else {
232
- const admitted = this.admitDeferredSourcePrefix(actor, state, deferredOperationId, replayStart);
225
+ const admitted = this.admitDeferredSourcePrefix(actor, state, replayStart);
233
226
  void this.observeHandoffReplay(admitted.terminal);
234
227
  }
235
228
  }
@@ -249,13 +242,13 @@ class ZLinkActorTransferRuntime {
249
242
  }
250
243
  return this.options.actorHandoff.admitCanceledPrefix(actor.context.actorId, queue, this.options.prepareApplicationJob, replayStart);
251
244
  }
252
- admitDeferredSourcePrefix(actor, state, operationId, replayStart = Promise.resolve()) {
245
+ admitDeferredSourcePrefix(actor, state, replayStart = Promise.resolve()) {
253
246
  const queue = this.sourceHandoffPrefixQueue(actor, state);
254
247
  if (queue === undefined) {
255
248
  this.options.actorHandoff.cancel(actor.context.actorId);
256
249
  return { terminal: Promise.resolve() };
257
250
  }
258
- return this.options.actorHandoff.admitDeferredPrefix(actor.context.actorId, operationId, queue, this.options.prepareApplicationJob, replayStart);
251
+ return this.options.actorHandoff.admitDeferredPrefix(actor.context.actorId, queue, this.options.prepareApplicationJob, replayStart);
259
252
  }
260
253
  async observeHandoffReplay(release) {
261
254
  try {
@@ -281,19 +274,19 @@ class ZLinkActorTransferRuntime {
281
274
  }
282
275
  return (drain) => manager.admitRoutedActorPacketPrefix(sourceSpotId, actor.context.actorId, drain);
283
276
  }
284
- async prepareSource(actor, state, signal, lifecycleAuthority = 'framework', deferredOperationId, relocation) {
285
- await this.beginSourceActorMove(actor, state, deferredOperationId);
277
+ async prepareSource(actor, state, signal, lifecycleAuthority = 'framework', deferredJoin = false, relocation) {
278
+ await this.beginSourceActorMove(actor, state, deferredJoin);
286
279
  const relocationMetric = state.meshName === undefined
287
280
  ? undefined
288
281
  : this.options.metrics?.startRelocation(state.meshName, 'actor', this.options.actorTransferRegistry.policy(state.actorType));
289
282
  const sourceSpotId = state.spotId;
290
283
  let sourceLeaveStarted = false;
291
- let sealId;
284
+ // The relocation operation owns its Session seal; the Actor keeps only
285
+ // its current binding (Session–Actor binding §8.1).
286
+ let sealedSession;
292
287
  try {
293
- if (state.remoteBoundSessionTarget !== undefined) {
294
- sealId = (0, node_crypto_1.randomUUID)();
295
- const sealedTarget = await this.sealBoundSessionRoute(actor, state, signal, relocation);
296
- state.setRemoteBoundSessionTarget(sealedTarget);
288
+ if (state.boundSession !== undefined) {
289
+ sealedSession = await this.sealBoundSessionRoute(actor, state, signal, relocation);
297
290
  this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
298
291
  }
299
292
  const transfer = await this.options.actorTransferRegistry.transferOut(actor, state.actorType, signal);
@@ -369,8 +362,7 @@ class ZLinkActorTransferRuntime {
369
362
  // transition. Keep the source shell available for that
370
363
  // callback, then release the old location and registry entry.
371
364
  void sourceLeaveCompletion.then(() => this.scheduleSourceDeparture(actor, sourceSpotId, true), (error) => {
372
- this.options.reportPostCommitError?.(error);
373
- this.scheduleSourceDeparture(actor, sourceSpotId, true);
365
+ this.scheduleSourceDeparture(actor, sourceSpotId, true, [error]);
374
366
  });
375
367
  }
376
368
  else {
@@ -386,10 +378,10 @@ class ZLinkActorTransferRuntime {
386
378
  this.coreSourceLeaves.delete(actor.context.actorId);
387
379
  const replayGate = createHandoffReplayGate();
388
380
  try {
389
- await this.cancelSourceActorMove(actor, state, deferredOperationId, replayGate.start);
381
+ await this.cancelSourceActorMove(actor, state, deferredJoin, replayGate.start);
390
382
  await this.restoreSourceActor(actor, sourceSpotId);
391
- if (sealId !== undefined) {
392
- await this.observeBoundSessionSealAbort(actor, state);
383
+ if (sealedSession !== undefined) {
384
+ await this.observeBoundSessionSealAbort(actor, state, sealedSession);
393
385
  }
394
386
  }
395
387
  finally {
@@ -402,11 +394,11 @@ class ZLinkActorTransferRuntime {
402
394
  relocationMetric?.complete('failed');
403
395
  const replayGate = createHandoffReplayGate();
404
396
  try {
405
- await this.cancelSourceActorMove(actor, state, deferredOperationId, replayGate.start);
397
+ await this.cancelSourceActorMove(actor, state, deferredJoin, replayGate.start);
406
398
  if (sourceLeaveStarted)
407
399
  await this.restoreSourceActor(actor, sourceSpotId);
408
- if (sealId !== undefined) {
409
- await this.observeBoundSessionSealAbort(actor, state);
400
+ if (sealedSession !== undefined) {
401
+ await this.observeBoundSessionSealAbort(actor, state, sealedSession);
410
402
  }
411
403
  }
412
404
  catch (rollbackError) {
@@ -419,10 +411,12 @@ class ZLinkActorTransferRuntime {
419
411
  }
420
412
  }
421
413
  async prepareMaintenanceSession(actor, state, signal, manageMembership = true, relocation) {
422
- relocationDebug('maintenance_session.begin', {
423
- actorId: actor.context.actorId,
424
- spotId: state.spotId === undefined ? undefined : String(state.spotId)
425
- });
414
+ if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
415
+ (0, diagnostics_1.relocationDebug)('maintenance_session.begin', {
416
+ actorId: actor.context.actorId,
417
+ spotId: state.spotId === undefined ? undefined : String(state.spotId)
418
+ });
419
+ }
426
420
  if (manageMembership) {
427
421
  await this.beginSourceActorMove(actor, state);
428
422
  }
@@ -430,21 +424,22 @@ class ZLinkActorTransferRuntime {
430
424
  state.beginMove();
431
425
  this.options.actorHandoff.begin(actor.context.actorId, requireSourceObjectGeneration(actor.context.actorId, state));
432
426
  }
433
- relocationDebug('maintenance_session.source_move_complete', {
434
- actorId: actor.context.actorId
435
- });
436
- let sealId;
427
+ if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
428
+ (0, diagnostics_1.relocationDebug)('maintenance_session.source_move_complete', {
429
+ actorId: actor.context.actorId
430
+ });
431
+ }
432
+ let sealedSession;
437
433
  try {
438
- if (state.remoteBoundSessionTarget !== undefined) {
439
- sealId = (0, node_crypto_1.randomUUID)();
440
- state.setRemoteBoundSessionTarget(await this.sealBoundSessionRoute(actor, state, signal, relocation));
434
+ if (state.boundSession !== undefined) {
435
+ sealedSession = await this.sealBoundSessionRoute(actor, state, signal, relocation);
441
436
  this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
442
437
  }
443
438
  const handoffBacklog = this.options.actorHandoff.snapshot(actor.context.actorId);
444
439
  let terminal = 'prepared';
445
440
  let replayResults = [];
446
441
  return {
447
- target: state.remoteBoundSessionTarget,
442
+ target: sealedSession,
448
443
  handoffBacklog,
449
444
  takeRelocationRelay: () => this.options.actorHandoff.takeRelocationRelay(actor.context.actorId),
450
445
  setReplayResults: (results) => {
@@ -452,19 +447,44 @@ class ZLinkActorTransferRuntime {
452
447
  replayResults = [...results];
453
448
  },
454
449
  commit: async (target, targetActorRef, targetOwnerFence) => {
455
- if (terminal === 'rolledBack')
450
+ if (terminal !== 'prepared')
456
451
  return;
457
- if (terminal === 'prepared') {
452
+ terminal = 'committed';
453
+ const failures = [];
454
+ try {
458
455
  this.options.actorHandoff.complete(actor.context.actorId, target, targetActorRef, replayResults, targetOwnerFence);
456
+ }
457
+ catch (error) {
458
+ failures.push(error);
459
+ }
460
+ try {
459
461
  if (manageMembership && state.spotId !== undefined) {
460
462
  await this.options
461
463
  .spotManager()
462
464
  ?.commitActorLeaveAfterTransfer(state.spotId, actor.context.actorId);
463
465
  }
466
+ }
467
+ catch (error) {
468
+ failures.push(error);
469
+ }
470
+ try {
464
471
  state.endMove();
465
- terminal = 'committed';
472
+ }
473
+ catch (error) {
474
+ failures.push(error);
475
+ }
476
+ if (failures.length > 0) {
477
+ throw failures.length === 1
478
+ ? failures[0]
479
+ : new AggregateError(failures, 'Actor source retirement failed.');
466
480
  }
467
481
  },
482
+ discard: (reason) => {
483
+ if (terminal !== 'prepared')
484
+ return;
485
+ terminal = 'rolledBack';
486
+ this.options.actorHandoff.failPending(actor.context.actorId, reason);
487
+ },
468
488
  rollback: async () => {
469
489
  if (terminal !== 'prepared')
470
490
  return;
@@ -483,8 +503,8 @@ class ZLinkActorTransferRuntime {
483
503
  state.endMove();
484
504
  }
485
505
  }
486
- if (sealId !== undefined) {
487
- await this.observeBoundSessionSealAbort(actor, state);
506
+ if (sealedSession !== undefined) {
507
+ await this.observeBoundSessionSealAbort(actor, state, sealedSession);
488
508
  }
489
509
  }
490
510
  finally {
@@ -518,8 +538,8 @@ class ZLinkActorTransferRuntime {
518
538
  state.endMove();
519
539
  }
520
540
  }
521
- if (sourceRestored && sealId !== undefined) {
522
- await this.observeBoundSessionSealAbort(actor, state);
541
+ if (sourceRestored && sealedSession !== undefined) {
542
+ await this.observeBoundSessionSealAbort(actor, state, sealedSession);
523
543
  }
524
544
  }
525
545
  finally {
@@ -571,7 +591,7 @@ class ZLinkActorTransferRuntime {
571
591
  return this.options.actorHandoff.acceptRelocatedTerminalRelay(operationId, replyRouteId, undefined, result, sourceNodeRid, targetAuthorityOwnerGeneration);
572
592
  }
573
593
  async sealBoundSessionRoute(actor, state, signal, relocation) {
574
- const target = state.remoteBoundSessionTarget;
594
+ const target = state.boundSession;
575
595
  const actorRef = state.nativeActorRef;
576
596
  if (target === undefined ||
577
597
  actorRef === undefined ||
@@ -651,12 +671,9 @@ class ZLinkActorTransferRuntime {
651
671
  serviceWireRelocation: { relocation, coordinator, session }
652
672
  };
653
673
  }
654
- async abortBoundSessionRouteSeal(actor, state, targetOverride) {
655
- const target = targetOverride ??
656
- (0, actors_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget);
674
+ async abortBoundSessionRouteSeal(actor, state, target) {
657
675
  const actorRef = state.nativeActorRef;
658
- if (target === undefined ||
659
- actorRef === undefined ||
676
+ if (actorRef === undefined ||
660
677
  target.bindingGeneration === undefined ||
661
678
  target.previousAuthorityOwnerGeneration === undefined ||
662
679
  target.previousOwnerLeaseGeneration === undefined) {
@@ -687,9 +704,9 @@ class ZLinkActorTransferRuntime {
687
704
  }
688
705
  await serviceWire.sendSessionRelocationRoute(target.routerChannelId, target.targetNodeRid, route, this.options.shutdownSignal?.());
689
706
  }
690
- async observeBoundSessionSealAbort(actor, state) {
707
+ async observeBoundSessionSealAbort(actor, state, sealedSession) {
691
708
  try {
692
- await this.abortBoundSessionRouteSeal(actor, state);
709
+ await this.abortBoundSessionRouteSeal(actor, state, sealedSession);
693
710
  }
694
711
  catch (error) {
695
712
  try {
@@ -725,44 +742,52 @@ class ZLinkActorTransferRuntime {
725
742
  });
726
743
  return { completion: promise, submitted };
727
744
  }
728
- scheduleSourceDeparture(actor, sourceSpotId, releaseLocation) {
729
- if (this.sourceDepartureTasks.has(actor.context.actorId))
730
- return;
731
- const task = this.finishSourceDeparture(actor, sourceSpotId, releaseLocation).finally(() => this.sourceDepartureTasks.delete(actor.context.actorId));
732
- this.sourceDepartureTasks.set(actor.context.actorId, task);
745
+ scheduleSourceDeparture(actor, sourceSpotId, releaseLocation, failures = []) {
746
+ void this.finishSourceDeparture(actor, sourceSpotId, releaseLocation, failures);
733
747
  }
734
- async finishSourceDeparture(actor, sourceSpotId, releaseLocation) {
735
- const retry = new actor_retry_delay_1.ZLinkActorRetryDelay();
736
- while (this.options.shutdownSignal?.()?.aborted !== true) {
748
+ async finishSourceDeparture(actor, sourceSpotId, releaseLocation, failures) {
749
+ if (sourceSpotId !== undefined) {
750
+ try {
751
+ await this.options
752
+ .spotManager()
753
+ ?.commitActorLeaveAfterTransfer(sourceSpotId, actor.context.actorId);
754
+ }
755
+ catch (error) {
756
+ failures.push(error);
757
+ }
758
+ }
759
+ if (releaseLocation) {
737
760
  try {
738
- if (sourceSpotId !== undefined) {
761
+ const state = this.options.actorManager()?.getState(actor.context.actorId);
762
+ if (state?.actorType !== undefined && state.ownsLocation) {
739
763
  await this.options
740
- .spotManager()
741
- ?.commitActorLeaveAfterTransfer(sourceSpotId, actor.context.actorId);
764
+ .locationLifecycle()
765
+ ?.releaseActor(state.actorType, actor.context.actorId);
766
+ state.markLocationReleased();
742
767
  }
743
- if (releaseLocation) {
744
- const state = this.options.actorManager()?.getState(actor.context.actorId);
745
- if (state?.actorType !== undefined && state.ownsLocation) {
746
- await this.options
747
- .locationLifecycle()
748
- ?.releaseActor(state.actorType, actor.context.actorId);
749
- state.markLocationReleased();
750
- }
751
- // Message Follow owns the bounded stale route after the native leave.
752
- // The source Actor shell must therefore be removed from the process
753
- // registry so a later relocation can materialize the same Actor ID on
754
- // this node without colliding with its previous incarnation.
755
- await this.options.actorManager()?.completeCoreRelocationSource(actor.context.actorId);
756
- }
757
- this.options.onSourceDepartureCompleted?.(actor.context.actorId);
758
- return;
759
768
  }
760
769
  catch (error) {
761
- this.options.reportPostCommitError?.(error);
762
- if (!(await retry.wait(this.options.shutdownSignal?.())))
763
- return;
770
+ failures.push(error);
764
771
  }
765
772
  }
773
+ try {
774
+ // Message Follow keeps its route separately from the retired application instance.
775
+ await this.options.actorManager()?.completeCoreRelocationSource(actor.context.actorId);
776
+ }
777
+ catch (error) {
778
+ failures.push(error);
779
+ }
780
+ try {
781
+ this.options.onSourceDepartureCompleted?.(actor.context.actorId);
782
+ }
783
+ catch (error) {
784
+ failures.push(error);
785
+ }
786
+ if (failures.length > 0) {
787
+ this.options.reportPostCommitError?.(failures.length === 1
788
+ ? failures[0]
789
+ : new AggregateError(failures, 'Actor source retirement failed.'));
790
+ }
766
791
  }
767
792
  async getOrCreateRoutedActor(actorId, actorType, actorRef, remoteBoundSessionTarget, actorCreateRequest, signal) {
768
793
  const actorManager = this.requireActorManager('Routed actor join requires ZLINK_ACTOR_MANAGER.');
@@ -777,7 +802,9 @@ class ZLinkActorTransferRuntime {
777
802
  }
778
803
  if (actorRef !== undefined) {
779
804
  state.setNativeActorRef(actorRef);
780
- state.setRemoteBoundSessionTarget(remoteBoundSessionTarget);
805
+ if (remoteBoundSessionTarget !== undefined) {
806
+ state.installBoundSessionBinding(remoteBoundSessionTarget);
807
+ }
781
808
  return { actor, actorRef: actorRef };
782
809
  }
783
810
  return { actor, actorRef: state.ensureNativeActorRef(this.options.primaryMeshNode()) };
@@ -791,12 +818,10 @@ class ZLinkActorTransferRuntime {
791
818
  }
792
819
  if (actorEntryNodeRid !== undefined)
793
820
  state.setEntryNodeRid(actorEntryNodeRid);
794
- state.setBoundSessionTransferTarget(remoteBoundSessionTarget);
821
+ // The relocation delivers the binding it carried; the target installs it
822
+ // through the one install rule (Session–Actor binding §6, §8).
795
823
  if (remoteBoundSessionTarget !== undefined) {
796
- state.setRemoteBoundSessionTarget((0, actors_1.mergeRemoteBoundSessionTarget)(remoteBoundSessionTarget, state.remoteBoundSessionTarget));
797
- }
798
- if (remoteBoundSessionTarget?.bindingGeneration !== undefined) {
799
- state.setBoundSessionBindingGeneration(remoteBoundSessionTarget.bindingGeneration);
824
+ state.installBoundSessionBinding(remoteBoundSessionTarget);
800
825
  }
801
826
  return {
802
827
  actor: materialized.actor,
@@ -935,24 +960,11 @@ class ZLinkActorTransferRuntime {
935
960
  return undefined;
936
961
  }
937
962
  }
938
- rememberRoutedActorTransferTarget(actorId, target) {
939
- if (target === undefined)
940
- return;
941
- const state = this.options.actorManager()?.getState(actorId);
942
- if (state === undefined) {
943
- return;
944
- }
945
- state.setBoundSessionTransferTarget(target);
946
- state.setRemoteBoundSessionTarget((0, actors_1.mergeRemoteBoundSessionTarget)(target, state.remoteBoundSessionTarget));
947
- if (target.bindingGeneration !== undefined) {
948
- state.setBoundSessionBindingGeneration(target.bindingGeneration);
949
- }
950
- }
951
963
  commitRoutedActor(actor, spotId, spot) {
952
964
  const state = this.options.actorManager()?.getState(actor.context.actorId);
953
965
  state?.setJoinedSpot(spotId, spot);
954
966
  const actorRef = state?.nativeActorRef;
955
- const binding = state?.boundSessionTransferTarget;
967
+ const binding = state?.boundSession;
956
968
  if (actorRef !== undefined &&
957
969
  binding?.sessionNodeRid !== undefined &&
958
970
  binding.sessionRid !== undefined &&
@@ -996,7 +1008,7 @@ class ZLinkActorTransferRuntime {
996
1008
  (0, routing_id_1.encodeRoutingIdStorageHex)(spotId))) {
997
1009
  throw new Error(`Actor '${actor.context.actorId}' Core location does not match the committed target SPOT.`);
998
1010
  }
999
- const deadline = performance.now() + 5_000;
1011
+ const deadline = performance.now() + TRANSFER_RESOLUTION_TIMEOUT_MS;
1000
1012
  const ownerNodeGeneration = node.status().lifecycleGeneration;
1001
1013
  if (ownerNodeGeneration <= 0n) {
1002
1014
  throw new Error(`Actor '${actor.context.actorId}' owner MeshNode has no valid lifecycle generation.`);
@@ -1020,7 +1032,7 @@ class ZLinkActorTransferRuntime {
1020
1032
  if (claim.status !== 'conflict' || performance.now() >= deadline) {
1021
1033
  break;
1022
1034
  }
1023
- await new Promise((resolve) => setTimeout(resolve, 10));
1035
+ await new Promise((resolve) => setTimeout(resolve, TRANSFER_POLL_INTERVAL_MS));
1024
1036
  }
1025
1037
  if (claim.status === 'conflict') {
1026
1038
  throw new Error(`Actor '${actor.context.actorId}' target location takeover was rejected.`);
@@ -1046,78 +1058,25 @@ class ZLinkActorTransferRuntime {
1046
1058
  }
1047
1059
  state.setRemoteActorPacketTarget(target);
1048
1060
  }
1049
- async claimNativeActorLocation(actor, spotId, spotMeshName) {
1050
- const state = this.options.actorManager()?.getState(actor.context.actorId);
1051
- const previousLocation = this.options
1052
- .locationLifecycle()
1053
- ?.actorLocationSnapshot(actor.context.actorId);
1054
- const snapshot = {
1055
- spotId: state?.spotId,
1056
- spot: state?.spot,
1057
- locationSpotId: previousLocation?.spotId,
1058
- spotMeshName: previousLocation?.meshName,
1059
- actorRef: previousLocation?.actorRef,
1060
- spotGeneration: previousLocation?.spotGeneration,
1061
- membershipEpoch: previousLocation?.membershipEpoch,
1062
- ownerNodeGeneration: previousLocation?.ownerNodeGeneration
1063
- };
1064
- await this.claimRoutedActorLocation(actor, spotId, spotMeshName);
1065
- return snapshot;
1066
- }
1067
- async publishRoutedActorOwnership(actor) {
1061
+ /**
1062
+ * Publishes the committed route of the Session seal that the relocation
1063
+ * operation carried to this target (command 44, Session–Actor binding §8.2).
1064
+ */
1065
+ async publishRoutedActorOwnership(actor, sealedSession) {
1068
1066
  const state = this.options.actorManager()?.getState(actor.context.actorId);
1069
1067
  const actorRef = state?.nativeActorRef;
1070
1068
  const generation = state?.locationGeneration;
1071
1069
  if (state === undefined || actorRef === undefined || generation === undefined)
1072
1070
  return;
1073
- const boundSessionTarget = (0, actors_1.preferredRemoteBoundSessionTarget)(state.remoteBoundSessionTarget, state.boundSessionTransferTarget);
1074
- if (boundSessionTarget?.serviceWireRelocation === undefined)
1071
+ if (sealedSession?.serviceWireRelocation === undefined)
1075
1072
  return;
1076
- await this.publishBoundSessionOwnership(actor.context.actorId, actorRef, generation, boundSessionTarget, state.ownerLeaseGeneration);
1073
+ await this.publishBoundSessionOwnership(actor.context.actorId, actorRef, generation, sealedSession, state.ownerLeaseGeneration);
1077
1074
  }
1078
1075
  async openRoutedActorSession(_actor) { }
1079
1076
  clearRoutedActor(actor) {
1080
1077
  this.options.actorManager()?.getState(actor.context.actorId)?.clearJoinedSpot();
1081
1078
  this.options.clearRemoteActorPacketTarget(actor.context.actorId);
1082
1079
  }
1083
- async rollbackNativeActorJoin(actor, snapshot) {
1084
- const state = this.options.actorManager()?.getState(actor.context.actorId);
1085
- const actorType = state?.actorType;
1086
- const lifecycle = this.options.locationLifecycle();
1087
- if (snapshot.spotId === undefined)
1088
- state?.clearJoinedSpot();
1089
- else
1090
- state?.setJoinedSpot(snapshot.spotId, snapshot.spot);
1091
- if (state?.ownsLocation !== true || actorType === undefined || lifecycle === undefined)
1092
- return;
1093
- if (snapshot.spotId === undefined) {
1094
- if (snapshot.locationSpotId === undefined ||
1095
- snapshot.spotGeneration === undefined ||
1096
- snapshot.membershipEpoch === undefined ||
1097
- snapshot.ownerNodeGeneration === undefined) {
1098
- throw new Error(`Actor '${actor.context.actorId}' cannot restore its Entry SPOT location without its exact generation fields.`);
1099
- }
1100
- await lifecycle.notifyActorLeftSpot(actorType, actor.context.actorId, snapshot.locationSpotId, snapshot.spotGeneration, snapshot.membershipEpoch, snapshot.ownerNodeGeneration);
1101
- return;
1102
- }
1103
- if (snapshot.actorRef === undefined) {
1104
- throw new Error(`Actor '${actor.context.actorId}' cannot restore its previous SPOT location without a native ref.`);
1105
- }
1106
- if (snapshot.spotMeshName === undefined ||
1107
- snapshot.spotGeneration === undefined ||
1108
- snapshot.membershipEpoch === undefined ||
1109
- snapshot.ownerNodeGeneration === undefined) {
1110
- throw new Error(`Actor '${actor.context.actorId}' cannot restore its previous SPOT location without its exact generation fields.`);
1111
- }
1112
- const restored = await lifecycle.takeoverActorJoinedSpot(actorType, actor.context.actorId, snapshot.actorRef, snapshot.spotMeshName, snapshot.spotId, snapshot.spotGeneration, snapshot.membershipEpoch, snapshot.ownerNodeGeneration, async () => state.clearAfterDestroy());
1113
- if (restored.status === 'conflict') {
1114
- throw new Error(`Actor '${actor.context.actorId}' previous SPOT location could not be restored.`);
1115
- }
1116
- if (restored.generation !== undefined)
1117
- state.setLocationGeneration(restored.generation);
1118
- if (restored.claimed !== undefined)
1119
- state.setOwnerLeaseGeneration(restored.claimed.leaseGeneration);
1120
- }
1121
1080
  async rollbackRoutedActor(actor, signal) {
1122
1081
  const manager = this.options.actorManager();
1123
1082
  const state = manager?.getState(actor.context.actorId);
@@ -1131,7 +1090,6 @@ class ZLinkActorTransferRuntime {
1131
1090
  }
1132
1091
  catch (error) {
1133
1092
  locationError = error;
1134
- void lifecycle.releaseActorEventually(actorType, actor.context.actorId);
1135
1093
  }
1136
1094
  }
1137
1095
  try {
@@ -1201,7 +1159,8 @@ class ZLinkActorTransferRuntime {
1201
1159
  previousAuthorityOwnerGeneration: target.previousAuthorityOwnerGeneration,
1202
1160
  targetAuthorityOwnerGeneration: ownershipGeneration,
1203
1161
  targetNodeRid: String(actorRef.nodeRid),
1204
- targetNodeGeneration: authority.allocation.descriptorLifecycleGeneration
1162
+ targetNodeGeneration: authority.allocation.descriptorLifecycleGeneration,
1163
+ targetOwnerLeaseGeneration: authority.ownerLeaseGeneration
1205
1164
  }
1206
1165
  }, this.options.shutdownSignal?.());
1207
1166
  return;
@@ -1209,14 +1168,9 @@ class ZLinkActorTransferRuntime {
1209
1168
  }
1210
1169
  }
1211
1170
  exports.ZLinkActorTransferRuntime = ZLinkActorTransferRuntime;
1212
- function relocationDebug(marker, detail) {
1213
- if (process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION !== '1')
1214
- return;
1215
- console.error('[zlink.runtime.relocation]', marker, detail);
1216
- }
1217
- function deferredJoinTerminalKey(root) {
1218
- return (`${root.actor.actorId}:${root.actor.objectGeneration.toString()}:` +
1219
- (0, operation_identity_1.operationIdentityKey)(root.operationId));
1171
+ function deferredJoinTerminalKey(completion) {
1172
+ return (`${completion.actor.actorId}:${completion.actor.objectGeneration.toString()}:` +
1173
+ (0, operation_identity_1.operationIdentityKey)(completion.operationId));
1220
1174
  }
1221
1175
  function waitForOperation(operation, signal) {
1222
1176
  if (signal === undefined)
@@ -1256,7 +1210,7 @@ async function waitForActorAuthorityRetry(deadlineAtMs, signal, cause) {
1256
1210
  throw new Error('Actor target authority deadline expired.', { cause });
1257
1211
  }
1258
1212
  await new Promise((resolve, reject) => {
1259
- const timer = setTimeout(resolve, Math.min(10, remaining));
1213
+ const timer = setTimeout(resolve, Math.min(TRANSFER_POLL_INTERVAL_MS, remaining));
1260
1214
  timer.unref();
1261
1215
  const abort = () => {
1262
1216
  clearTimeout(timer);