@zlink-systems/framework 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActorClient.d.ts +1 -1
  3. package/dist/contracts/Channels/Calls.d.ts +1 -1
  4. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  5. package/dist/contracts/Common/CoreTypes.js +7 -0
  6. package/dist/contracts/Common/index.d.ts +1 -1
  7. package/dist/contracts/Common/index.js +0 -1
  8. package/dist/contracts/Configuration/Builders.d.ts +0 -1
  9. package/dist/contracts/Configuration/Configs.d.ts +0 -1
  10. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  11. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  12. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  13. package/dist/contracts/Configuration/Registration.js +58 -36
  14. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  15. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  16. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  17. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  18. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -5
  19. package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
  20. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  21. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  22. package/dist/contracts/Handlers/JsonContract.js +10 -4
  23. package/dist/contracts/Locations/Authority.d.ts +1 -1
  24. package/dist/contracts/Locations/Authority.js +3 -2
  25. package/dist/contracts/Locations/Options.js +1 -1
  26. package/dist/contracts/Locations/Stores.d.ts +12 -0
  27. package/dist/contracts/Locations/Stores.js +9 -0
  28. package/dist/contracts/Spots/Contracts.d.ts +2 -2
  29. package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
  30. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
  31. package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
  32. package/dist/internal.d.ts +4 -0
  33. package/dist/internal.js +15 -1
  34. package/dist/nest-integration.d.ts +4 -2
  35. package/dist/nest-integration.js +14 -4
  36. package/dist/runtime/abort.d.ts +1 -0
  37. package/dist/runtime/abort.js +8 -5
  38. package/dist/runtime/activation-admission.d.ts +1 -2
  39. package/dist/runtime/activation-admission.js +2 -6
  40. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  41. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  42. package/dist/runtime/actors/actor-client.d.ts +2 -2
  43. package/dist/runtime/actors/actor-client.js +49 -153
  44. package/dist/runtime/actors/actor-context.d.ts +3 -5
  45. package/dist/runtime/actors/actor-context.js +13 -11
  46. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  47. package/dist/runtime/actors/actor-handoff.js +8 -8
  48. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  49. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  50. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  51. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  52. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  53. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  54. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  55. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  56. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  57. package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
  58. package/dist/runtime/actors/actor-request-deadline.js +6 -0
  59. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  60. package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
  61. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  62. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  63. package/dist/runtime/actors/bound-session-wire.js +2 -7
  64. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  65. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  66. package/dist/runtime/actors/index.d.ts +9 -7
  67. package/dist/runtime/actors/index.js +87 -69
  68. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  69. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  70. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  71. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  72. package/dist/runtime/admission.d.ts +2 -0
  73. package/dist/runtime/admission.js +7 -1
  74. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  75. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  76. package/dist/runtime/backend/contracts/index.d.ts +7 -27
  77. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  78. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  79. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  80. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
  81. package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
  82. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  83. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
  84. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  85. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  86. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  87. package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
  88. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  89. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  90. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  91. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  92. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  93. package/dist/runtime/backend/runtime-values.js +2 -0
  94. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  95. package/dist/runtime/channels/channel-clients.js +73 -59
  96. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  97. package/dist/runtime/channels/channel-envelope.d.ts +1 -1
  98. package/dist/runtime/channels/channel-envelope.js +51 -39
  99. package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
  100. package/dist/runtime/channels/channel-outbound-operations.js +25 -42
  101. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  102. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  103. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  104. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  105. package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
  106. package/dist/runtime/channels/channel-runtime-manager.js +13 -10
  107. package/dist/runtime/channels/channel-socket-options.js +3 -12
  108. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  109. package/dist/runtime/channels/channel-socket-registry.js +240 -177
  110. package/dist/runtime/channels/channel-transports.d.ts +21 -31
  111. package/dist/runtime/channels/channel-transports.js +80 -62
  112. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  113. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  114. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  115. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  116. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  117. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  118. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  119. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  120. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  121. package/dist/runtime/channels/local-spot-route-transport.js +1 -3
  122. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
  123. package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
  124. package/dist/runtime/channels/source-spot-router.d.ts +1 -1
  125. package/dist/runtime/channels/source-spot-router.js +2 -4
  126. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  127. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  128. package/dist/runtime/channels/spot-node-route-transport.d.ts +1 -1
  129. package/dist/runtime/channels/spot-node-route-transport.js +5 -5
  130. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
  131. package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
  132. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
  133. package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
  134. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  135. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  136. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  137. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  138. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  139. package/dist/runtime/diagnostics/flow-context.js +16 -2
  140. package/dist/runtime/diagnostics/index.d.ts +4 -2
  141. package/dist/runtime/diagnostics/index.js +14 -4
  142. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  143. package/dist/runtime/diagnostics/message-flow.js +10 -19
  144. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  145. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  146. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  147. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  148. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  149. package/dist/runtime/disposal.d.ts +5 -0
  150. package/dist/runtime/disposal.js +22 -0
  151. package/dist/runtime/execution/index.d.ts +12 -9
  152. package/dist/runtime/execution/index.js +58 -14
  153. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  154. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  155. package/dist/runtime/execution/state-lane.d.ts +8 -1
  156. package/dist/runtime/execution/state-lane.js +118 -3
  157. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  158. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  159. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  160. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  161. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  162. package/dist/runtime/foundation/operation-identity.js +9 -5
  163. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  164. package/dist/runtime/foundation/operation-registry.js +34 -44
  165. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  166. package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
  167. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  168. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  169. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  170. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  171. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  172. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  173. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  174. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  175. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  176. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  177. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  178. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  179. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  180. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  181. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  182. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  183. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  184. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  185. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  186. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  187. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  188. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  189. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  190. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  191. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  192. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  193. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  194. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  195. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  196. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  197. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  198. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  199. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  200. package/dist/runtime/framework-errors-internal.js +343 -122
  201. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  202. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  203. package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
  204. package/dist/runtime/host/actor-packet-relay.js +54 -99
  205. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  206. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  207. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  208. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  209. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  210. package/dist/runtime/host/application-job-queue.js +16 -33
  211. package/dist/runtime/host/bound-session-relay.js +1 -1
  212. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  213. package/dist/runtime/host/index.d.ts +14 -13
  214. package/dist/runtime/host/index.js +190 -171
  215. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  216. package/dist/runtime/host/instance-activation-authority.js +17 -45
  217. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  218. package/dist/runtime/host/location-runtime-owner.js +2 -2
  219. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  220. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  221. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  222. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  223. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  224. package/dist/runtime/host/remote-bound-session-relay.js +15 -28
  225. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  226. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  227. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  228. package/dist/runtime/host/runtime-shutdown.js +18 -21
  229. package/dist/runtime/host/service-relocation-control.js +6 -1
  230. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  231. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  232. package/dist/runtime/host/spot-address-transport.d.ts +3 -12
  233. package/dist/runtime/host/spot-address-transport.js +78 -220
  234. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  235. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  236. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  237. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  238. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  239. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  240. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  241. package/dist/runtime/locations/authority-key-codec.js +4 -3
  242. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  243. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  244. package/dist/runtime/locations/creation-operation-id.js +6 -4
  245. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  246. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  247. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  248. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  249. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  250. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  251. package/dist/runtime/locations/key-codec.js +3 -2
  252. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  253. package/dist/runtime/locations/lease-tracker.js +7 -11
  254. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  255. package/dist/runtime/locations/lifecycle.js +2 -31
  256. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  257. package/dist/runtime/locations/location-store-failure.js +7 -0
  258. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  259. package/dist/runtime/locations/location-store-pages.js +13 -0
  260. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  261. package/dist/runtime/locations/location-store-repository.js +309 -336
  262. package/dist/runtime/locations/relocation-blob.js +18 -5
  263. package/dist/runtime/locations/resolvers.d.ts +5 -5
  264. package/dist/runtime/locations/resolvers.js +37 -28
  265. package/dist/runtime/locations/runtime.d.ts +5 -4
  266. package/dist/runtime/locations/runtime.js +123 -92
  267. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  268. package/dist/runtime/locations/spot-location-claims.js +42 -1
  269. package/dist/runtime/messaging/payload-codec.js +26 -20
  270. package/dist/runtime/messaging/request-deadline.d.ts +3 -0
  271. package/dist/runtime/messaging/request-deadline.js +39 -0
  272. package/dist/runtime/messaging/submission-result.d.ts +4 -0
  273. package/dist/runtime/messaging/submission-result.js +56 -1
  274. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  275. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  276. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  277. package/dist/runtime/spots/index.d.ts +14 -20
  278. package/dist/runtime/spots/index.js +302 -176
  279. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  280. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  281. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  282. package/dist/runtime/spots/spot-activation-state.js +2 -2
  283. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  284. package/dist/runtime/spots/spot-activation.js +49 -32
  285. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  286. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  287. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  288. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  289. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  290. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  291. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  292. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  293. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  294. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  295. package/dist/runtime/spots/spot-context.d.ts +2 -2
  296. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  297. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  298. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  299. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  300. package/dist/runtime/spots/spot-manager-public.js +5 -4
  301. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  302. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  303. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  304. package/dist/runtime/spots/spot-outbound.d.ts +7 -8
  305. package/dist/runtime/spots/spot-outbound.js +21 -23
  306. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  307. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  308. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  309. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  310. package/dist/runtime/spots/spot-route-replies.js +3 -1
  311. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  312. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  313. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  314. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  315. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  316. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  317. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  318. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  319. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  320. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  321. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  322. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  323. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  324. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  325. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
  326. package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
  327. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  328. package/dist/runtime/streams/bound-session-service.js +12 -2
  329. package/dist/runtime/streams/index.d.ts +16 -17
  330. package/dist/runtime/streams/index.js +22 -23
  331. package/dist/runtime/streams/managed-stream.d.ts +5 -2
  332. package/dist/runtime/streams/managed-stream.js +20 -13
  333. package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
  334. package/dist/runtime/streams/protocol.d.ts +6 -33
  335. package/dist/runtime/streams/protocol.js +38 -110
  336. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  337. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  338. package/dist/runtime/streams/session-calls.d.ts +6 -8
  339. package/dist/runtime/streams/session-calls.js +6 -22
  340. package/dist/runtime/streams/session-context.d.ts +10 -10
  341. package/dist/runtime/streams/session-context.js +25 -10
  342. package/dist/runtime/streams/session-requests.js +2 -1
  343. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  344. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  345. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  346. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  347. package/dist/runtime/workers/index.d.ts +2 -2
  348. package/dist/runtime/workers/index.js +5 -4
  349. package/package.json +3 -3
  350. package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
  351. package/src/contracts/Channels/Calls.ts +1 -1
  352. package/src/contracts/Common/CoreTypes.ts +7 -0
  353. package/src/contracts/Common/index.ts +1 -1
  354. package/src/contracts/Configuration/Builders.ts +0 -1
  355. package/src/contracts/Configuration/Configs.ts +0 -1
  356. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  357. package/src/contracts/Configuration/Registration.ts +92 -48
  358. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  359. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -71
  360. package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
  361. package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
  362. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  363. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  364. package/src/contracts/Handlers/JsonContract.ts +14 -4
  365. package/src/contracts/Locations/Authority.ts +7 -3
  366. package/src/contracts/Locations/Options.ts +1 -1
  367. package/src/contracts/Locations/Stores.ts +14 -0
  368. package/src/contracts/Spots/Contracts.ts +2 -2
  369. package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
  370. package/src/contracts/Streams/IZLinkSession.ts +2 -3
  371. package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
  372. package/src/internal.ts +14 -0
  373. package/src/nest-integration.ts +28 -10
  374. package/src/runtime/abort.ts +6 -5
  375. package/src/runtime/activation-admission.ts +2 -8
  376. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  377. package/src/runtime/actors/actor-client.ts +85 -218
  378. package/src/runtime/actors/actor-context.ts +39 -33
  379. package/src/runtime/actors/actor-handoff.ts +24 -22
  380. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  381. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  382. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  383. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  384. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  385. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  386. package/src/runtime/actors/actor-request-deadline.ts +4 -0
  387. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  388. package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
  389. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  390. package/src/runtime/actors/bound-session-wire.ts +2 -8
  391. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  392. package/src/runtime/actors/index.ts +100 -79
  393. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  394. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  395. package/src/runtime/admission.ts +8 -1
  396. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  397. package/src/runtime/backend/contracts/index.ts +14 -37
  398. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  399. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  400. package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
  401. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
  402. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  403. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  404. package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
  405. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  406. package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
  407. package/src/runtime/backend/raw-binding-port.ts +1 -1
  408. package/src/runtime/backend/runtime-values.ts +4 -1
  409. package/src/runtime/channels/channel-clients.ts +139 -102
  410. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  411. package/src/runtime/channels/channel-envelope.ts +74 -57
  412. package/src/runtime/channels/channel-outbound-operations.ts +40 -55
  413. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  414. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  415. package/src/runtime/channels/channel-runtime-manager.ts +12 -30
  416. package/src/runtime/channels/channel-socket-options.ts +8 -15
  417. package/src/runtime/channels/channel-socket-registry.ts +291 -196
  418. package/src/runtime/channels/channel-transports.ts +168 -145
  419. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  420. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  421. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  422. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  423. package/src/runtime/channels/local-spot-route-transport.ts +1 -5
  424. package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
  425. package/src/runtime/channels/source-spot-router.ts +2 -9
  426. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  427. package/src/runtime/channels/spot-node-route-transport.ts +7 -9
  428. package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
  429. package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
  430. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  431. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  432. package/src/runtime/diagnostics/flow-context.ts +16 -2
  433. package/src/runtime/diagnostics/index.ts +27 -17
  434. package/src/runtime/diagnostics/message-flow.ts +15 -25
  435. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  436. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  437. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  438. package/src/runtime/disposal.ts +19 -0
  439. package/src/runtime/execution/index.ts +60 -20
  440. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  441. package/src/runtime/execution/state-lane.ts +142 -4
  442. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  443. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  444. package/src/runtime/foundation/operation-identity.ts +11 -5
  445. package/src/runtime/foundation/operation-registry.ts +33 -50
  446. package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
  447. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  448. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  449. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  450. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  451. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  452. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  453. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  454. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  455. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  456. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  457. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  458. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  459. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  460. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  461. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  462. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  463. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  464. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  465. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  466. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  467. package/src/runtime/framework-errors-internal.ts +380 -134
  468. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  469. package/src/runtime/host/actor-packet-relay.ts +63 -160
  470. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  471. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  472. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  473. package/src/runtime/host/application-job-queue.ts +28 -34
  474. package/src/runtime/host/bound-session-relay.ts +1 -2
  475. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  476. package/src/runtime/host/index.ts +327 -320
  477. package/src/runtime/host/instance-activation-authority.ts +89 -109
  478. package/src/runtime/host/location-runtime-owner.ts +4 -2
  479. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  480. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  481. package/src/runtime/host/remote-bound-session-relay.ts +16 -57
  482. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  483. package/src/runtime/host/runtime-shutdown.ts +17 -21
  484. package/src/runtime/host/service-relocation-control.ts +14 -1
  485. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  486. package/src/runtime/host/spot-address-transport.ts +175 -356
  487. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  488. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  489. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  490. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  491. package/src/runtime/locations/authority-key-codec.ts +7 -3
  492. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  493. package/src/runtime/locations/creation-operation-id.ts +6 -3
  494. package/src/runtime/locations/domain-store-contract.ts +12 -3
  495. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  496. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  497. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  498. package/src/runtime/locations/key-codec.ts +3 -2
  499. package/src/runtime/locations/lease-tracker.ts +8 -14
  500. package/src/runtime/locations/lifecycle.ts +13 -43
  501. package/src/runtime/locations/location-store-failure.ts +4 -0
  502. package/src/runtime/locations/location-store-pages.ts +18 -0
  503. package/src/runtime/locations/location-store-repository.ts +457 -482
  504. package/src/runtime/locations/relocation-blob.ts +17 -6
  505. package/src/runtime/locations/resolvers.ts +75 -49
  506. package/src/runtime/locations/runtime.ts +220 -110
  507. package/src/runtime/locations/spot-location-claims.ts +58 -1
  508. package/src/runtime/messaging/payload-codec.ts +35 -24
  509. package/src/runtime/messaging/request-deadline.ts +58 -0
  510. package/src/runtime/messaging/submission-result.ts +72 -2
  511. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  512. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  513. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  514. package/src/runtime/spots/index.ts +433 -229
  515. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  516. package/src/runtime/spots/spot-activation-state.ts +2 -2
  517. package/src/runtime/spots/spot-activation.ts +67 -37
  518. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  519. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  520. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  521. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  522. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  523. package/src/runtime/spots/spot-context.ts +3 -3
  524. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  525. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  526. package/src/runtime/spots/spot-manager-public.ts +21 -17
  527. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  528. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  529. package/src/runtime/spots/spot-outbound.ts +59 -47
  530. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  531. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  532. package/src/runtime/spots/spot-route-replies.ts +6 -4
  533. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  534. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  535. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  536. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  537. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  538. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  539. package/src/runtime/spots/spot-timer.ts +3 -2
  540. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  541. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  542. package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
  543. package/src/runtime/streams/bound-session-service.ts +22 -2
  544. package/src/runtime/streams/index.ts +78 -68
  545. package/src/runtime/streams/managed-stream.ts +32 -23
  546. package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
  547. package/src/runtime/streams/protocol.ts +34 -88
  548. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  549. package/src/runtime/streams/session-calls.ts +11 -36
  550. package/src/runtime/streams/session-context.ts +60 -25
  551. package/src/runtime/streams/session-requests.ts +2 -1
  552. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  553. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  554. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  555. package/src/runtime/workers/index.ts +13 -12
  556. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  557. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  558. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  559. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  560. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  561. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,81 +1,98 @@
