@zlink-systems/framework 0.30.0 → 0.30.2

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 (456) hide show
  1. package/LICENSE +150 -68
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
  4. package/dist/contracts/Channels/Calls.d.ts +2 -1
  5. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  6. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  7. package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
  8. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  9. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  10. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  16. package/dist/contracts/Handlers/Attributes.d.ts +5 -13
  17. package/dist/contracts/Handlers/Attributes.js +7 -11
  18. package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
  19. package/dist/contracts/Handlers/JsonContract.js +4 -153
  20. package/dist/contracts/Locations/Rows.d.ts +2 -0
  21. package/dist/contracts/Spots/Contracts.d.ts +6 -1
  22. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  23. package/dist/nest-integration.d.ts +1 -1
  24. package/dist/nest-integration.js +2 -1
  25. package/dist/runtime/abort.d.ts +5 -0
  26. package/dist/runtime/abort.js +10 -0
  27. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  28. package/dist/runtime/actors/actor-client.d.ts +1 -2
  29. package/dist/runtime/actors/actor-client.js +52 -57
  30. package/dist/runtime/actors/actor-context.d.ts +2 -0
  31. package/dist/runtime/actors/actor-context.js +46 -9
  32. package/dist/runtime/actors/actor-handoff.d.ts +8 -4
  33. package/dist/runtime/actors/actor-handoff.js +219 -92
  34. package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
  35. package/dist/runtime/actors/actor-local-native-join.js +13 -12
  36. package/dist/runtime/actors/actor-mailbox.js +27 -1
  37. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  38. package/dist/runtime/actors/actor-remote-wire.js +15 -0
  39. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  40. package/dist/runtime/actors/actor-reply.js +29 -0
  41. package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
  42. package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
  43. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  44. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  45. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  46. package/dist/runtime/actors/index.d.ts +8 -3
  47. package/dist/runtime/actors/index.js +55 -27
  48. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  49. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  50. package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
  51. package/dist/runtime/admission.d.ts +9 -1
  52. package/dist/runtime/admission.js +56 -23
  53. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
  54. package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
  55. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
  56. package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
  57. package/dist/runtime/application-jobs/contracts.d.ts +12 -1
  58. package/dist/runtime/backend/contracts/index.d.ts +37 -12
  59. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  60. package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
  61. package/dist/runtime/backend/mesh-completion-table.js +154 -49
  62. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
  63. package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
  64. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
  65. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
  66. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  67. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
  68. package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
  69. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
  70. package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
  71. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  72. package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
  73. package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
  74. package/dist/runtime/backend/runtime-message.d.ts +1 -0
  75. package/dist/runtime/backend/runtime-message.js +5 -0
  76. package/dist/runtime/backend/runtime-values.d.ts +1 -0
  77. package/dist/runtime/backend/runtime-values.js +2 -1
  78. package/dist/runtime/channels/channel-clients.d.ts +2 -0
  79. package/dist/runtime/channels/channel-clients.js +75 -23
  80. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
  81. package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
  82. package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
  83. package/dist/runtime/channels/channel-dispatch-services.js +45 -0
  84. package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
  85. package/dist/runtime/channels/channel-dispatchers.js +62 -54
  86. package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
  87. package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
  88. package/dist/runtime/channels/channel-envelope.d.ts +2 -0
  89. package/dist/runtime/channels/channel-envelope.js +146 -28
  90. package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
  91. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  94. package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
  95. package/dist/runtime/channels/channel-runtime-manager.js +16 -16
  96. package/dist/runtime/channels/channel-transports.d.ts +18 -16
  97. package/dist/runtime/channels/channel-transports.js +77 -58
  98. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  99. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  100. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  101. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  102. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  103. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  104. package/dist/runtime/channels/local-spot-route-transport.js +2 -1
  105. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
  106. package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
  107. package/dist/runtime/channels/source-spot-router.d.ts +2 -2
  108. package/dist/runtime/channels/source-spot-router.js +4 -4
  109. package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
  110. package/dist/runtime/channels/spot-node-route-transport.js +4 -4
  111. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
  112. package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
  113. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
  114. package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
  115. package/dist/runtime/diagnostics/flow-context.js +19 -7
  116. package/dist/runtime/diagnostics/index.js +4 -9
  117. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  118. package/dist/runtime/diagnostics/message-flow.js +35 -5
  119. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  120. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  121. package/dist/runtime/execution/index.d.ts +4 -2
  122. package/dist/runtime/execution/index.js +33 -10
  123. package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
  124. package/dist/runtime/execution/serial-execution-queue.js +22 -2
  125. package/dist/runtime/execution/state-lane.d.ts +2 -0
  126. package/dist/runtime/execution/state-lane.js +5 -0
  127. package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
  128. package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
  129. package/dist/runtime/foundation/durable-service-request.js +98 -0
  130. package/dist/runtime/foundation/operation-identity.d.ts +1 -0
  131. package/dist/runtime/foundation/operation-identity.js +5 -1
  132. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  133. package/dist/runtime/foundation/operation-registry.js +86 -18
  134. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
  135. package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
  136. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  137. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  138. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  139. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  140. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
  141. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
  142. package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
  143. package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
  144. package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
  145. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  146. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  147. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  148. package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
  149. package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
  150. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
  151. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  152. package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
  153. package/dist/runtime/foundation/service-topology-registry.js +61 -27
  154. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  155. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  156. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  157. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  158. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
  159. package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
  160. package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
  161. package/dist/runtime/handlers/handler-instance-scope.js +54 -11
  162. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  163. package/dist/runtime/host/actor-packet-relay.js +59 -72
  164. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  165. package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
  166. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  167. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  168. package/dist/runtime/host/application-job-queue.d.ts +40 -7
  169. package/dist/runtime/host/application-job-queue.js +137 -42
  170. package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
  171. package/dist/runtime/host/entry-actor-runtime.js +3 -0
  172. package/dist/runtime/host/index.d.ts +12 -2
  173. package/dist/runtime/host/index.js +300 -202
  174. package/dist/runtime/host/location-runtime-owner.js +2 -6
  175. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  176. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  177. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  178. package/dist/runtime/host/remote-bound-session-relay.js +73 -208
  179. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  180. package/dist/runtime/host/route-mesh-runtime.js +6 -4
  181. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  182. package/dist/runtime/host/runtime-shutdown.js +3 -2
  183. package/dist/runtime/host/service-relocation-control.d.ts +1 -0
  184. package/dist/runtime/host/service-relocation-control.js +10 -4
  185. package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
  186. package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
  187. package/dist/runtime/host/spot-address-transport.js +3 -2
  188. package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
  189. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  190. package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
  191. package/dist/runtime/locations/actor-location-claims.js +34 -19
  192. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  193. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  194. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  195. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  196. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  197. package/dist/runtime/locations/descriptor-publication.js +11 -0
  198. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  199. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  200. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  201. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  202. package/dist/runtime/locations/index.d.ts +1 -0
  203. package/dist/runtime/locations/index.js +1 -0
  204. package/dist/runtime/locations/lease-tracker.js +1 -6
  205. package/dist/runtime/locations/lifecycle.d.ts +1 -2
  206. package/dist/runtime/locations/lifecycle.js +2 -5
  207. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  208. package/dist/runtime/locations/location-store-repository.js +363 -139
  209. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  210. package/dist/runtime/locations/relocation-blob.js +52 -1
  211. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  212. package/dist/runtime/locations/request-source-resolver.js +80 -0
  213. package/dist/runtime/locations/resolvers.js +1 -1
  214. package/dist/runtime/locations/runtime.d.ts +7 -3
  215. package/dist/runtime/locations/runtime.js +61 -53
  216. package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
  217. package/dist/runtime/messaging/framework-json-v1.js +38 -294
  218. package/dist/runtime/messaging/packet-name.d.ts +1 -1
  219. package/dist/runtime/messaging/packet-name.js +8 -24
  220. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  221. package/dist/runtime/messaging/payload-codec.js +7 -6
  222. package/dist/runtime/messaging/request-result.d.ts +2 -0
  223. package/dist/runtime/messaging/request-result.js +57 -0
  224. package/dist/runtime/messaging/submission-result.d.ts +1 -0
  225. package/dist/runtime/messaging/submission-result.js +5 -2
  226. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
  227. package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
  228. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
  229. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
  230. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
  231. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
  232. package/dist/runtime/spots/index.d.ts +21 -11
  233. package/dist/runtime/spots/index.js +243 -178
  234. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  235. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  236. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  237. package/dist/runtime/spots/spot-activation-state.js +7 -7
  238. package/dist/runtime/spots/spot-activation.d.ts +7 -3
  239. package/dist/runtime/spots/spot-activation.js +140 -52
  240. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  241. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  242. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  243. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  244. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  245. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  246. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  247. package/dist/runtime/spots/spot-entry-activation.js +20 -11
  248. package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
  249. package/dist/runtime/spots/spot-handler-registry.js +24 -10
  250. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  251. package/dist/runtime/spots/spot-manager-public.js +2 -2
  252. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  253. package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
  254. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  255. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  256. package/dist/runtime/spots/spot-outbound.d.ts +3 -0
  257. package/dist/runtime/spots/spot-outbound.js +27 -18
  258. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  259. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
  260. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
  261. package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
  262. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  263. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  264. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  265. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
  266. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  267. package/dist/runtime/spots/spot-timer.js +288 -103
  268. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  269. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  270. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  271. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  272. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  273. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  274. package/dist/runtime/streams/bound-session-service.js +6 -11
  275. package/dist/runtime/streams/index.d.ts +3 -2
  276. package/dist/runtime/streams/index.js +6 -4
  277. package/dist/runtime/streams/managed-stream.js +3 -2
  278. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  279. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  280. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  281. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  282. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
  283. package/dist/runtime/streams/stream-session-runtime.js +14 -31
  284. package/dist/runtime/workers/index.js +1 -1
  285. package/package.json +3 -3
  286. package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
  287. package/src/contracts/Channels/Calls.ts +2 -1
  288. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  289. package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
  290. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  291. package/src/contracts/Configuration/Builders.ts +4 -1
  292. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  293. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  294. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  295. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  296. package/src/contracts/Handlers/Attributes.ts +14 -21
  297. package/src/contracts/Handlers/JsonContract.ts +8 -216
  298. package/src/contracts/Locations/Rows.ts +2 -0
  299. package/src/contracts/Spots/Contracts.ts +10 -1
  300. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  301. package/src/nest-integration.ts +1 -0
  302. package/src/runtime/abort.ts +12 -0
  303. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  304. package/src/runtime/actors/actor-client.ts +100 -85
  305. package/src/runtime/actors/actor-context.ts +49 -9
  306. package/src/runtime/actors/actor-handoff.ts +291 -110
  307. package/src/runtime/actors/actor-join-relocation.ts +3 -0
  308. package/src/runtime/actors/actor-local-native-join.ts +21 -26
  309. package/src/runtime/actors/actor-mailbox.ts +40 -2
  310. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  311. package/src/runtime/actors/actor-remote-wire.ts +17 -0
  312. package/src/runtime/actors/actor-reply.ts +42 -0
  313. package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
  314. package/src/runtime/actors/actor-routed-json-request.ts +10 -2
  315. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  316. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  317. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  318. package/src/runtime/actors/index.ts +60 -32
  319. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  320. package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
  321. package/src/runtime/admission.ts +69 -21
  322. package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
  323. package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
  324. package/src/runtime/application-jobs/contracts.ts +16 -1
  325. package/src/runtime/backend/contracts/index.ts +92 -18
  326. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  327. package/src/runtime/backend/mesh-completion-table.ts +160 -57
  328. package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
  329. package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
  330. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
  331. package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
  332. package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
  333. package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
  334. package/src/runtime/backend/raw-binding-port.ts +7 -2
  335. package/src/runtime/backend/runtime-message.ts +6 -0
  336. package/src/runtime/backend/runtime-values.ts +1 -0
  337. package/src/runtime/channels/channel-clients.ts +132 -58
  338. package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
  339. package/src/runtime/channels/channel-dispatch-services.ts +69 -1
  340. package/src/runtime/channels/channel-dispatchers.ts +136 -90
  341. package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
  342. package/src/runtime/channels/channel-envelope.ts +225 -31
  343. package/src/runtime/channels/channel-outbound-operations.ts +22 -8
  344. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  345. package/src/runtime/channels/channel-runtime-manager.ts +41 -17
  346. package/src/runtime/channels/channel-transports.ts +171 -112
  347. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  348. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  349. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  350. package/src/runtime/channels/local-spot-route-transport.ts +3 -1
  351. package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
  352. package/src/runtime/channels/source-spot-router.ts +8 -4
  353. package/src/runtime/channels/spot-node-route-transport.ts +8 -4
  354. package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
  355. package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
  356. package/src/runtime/diagnostics/flow-context.ts +20 -7
  357. package/src/runtime/diagnostics/index.ts +1 -7
  358. package/src/runtime/diagnostics/message-flow.ts +47 -9
  359. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  360. package/src/runtime/execution/index.ts +40 -14
  361. package/src/runtime/execution/serial-execution-queue.ts +33 -4
  362. package/src/runtime/execution/state-lane.ts +7 -0
  363. package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
  364. package/src/runtime/foundation/durable-service-request.ts +137 -0
  365. package/src/runtime/foundation/operation-identity.ts +5 -1
  366. package/src/runtime/foundation/operation-registry.ts +98 -20
  367. package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
  368. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  369. package/src/runtime/foundation/service-mailbox.ts +8 -0
  370. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  371. package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
  372. package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
  373. package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
  374. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  375. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  376. package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
  377. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
  378. package/src/runtime/foundation/service-topology-registry.ts +91 -36
  379. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  380. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  381. package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
  382. package/src/runtime/handlers/handler-instance-scope.ts +67 -16
  383. package/src/runtime/host/actor-packet-relay.ts +113 -94
  384. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  385. package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
  386. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  387. package/src/runtime/host/application-job-queue.ts +160 -41
  388. package/src/runtime/host/entry-actor-runtime.ts +4 -0
  389. package/src/runtime/host/index.ts +473 -271
  390. package/src/runtime/host/location-runtime-owner.ts +2 -6
  391. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  392. package/src/runtime/host/remote-bound-session-relay.ts +88 -271
  393. package/src/runtime/host/route-mesh-runtime.ts +12 -6
  394. package/src/runtime/host/runtime-shutdown.ts +15 -4
  395. package/src/runtime/host/service-relocation-control.ts +11 -5
  396. package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
  397. package/src/runtime/host/spot-address-transport.ts +4 -2
  398. package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
  399. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  400. package/src/runtime/locations/actor-location-claims.ts +52 -30
  401. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  402. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  403. package/src/runtime/locations/auto-connect-types.ts +0 -1
  404. package/src/runtime/locations/descriptor-publication.ts +7 -0
  405. package/src/runtime/locations/domain-store-contract.ts +5 -0
  406. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  407. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  408. package/src/runtime/locations/index.ts +1 -0
  409. package/src/runtime/locations/lease-tracker.ts +2 -9
  410. package/src/runtime/locations/lifecycle.ts +8 -26
  411. package/src/runtime/locations/location-store-repository.ts +628 -152
  412. package/src/runtime/locations/relocation-blob.ts +75 -1
  413. package/src/runtime/locations/request-source-resolver.ts +138 -0
  414. package/src/runtime/locations/resolvers.ts +2 -2
  415. package/src/runtime/locations/runtime.ts +98 -64
  416. package/src/runtime/messaging/framework-json-v1.ts +5 -325
  417. package/src/runtime/messaging/packet-name.ts +5 -25
  418. package/src/runtime/messaging/payload-codec.ts +8 -11
  419. package/src/runtime/messaging/request-result.ts +62 -0
  420. package/src/runtime/messaging/submission-result.ts +5 -1
  421. package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
  422. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
  423. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
  424. package/src/runtime/spots/index.ts +389 -283
  425. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  426. package/src/runtime/spots/spot-activation-state.ts +12 -19
  427. package/src/runtime/spots/spot-activation.ts +198 -96
  428. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  429. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  430. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  431. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  432. package/src/runtime/spots/spot-entry-activation.ts +33 -21
  433. package/src/runtime/spots/spot-handler-registry.ts +56 -12
  434. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  435. package/src/runtime/spots/spot-manager-public.ts +2 -2
  436. package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
  437. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  438. package/src/runtime/spots/spot-outbound.ts +39 -19
  439. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  440. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
  441. package/src/runtime/spots/spot-runtime-ports.ts +1 -1
  442. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  443. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  444. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
  445. package/src/runtime/spots/spot-timer.ts +418 -158
  446. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  447. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  448. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  449. package/src/runtime/streams/bound-session-service.ts +7 -10
  450. package/src/runtime/streams/index.ts +12 -6
  451. package/src/runtime/streams/managed-stream.ts +4 -2
  452. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  453. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  454. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  455. package/src/runtime/streams/stream-session-runtime.ts +13 -34
  456. package/src/runtime/workers/index.ts +1 -1
