@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
@@ -12,6 +12,7 @@ import type {
12
12
  } from '../../contracts';
13
13
  import { ZLinkFrameworkException, ZLinkSpotKind } from '../../contracts';
14
14
  import { ZLinkConfigurationException } from '../../contracts/Configuration/ConfigurationException';
15
+ import { throwIfAborted } from '../abort';
15
16
  import type { Message } from '../../contracts/Common/Message';
16
17
  import {
17
18
  ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
@@ -38,6 +39,7 @@ import {
38
39
  } from '../actors/actor-message-follow-context';
39
40
  import { streamMetadataMap } from '../actors/bound-session-wire';
40
41
  import { decodeRoutingId, normalizeRoutingId, routingIdsEqual } from '../routing-id';
42
+ import { encodeSessionDisconnected } from '../actors/session-disconnected-wire';
41
43
  import { ZLinkSubmitStatus } from '../messaging/submission-result';
42
44
  import type { DefaultZLinkSpotManager, ZLinkSpotNodeRuntimeManager } from '../spots';
43
45
  import type { ZLinkDetachedTaskRunner } from '../spots/spot-actor-join-dispatch';
@@ -109,37 +111,22 @@ export class ZLinkActorPacketRelay {
109
111
 
110
112
  async notifyBoundActorDisconnected(
111
113
  actor: ZLinkSessionActor,
112
- signal?: AbortSignal
114
+ signal?: AbortSignal,
115
+ binding?: ServiceStreamSessionBinding
113
116
  ): Promise<void> {
114
- const state = this.options.actorManager()?.getState(actor.actorId);
115
- const currentRemoteBoundSessionTarget =
116
- state?.spotId === undefined ? undefined : state.remoteBoundSessionTarget;
117
- const currentRemoteActorPacketTarget =
118
- state?.spotId === undefined ? undefined : state.remoteActorPacketTarget;
119
- const remoteTarget =
120
- currentRemoteBoundSessionTarget ??
121
- currentRemoteActorPacketTarget ??
122
- (state?.spotId === undefined ? undefined : this.targets.cachedTargetForActor(actor));
123
- if (remoteTarget !== undefined) {
124
- await this.notifyRemoteActorDisconnected(actor.actorId, remoteTarget, signal, actor.ref);
125
- return;
126
- }
117
+ // The Session binding owns this route, including after relocation and detach (§5, §7).
127
118
  const actorRefTarget = this.targets.targetForActorRef(actor.ref);
128
119
  if (actorRefTarget !== undefined) {
129
- await this.notifyRemoteActorDisconnected(actor.actorId, actorRefTarget, signal, actor.ref);
130
- return;
131
- }
132
- if (state?.spotId !== undefined && state.actor !== undefined) {
133
- const handled = await this.requireSpotManager().notifyJoinedSpotActorDisconnected(
134
- state.spotId,
135
- state.actor,
136
- signal
120
+ await this.notifyRemoteActorDisconnected(
121
+ actor.actorId,
122
+ actorRefTarget,
123
+ signal,
124
+ actor.ref,
125
+ binding
137
126
  );
138
- if (handled) {
139
- return;
140
- }
127
+ return;
141
128
  }
142
- await this.notifyActorDisconnectedById(actor.actorId, signal);
129
+ await this.notifyLocalActorDisconnectedById(actor.actorId, signal, binding, actor.ref);
143
130
  }
144
131
 
145
132
  clearRemoteActorPacketTarget(actorId: string): void {
@@ -154,44 +141,41 @@ export class ZLinkActorPacketRelay {
154
141
  return this.targets.targetForState(actorId);
155
142
  }
156
143
 
157
- async notifyActorDisconnectedById(actorId: string, signal?: AbortSignal): Promise<void> {
158
- const state = this.options.actorManager()?.getState(actorId);
159
- const remoteTarget =
160
- state === undefined
161
- ? undefined
162
- : (state.remoteBoundSessionTarget ?? state.remoteActorPacketTarget);
163
- if (remoteTarget !== undefined) {
164
- await this.notifyRemoteActorDisconnected(actorId, remoteTarget, signal);
165
- return;
166
- }
167
- await this.notifyLocalActorDisconnectedById(actorId, signal);
168
- }
169
-
170
- async notifyLocalActorDisconnectedById(actorId: string, signal?: AbortSignal): Promise<void> {
144
+ async notifyLocalActorDisconnectedById(
145
+ actorId: string,
146
+ signal?: AbortSignal,
147
+ binding?: ServiceStreamSessionBinding,
148
+ bindingActorRef?: ActorRef
149
+ ): Promise<void> {
150
+ throwIfAborted(signal);
171
151
  const state = this.options.actorManager()?.getState(actorId);
172
- if (state?.spotId !== undefined && state.actor !== undefined) {
173
- const handled = await this.requireSpotManager().notifyJoinedSpotActorDisconnected(
174
- state.spotId,
175
- state.actor,
176
- signal
177
- );
178
- if (handled) {
179
- return;
180
- }
181
- }
182
- const localActor = state?.actor;
183
- if (localActor === undefined) {
184
- throw new Error(`Actor '${actorId}' does not have a local actor instance.`);
185
- }
186
- const meshName = state?.meshName;
187
- if (meshName === undefined) {
188
- throw new Error(`Actor '${actorId}' does not have a RouteMesh identity.`);
152
+ const frame = this.disconnectedFrame(actorId, binding);
153
+ const header = RuntimeMessage.fromOwned(Buffer.from(frame.header));
154
+ const body = RuntimeMessage.fromOwned(frame.payload);
155
+ try {
156
+ if (state?.spotId === undefined)
157
+ await this.requireSpotNodeRuntime().dispatchEntryActorPacket(
158
+ 'local',
159
+ actorId,
160
+ [header, body],
161
+ false,
162
+ undefined,
163
+ bindingActorRef
164
+ );
165
+ else
166
+ await this.requireSpotManager().dispatchRoutedActorPacket(
167
+ 'local',
168
+ state.spotId,
169
+ actorId,
170
+ [header, body],
171
+ false,
172
+ undefined,
173
+ bindingActorRef
174
+ );
175
+ } finally {
176
+ header.close();
177
+ body.close();
189
178
  }
190
- await this.requireSpotNodeRuntime().notifyEntrySpotActorDisconnected(
191
- meshName,
192
- localActor,
193
- signal
194
- );
195
179
  }
196
180
 
197
181
  async receiveRemoteActorPacketRelay(
@@ -285,21 +269,17 @@ export class ZLinkActorPacketRelay {
285
269
  }
286
270
  return { ok: true, response: { acknowledged: true } };
287
271
  }
288
- if (frameHeader.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
289
- this.requireCurrentRemoteBinding(relay, _routeContext);
290
- await this.notifyLocalActorDisconnectedById(relay.actorId);
291
- return {
292
- ok: true,
293
- actorPacketTarget: encodeRemoteActorPacketTarget(
294
- this.actorPacketTargetForState(relay.actorId)
295
- )
296
- };
297
- }
298
- if (remoteBoundSessionTarget !== undefined) {
272
+ if (
273
+ remoteBoundSessionTarget !== undefined &&
274
+ frameHeader.name !== ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET
275
+ ) {
299
276
  this.requireCurrentRemoteBinding(relay, _routeContext);
300
277
  }
301
278
  const state = this.options.actorManager()?.getState(relay.actorId);
302
- if (frameHeader.kind === ZLinkStreamMessageKind.Send) {
279
+ if (
280
+ frameHeader.kind === ZLinkStreamMessageKind.Send ||
281
+ frameHeader.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET
282
+ ) {
303
283
  const dispatch =
304
284
  state?.spotId === undefined
305
285
  ? this.requireSpotNodeRuntime().dispatchEntryActorPacket(
@@ -319,6 +299,15 @@ export class ZLinkActorPacketRelay {
319
299
  remoteBoundSessionTarget,
320
300
  fallbackActorRef
321
301
  );
302
+ if (frameHeader.name === ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET) {
303
+ await dispatch;
304
+ return {
305
+ ok: true,
306
+ actorPacketTarget: encodeRemoteActorPacketTarget(
307
+ this.actorPacketTargetForState(relay.actorId)
308
+ )
309
+ };
310
+ }
322
311
  // Spec 05 §1.3: a one-way Session Actor relay completes at relay
323
312
  // queue admission, not after the remote application turn. In
324
313
  // particular, a handler may register a deferred Join whose relocation
@@ -761,23 +750,21 @@ export class ZLinkActorPacketRelay {
761
750
  actorId: string,
762
751
  remoteTarget: ZLinkRemoteBoundSessionTarget | ZLinkRemoteActorPacketTarget,
763
752
  signal?: AbortSignal,
764
- bindingActorRef?: ActorRef
753
+ bindingActorRef?: ActorRef,
754
+ binding?: ServiceStreamSessionBinding
765
755
  ): Promise<void> {
766
756
  const spotKind: ZLinkSpotKind | undefined =
767
757
  'spotKind' in remoteTarget ? (remoteTarget.spotKind as ZLinkSpotKind | undefined) : undefined;
768
- const header: ZLinkStreamFrameHeader = {
769
- kind: ZLinkStreamMessageKind.Send,
770
- codec: ZLinkStreamCodec.Raw,
771
- flags: ZLinkStreamHeaderFlags.None,
772
- name: ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET,
773
- metadata: new Map()
774
- };
758
+ const frame = this.disconnectedFrame(
759
+ actorId,
760
+ binding,
761
+ 'sessionNodeRid' in remoteTarget ? remoteTarget : undefined
762
+ );
775
763
  const payload = encodeRemoteActorPacketRelayPayload({
776
764
  actorId,
777
765
  routerChannelId: remoteTarget.routerChannelId,
778
766
  bindingActorRef,
779
- header: encodeStreamHeader(header),
780
- payload: Buffer.alloc(0)
767
+ ...frame
781
768
  });
782
769
  if ((spotKind ?? ZLinkSpotKind.Entry) === ZLinkSpotKind.Entry) {
783
770
  await this.options.routeTransport.request(
@@ -806,20 +793,37 @@ export class ZLinkActorPacketRelay {
806
793
  );
807
794
  }
808
795
 
796
+ private disconnectedFrame(
797
+ actorId: string,
798
+ binding?: ServiceStreamSessionBinding,
799
+ target?: ZLinkRemoteBoundSessionTarget
800
+ ) {
801
+ const current =
802
+ binding === undefined
803
+ ? (this.options.actorManager()?.getState(actorId)?.boundSession ?? target)
804
+ : undefined;
805
+ const header: ZLinkStreamFrameHeader = {
806
+ kind: ZLinkStreamMessageKind.Send,
807
+ codec: ZLinkStreamCodec.Raw,
808
+ flags: ZLinkStreamHeaderFlags.None,
809
+ name: ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET,
810
+ metadata: new Map()
811
+ };
812
+ return {
813
+ header: encodeStreamHeader(header),
814
+ payload: encodeSessionDisconnected(
815
+ binding?.sessionOwnerNodeRid ?? current?.sessionNodeRid,
816
+ binding?.sessionOwnerNodeGeneration ?? current?.sessionOwnerNodeGeneration,
817
+ binding?.bindingGeneration ?? current?.bindingGeneration
818
+ )
819
+ };
820
+ }
821
+
809
822
  private requireCurrentRemoteBinding(
810
823
  relay: ReturnType<typeof decodeRemoteActorPacketRelayPayload>,
811
824
  routeContext: ZLinkRouteMessageContext
812
825
  ): void {
813
- const state = this.options.actorManager()?.getState(relay.actorId);
814
- const current = state?.boundSession;
815
- if (
816
- current === undefined ||
817
- current.sessionNodeRid === undefined ||
818
- !routingIdsEqual(current.sessionNodeRid, routeContext.sourceNodeRid) ||
819
- current.bindingGeneration === undefined ||
820
- relay.bindingGeneration === undefined ||
821
- current.bindingGeneration !== BigInt(relay.bindingGeneration)
822
- ) {
826
+ if (!this.matchesCurrentRemoteBinding(relay, routeContext)) {
823
827
  throw createInternalFrameworkException(
824
828
  ZLinkFrameworkInternalErrorKind.ActorSessionNotBound,
825
829
  `Actor '${relay.actorId}' bound session identity is stale.`,
@@ -828,6 +832,21 @@ export class ZLinkActorPacketRelay {
828
832
  }
829
833
  }
830
834
 
835
+ private matchesCurrentRemoteBinding(
836
+ relay: ReturnType<typeof decodeRemoteActorPacketRelayPayload>,
837
+ routeContext: ZLinkRouteMessageContext
838
+ ): boolean {
839
+ const current = this.options.actorManager()?.getState(relay.actorId)?.boundSession;
840
+ return (
841
+ current !== undefined &&
842
+ current.sessionNodeRid !== undefined &&
843
+ routingIdsEqual(current.sessionNodeRid, routeContext.sourceNodeRid) &&
844
+ current.bindingGeneration !== undefined &&
845
+ relay.bindingGeneration !== undefined &&
846
+ current.bindingGeneration === BigInt(relay.bindingGeneration)
847
+ );
848
+ }
849
+
831
850
  private async requestRemoteTarget<TReply>(
832
851
  target: ZLinkRemoteActorPacketTarget,
833
852
  request: Record<string, unknown>,
@@ -1,6 +1,8 @@
1
+ import { encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
1
2
  import {
2
3
  ZLinkFrameworkInternalErrorKind,
3
4
  createInternalFrameworkException,
5
+ internalFrameworkErrorKindFromWireReply,
4
6
  wireReplyFailureException
5
7
  } from '../framework-errors-internal';
6
8
  import { createHash } from 'node:crypto';
@@ -9,6 +11,7 @@ import type { ActorRef, RoutingId, ZLinkActorCreateResult } from '../../contract
9
11
  import { ZLinkSpotKind } from '../../contracts';
10
12
  import type {
11
13
  ZLinkAuthoritySnapshot,
14
+ ZLinkAuthorityReadResult,
12
15
  ZLinkCreationOperationIdentity,
13
16
  ZLinkLocationOwnerToken,
14
17
  ZLinkObjectReserveResult,
@@ -102,6 +105,15 @@ export class ZLinkActorPlacementCoordinator {
102
105
  for (;;) {
103
106
  const target = await this.options.target(meshName, stableType, deadline.signal, excluded);
104
107
  if (target === undefined) {
108
+ // Entry eligibility limits new creation, not lookup of a Ready Actor (Actor model §6.3, §6.5).
109
+ if (!createOnly) {
110
+ const current = await this.options.store.readAuthority(
111
+ encodeAuthorityKey('actor', actorId),
112
+ deadline.signal
113
+ );
114
+ const existing = existingActor(current, actorId, stableType);
115
+ if (existing !== undefined) return { status: 'existing', actor: existing };
116
+ }
105
117
  throw createInternalFrameworkException(
106
118
  ZLinkFrameworkInternalErrorKind.PlacementCapacityExhausted,
107
119
  `No eligible Actor placement target is ready for '${stableType}'.`,
@@ -158,7 +170,7 @@ export class ZLinkActorPlacementCoordinator {
158
170
  );
159
171
  }
160
172
  if (reserved.kind === 'placementCapacityExhausted') {
161
- excluded.add(String(target.nodeRid));
173
+ excluded.add(encodeRoutingIdStorageHex(target.nodeRid));
162
174
  continue;
163
175
  }
164
176
  if (reserved.kind === 'alreadyExists' || reserved.kind === 'conflict') {
@@ -203,6 +215,15 @@ export class ZLinkActorPlacementCoordinator {
203
215
  }
204
216
  }
205
217
  if (remote === undefined) throw transportFailure;
218
+ if (
219
+ internalFrameworkErrorKindFromWireReply(remote.terminalResult, remote.failureCode) ===
220
+ ZLinkFrameworkInternalErrorKind.RouteNotConnected
221
+ ) {
222
+ // The target refused before the callback and cancelled its reservation
223
+ // (Actor model §6.3); exclude this host run like a Reserve failure.
224
+ excluded.add(encodeRoutingIdStorageHex(target.nodeRid));
225
+ continue;
226
+ }
206
227
  if (remote.terminalResult !== RequestResult.Ok || remote.failureCode !== 0) {
207
228
  // Classify the (terminal, fine failure code) pair via the shared
208
229
  // ownership-aware translator instead of collapsing every non-OK
@@ -443,16 +464,18 @@ function creationTarget(snapshot: ZLinkAuthoritySnapshot) {
443
464
  }
444
465
 
445
466
  function existingActor(
446
- reserved: ZLinkObjectReserveResult,
467
+ current: ZLinkObjectReserveResult | ZLinkAuthorityReadResult,
447
468
  actorId: string,
448
469
  stableType: string
449
470
  ): ActorRef | undefined {
450
471
  const snapshot =
451
- reserved.kind === 'alreadyExists'
452
- ? reserved.current
453
- : reserved.kind === 'conflict' && reserved.current.kind === 'snapshot'
454
- ? reserved.current
455
- : undefined;
472
+ current.kind === 'snapshot'
473
+ ? current
474
+ : current.kind === 'alreadyExists'
475
+ ? current.current
476
+ : current.kind === 'conflict' && current.current.kind === 'snapshot'
477
+ ? current.current
478
+ : undefined;
456
479
  if (
457
480
  snapshot === undefined ||
458
481
  snapshot.allocation.state !== 'active' ||
@@ -542,7 +565,7 @@ function requireExactReservation(
542
565
  current.allocation.stableType !== record.stableType ||
543
566
  current.objectGeneration !== record.reservation.objectGeneration ||
544
567
  current.authorityOwnerGeneration !== record.reservation.authorityOwnerGeneration ||
545
- String(current.allocation.descriptor.rid) !== record.reservation.targetNodeRid ||
568
+ !routingIdsEqual(current.allocation.descriptor.rid, record.reservation.targetNodeRid) ||
546
569
  current.allocation.descriptorLifecycleGeneration !== record.reservation.targetNodeGeneration ||
547
570
  current.ownerId !== record.reservation.targetOwnerId ||
548
571
  current.ownerLeaseGeneration !== record.reservation.targetOwnerLeaseGeneration ||
@@ -276,7 +276,15 @@ export class ZLinkActorRuntimeOptionsFactory {
276
276
  staleActorRefPredicate: (meshName, actor) =>
277
277
  this.actorBelongsToMesh(meshName, actor.actorId) &&
278
278
  this.options.actorHandoff.isKnownStale(actor),
279
- handoffCapture: (meshName, actorId, parts, returnResponse, actor, deadlineUnixMs) =>
279
+ handoffCapture: (
280
+ meshName,
281
+ actorId,
282
+ parts,
283
+ returnResponse,
284
+ actor,
285
+ deadlineUnixMs,
286
+ onAdmitted
287
+ ) =>
280
288
  this.actorBelongsToMesh(meshName, actorId) &&
281
289
  !this.options.actorHandoff.isProvisional(actorId)
282
290
  ? this.options.actorHandoff.capture(
@@ -286,7 +294,10 @@ export class ZLinkActorRuntimeOptionsFactory {
286
294
  returnResponse,
287
295
  undefined,
288
296
  actor,
289
- deadlineUnixMs
297
+ deadlineUnixMs,
298
+ undefined,
299
+ undefined,
300
+ onAdmitted
290
301
  )
291
302
  : undefined,
292
303
  sendErrorReporter: this.options.reportPostCommitError