1
- import { ZLinkListenerRecords } from '../foundation/listener-records';
2
- import {
3
- ZLinkFrameworkInternalErrorKind,
4
- createInternalFrameworkException,
5
- internalFrameworkWireReply
6
- } from '../framework-errors-internal';
1
+ import { listAllMeshNodeDescriptors } from '../locations/location-store-pages';
2
+ import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
7
3
  import { randomBytes, randomUUID } from 'node:crypto';
8
- import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
9
- import {
10
- RequestResult,
11
- SubmitResult,
12
- type ZLinkBackendMessageLike as MessageLike
13
- } from '../backend/runtime-values';
14
- import {
15
- OperationKind,
16
- ReceiveKind,
17
- type ReadyRecord,
18
- type ReceiveRecord
19
- } from '../foundation/service-runtime-contracts';
20
- import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
21
- import { runtimeAcceptsWork, runtimeStateIsReady } from '../foundation/runtime-state-projections';
22
- import { createDeadlineExceededError, isDeadlineExceededError } from '../abort';
23
- import { meshActorSessionNodeAdapter, ZLinkNodeBackendAdapterFactory } from '../backend';
24
- import type {
25
- ZLinkBackendAdapterFactory,
26
- ZLinkBackendContext,
27
- ZLinkBackendMeshNode
28
- } from '../backend';
29
-
30
- const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
31
- import type { ZLinkFrameworkRegistration } from '../configuration';
32
- import type {
33
- ActorRef,
34
- RoutingId,
35
- ZLinkMeshNodeDescriptor,
36
- ZLinkClientServerRuntime,
37
- ZLinkFanoutRuntime,
38
- ZLinkFrameworkRuntime,
39
- ZLinkListenerKind,
40
- ZLinkListenerStatus,
41
- ZLinkFrameworkLifecycleOptions,
42
- ZLinkFrameworkRelocationOptions,
43
- ZLinkFrameworkRelocationResult,
44
- ZLinkObservedStatus,
45
- ZLinkFrameworkRuntimeStatus,
46
- ZLinkFrameworkTerminationResult,
47
- ZLinkRouteMeshRuntime
48
- } from '../../contracts';
49
- import type { ZLinkLocationOwnerToken } from '../../contracts/Locations';
50
- import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
51
- import type { Type } from '../../contracts/Common/CoreTypes';
52
- import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
53
- import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
54
4
  import {
5
+ type ActorRef,
6
+ type RoutingId,
7
+ type ZLinkClientServerRuntime,
8
+ type ZLinkFanoutRuntime,
9
+ type ZLinkFrameworkLifecycleOptions,
10
+ type ZLinkFrameworkRelocationOptions,
11
+ type ZLinkFrameworkRelocationResult,
12
+ type ZLinkFrameworkRuntime,
13
+ type ZLinkFrameworkRuntimeStatus,
14
+ type ZLinkFrameworkTerminationResult,
15
+ type ZLinkListenerKind,
16
+ type ZLinkListenerStatus,
17
+ type ZLinkMeshNodeDescriptor,
18
+ type ZLinkMessageFlowControl,
19
+ type ZLinkMessageFlowLogMode,
20
+ type ZLinkObservedStatus,
21
+ type ZLinkRouteMeshRuntime,
55
22
  ZLinkFrameworkRelocationMode,
56
23
  ZLinkFrameworkRelocationOutcome,
57
24
  ZLinkFrameworkRelocationReason,
58
25
  ZLinkFrameworkRuntimeState,
59
26
  ZLinkFrameworkTerminationOutcome,
60
27
  ZLinkFrameworkTerminationReason,
28
+ zlinkMessageMetadata,
61
29
  ZLinkObjectRole,
62
30
  ZLinkPeerState,
63
- ZLinkSpotKind,
64
- zlinkMessageMetadata,
65
- ZLinkSpotCreateState
31
+ ZLinkSpotCreateState,
32
+ ZLinkSpotKind
66
33
  } from '../../contracts';