@@ -57,7 +57,6 @@ function createHandoffReplayGate() {
57
57
  }
58
58
  class ZLinkActorTransferRuntime {
59
59
  options;
60
- coreSourceLeaves = new Map();
61
60
  // Spot Actor membership sections 4-5: Join completion idempotency is
62
61
  // process-local. These maps end with the process; nothing is replayed.
63
62
  activeDeferredJoinTerminals = new Map();
@@ -69,8 +68,15 @@ class ZLinkActorTransferRuntime {
69
68
  const actorId = actor.context.actorId;
70
69
  this.options.actorHandoff.beginProvisional(actorId, requireSourceObjectGeneration(actorId, state));
71
70
  }
72
- promoteDeferredActorHandoff(actor, _state) {
73
- this.options.actorHandoff.promoteProvisional(actor.context.actorId);
71
+ /** Relocation activation owns admission; handler terminals are observed independently. */
72
+ admitRelocationPrefix(actor, objectGeneration, packets, start, onResult) {
73
+ const manager = this.options.spotManager();
74
+ if (manager === undefined)
75
+ throw new Error('Relocated Actor has no local FIFO owner.');
76
+ const admitted = this.options.actorHandoff.admitTransferredPrefix(actor.context.actorId, objectGeneration, packets, (records) => manager.admitSourceActorPacketPrefix(actor.context.actorId, records), this.options.prepareApplicationJob, start, (packet, result) => {
77
+ void this.observeHandoffReplay(onResult(packet, result));
78
+ });
79
+ void this.observeHandoffReplay(admitted.terminal);
74
80
  }
75
81
  async completeDeferredActorHandoff(actor, target, _targetActorRef) {
76
82
  const actorId = actor.context.actorId;
@@ -83,8 +89,8 @@ class ZLinkActorTransferRuntime {
83
89
  const admitted = this.options.actorHandoff.admitDeferredPrefix(actorId, (drain) => manager.admitRoutedActorPacketPrefix(target.spotId, actorId, drain), this.options.prepareApplicationJob);
84
90
  void this.observeHandoffReplay(admitted.terminal);
85
91
  }
86
- async cancelDeferredActorHandoff(actor, state) {
87
- const admitted = this.admitDeferredSourcePrefix(actor, state);
92
+ async cancelDeferredActorHandoff(actor, _state) {
93
+ const admitted = this.admitDeferredSourcePrefix(actor);
88
94
  void this.observeHandoffReplay(admitted.terminal);
89
95
  }
90
96
  prepareDeferredJoinAccepted(actorId, operationId, actorRef, rawReply, replyContentType) {
@@ -162,20 +168,7 @@ class ZLinkActorTransferRuntime {
162
168
  }
163
169
  await this.options.notifyEntrySpotActorLeft(actor, signal);
164
170
  }
165
- async restoreSourceActor(actor, sourceSpotId, signal) {
166
- if (sourceSpotId !== undefined) {
167
- const manager = this.options.spotManager();
168
- if (manager !== undefined) {
169
- await manager.restoreActorAfterFailedTransfer(sourceSpotId, actor, signal);
170
- return;
171
- }
172
- }
173
- await this.options.restoreEntrySpotActorJoined(actor, signal);
174
- }
175
- async beginSourceActorMove(actor, state, deferredJoin = false) {
176
- if (deferredJoin && this.options.actorHandoff.isProvisional(actor.context.actorId)) {
177
- this.promoteDeferredActorHandoff(actor, state);
178
- }
171
+ async beginSourceActorMove(actor, state) {
179
172
  state.beginMove();
180
173
  if (!this.options.actorHandoff.isActive(actor.context.actorId)) {
181
174
  this.options.actorHandoff.begin(actor.context.actorId, requireSourceObjectGeneration(actor.context.actorId, state));
@@ -198,18 +191,12 @@ class ZLinkActorTransferRuntime {
198
191
  }
199
192
  }
200
193
  catch (error) {
201
- if (!deferredJoin) {
202
- this.options.actorHandoff.cancel(actor.context.actorId);
203
- }
204
- else {
205
- const admitted = this.admitDeferredSourcePrefix(actor, state);
206
- void this.observeHandoffReplay(admitted.terminal);
207
- }
194
+ this.options.actorHandoff.cancel(actor.context.actorId);
208
195
  state.endMove();
209
196
  throw error;
210
197
  }
211
198
  }
212
- async cancelSourceActorMove(actor, state, deferredJoin = false, replayStart = Promise.resolve()) {
199
+ async cancelSourceActorMove(actor, state, replayStart = Promise.resolve()) {
213
200
  try {
214
201
  if (state.spotId !== undefined) {
215
202
  await this.options.spotManager()?.cancelActorTransfer(state.spotId, actor.context.actorId);
@@ -217,38 +204,32 @@ class ZLinkActorTransferRuntime {
217
204
  }
218
205
  finally {
219
206
  try {
220
- if (!deferredJoin) {
221
- const admitted = this.admitCanceledSourcePrefix(actor, state, replayStart);
222
- void this.observeHandoffReplay(admitted.terminal);
223
- }
224
- else {
225
- const admitted = this.admitDeferredSourcePrefix(actor, state, replayStart);
226
- void this.observeHandoffReplay(admitted.terminal);
227
- }
207
+ const admitted = this.admitCanceledSourcePrefix(actor, replayStart);
208
+ void this.observeHandoffReplay(admitted.terminal);
228
209
  }
229
210
  finally {
230
211
  state.endMove();
231
212
  }
232
213
  }
233
214
  }
234
- admitCanceledSourcePrefix(actor, state, replayStart = Promise.resolve()) {
215
+ admitCanceledSourcePrefix(actor, replayStart = Promise.resolve()) {
235
216
  // The seal-era ingress hold returns to the source queue on a precommit
236
217
  // abort. Rejection stays reserved for a source Actor whose dispatch is
237
218
  // gone, because held packets then have no queue left to return to.
238
- const queue = this.sourceHandoffPrefixQueue(actor, state);
239
- if (queue === undefined) {
219
+ const manager = this.options.spotManager();
220
+ if (manager === undefined) {
240
221
  this.options.actorHandoff.cancel(actor.context.actorId);
241
222
  return { terminal: Promise.resolve() };
242
223
  }
243
- return this.options.actorHandoff.admitCanceledPrefix(actor.context.actorId, queue, this.options.prepareApplicationJob, replayStart);
224
+ return this.options.actorHandoff.admitCanceledPrefix(actor.context.actorId, (records) => manager.admitSourceActorPacketPrefix(actor.context.actorId, records), this.options.prepareApplicationJob, replayStart);
244
225
  }
245
- admitDeferredSourcePrefix(actor, state, replayStart = Promise.resolve()) {
246
- const queue = this.sourceHandoffPrefixQueue(actor, state);
247
- if (queue === undefined) {
226
+ admitDeferredSourcePrefix(actor, replayStart = Promise.resolve()) {
227
+ const manager = this.options.spotManager();
228
+ if (manager === undefined) {
248
229
  this.options.actorHandoff.cancel(actor.context.actorId);
249
230
  return { terminal: Promise.resolve() };
250
231
  }
251
- return this.options.actorHandoff.admitDeferredPrefix(actor.context.actorId, queue, this.options.prepareApplicationJob, replayStart);
232
+ return this.options.actorHandoff.admitDeferredPrefix(actor.context.actorId, (records) => manager.admitSourceActorPacketPrefix(actor.context.actorId, records), this.options.prepareApplicationJob, replayStart);
252
233
  }
253
234
  async observeHandoffReplay(release) {
254
235
  try {
@@ -266,175 +247,48 @@ class ZLinkActorTransferRuntime {
266
247
  }
267
248
  }
268
249
  }
269
- sourceHandoffPrefixQueue(actor, state) {
270
- const sourceSpotId = state.spotId;
271
- const manager = this.options.spotManager();
272
- if (sourceSpotId === undefined || manager === undefined) {
273
- return undefined;
250
+ async prepareMaintenanceSession(actor, state, signal, manageMembership = true, relocation, relocationTarget) {
251
+ if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
252
+ (0, diagnostics_1.relocationDebug)('maintenance_session.begin', {
253
+ actorId: actor.context.actorId,
254
+ spotId: state.spotId === undefined ? undefined : String(state.spotId)
255
+ });
274
256
  }
275
- return (drain) => manager.admitRoutedActorPacketPrefix(sourceSpotId, actor.context.actorId, drain);
276
- }
277
- async prepareSource(actor, state, signal, lifecycleAuthority = 'framework', deferredJoin = false, relocation) {
278
- await this.beginSourceActorMove(actor, state, deferredJoin);
279
- const relocationMetric = state.meshName === undefined
280
- ? undefined
281
- : this.options.metrics?.startRelocation(state.meshName, 'actor', this.options.actorTransferRegistry.policy(state.actorType));
282
- const sourceSpotId = state.spotId;
283
- let sourceLeaveStarted = false;
284
- // The relocation operation owns its Session seal; the Actor keeps only
285
- // its current binding (Session–Actor binding §8.1).
286
- let sealedSession;
257
+ // Relocation 04 §4.1: the Session owner seals a bound Actor's binding
258
+ // (command 42/43) before the source stops that Actor's application
259
+ // dispatch, so Session messages that arrive after the seal wait at the
260
+ // Session owner and never enter the source handoff backlog. A failed seal
261
+ // leaves the source dispatching; a dispatch stop that fails after the seal
262
+ // releases the matching seal with command 44 abort. The relocation
263
+ // operation owns this seal; the Actor keeps only its current binding
264
+ // (Session–Actor binding §8.1).
265
+ const bound = state.boundSession !== undefined;
266
+ const sealedSession = bound
267
+ ? await this.sealBoundSessionRoute(actor, state, signal, relocation, relocationTarget)
268
+ : undefined;
287
269
  try {
288
- if (state.boundSession !== undefined) {
289
- sealedSession = await this.sealBoundSessionRoute(actor, state, signal, relocation);
290
- this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
270
+ if (manageMembership) {
271
+ await this.beginSourceActorMove(actor, state);
291
272
  }
292
- const transfer = await this.options.actorTransferRegistry.transferOut(actor, state.actorType, signal);
293
- // The captured state is handed off inline with the join request; the
294
- // Relocation Store no longer carries relocation state payloads
295
- // (spec 28 §2 — direct transfer is the only handoff original).
296
- relocationMetric?.recordBytes(transfer.state.toEncodedPayload().toBytes().byteLength);
297
- if (lifecycleAuthority === 'framework') {
298
- sourceLeaveStarted = true;
299
- await this.prepareSourceActorLeave(actor, sourceSpotId, signal);
273
+ else {
274
+ state.beginMove();
275
+ this.options.actorHandoff.begin(actor.context.actorId, requireSourceObjectGeneration(actor.context.actorId, state));
300
276
  }
301
- const coreSourceLeave = lifecycleAuthority === 'core'
302
- ? this.beginCoreSourceLeave(actor.context.actorId)
303
- : undefined;
304
- const sourceLeaveCompletion = coreSourceLeave?.completion;
305
- const handoffBacklog = lifecycleAuthority === 'core'
306
- ? this.options.actorHandoff.snapshotCoreBacklog(actor.context.actorId)
307
- : this.options.actorHandoff.snapshot(actor.context.actorId);
308
- let phase = 'prepared';
309
- let committedTargetOwnerFence;
310
- return {
311
- ...transfer,
312
- handoffBacklog,
313
- sourceLeaveCompletion,
314
- sourceLeaveSubmitted: coreSourceLeave?.submitted,
315
- onSourceLeaveSubmitted: (notify) => {
316
- const pending = this.coreSourceLeaves.get(actor.context.actorId);
317
- if (pending === undefined) {
318
- throw new Error(`Actor '${actor.context.actorId}' has no pending Core source leave.`);
319
- }
320
- pending.notifySubmitted = notify;
321
- },
322
- observeTargetAuthority: async (target, targetActorRef, observeSignal) => {
323
- const authority = this.options.authorityStore();
324
- if (authority === undefined ||
325
- target.targetOwnerId === undefined ||
326
- target.ownerLeaseGeneration === undefined ||
327
- target.targetNodeGeneration === undefined) {
328
- throw new Error(`Actor '${actor.context.actorId}' relocation target has no complete authority fence.`);
329
- }
330
- const committed = await authority.readAuthority((0, authority_key_codec_1.encodeAuthorityKey)('actor', actor.context.actorId), observeSignal);
331
- if (committed.kind !== 'snapshot' ||
332
- committed.ownerId !== target.targetOwnerId ||
333
- committed.ownerLeaseGeneration !== target.ownerLeaseGeneration ||
334
- committed.allocation.descriptorLifecycleGeneration !== target.targetNodeGeneration ||
335
- !(0, routing_id_1.routingIdsEqual)(committed.allocation.descriptor.rid, target.targetNodeRid) ||
336
- committed.objectGeneration !== targetActorRef.objectGeneration) {
337
- throw new Error(`Actor '${actor.context.actorId}' relocation target authority was not committed exactly.`);
338
- }
339
- committedTargetOwnerFence = committedActorOwnerFence(actor.context.actorId, targetActorRef, committed);
340
- },
341
- commit: (target, targetActorRef, results, releaseLocation = true) => {
342
- if (phase !== 'prepared')
343
- return;
344
- if (committedTargetOwnerFence === undefined) {
345
- throw new Error(`Actor '${actor.context.actorId}' handoff has no committed target authority fence.`);
346
- }
347
- phase = 'committed';
348
- relocationMetric?.complete('completed');
349
- try {
350
- this.options.actorHandoff.complete(actor.context.actorId, target, targetActorRef, results, committedTargetOwnerFence);
351
- }
352
- catch (error) {
353
- // The target has already committed. Local Message Follow setup is now
354
- // post-commit work and must not turn the accepted transfer into a
355
- // source rollback that can no longer undo the target.
356
- this.options.reportPostCommitError?.(error);
357
- }
358
- finally {
359
- const releaseSourceLocation = lifecycleAuthority === 'core' && releaseLocation;
360
- if (releaseSourceLocation && sourceLeaveCompletion !== undefined) {
361
- // Core sends the source leave control after the authority
362
- // transition. Keep the source shell available for that
363
- // callback, then release the old location and registry entry.
364
- void sourceLeaveCompletion.then(() => this.scheduleSourceDeparture(actor, sourceSpotId, true), (error) => {
365
- this.scheduleSourceDeparture(actor, sourceSpotId, true, [error]);
366
- });
367
- }
368
- else {
369
- this.scheduleSourceDeparture(actor, sourceSpotId, releaseSourceLocation);
370
- }
371
- }
372
- },
373
- rollback: async () => {
374
- if (phase !== 'prepared')
375
- return;
376
- phase = 'rolledBack';
377
- relocationMetric?.complete('aborted');
378
- this.coreSourceLeaves.delete(actor.context.actorId);
379
- const replayGate = createHandoffReplayGate();
380
- try {
381
- await this.cancelSourceActorMove(actor, state, deferredJoin, replayGate.start);
382
- await this.restoreSourceActor(actor, sourceSpotId);
383
- if (sealedSession !== undefined) {
384
- await this.observeBoundSessionSealAbort(actor, state, sealedSession);
385
- }
386
- }
387
- finally {
388
- replayGate.open();
389
- }
390
- }
391
- };
392
277
  }
393
278
  catch (error) {
394
- relocationMetric?.complete('failed');
395
- const replayGate = createHandoffReplayGate();
396
- try {
397
- await this.cancelSourceActorMove(actor, state, deferredJoin, replayGate.start);
398
- if (sourceLeaveStarted)
399
- await this.restoreSourceActor(actor, sourceSpotId);
400
- if (sealedSession !== undefined) {
401
- await this.observeBoundSessionSealAbort(actor, state, sealedSession);
402
- }
403
- }
404
- catch (rollbackError) {
405
- throw new AggregateError([error, rollbackError], 'Actor source leave and rollback both failed.');
406
- }
407
- finally {
408
- replayGate.open();
279
+ if (sealedSession !== undefined) {
280
+ await this.observeBoundSessionSealAbort(actor, state, sealedSession);
409
281
  }
410
282
  throw error;
411
283
  }
412
- }
413
- async prepareMaintenanceSession(actor, state, signal, manageMembership = true, relocation) {
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
- }
420
- if (manageMembership) {
421
- await this.beginSourceActorMove(actor, state);
422
- }
423
- else {
424
- state.beginMove();
425
- this.options.actorHandoff.begin(actor.context.actorId, requireSourceObjectGeneration(actor.context.actorId, state));
426
- }
284
+ if (bound)
285
+ this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
427
286
  if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
428
287
  (0, diagnostics_1.relocationDebug)('maintenance_session.source_move_complete', {
429
288
  actorId: actor.context.actorId
430
289
  });
431
290
  }
432
- let sealedSession;
433
291
  try {
434
- if (state.boundSession !== undefined) {
435
- sealedSession = await this.sealBoundSessionRoute(actor, state, signal, relocation);
436
- this.options.actorHandoff.sealConnectionBoundIngress(actor.context.actorId);
437
- }
438
292
  const handoffBacklog = this.options.actorHandoff.snapshot(actor.context.actorId);
439
293
  let terminal = 'prepared';
440
294
  let replayResults = [];
@@ -492,11 +346,11 @@ class ZLinkActorTransferRuntime {
492
346
  const replayGate = createHandoffReplayGate();
493
347
  try {
494
348
  if (manageMembership) {
495
- await this.cancelSourceActorMove(actor, state, undefined, replayGate.start);
349
+ await this.cancelSourceActorMove(actor, state, replayGate.start);
496
350
  }
497
351
  else {
498
352
  try {
499
- const admitted = this.admitCanceledSourcePrefix(actor, state, replayGate.start);
353
+ const admitted = this.admitCanceledSourcePrefix(actor, replayGate.start);
500
354
  void this.observeHandoffReplay(admitted.terminal);
501
355
  }
502
356
  finally {
@@ -519,14 +373,14 @@ class ZLinkActorTransferRuntime {
519
373
  try {
520
374
  if (manageMembership) {
521
375
  try {
522
- await this.cancelSourceActorMove(actor, state, undefined, replayGate.start);
376
+ await this.cancelSourceActorMove(actor, state, replayGate.start);
523
377
  sourceRestored = true;
524
378
  }
525
379
  catch { }
526
380
  }
527
381
  else {
528
382
  try {
529
- const admitted = this.admitCanceledSourcePrefix(actor, state, replayGate.start);
383
+ const admitted = this.admitCanceledSourcePrefix(actor, replayGate.start);
530
384
  void this.observeHandoffReplay(admitted.terminal);
531
385
  sourceRestored = true;
532
386
  }
@@ -548,39 +402,6 @@ class ZLinkActorTransferRuntime {
548
402
  throw error;
549
403
  }
550
404
  }
551
- async notifyCoreSourceLeave(actor, callback) {
552
- const pending = this.coreSourceLeaves.get(actor.context.actorId);
553
- let callbackResult;
554
- try {
555
- callbackResult = Promise.resolve(callback());
556
- }
557
- catch (error) {
558
- callbackResult = Promise.reject(error);
559
- }
560
- // Submission, not the callback result, releases the target Join. Observe
561
- // a fast rejection while the submission ACK is in flight without making
562
- // that rejection an unhandled promise.
563
- void callbackResult.catch(() => { });
564
- try {
565
- if (pending !== undefined) {
566
- if (pending.notifySubmitted === undefined) {
567
- throw new Error(`Actor '${actor.context.actorId}' has no Core source leave submission notifier.`);
568
- }
569
- await pending.notifySubmitted();
570
- pending.resolveSubmitted();
571
- }
572
- await callbackResult;
573
- pending?.resolve();
574
- }
575
- catch (error) {
576
- pending?.rejectSubmitted(error);
577
- pending?.reject(error);
578
- throw error;
579
- }
580
- finally {
581
- this.coreSourceLeaves.delete(actor.context.actorId);
582
- }
583
- }
584
405
  async completeRelocationSourceLeave(actor, sourceSpotId, signal) {
585
406
  await this.prepareSourceActorLeave(actor, sourceSpotId, signal);
586
407
  }
@@ -590,13 +411,16 @@ class ZLinkActorTransferRuntime {
590
411
  relayCanonicalMaintenanceTerminal(operationId, replyRouteId, result, sourceNodeRid, targetAuthorityOwnerGeneration) {
591
412
  return this.options.actorHandoff.acceptRelocatedTerminalRelay(operationId, replyRouteId, undefined, result, sourceNodeRid, targetAuthorityOwnerGeneration);
592
413
  }
593
- async sealBoundSessionRoute(actor, state, signal, relocation) {
414
+ async sealBoundSessionRoute(actor, state, signal, relocation, relocationTarget) {
594
415
  const target = state.boundSession;
595
416
  const actorRef = state.nativeActorRef;
596
417
  if (target === undefined ||
597
418
  actorRef === undefined ||
598
419
  target.bindingGeneration === undefined ||
599
420
  target.bindingGeneration <= 0n ||
421
+ target.sessionOwnerNodeGeneration === undefined ||
422
+ target.sessionOwnerId === undefined ||
423
+ target.sessionOwnerLeaseGeneration === undefined ||
600
424
  state.locationGeneration === undefined ||
601
425
  state.locationGeneration < 0n ||
602
426
  state.ownerLeaseGeneration === undefined ||
@@ -605,48 +429,47 @@ class ZLinkActorTransferRuntime {
605
429
  }
606
430
  const serviceWire = this.options.sessionRelocationWire?.();
607
431
  const authorityStore = this.options.authorityStore();
608
- const descriptors = this.options.liveDescriptors;
609
432
  if (relocation === undefined ||
433
+ relocationTarget === undefined ||
610
434
  serviceWire === undefined ||
611
435
  authorityStore === undefined ||
612
- descriptors === undefined ||
613
436
  target.sessionRid === undefined) {
614
437
  throw new Error(`Actor '${actor.context.actorId}' Session relocation requires the command 42/43 service-wire path.`);
615
438
  }
616
- const [authority, live] = await Promise.all([
617
- authorityStore.readAuthority((0, authority_key_codec_1.encodeAuthorityKey)('actor', actor.context.actorId), signal),
618
- descriptors(target.routerChannelId, signal)
619
- ]);
439
+ const authority = await authorityStore.readAuthority((0, authority_key_codec_1.encodeAuthorityKey)('actor', actor.context.actorId), signal);
620
440
  const local = this.options.primaryMeshNode().status();
621
- const sessionOwner = live.find((value) => String(value.rid) === String(target.targetNodeRid));
622
441
  if (authority.kind !== 'snapshot' ||
623
- sessionOwner === undefined ||
624
- String(local.routingId) !== String(actorRef.nodeRid) ||
442
+ !(0, routing_id_1.routingIdsEqual)(local.routingId, actorRef.nodeRid) ||
625
443
  authority.objectGeneration !== actorRef.generation ||
626
444
  authority.authorityOwnerGeneration !== state.locationGeneration ||
627
445
  authority.ownerLeaseGeneration !== state.ownerLeaseGeneration ||
628
- String(authority.allocation.descriptor.rid) !== String(actorRef.nodeRid) ||
446
+ !(0, routing_id_1.routingIdsEqual)(authority.allocation.descriptor.rid, actorRef.nodeRid) ||
629
447
  authority.allocation.descriptorLifecycleGeneration !== local.lifecycleGeneration ||
630
448
  (target.sessionNodeRid !== undefined &&
631
- String(target.sessionNodeRid) !== String(target.targetNodeRid))) {
449
+ !(0, routing_id_1.routingIdsEqual)(target.sessionNodeRid, target.targetNodeRid))) {
632
450
  throw new Error(`Actor '${actor.context.actorId}' Session route service-wire source fence is stale.`);
633
451
  }
452
+ const sourceNodeRid = local.routingId;
634
453
  const coordinator = {
635
454
  ownerId: authority.ownerId,
636
455
  leaseGeneration: authority.ownerLeaseGeneration,
637
- nodeRid: String(local.routingId),
456
+ nodeRid: sourceNodeRid,
638
457
  nodeGeneration: local.lifecycleGeneration,
639
458
  expectedAuthorityStoreVersion: authority.storeVersion.value
640
459
  };
460
+ // Session-Actor binding §4: command 42 carries the Session owner identity
461
+ // stored at bind unchanged.
641
462
  const session = {
642
- sessionOwnerNodeRid: String(target.targetNodeRid),
643
- sessionOwnerNodeGeneration: sessionOwner.lifecycleGeneration,
644
- sessionOwnerId: sessionOwner.ownerId,
645
- sessionOwnerLeaseGeneration: sessionOwner.leaseGeneration,
646
- sessionRid: String(target.sessionRid),
463
+ sessionOwnerNodeRid: target.targetNodeRid,
464
+ sessionOwnerNodeGeneration: target.sessionOwnerNodeGeneration,
465
+ sessionOwnerId: target.sessionOwnerId,
466
+ sessionOwnerLeaseGeneration: target.sessionOwnerLeaseGeneration,
467
+ sessionRid: target.sessionRid,
647
468
  bindingGeneration: target.bindingGeneration
648
469
  };
649
470
  const request = {
471
+ targetNodeRid: relocationTarget.rid,
472
+ targetNodeGeneration: relocationTarget.lifecycleGeneration,
650
473
  relocation,
651
474
  coordinator,
652
475
  senderRole: 'source',
@@ -654,7 +477,7 @@ class ZLinkActorTransferRuntime {
654
477
  actor: {
655
478
  actorId: actor.context.actorId,
656
479
  generation: actorRef.generation,
657
- nodeRid: String(actorRef.nodeRid)
480
+ nodeRid: sourceNodeRid
658
481
  },
659
482
  targetNodeGeneration: local.lifecycleGeneration,
660
483
  authorityOwnerGeneration: authority.authorityOwnerGeneration,
@@ -662,7 +485,9 @@ class ZLinkActorTransferRuntime {
662
485
  },
663
486
  session
664
487
  };
665
- await serviceWire.requestSessionRelocationSeal(target.routerChannelId, target.targetNodeRid, request, signal);
488
+ const response = await serviceWire.requestSessionRelocationSeal(target.routerChannelId, target.targetNodeRid, request, signal);
489
+ if (response.sealResult === 'bindingAbsent')
490
+ return undefined;
666
491
  return {
667
492
  ...target,
668
493
  previousAuthorityOwnerGeneration: authority.authorityOwnerGeneration,
@@ -691,7 +516,7 @@ class ZLinkActorTransferRuntime {
691
516
  actor: {
692
517
  actorId: actor.context.actorId,
693
518
  generation: actorRef.generation,
694
- nodeRid: String(actorRef.nodeRid)
519
+ nodeRid: actorRef.nodeRid
695
520
  },
696
521
  session: serviceFence.session,
697
522
  route: {
@@ -717,78 +542,6 @@ class ZLinkActorTransferRuntime {
717
542
  }
718
543
  }
719
544
  }
720
- beginCoreSourceLeave(actorId) {
721
- let resolve;
722
- let reject;
723
- const promise = new Promise((accept, fail) => {
724
- resolve = accept;
725
- reject = fail;
726
- });
727
- let resolveSubmitted;
728
- let rejectSubmitted;
729
- const submitted = new Promise((accept, fail) => {
730
- resolveSubmitted = accept;
731
- rejectSubmitted = fail;
732
- });
733
- void promise.catch(() => { });
734
- void submitted.catch(() => { });
735
- this.coreSourceLeaves.set(actorId, {
736
- promise,
737
- resolve,
738
- reject,
739
- submitted,
740
- resolveSubmitted,
741
- rejectSubmitted
742
- });
743
- return { completion: promise, submitted };
744
- }
745
- scheduleSourceDeparture(actor, sourceSpotId, releaseLocation, failures = []) {
746
- void this.finishSourceDeparture(actor, sourceSpotId, releaseLocation, failures);
747
- }
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) {
760
- try {
761
- const state = this.options.actorManager()?.getState(actor.context.actorId);
762
- if (state?.actorType !== undefined && state.ownsLocation) {
763
- await this.options
764
- .locationLifecycle()
765
- ?.releaseActor(state.actorType, actor.context.actorId);
766
- state.markLocationReleased();
767
- }
768
- }
769
- catch (error) {
770
- failures.push(error);
771
- }
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
- }
791
- }
792
545
  async getOrCreateRoutedActor(actorId, actorType, actorRef, remoteBoundSessionTarget, actorCreateRequest, signal) {
793
546
  const actorManager = this.requireActorManager('Routed actor join requires ZLINK_ACTOR_MANAGER.');
794
547
  const actor = actorRef === undefined
@@ -1018,7 +771,7 @@ class ZLinkActorTransferRuntime {
1018
771
  ?.readAuthority((0, authority_key_codec_1.encodeAuthorityKey)('actor', actor.context.actorId));
1019
772
  if (authority?.kind === 'snapshot' &&
1020
773
  authority.allocation.state === 'active' &&
1021
- String(authority.allocation.descriptor.rid) === String(node.status().routingId) &&
774
+ (0, routing_id_1.routingIdsEqual)(authority.allocation.descriptor.rid, node.status().routingId) &&
1022
775
  authority.allocation.descriptorLifecycleGeneration === ownerNodeGeneration) {
1023
776
  state.setLocationGeneration(authority.authorityOwnerGeneration);
1024
777
  state.setOwnerLeaseGeneration(authority.ownerLeaseGeneration);
@@ -1141,9 +894,10 @@ class ZLinkActorTransferRuntime {
1141
894
  authority.objectGeneration !== actorRef.generation ||
1142
895
  authority.authorityOwnerGeneration !== ownershipGeneration ||
1143
896
  authority.ownerLeaseGeneration !== targetOwnerLeaseGeneration ||
1144
- String(authority.allocation.descriptor.rid) !== String(actorRef.nodeRid)) {
897
+ !(0, routing_id_1.routingIdsEqual)(authority.allocation.descriptor.rid, actorRef.nodeRid)) {
1145
898
  throw new Error(`Actor '${actorId}' command 44 target authority fence is stale.`);
1146
899
  }
900
+ const targetNodeRid = actorRef.nodeRid;
1147
901
  await serviceWire.sendSessionRelocationRoute(target.routerChannelId, target.targetNodeRid, {
1148
902
  relocation: serviceFence.relocation,
1149
903
  coordinator: serviceFence.coordinator,
@@ -1151,14 +905,14 @@ class ZLinkActorTransferRuntime {
1151
905
  actor: {
1152
906
  actorId,
1153
907
  generation: actorRef.generation,
1154
- nodeRid: String(actorRef.nodeRid)
908
+ nodeRid: targetNodeRid
1155
909
  },
1156
910
  session: serviceFence.session,
1157
911
  route: {
1158
912
  action: 'commit',
1159
913
  previousAuthorityOwnerGeneration: target.previousAuthorityOwnerGeneration,
1160
914
  targetAuthorityOwnerGeneration: ownershipGeneration,
1161
- targetNodeRid: String(actorRef.nodeRid),
915
+ targetNodeRid,
1162
916
  targetNodeGeneration: authority.allocation.descriptorLifecycleGeneration,
1163
917
  targetOwnerLeaseGeneration: authority.ownerLeaseGeneration
1164
918
  }