67
- import { ZLinkSubmitStatus } from '../messaging/submission-result';
34
+ import type { Type } from '../../contracts/Common/CoreTypes';
35
+ import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
36
+ import { ZLinkConfigurationException } from '../../contracts/Configuration/ConfigurationException';
37
+ import { requireMessageFlowLogMode } from '../../contracts/Configuration/DiagnosticsValidation';
38
+ import { DEFAULT_ACTIVATION_CONCURRENCY_LIMIT } from '../../contracts/Configuration/InternalDefaults';
39
+ import { DEFAULT_REQUEST_TIMEOUT_MS } from '../../contracts/Configuration/Registration';
68
40
  import {
69
- ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
70
41
  ZLinkDispatchErrorSurface,
71
- ZLinkDispatchMessageKind
42
+ ZLinkDispatchMessageKind,
43
+ ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome
72
44
  } from '../../contracts/Dispatch/ZLinkDispatchOptions';
73
- import type { ZLinkMessageFlowControl, ZLinkMessageFlowLogMode } from '../../contracts';
74
- import { requireMessageFlowLogMode } from '../../contracts/Configuration/DiagnosticsValidation';
45
+ import {
46
+ type ZLinkLocationOwnerToken,
47
+ zlinkDefaultLocationOptions,
48
+ type ZLinkLocationRuntimeQuery
49
+ } from '../../contracts/Locations';
50
+ import { ZLINK_PROVIDER_MAX_PAGE_SIZE } from '../../contracts/Locations/Stores';
51
+ import { createDeadlineExceededError, isAbortError, isDeadlineExceededError } from '../abort';
52
+ import { ZLinkActivationAdmission } from '../activation-admission';
53
+ import {
54
+ type DefaultZLinkActorManager,
55
+ type ZLinkActorManagerOptions,
56
+ decodeRemoteActorSourceLeaveTerminal,
57
+ DefaultZLinkActorClient,
58
+ isActorAuthorityPayload,
59
+ publishInitialActorAuthority,
60
+ rewriteActorAuthorityOwner,
61
+ ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET,
62
+ ZLinkActorHandoffCoordinator,
63
+ ZLinkActorTransferRegistry
64
+ } from '../actors';
65
+ import { messageFollowOwnerNodeRid, ownerFence } from '../actors/actor-message-follow-context';
66
+ import {
67
+ ZLINK_INTERNAL_ACTOR_TRANSPORT_DELIVERY_GATE,
68
+ type ZLinkInternalActorTransportDeliveryGate
69
+ } from '../actors/actor-transport-delivery-gate';
70
+ import { ZLinkRuntimeAdmissionGate } from '../admission';
71
+ import {
72
+ ZLINK_INTERNAL_APPLICATION_JOB_QUEUE_HANDLER_START_GATE,
73
+ type ZLinkInternalApplicationJobQueueHandlerStartGate
74
+ } from '../application-jobs/application-job-queue-handler-start-gate';
75
+ import {
76
+ releaseApplicationJobPermitBeforeHandler,
77
+ runWithApplicationJobPermit
78
+ } from '../application-jobs/application-job-queue-scope';
79
+ import {
80
+ type ZLinkBackendAdapterFactory,
81
+ type ZLinkBackendContext,
82
+ type ZLinkBackendMeshNode,
83
+ meshActorSessionNodeAdapter,
84
+ ZLinkNodeBackendAdapterFactory
85
+ } from '../backend';
86
+ import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
87
+ import {
88
+ RequestResult,
89
+ SubmitResult,
90
+ type ZLinkBackendMessageLike as MessageLike
91
+ } from '../backend/runtime-values';
75
92
  import {
76
93
  DefaultZLinkChannelRuntimeOptions,
77
- ZLinkDispatchErrorReporter,
78
94
  ZLinkChannelRuntimeManager,
95
+ ZLinkDispatchErrorReporter,
79
96
  ZLinkRuntimeRouteTransport,
80
97
  type ZLinkDispatchErrorSink
81
98
  } from '../channels';
@@ -85,33 +102,72 @@ import {
85
102
  encodeChannelErrorReplyParts,
86
103
  encodeChannelReplyParts
87
104
  } from '../channels/channel-envelope';
88
- import { ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET } from '../actors';
89
- import {
90
- ZLINK_INTERNAL_ACTOR_TRANSPORT_DELIVERY_GATE,
91
- type ZLinkInternalActorTransportDeliveryGate
92
- } from '../actors/actor-transport-delivery-gate';
93
- import {
94
- ZLINK_INTERNAL_APPLICATION_JOB_QUEUE_HANDLER_START_GATE,
95
- type ZLinkInternalApplicationJobQueueHandlerStartGate
96
- } from '../application-jobs/application-job-queue-handler-start-gate';
97
- import { ZLinkFrameworkExecutionState, ZLinkRuntimeTaskErrorSink } from '../execution';
105
+ import type { ZLinkFrameworkRegistration } from '../configuration';
98
106
  import {
107
+ type ZLinkRuntimeEventPublisher,
99
108
  createDiagnosticsContext,
100
109
  createInboundFlow,
101
110
  currentOrCreateFlow,
102
111
  DefaultZLinkRuntimeEventPublisher,
103
112
  flowIfEnabled,
104
113
  runWithFlow,
114
+ ZLinkRuntimeMetrics,
105
115
  type ZLinkDiagnosticsContext,
106
116
  type ZLinkMessageFlowModeCell,
107
- type ZLinkRuntimeMetricMeshSnapshot,
108
- ZLinkRuntimeMetrics
117
+ type ZLinkRuntimeMetricMeshSnapshot
109
118
  } from '../diagnostics';
119
+ import { METRIC_NAMES, MILLISECONDS_PER_SECOND } from '../diagnostics/runtime-metrics';
120
+ import { RuntimeEventQueue } from '../diagnostics/runtime-observation-queue';
110
121
  import {
111
122
  ZLinkClientServerRuntimeProjection,
112
123
  ZLinkFanoutRuntimeProjection
113
124
  } from '../diagnostics/topology-runtime-projections';
114
- import { RuntimeEventQueue } from '../diagnostics/runtime-observation-queue';
125
+ import { ZLinkFrameworkExecutionState, ZLinkRuntimeTaskErrorSink } from '../execution';
126
+ import { ZLinkListenerRecords } from '../foundation/listener-records';
127
+ import {
128
+ runtimeAcceptsWork,
129
+ runtimeObservationIsTerminal,
130
+ runtimeStateIsReady
131
+ } from '../foundation/runtime-state-projections';
132
+ import { rewriteServiceAuthorityOwner } from '../foundation/service-authority-payload-codec';
133
+ import { ServiceRelocationAuthorityError } from '../foundation/service-relocation-coordinator';
134
+ import {
135
+ replaceServiceRelocationAuthorityApplicationPayload,
136
+ serviceRelocationAuthorityApplicationPayload
137
+ } from '../foundation/service-relocation-runtime';
138
+ import {
139
+ MeshPeerRuntimeState,
140
+ OperationKind,
141
+ ReceiveKind,
142
+ type ReadyRecord,
143
+ type ReceiveRecord
144
+ } from '../foundation/service-runtime-contracts';
145
+ import type {
146
+ ServiceAsyncInstanceActivationAuthority,
147
+ ServiceInstanceApplicationLifecycle
148
+ } from '../foundation/service-stateful-runtime';
149
+ import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
150
+ import {
151
+ createInternalFrameworkException,
152
+ internalFrameworkWireReply,
153
+ ZLinkFrameworkInternalErrorKind
154
+ } from '../framework-errors-internal';
155
+ import {
156
+ ZLinkAuthoritySpotRouteResolver,
157
+ ZLinkOwnerCleanupError,
158
+ type ZLinkLocationRuntime,
159
+ type ZLinkStoreLocationResolvers
160
+ } from '../locations';
161
+ import {
162
+ decodeFrameworkCreationPayload,
163
+ encodeFrameworkCreationPayload
164
+ } from '../messaging/creation-payload-codec';
165
+ import {
166
+ decodeFrameworkPayloadMessage,
167
+ encodeFrameworkPayloadMessage
168
+ } from '../messaging/payload-codec';
169
+ import { ZLinkSubmitStatus } from '../messaging/submission-result';
170
+ import { decodeRoutingId, encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
115
171
  import {
116
172
  DefaultZLinkSpotManager,
117
173
  ZLinkPublicSpotManager,
@@ -120,85 +176,50 @@ import {
120
176
  type ZLinkDetachedTaskRunner,
121
177
  type ZLinkSpotManagerOptions
122
178
  } from '../spots';
123
- import type { DefaultZLinkActorManager, ZLinkActorManagerOptions } from '../actors';
124
- import { messageFollowOwnerNodeRid, ownerFence } from '../actors/actor-message-follow-context';
125
- import {
126
- DefaultZLinkActorClient,
127
- ZLinkActorHandoffCoordinator,
128
- ZLinkActorTransferRegistry,
129
- decodeRemoteActorSourceLeaveTerminal,
130
- isActorAuthorityPayload,
131
- publishInitialActorAuthority,
132
- rewriteActorAuthorityOwner
133
- } from '../actors';
179
+ import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
134
180
  import {
135
181
  DefaultZLinkBoundSessionFactory,
136
- type DefaultZLinkBoundSession,
137
- type ZLinkStreamPayloadCodec,
138
182
  ZLinkStreamBindingRuntime,
139
- ZLinkStreamRuntimeManager
183
+ ZLinkStreamRuntimeManager,
184
+ type DefaultZLinkBoundSession,
185
+ type ZLinkStreamPayloadCodec
140
186
  } from '../streams';
141
- import {
142
- ZLinkOwnerCleanupError,
143
- ZLinkAuthoritySpotRouteResolver,
144
- type ZLinkLocationRuntime,
145
- type ZLinkStoreLocationResolvers
146
- } from '../locations';
147
- import {
148
- zlinkDefaultLocationOptions,
149
- type ZLinkLocationRuntimeQuery
150
- } from '../../contracts/Locations';
187
+ import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
151
188
  import { ZLinkActorRuntimeOptionsFactory } from './actor-runtime-options-factory';
152
- import { ZLinkActorTransferRuntime } from './actor-transfer-runtime';
153
189
  import { ZLinkActorTransferAuthorityRuntime } from './actor-transfer-authority-runtime';
154
- import { ZLinkEntryActorRuntimeService } from './entry-actor-runtime';
155
- import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
156
- import { MeshRouterResolver } from './mesh-router-resolver';
157
- import { ZLinkBoundSessionRelay } from './bound-session-relay';
158
- import { decodeRoutingId, encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
159
- import { rewriteServiceAuthorityOwner } from '../foundation/service-authority-payload-codec';
190
+ import { ZLinkActorTransferRuntime } from './actor-transfer-runtime';
160
191
  import {
161
- replaceServiceRelocationAuthorityApplicationPayload,
162
- serviceRelocationAuthorityApplicationPayload
163
- } from '../foundation/service-relocation-runtime';
164
- import { ZLinkSpotRuntimeOptionsFactory } from './spot-runtime-options-factory';
192
+ ApplicationJobQueue,
193
+ nodeEffectiveProcessorCount,
194
+ resolveApplicationJobQueueConfiguration
195
+ } from './application-job-queue';
196
+ import { ZLinkBoundSessionRelay } from './bound-session-relay';
165
197
  import { ZLinkChannelRuntimeOptionsFactory } from './channel-runtime-options-factory';
166
- import { ZLinkSpotNodeRuntimeOptionsFactory } from './spot-node-runtime-options-factory';
167
- import { rollbackRuntimeStart, stopRuntimeParts } from './runtime-shutdown';
168
- import { ZLinkRuntimeAdmissionGate } from '../admission';
169
- import { ZLinkActivationAdmission } from '../activation-admission';
170
- import { ZLinkRetiringRollbackError, ZLinkRouteMeshRuntimeCoordinator } from './route-mesh-runtime';
171
- import { ServiceRelocationAuthorityError } from '../foundation/service-relocation-coordinator';
172
- import { ZLinkConfigurationException } from '../../contracts/Configuration/ConfigurationException';
173
- import { ZLinkStatefulAuthorityRouteRuntime } from './stateful-authority-route-runtime';
198
+ import { ZLinkEntryActorRuntimeService } from './entry-actor-runtime';
199
+ import { HostCapacityStatusProjection } from './host-capacity-status';
174
200
  import { ZLinkInstanceActivationAuthority } from './instance-activation-authority';
175
- import type {
176
- ServiceAsyncInstanceActivationAuthority,
177
- ServiceInstanceApplicationLifecycle
178
- } from '../foundation/service-stateful-runtime';
179
- import { hasObjectClientCapability, ZLinkHostSpotAddressTransport } from './spot-address-transport';
180
- import { ZLinkUserSpotCreationCoordinator } from './user-spot-creation-coordinator';
181
- import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
182
- import {
183
- decodeFrameworkPayloadMessage,
184
- encodeFrameworkPayloadMessage
185
- } from '../messaging/payload-codec';
201
+ import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
202
+ import { MeshRouterResolver } from './mesh-router-resolver';
186
203
  import {
187
- decodeFrameworkCreationPayload,
188
- encodeFrameworkCreationPayload
189
- } from '../messaging/creation-payload-codec';
204
+ ZLinkDrainingStatePublishError,
205
+ ZLinkRetiringRollbackError,
206
+ ZLinkRouteMeshRuntimeCoordinator
207
+ } from './route-mesh-runtime';
190
208
  import { DefaultZLinkRouteMeshRuntimeOptions } from './route-mesh-runtime-options';
209
+ import { rollbackRuntimeStart, stopRuntimeParts } from './runtime-shutdown';
191
210
  import {
192
211
  ZLinkHostServiceRelocationRuntime,
193
212
  ZLinkRelocationStateIncompatibleError
194
213
  } from './service-relocation-host-runtime';
195
- import {
196
- ApplicationJobQueue,
197
- nodeEffectiveProcessorCount,
198
- resolveApplicationJobQueueConfiguration
199
- } from './application-job-queue';
200
- import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
201
- import { HostCapacityStatusProjection } from './host-capacity-status';
214
+ import { hasObjectClientCapability, ZLinkHostSpotAddressTransport } from './spot-address-transport';
215
+ import { ZLinkSpotNodeRuntimeOptionsFactory } from './spot-node-runtime-options-factory';
216
+ import { ZLinkSpotRuntimeOptionsFactory } from './spot-runtime-options-factory';
217
+ import { ZLinkStatefulAuthorityRouteRuntime } from './stateful-authority-route-runtime';
218
+ import { ZLinkUserSpotCreationCoordinator } from './user-spot-creation-coordinator';
219
+
220
+ const HOST_SHUTDOWN_POLL_INTERVAL_MS = 100;
221
+ const HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS = 10;
222
+ const DEFAULT_HOST_CONTROL_TIMEOUT_MS = 30_000;
202
223
 
203
224
  export interface ZLinkFrameworkRuntimeLifecycle {
204
225
  readonly isStarted: boolean;
@@ -224,6 +245,7 @@ export class ZLinkFrameworkRuntimeHost
224
245
  private runtimeSequence = 0n;
225
246
  private readonly runtimeObservationSource = Symbol('zlink.framework-runtime');
226
247
  private runtimeDeadline?: Date;
248
+ private shutdownDeadline?: AbortController;
227
249
  private runtimeRelocationResult?: ZLinkFrameworkRelocationResult;
228
250
  private runtimeTerminationResult?: ZLinkFrameworkTerminationResult;
229
251
  private relocationOperation?: Promise<ZLinkFrameworkRelocationResult>;
@@ -264,16 +286,8 @@ export class ZLinkFrameworkRuntimeHost
264
286
  private readonly admission = new ZLinkRuntimeAdmissionGate(() => this.ownerAdmissionOpen());
265
287
  private readonly activationAdmission = new ZLinkActivationAdmission(
266
288
  (meshName) =>
267
- this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ?? 128,
268
- (meshName) => {
269
- void this.spotNodeRuntime
270
- ?.publishMeshNodeState(
271
- this.runtimeState,
272
- this.executionState?.abortController.signal,
273
- meshName
274
- )
275
- .catch(() => undefined);
276
- }
289
+ this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ??
290
+ DEFAULT_ACTIVATION_CONCURRENCY_LIMIT
277
291
  );
278
292
  private cachedLocationSpotRouteResolver?: ZLinkSpotRouteResolver;
279
293
  private actorClientLocationResolver?: ZLinkStoreLocationResolvers;
@@ -351,25 +365,6 @@ export class ZLinkFrameworkRuntimeHost
351
365
  );
352
366
  this.meshRouters = new MeshRouterResolver(options.registration);
353
367
  this.spotRouterChannelIdForMesh = this.meshRouters.spotRouterChannelIdByMesh();
354
- const sendTimeoutMsForSpotMesh = (meshName: string): number =>
355
- options.registration.spotNodes.get(meshName)?.router?.sendTimeoutMs ??
356
- LEGACY_MESH_SEND_TIMEOUT_MS;
357
- const sendTimeoutMsForSpotRouteChannel = (routeChannelId: string): number => {
358
- const routeChannel = options.registration.routeChannelOptions.get(routeChannelId);
359
- if (routeChannel !== undefined) {
360
- return routeChannel.sendTimeoutMs ?? LEGACY_MESH_SEND_TIMEOUT_MS;
361
- }
362
- return sendTimeoutMsForSpotMesh(routeChannelId);
363
- };
364
- const defaultSpotSendTimeoutMs = Math.max(
365
- LEGACY_MESH_SEND_TIMEOUT_MS,
366
- ...[...options.registration.spotNodes.values()].map(
367
- (node) => node.router?.sendTimeoutMs ?? LEGACY_MESH_SEND_TIMEOUT_MS
368
- ),
369
- ...[...options.registration.routeChannelOptions.values()].map(
370
- (route) => route.sendTimeoutMs ?? LEGACY_MESH_SEND_TIMEOUT_MS
371
- )
372
- );
373
368
  this.routeTransport = new ZLinkRuntimeRouteTransport(
374
369
  () => this.channelRuntime,
375
370
  (routerChannelId) => this.meshRouters.canUseRouterChannel(routerChannelId),
@@ -379,7 +374,8 @@ export class ZLinkFrameworkRuntimeHost
379
374
  this.meshRouters.classifyManualNodeTarget(meshName, targetNodeRid),
380
375
  (meshName, sourceNodeRid, parts) => this.submitLocalMeshRoute(meshName, sourceNodeRid, parts),
381
376
  this.metrics,
382
- () => this.flowCreationEnabled()
377
+ () => this.flowCreationEnabled(),
378
+ () => this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink).flow
383
379
  );
384
380
  this.spotAddressTransport = new ZLinkHostSpotAddressTransport({
385
381
  resolver: () => this.createLocationSpotRouteResolver(),
@@ -392,10 +388,7 @@ export class ZLinkFrameworkRuntimeHost
392
388
  meshNode: (meshName) => this.spotNodeRuntime?.meshNode(meshName),
393
389
  completions: (meshName) => this.spotNodeRuntime?.meshCompletionTable(meshName),
394
390
  codecs: { serializers: options.registration.messageSerializers },
395
- defaultRequestTimeoutMs: options.registration.requestTimeoutMs ?? 30_000,
396
- defaultSendTimeoutMs: defaultSpotSendTimeoutMs,
397
- sendTimeoutMsForMesh: sendTimeoutMsForSpotMesh,
398
- sendTimeoutMsForRouteChannel: sendTimeoutMsForSpotRouteChannel,
391
+ defaultRequestTimeoutMs: options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
399
392
  dispatchErrors: this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink)
400
393
  });
401
394
  this.locationOwner = new ZLinkLocationRuntimeOwner({
@@ -406,6 +399,7 @@ export class ZLinkFrameworkRuntimeHost
406
399
  rewriteAuthorityPayloadForOwner
407
400
  });
408
401
  this.streamBindingRuntime = new ZLinkStreamBindingRuntime({
402
+ dispatchErrors: this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink),
409
403
  streamPayloadCodec: resolveStreamPayloadCodec(options.registration),
410
404
  streamCompression: options.registration.streamCompression,
411
405
  messageSerializers: options.registration.messageSerializers,
@@ -445,8 +439,8 @@ export class ZLinkFrameworkRuntimeHost
445
439
  options
446
440
  );
447
441
  },
448
- relay: (actor, header, payload, signal) =>
449
- this.boundSessionRelay.actorPackets.relayActorPacket(actor, header, payload, signal),
442
+ relay: (actor, header, payload) =>
443
+ this.boundSessionRelay.actorPackets.relayActorPacket(actor, header, payload),
450
444
  notifyDisconnected: (actor, signal) =>
451
445
  this.boundSessionRelay.actorPackets.notifyBoundActorDisconnected(actor, signal)
452
446
  });
@@ -784,6 +778,7 @@ export class ZLinkFrameworkRuntimeHost
784
778
  });
785
779
  this.serviceRelocation = new ZLinkHostServiceRelocationRuntime({
786
780
  registration: options.registration,
781
+ targetAdmissionSealed: () => this.shutdownOperationStartedAt !== undefined,
787
782
  providerResolver: options.providerResolver,
788
783
  locationStore: () => this.locationOwner.currentStores?.locationStore,
789
784
  currentOwner: () => this.locationOwner.currentRuntime?.currentOwnerToken,
@@ -870,7 +865,7 @@ export class ZLinkFrameworkRuntimeHost
870
865
  }
871
866
 
872
867
  get isStarted(): boolean {
873
- return this.executionState !== undefined;
868
+ return this.executionState !== undefined && !this.executionState.abortController.signal.aborted;
874
869
  }
875
870
 
876
871
  get status(): ZLinkFrameworkRuntimeStatus {
@@ -905,6 +900,7 @@ export class ZLinkFrameworkRuntimeHost
905
900
  const queue = new RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>(undefined, signal);
906
901
  this.runtimeObservers.add(queue);
907
902
  queue.onClose(() => this.runtimeObservers.delete(queue));
903
+ this.publishRuntimeStatus(queue, this.status);
908
904
  return queue;
909
905
  }
910
906
 
@@ -921,7 +917,7 @@ export class ZLinkFrameworkRuntimeHost
921
917
  options,
922
918
  this.options.registration.applicationVersion
923
919
  );
924
- const deadlineMs = options.deadlineMs ?? 30_000;
920
+ const deadlineMs = options.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
925
921
  if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
926
922
  return Promise.reject(new RangeError('Relocation deadlineMs must be greater than zero.'));
927
923
  }
@@ -990,7 +986,7 @@ export class ZLinkFrameworkRuntimeHost
990
986
  }
991
987
 
992
988
  shutdown(options?: ZLinkFrameworkLifecycleOptions): Promise<ZLinkFrameworkTerminationResult> {
993
- const deadlineMs = options?.deadlineMs ?? 30_000;
989
+ const deadlineMs = options?.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
994
990
  if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
995
991
  return Promise.reject(new RangeError('Shutdown deadlineMs must be greater than zero.'));
996
992
  }
@@ -1103,52 +1099,78 @@ export class ZLinkFrameworkRuntimeHost
1103
1099
  }
1104
1100
 
1105
1101
  private async runShutdown(deadlineMs: number): Promise<ZLinkFrameworkTerminationResult> {
1106
- const deadlineAtMs = performance.now() + deadlineMs;
1107
- try {
1108
- this.admission.close();
1109
- this.setRuntimeState(ZLinkFrameworkRuntimeState.Draining);
1110
- if (
1111
- this.relocationOperation !== undefined &&
1112
- this.relocationStopStarting?.signal.aborted === true
1113
- ) {
1114
- await this.relocationOperation;
1115
- }
1116
- // Seal application admission before the public status reports that the
1117
- // host no longer accepts work. This prevents status polling from racing
1118
- // with the coordinator's synchronous seal step.
1119
- const unscopedStreamDrain = this.streamRuntime?.notifyUnscopedServerDrain();
1120
- const shutdown = this.routeMeshCoordinator.shutdownHost(
1121
- this.runtimeDeadline!,
1122
- undefined,
1123
- Math.max(0, deadlineAtMs - performance.now())
1124
- );
1125
- const drain = await shutdown;
1126
- await unscopedStreamDrain;
1127
- await this.stop();
1128
- if (drain.kind === 'forceStopped') {
1102
+ return await this.runWithShutdownDeadline(deadlineMs, async () => {
1103
+ const deadlineAtMs = performance.now() + deadlineMs;
1104
+ try {
1105
+ this.admission.close();
1106
+ if (this.runtimeState === ZLinkFrameworkRuntimeState.Preparing) {
1107
+ this.executionState?.abortController.abort();
1108
+ }
1109
+ this.setRuntimeState(ZLinkFrameworkRuntimeState.Draining);
1110
+ if (
1111
+ this.relocationOperation !== undefined &&
1112
+ this.relocationStopStarting?.signal.aborted === true
1113
+ ) {
1114
+ await this.relocationOperation;
1115
+ }
1116
+ // Seal application admission before the public status reports that the
1117
+ // host no longer accepts work. This prevents status polling from racing
1118
+ // with the coordinator's synchronous seal step.
1119
+ const unscopedStreamDrain = this.streamRuntime?.notifyUnscopedServerDrain();
1120
+ const shutdown = this.routeMeshCoordinator.shutdownHost(
1121
+ this.runtimeDeadline!,
1122
+ this.shutdownDeadline!.signal
1123
+ );
1124
+ const drain = await shutdown;
1125
+ await unscopedStreamDrain;
1126
+ await this.stop();
1127
+ if (drain.kind === 'forceStopped') {
1128
+ return this.completeTermination({
1129
+ outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
1130
+ reason:
1131
+ drain.reason === 'deadline_exceeded'
1132
+ ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1133
+ : ZLinkFrameworkTerminationReason.TeardownFailed
1134
+ });
1135
+ }
1136
+ if (performance.now() >= deadlineAtMs) {
1137
+ throw createDeadlineExceededError('Shutdown resource cleanup exceeded its deadline.');
1138
+ }
1139
+ return this.completeTermination({
1140
+ outcome: ZLinkFrameworkTerminationOutcome.Stopped,
1141
+ reason: ZLinkFrameworkTerminationReason.None
1142
+ });
1143
+ } catch (error) {
1144
+ await this.stop().catch(() => undefined);
1129
1145
  return this.completeTermination({
1130
1146
  outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
1131
- reason:
1132
- drain.reason === 'deadline_exceeded'
1133
- ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1134
- : ZLinkFrameworkTerminationReason.TeardownFailed
1147
+ reason: isDeadlineExceededError(error)
1148
+ ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1149
+ : ZLinkFrameworkTerminationReason.TeardownFailed
1135
1150
  });
1136
1151
  }
1137
- if (performance.now() >= deadlineAtMs) {
1138
- throw createDeadlineExceededError('Shutdown resource cleanup exceeded its deadline.');
1139
- }
1140
- return this.completeTermination({
1141
- outcome: ZLinkFrameworkTerminationOutcome.Stopped,
1142
- reason: ZLinkFrameworkTerminationReason.None
1143
- });
1144
- } catch (error) {
1145
- await this.stop().catch(() => undefined);
1146
- return this.completeTermination({
1147
- outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
1148
- reason: isDeadlineExceededError(error)
1149
- ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1150
- : ZLinkFrameworkTerminationReason.TeardownFailed
1151
- });
1152
+ });
1153
+ }
1154
+
1155
+ private async runWithShutdownDeadline<T>(
1156
+ deadlineMs: number,
1157
+ operation: () => Promise<T>
1158
+ ): Promise<T> {
1159
+ if (this.shutdownDeadline !== undefined) return await operation();
1160
+ const deadline = new AbortController();
1161
+ this.shutdownDeadline = deadline;
1162
+ const ownsRuntimeDeadline = this.runtimeDeadline === undefined;
1163
+ this.runtimeDeadline ??= new Date(Date.now() + deadlineMs);
1164
+ const timer = setTimeout(
1165
+ () => deadline.abort(createDeadlineExceededError('Shutdown deadline exceeded.')),
1166
+ Math.max(0, this.runtimeDeadline.getTime() - Date.now())
1167
+ );
1168
+ try {
1169
+ return await operation();
1170
+ } finally {
1171
+ clearTimeout(timer);
1172
+ this.shutdownDeadline = undefined;
1173
+ if (ownsRuntimeDeadline) this.runtimeDeadline = undefined;
1152
1174
  }
1153
1175
  }
1154
1176
 
@@ -1185,8 +1207,9 @@ export class ZLinkFrameworkRuntimeHost
1185
1207
  private recordRelocationResult(result: ZLinkFrameworkRelocationResult): void {
1186
1208
  if (this.relocationOperationStartedAt !== undefined) {
1187
1209
  this.metrics.duration(
1188
- 'zlink.host.relocation.duration',
1189
- Math.max(0, performance.now() - this.relocationOperationStartedAt) / 1000,
1210
+ METRIC_NAMES.HostRelocationDuration,
1211
+ Math.max(0, performance.now() - this.relocationOperationStartedAt) /
1212
+ MILLISECONDS_PER_SECOND,
1190
1213
  {
1191
1214
  mode: relocationModeMetricName(result.mode),
1192
1215
  outcome:
@@ -1195,7 +1218,7 @@ export class ZLinkFrameworkRuntimeHost
1195
1218
  );
1196
1219
  }
1197
1220
  if (result.outcome === ZLinkFrameworkRelocationOutcome.Blocked) {
1198
- this.metrics.count('zlink.host.relocation.blocked', 1, {
1221
+ this.metrics.count(METRIC_NAMES.HostRelocationBlocked, 1, {
1199
1222
  mode: relocationModeMetricName(result.mode),
1200
1223
  reason: relocationReasonMetricName(result.reason)
1201
1224
  });
@@ -1218,8 +1241,8 @@ export class ZLinkFrameworkRuntimeHost
1218
1241
  this.runtimeDeadline = undefined;
1219
1242
  if (this.shutdownOperationStartedAt !== undefined) {
1220
1243
  this.metrics.duration(
1221
- 'zlink.host.shutdown.duration',
1222
- Math.max(0, performance.now() - this.shutdownOperationStartedAt) / 1000,
1244
+ METRIC_NAMES.HostShutdownDuration,
1245
+ Math.max(0, performance.now() - this.shutdownOperationStartedAt) / MILLISECONDS_PER_SECOND,
1223
1246
  {
1224
1247
  outcome:
1225
1248
  result.outcome === ZLinkFrameworkTerminationOutcome.Stopped
@@ -1229,7 +1252,7 @@ export class ZLinkFrameworkRuntimeHost
1229
1252
  );
1230
1253
  }
1231
1254
  if (result.outcome === ZLinkFrameworkTerminationOutcome.ForceStopped) {
1232
- this.metrics.count('zlink.host.shutdown.forced', 1, {
1255
+ this.metrics.count(METRIC_NAMES.HostShutdownForced, 1, {
1233
1256
  reason: terminationReasonMetricName(result.reason)
1234
1257
  });
1235
1258
  }
@@ -1251,14 +1274,18 @@ export class ZLinkFrameworkRuntimeHost
1251
1274
  this.notifyTopologyHostStateChanged();
1252
1275
  const status = this.status;
1253
1276
  for (const observer of this.runtimeObservers) {
1254
- if (state === ZLinkFrameworkRuntimeState.Stopped) {
1255
- observer.seal(status, this.runtimeObservationSource);
1256
- } else {
1257
- observer.push(status, this.runtimeObservationSource);
1258
- }
1277
+ this.publishRuntimeStatus(observer, status);
1259
1278
  }
1260
- if (state === ZLinkFrameworkRuntimeState.Stopped) {
1261
- this.runtimeObservers.clear();
1279
+ }
1280
+
1281
+ private publishRuntimeStatus(
1282
+ observer: RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>,
1283
+ status: ZLinkFrameworkRuntimeStatus
1284
+ ): void {
1285
+ if (runtimeObservationIsTerminal(status.state)) {
1286
+ observer.complete(status, this.runtimeObservationSource);
1287
+ } else {
1288
+ observer.push(status, this.runtimeObservationSource);
1262
1289
  }
1263
1290
  }
1264
1291
 
@@ -1410,7 +1437,9 @@ export class ZLinkFrameworkRuntimeHost
1410
1437
  const locationRuntime = await this.locationOwner.startForRuntime(
1411
1438
  this.meshRouters.primaryMeshName(),
1412
1439
  spotNodeRuntime,
1413
- channelRuntime
1440
+ channelRuntime,
1441
+ this.executionState.abortController.signal,
1442
+ () => this.shutdownDeadline!.signal
1414
1443
  );
1415
1444
  startedLocationRuntime = locationRuntime;
1416
1445
  if (locationRuntime !== undefined) {
@@ -1462,15 +1491,27 @@ export class ZLinkFrameworkRuntimeHost
1462
1491
  this.setRuntimeState(ZLinkFrameworkRuntimeState.Serving);
1463
1492
  this.lifecycleSink?.push('framework:started');
1464
1493
  } catch (error) {
1494
+ if (this.shutdownDeadline !== undefined && isAbortError(error)) throw error;
1465
1495
  await statefulAuthorityRoutes?.stop();
1466
- await rollbackRuntimeStart({
1467
- context,
1468
- startedLocationRuntime,
1469
- streamRuntime,
1470
- spotNodeRuntime,
1471
- channelRuntime,
1472
- ownedStores: registeredRuntimeStores(this.options.registration)
1473
- });
1496
+ try {
1497
+ await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
1498
+ rollbackRuntimeStart({
1499
+ context,
1500
+ startedLocationRuntime: startedLocationRuntime ?? this.locationOwner.currentRuntime,
1501
+ shutdownSignal: this.shutdownDeadline!.signal,
1502
+ streamRuntime,
1503
+ spotNodeRuntime,
1504
+ channelRuntime,
1505
+ ownedStores: registeredRuntimeStores(this.options.registration)
1506
+ })
1507
+ );
1508
+ } catch (cleanupError) {
1509
+ this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
1510
+ 'framework start rollback',
1511
+ cleanupError
1512
+ );
1513
+ throw new AggregateError([error, cleanupError], 'Framework start and rollback failed.');
1514
+ }
1474
1515
  this.executionState = undefined;
1475
1516
  this.channelRuntime = undefined;
1476
1517
  this.spotNodeRuntime = undefined;
@@ -1484,7 +1525,9 @@ export class ZLinkFrameworkRuntimeHost
1484
1525
  }
1485
1526
 
1486
1527
  async stop(): Promise<void> {
1487
- await this.runLifecycle(() => this.stopCore());
1528
+ await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
1529
+ this.runLifecycle(() => this.stopCore())
1530
+ );
1488
1531
  }
1489
1532
 
1490
1533
  private runtimeMetricMeshSnapshots(): readonly ZLinkRuntimeMetricMeshSnapshot[] {
@@ -1537,6 +1580,7 @@ export class ZLinkFrameworkRuntimeHost
1537
1580
  if (state === undefined) {
1538
1581
  return;
1539
1582
  }
1583
+ state.abortController.abort();
1540
1584
 
1541
1585
  const channelRuntime = this.channelRuntime;
1542
1586
  const spotNodeRuntime = this.spotNodeRuntime;
@@ -1545,24 +1589,25 @@ export class ZLinkFrameworkRuntimeHost
1545
1589
  this.stopTopologyObservers();
1546
1590
  this.removeOwnerLeaseRecoveryPublication();
1547
1591
  const locationSnapshot = this.locationOwner.clearForStop();
1548
- this.executionState = undefined;
1549
- this.channelRuntime = undefined;
1550
- this.spotNodeRuntime = undefined;
1551
- this.streamRuntime = undefined;
1552
- this.statefulAuthorityRoutes = undefined;
1553
- this.cachedLocationSpotRouteResolver = undefined;
1554
1592
  this.lifecycleSink?.push('framework:stop');
1555
1593
  await statefulAuthorityRoutes?.stop();
1556
1594
  await stopRuntimeParts({
1557
1595
  state,
1558
1596
  locationSnapshot,
1559
1597
  cleanupDeadline: this.runtimeDeadline,
1598
+ shutdownSignal: this.shutdownDeadline!.signal,
1560
1599
  streamRuntime,
1561
1600
  spotNodeRuntime,
1562
1601
  channelRuntime,
1563
1602
  serviceRelocation: this.serviceRelocation,
1564
1603
  ownedStores: registeredRuntimeStores(this.options.registration)
1565
1604
  });
1605
+ this.executionState = undefined;
1606
+ this.channelRuntime = undefined;
1607
+ this.spotNodeRuntime = undefined;
1608
+ this.streamRuntime = undefined;
1609
+ this.statefulAuthorityRoutes = undefined;
1610
+ this.cachedLocationSpotRouteResolver = undefined;
1566
1611
  this.listenerRecords.clear();
1567
1612
  this.lifecycleSink?.push('framework:stopped');
1568
1613
  if (this.shutdownOperation === undefined) {
@@ -1628,7 +1673,7 @@ export class ZLinkFrameworkRuntimeHost
1628
1673
  pollingIntervalMs:
1629
1674
  this.options.registration.locations.options.pollingIntervalMs ??
1630
1675
  zlinkDefaultLocationOptions.pollingIntervalMs,
1631
- pageSize: 1000,
1676
+ pageSize: ZLINK_PROVIDER_MAX_PAGE_SIZE,
1632
1677
  reportError: (error) =>
1633
1678
  this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
1634
1679
  'stateful authority route reconciliation',
@@ -1657,11 +1702,6 @@ export class ZLinkFrameworkRuntimeHost
1657
1702
  ): void {
1658
1703
  for (const [meshName, node] of spotNodeRuntime.meshNodesByName) {
1659
1704
  const activationNode = node as typeof node & {
1660
- setSpotAdmissionProvider?: (provider: {
1661
- isClosing(spotId: string): boolean;
1662
- awaitCloseDecision(spotId: string): Promise<void> | undefined;
1663
- runtimeState(): ZLinkFrameworkRuntimeState;
1664
- }) => void;
1665
1705
  registerAsyncInstanceActivationAuthority?: (
1666
1706
  authority: ServiceAsyncInstanceActivationAuthority
1667
1707
  ) => void;
@@ -1677,11 +1717,6 @@ export class ZLinkFrameworkRuntimeHost
1677
1717
  };
1678
1718
  const spotManager = this.spotManager;
1679
1719
  if (spotManager !== undefined) {
1680
- activationNode.setSpotAdmissionProvider?.({
1681
- isClosing: (spotId) => spotManager.isSpotClosing(meshName, spotId),
1682
- awaitCloseDecision: (spotId) => spotManager.pendingSpotCloseDecision(meshName, spotId),
1683
- runtimeState: () => this.runtimeState
1684
- });
1685
1720
  this.registerInstanceApplicationLifecycle(meshName, activationNode, spotManager);
1686
1721
  }
1687
1722
  activationNode.registerAsyncInstanceActivationAuthority?.(
@@ -1893,6 +1928,7 @@ export class ZLinkFrameworkRuntimeHost
1893
1928
  } catch (error) {
1894
1929
  throw new ZLinkDrainingStatePublishError(error);
1895
1930
  }
1931
+ await awaitWithDrainSignal(this.serviceRelocation.drainTargetAttempts(), signal);
1896
1932
  }
1897
1933
 
1898
1934
  private async cleanupOwnerForDrain(signal: AbortSignal): Promise<void> {
@@ -1929,7 +1965,6 @@ export class ZLinkFrameworkRuntimeHost
1929
1965
  ),
1930
1966
  isMaterializing: (target) =>
1931
1967
  spotManager.isInstanceMaterializing(meshName, target.targetSpotId as never),
1932
- isClosing: (target) => spotManager.isInstanceClosing(meshName, target.targetSpotId as never),
1933
1968
  isIdleEvicting: (target) =>
1934
1969
  spotManager.isInstanceSpotIdleEvicting(meshName, target.targetSpotId as never),
1935
1970
  beginIdleEviction: (target) =>
@@ -1965,19 +2000,6 @@ export class ZLinkFrameworkRuntimeHost
1965
2000
  setSpotManager(spotManager: DefaultZLinkSpotManager): void {
1966
2001
  this.spotManager = spotManager;
1967
2002
  for (const [meshName, node] of this.spotNodeRuntime?.meshNodesByName ?? []) {
1968
- const admissionNode = node as typeof node & {
1969
- setSpotAdmissionProvider?: (provider: {
1970
- isClosing(spotId: string): boolean;
1971
- awaitCloseDecision(spotId: string): Promise<void> | undefined;
1972
- runtimeState(): ZLinkFrameworkRuntimeState;
1973
- }) => void;
1974
- };
1975
- admissionNode.setSpotAdmissionProvider?.({
1976
- isClosing: (spotId: string) => spotManager.isSpotClosing(meshName, spotId),
1977
- awaitCloseDecision: (spotId: string) =>
1978
- spotManager.pendingSpotCloseDecision(meshName, spotId),
1979
- runtimeState: () => this.runtimeState
1980
- });
1981
2003
  this.registerInstanceApplicationLifecycle(meshName, node, spotManager);
1982
2004
  }
1983
2005
  }
@@ -2099,7 +2121,10 @@ export class ZLinkFrameworkRuntimeHost
2099
2121
  detachedTaskRunner: this.detachedTaskRunner(),
2100
2122
  metrics: this.metrics,
2101
2123
  admission: this.admission,
2102
- statefulExecutionAllowed: () => this.ownerAdmissionOpen()
2124
+ statefulExecution: {
2125
+ admissionOpen: () => this.ownerAdmissionOpen(),
2126
+ hostState: () => this.runtimeState
2127
+ }
2103
2128
  }).create(this.actorTransferRuntime),
2104
2129
  activationAdmission: this.activationAdmission
2105
2130
  };
@@ -2160,7 +2185,7 @@ export class ZLinkFrameworkRuntimeHost
2160
2185
  );
2161
2186
  }
2162
2187
  const meshNode = this.spotNodeRuntime?.meshNode(meshName);
2163
- const descriptors = (await locationStore.listMeshNodes(meshName, undefined, signal)).items;
2188
+ const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
2164
2189
  const selected = await selectReadyLocationPlacementDescriptor(
2165
2190
  descriptors,
2166
2191
  meshNode,
@@ -2270,7 +2295,7 @@ export class ZLinkFrameworkRuntimeHost
2270
2295
  );
2271
2296
  }
2272
2297
  const meshNode = this.spotNodeRuntime?.meshNode(meshName);
2273
- const descriptors = (await locationStore.listMeshNodes(meshName, undefined, signal)).items;
2298
+ const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
2274
2299
  const selected = await selectReadyLocationPlacementDescriptor(
2275
2300
  descriptors,
2276
2301
  meshNode,
@@ -2381,7 +2406,7 @@ export class ZLinkFrameworkRuntimeHost
2381
2406
  try {
2382
2407
  payload = {
2383
2408
  packetName: 'ZLinkFrameworkUserSpotReply',
2384
- contentType: 'application/octet-stream',
2409
+ contentType: ZlinkStreamContentType.Raw,
2385
2410
  payload: Buffer.from(message.data())
2386
2411
  };
2387
2412
  } finally {
@@ -2560,7 +2585,7 @@ export class ZLinkFrameworkRuntimeHost
2560
2585
  }
2561
2586
  return node.requestUserSpotClose(targetNodeRid, request, timeoutMs);
2562
2587
  },
2563
- defaultTimeoutMs: this.options.registration.requestTimeoutMs ?? 30_000,
2588
+ defaultTimeoutMs: this.options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
2564
2589
  messageSerializers: this.options.registration.messageSerializers
2565
2590
  });
2566
2591
  }
@@ -2582,6 +2607,10 @@ export class ZLinkFrameworkRuntimeHost
2582
2607
  notifyEntrySpotActorCreated: (nodeRid, actor, createRequest, signal) =>
2583
2608
  this.spotNodeRuntime?.notifyEntrySpotActorCreated(nodeRid, actor, createRequest, signal) ??
2584
2609
  Promise.resolve(undefined),
2610
+ notifyEntrySpotActorJoined: (actor, signal) =>
2611
+ this.spotNodeRuntime?.notifyPrimaryEntrySpotActorJoined(actor, signal) ?? Promise.resolve(),
2612
+ notifyEntrySpotActorLeft: (actor, signal) =>
2613
+ this.spotNodeRuntime?.notifyPrimaryEntrySpotActorLeft(actor, signal) ?? Promise.resolve(),
2585
2614
  locationLifecycle: () => this.locationOwner.currentLifecycle,
2586
2615
  primaryMeshName: () => this.meshRouters.primaryMeshName(),
2587
2616
  actorMeshName: (actorType) => this.meshRouters.actorMeshName(actorType),
@@ -2699,6 +2728,7 @@ export class ZLinkFrameworkRuntimeHost
2699
2728
  }).create();
2700
2729
  return {
2701
2730
  ...options,
2731
+ errorSink: this.runtimeOrPreStartErrorSink,
2702
2732
  peerAdmissionSealed: (meshName: string) => !this.admission.accepts(meshName),
2703
2733
  messageFollowReceiver: (record: ServiceMessageFollowRecord) => {
2704
2734
  if (record.source.kind === 'actor') {
@@ -2753,14 +2783,8 @@ export class ZLinkFrameworkRuntimeHost
2753
2783
  );
2754
2784
  }
2755
2785
  const binding = record.kindData;
2756
- const replyBindingFailure = (
2757
- kind: ZLinkFrameworkInternalErrorKind,
2758
- message: string
2759
- ): void => {
2760
- const terminal =
2761
- kind === ZLinkFrameworkInternalErrorKind.ActorGenerationStale
2762
- ? { terminalResult: RequestResult.InvalidState, failureCode: 0 }
2763
- : internalFrameworkWireReply(createInternalFrameworkException(kind, message));
2786
+ const replyBindingFailure = (kind: ZLinkFrameworkInternalErrorKind): void => {
2787
+ const terminal = internalFrameworkWireReply(kind);
2764
2788
  if (
2765
2789
  record.replyFailure?.(terminal.terminalResult, terminal.failureCode) !== SubmitResult.Ok
2766
2790
  ) {
@@ -2784,17 +2808,11 @@ export class ZLinkFrameworkRuntimeHost
2784
2808
  nativeActorRef.actorId !== binding.actor.actorId ||
2785
2809
  !routingIdsEqual(nativeActorRef.nodeRid, binding.actor.nodeRid)
2786
2810
  ) {
2787
- replyBindingFailure(
2788
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2789
- `Actor '${binding.actor.actorId}' binding target is no longer current.`
2790
- );
2811
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2791
2812
  return;
2792
2813
  }
2793
2814
  if (nativeActorRef.generation !== binding.actor.generation) {
2794
- replyBindingFailure(
2795
- ZLinkFrameworkInternalErrorKind.ActorGenerationStale,
2796
- `Actor '${binding.actor.actorId}' binding object generation is stale.`
2797
- );
2815
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorGenerationStale);
2798
2816
  return;
2799
2817
  }
2800
2818
  const node =
@@ -2809,10 +2827,7 @@ export class ZLinkFrameworkRuntimeHost
2809
2827
  state.locationGeneration !== binding.authorityOwnerGeneration ||
2810
2828
  state.isMoving
2811
2829
  ) {
2812
- replyBindingFailure(
2813
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2814
- `Actor '${binding.actor.actorId}' binding authority fence is stale.`
2815
- );
2830
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2816
2831
  return;
2817
2832
  }
2818
2833
  const sessionOwnerIsLocal =
@@ -2826,6 +2841,7 @@ export class ZLinkFrameworkRuntimeHost
2826
2841
  nodeRid: binding.actor.nodeRid
2827
2842
  };
2828
2843
  if (sessionOwnerIsLocal) {
2844
+ releaseApplicationJobPermitBeforeHandler();
2829
2845
  await this.streamBindingRuntime.retireRemoteBinding(
2830
2846
  actorRef,
2831
2847
  binding.sessionRid,
@@ -2842,10 +2858,7 @@ export class ZLinkFrameworkRuntimeHost
2842
2858
  binding.sessionRid
2843
2859
  );
2844
2860
  if (target === undefined) {
2845
- replyBindingFailure(
2846
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2847
- `Actor '${binding.actor.actorId}' Session route is unavailable.`
2848
- );
2861
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2849
2862
  return;
2850
2863
  }
2851
2864
  const installed = state.installBoundSessionBinding({
@@ -2858,10 +2871,7 @@ export class ZLinkFrameworkRuntimeHost
2858
2871
  bindingGeneration: binding.bindingGeneration
2859
2872
  });
2860
2873
  if (!installed) {
2861
- replyBindingFailure(
2862
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2863
- `Actor '${binding.actor.actorId}' Session binding generation is stale.`
2864
- );
2874
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2865
2875
  return;
2866
2876
  }
2867
2877
  replyBindingSuccess();
@@ -3082,7 +3092,7 @@ export class ZLinkFrameworkRuntimeHost
3082
3092
  return reporter;
3083
3093
  }
3084
3094
 
3085
- private detachedTaskRunner(): ZLinkDetachedTaskRunner {
3095
+ detachedTaskRunner(): ZLinkDetachedTaskRunner {
3086
3096
  return {
3087
3097
  runDetached: (taskName, callback) => {
3088
3098
  const runner = this.executionState?.taskRunner;
@@ -3158,8 +3168,8 @@ export class ZLinkFrameworkRuntimeHost
3158
3168
  undefined,
3159
3169
  async (meshName, nodeRid, expectedLifecycleGeneration, signal) => {
3160
3170
  const descriptor = (
3161
- await authority.listMeshNodes(meshName, undefined, signal)
3162
- ).items.find(
3171
+ await listAllMeshNodeDescriptors(authority, meshName, signal)
3172
+ ).find(
3163
3173
  (candidate) =>
3164
3174
  routingIdsEqual(candidate.rid, nodeRid) &&
3165
3175
  candidate.lifecycleGeneration === expectedLifecycleGeneration
@@ -3256,7 +3266,7 @@ export function hasExactPeerReadiness(
3256
3266
  peer.routingId !== null &&
3257
3267
  String(peer.routingId) === String(descriptor.rid) &&
3258
3268
  peer.lifecycleGeneration === descriptor.lifecycleGeneration &&
3259
- peer.state === 3
3269
+ peer.state === MeshPeerRuntimeState.Serving
3260
3270
  )
3261
3271
  )
3262
3272
  );
@@ -3266,7 +3276,11 @@ export {
3266
3276
  ZLinkActorTransferAuthorityRuntime,
3267
3277
  transferIdString
3268
3278
  } from './actor-transfer-authority-runtime';
3269
- export { ZLinkRetiringRollbackError, ZLinkRouteMeshRuntimeCoordinator } from './route-mesh-runtime';
3279
+ export {
3280
+ ZLinkDrainingStatePublishError,
3281
+ ZLinkRetiringRollbackError,
3282
+ ZLinkRouteMeshRuntimeCoordinator
3283
+ } from './route-mesh-runtime';
3270
3284
  export { ZLinkRelocationStateIncompatibleError } from './service-relocation-host-runtime';
3271
3285
  export {
3272
3286
  ZLinkHostSpotAddressTransport,
@@ -3285,7 +3299,7 @@ async function waitForForcedSessionNotification(
3285
3299
  if (operation === undefined) return;
3286
3300
  let timeoutHandle: ReturnType<typeof setTimeout> | undefined;
3287
3301
  const timeout = new Promise<void>((resolve) => {
3288
- timeoutHandle = setTimeout(resolve, 100);
3302
+ timeoutHandle = setTimeout(resolve, HOST_SHUTDOWN_POLL_INTERVAL_MS);
3289
3303
  });
3290
3304
  try {
3291
3305
  await Promise.race([operation.catch(() => undefined), timeout]);
@@ -3318,13 +3332,6 @@ async function awaitWithDrainSignal(
3318
3332
  });
3319
3333
  }
3320
3334
 
3321
- class ZLinkDrainingStatePublishError extends Error {
3322
- constructor(cause: unknown) {
3323
- super('Failed to publish draining peer rows.', { cause });
3324
- this.name = 'ZLinkDrainingStatePublishError';
3325
- }
3326
- }
3327
-
3328
3335
  function resolveBackendAdapterFactory(internalOptions: unknown): ZLinkBackendAdapterFactory {
3329
3336
  if (
3330
3337
  typeof internalOptions === 'object' &&
@@ -3483,7 +3490,7 @@ function waitForPlacementReadiness(signal?: AbortSignal): Promise<void> {
3483
3490
  const timer = setTimeout(() => {
3484
3491
  signal?.removeEventListener('abort', abort);
3485
3492
  resolve();
3486
- }, 10);
3493
+ }, HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS);
3487
3494
  const abort = () => {
3488
3495
  clearTimeout(timer);
3489
3496
  signal?.removeEventListener('abort', abort);