@zlink-systems/framework 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
  3. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  4. package/dist/contracts/Common/CoreTypes.js +7 -0
  5. package/dist/contracts/Common/index.d.ts +1 -1
  6. package/dist/contracts/Common/index.js +0 -1
  7. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  8. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  9. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  10. package/dist/contracts/Configuration/Registration.js +58 -36
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  14. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  15. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  16. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  17. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  18. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  19. package/dist/contracts/Handlers/JsonContract.js +10 -4
  20. package/dist/contracts/Locations/Authority.d.ts +1 -1
  21. package/dist/contracts/Locations/Authority.js +3 -2
  22. package/dist/contracts/Locations/Options.js +1 -1
  23. package/dist/contracts/Locations/Stores.d.ts +12 -0
  24. package/dist/contracts/Locations/Stores.js +9 -0
  25. package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
  26. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  27. package/dist/internal.d.ts +5 -0
  28. package/dist/internal.js +16 -1
  29. package/dist/nest-integration.d.ts +4 -2
  30. package/dist/nest-integration.js +14 -4
  31. package/dist/runtime/abort.d.ts +1 -0
  32. package/dist/runtime/abort.js +8 -5
  33. package/dist/runtime/activation-admission.d.ts +28 -0
  34. package/dist/runtime/activation-admission.js +57 -0
  35. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  36. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  37. package/dist/runtime/actors/actor-client.d.ts +2 -2
  38. package/dist/runtime/actors/actor-client.js +42 -143
  39. package/dist/runtime/actors/actor-context.d.ts +3 -5
  40. package/dist/runtime/actors/actor-context.js +19 -17
  41. package/dist/runtime/actors/actor-handoff.d.ts +13 -7
  42. package/dist/runtime/actors/actor-handoff.js +36 -25
  43. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  44. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  45. package/dist/runtime/actors/actor-local-native-join.js +85 -123
  46. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  47. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  48. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  49. package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
  50. package/dist/runtime/actors/actor-remote-joiner.js +11 -17
  51. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  52. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  53. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  54. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  55. package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
  56. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  57. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  58. package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
  59. package/dist/runtime/actors/bound-session-wire.js +2 -7
  60. package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
  61. package/dist/runtime/actors/deferred-join-completion.js +21 -0
  62. package/dist/runtime/actors/index.d.ts +10 -8
  63. package/dist/runtime/actors/index.js +101 -73
  64. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  65. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  66. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  67. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  68. package/dist/runtime/admission.d.ts +7 -1
  69. package/dist/runtime/admission.js +11 -1
  70. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  71. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  72. package/dist/runtime/backend/contracts/index.d.ts +8 -33
  73. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
  74. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  75. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  76. package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
  77. package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
  78. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
  79. package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
  80. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  81. package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
  82. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  83. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
  84. package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
  85. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
  86. package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
  87. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  88. package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
  89. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  90. package/dist/runtime/backend/runtime-values.js +2 -0
  91. package/dist/runtime/channels/channel-clients.d.ts +20 -9
  92. package/dist/runtime/channels/channel-clients.js +68 -60
  93. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  94. package/dist/runtime/channels/channel-envelope.js +47 -29
  95. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  96. package/dist/runtime/channels/channel-outbound-operations.js +9 -18
  97. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  98. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  99. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  100. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  101. package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
  102. package/dist/runtime/channels/channel-runtime-manager.js +4 -12
  103. package/dist/runtime/channels/channel-socket-options.js +3 -2
  104. package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
  105. package/dist/runtime/channels/channel-socket-registry.js +296 -235
  106. package/dist/runtime/channels/channel-transports.d.ts +11 -20
  107. package/dist/runtime/channels/channel-transports.js +68 -47
  108. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  109. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  110. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  111. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  112. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  113. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  114. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  115. package/dist/runtime/channels/fanout-location-runtime.js +133 -81
  116. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  117. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  118. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  119. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  120. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  121. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  122. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  123. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  124. package/dist/runtime/diagnostics/flow-context.js +16 -2
  125. package/dist/runtime/diagnostics/index.d.ts +4 -2
  126. package/dist/runtime/diagnostics/index.js +14 -4
  127. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  128. package/dist/runtime/diagnostics/message-flow.js +10 -19
  129. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  130. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  131. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  132. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  133. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  134. package/dist/runtime/disposal.d.ts +5 -0
  135. package/dist/runtime/disposal.js +22 -0
  136. package/dist/runtime/execution/index.d.ts +22 -9
  137. package/dist/runtime/execution/index.js +107 -37
  138. package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
  139. package/dist/runtime/execution/serial-execution-queue.js +99 -26
  140. package/dist/runtime/execution/state-lane.d.ts +8 -1
  141. package/dist/runtime/execution/state-lane.js +118 -3
  142. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  143. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  144. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  145. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  146. package/dist/runtime/foundation/listener-records.d.ts +11 -0
  147. package/dist/runtime/foundation/listener-records.js +20 -0
  148. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  149. package/dist/runtime/foundation/operation-identity.js +9 -5
  150. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  151. package/dist/runtime/foundation/operation-registry.js +34 -44
  152. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
  153. package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
  154. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  155. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  156. package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
  157. package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
  158. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  159. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  160. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  161. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  162. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  163. package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
  164. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  165. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  166. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  167. package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
  168. package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
  169. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
  170. package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
  171. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  172. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  173. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  174. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
  175. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  176. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  177. package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
  178. package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
  179. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
  180. package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
  181. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
  182. package/dist/runtime/foundation/service-topology-registry.js +22 -61
  183. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  184. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  185. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  186. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  187. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  188. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  189. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  190. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  191. package/dist/runtime/framework-errors-internal.js +343 -122
  192. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  193. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  194. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  195. package/dist/runtime/host/actor-packet-relay.js +48 -91
  196. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  197. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  198. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  199. package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
  200. package/dist/runtime/host/actor-transfer-runtime.js +210 -256
  201. package/dist/runtime/host/application-job-queue.js +16 -33
  202. package/dist/runtime/host/bound-session-relay.js +1 -1
  203. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  204. package/dist/runtime/host/index.d.ts +19 -14
  205. package/dist/runtime/host/index.js +234 -175
  206. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  207. package/dist/runtime/host/instance-activation-authority.js +17 -45
  208. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  209. package/dist/runtime/host/location-runtime-owner.js +2 -2
  210. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  211. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  212. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  213. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  214. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  215. package/dist/runtime/host/remote-bound-session-relay.js +11 -23
  216. package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
  217. package/dist/runtime/host/route-mesh-runtime.js +178 -257
  218. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  219. package/dist/runtime/host/runtime-shutdown.js +18 -21
  220. package/dist/runtime/host/service-relocation-control.js +6 -1
  221. package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
  222. package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
  223. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  224. package/dist/runtime/host/spot-address-transport.js +34 -136
  225. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  226. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  227. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
  228. package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
  229. package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
  230. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
  231. package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
  232. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  233. package/dist/runtime/locations/authority-key-codec.js +4 -3
  234. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  235. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  236. package/dist/runtime/locations/creation-operation-id.js +6 -4
  237. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  238. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  239. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  240. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  241. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  242. package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
  243. package/dist/runtime/locations/key-codec.js +3 -2
  244. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  245. package/dist/runtime/locations/lease-tracker.js +7 -11
  246. package/dist/runtime/locations/lifecycle.d.ts +5 -10
  247. package/dist/runtime/locations/lifecycle.js +4 -33
  248. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  249. package/dist/runtime/locations/location-store-failure.js +7 -0
  250. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  251. package/dist/runtime/locations/location-store-pages.js +13 -0
  252. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  253. package/dist/runtime/locations/location-store-repository.js +303 -332
  254. package/dist/runtime/locations/relocation-blob.js +18 -5
  255. package/dist/runtime/locations/resolvers.d.ts +5 -5
  256. package/dist/runtime/locations/resolvers.js +44 -30
  257. package/dist/runtime/locations/runtime.d.ts +5 -4
  258. package/dist/runtime/locations/runtime.js +123 -92
  259. package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
  260. package/dist/runtime/locations/spot-location-claims.js +40 -23
  261. package/dist/runtime/messaging/payload-codec.js +26 -20
  262. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  263. package/dist/runtime/messaging/submission-result.js +48 -0
  264. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
  265. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
  266. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
  267. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
  268. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
  269. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
  270. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
  271. package/dist/runtime/spots/index.d.ts +29 -29
  272. package/dist/runtime/spots/index.js +441 -313
  273. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
  274. package/dist/runtime/spots/spot-activation-registry.js +27 -60
  275. package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
  276. package/dist/runtime/spots/spot-activation-state.js +4 -17
  277. package/dist/runtime/spots/spot-activation.d.ts +10 -9
  278. package/dist/runtime/spots/spot-activation.js +103 -81
  279. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  280. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  281. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  282. package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
  283. package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
  284. package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
  285. package/dist/runtime/spots/spot-actor-membership.js +44 -53
  286. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  287. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  288. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  289. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  290. package/dist/runtime/spots/spot-context.d.ts +2 -2
  291. package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
  292. package/dist/runtime/spots/spot-entry-activation.js +9 -21
  293. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  294. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  295. package/dist/runtime/spots/spot-manager-public.js +6 -5
  296. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  297. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
  298. package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
  299. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  300. package/dist/runtime/spots/spot-outbound.js +10 -37
  301. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  302. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  303. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  304. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  305. package/dist/runtime/spots/spot-route-replies.js +3 -1
  306. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
  307. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
  308. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
  309. package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
  310. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  311. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  312. package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
  313. package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
  314. package/dist/runtime/spots/spot-serial-executor.js +9 -2
  315. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
  316. package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
  317. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  318. package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
  319. package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
  320. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
  321. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  322. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  323. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  324. package/dist/runtime/streams/bound-session-service.js +12 -19
  325. package/dist/runtime/streams/index.d.ts +15 -14
  326. package/dist/runtime/streams/index.js +38 -39
  327. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  328. package/dist/runtime/streams/managed-stream.js +17 -8
  329. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  330. package/dist/runtime/streams/protocol.d.ts +6 -33
  331. package/dist/runtime/streams/protocol.js +38 -110
  332. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  333. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  334. package/dist/runtime/streams/session-calls.d.ts +1 -1
  335. package/dist/runtime/streams/session-calls.js +5 -4
  336. package/dist/runtime/streams/session-context.d.ts +6 -6
  337. package/dist/runtime/streams/session-context.js +22 -4
  338. package/dist/runtime/streams/session-requests.js +2 -1
  339. package/dist/runtime/streams/session-serial-executor.js +2 -2
  340. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  341. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  342. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  343. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  344. package/dist/runtime/workers/index.d.ts +2 -2
  345. package/dist/runtime/workers/index.js +5 -4
  346. package/package.json +3 -3
  347. package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
  348. package/src/contracts/Common/CoreTypes.ts +7 -0
  349. package/src/contracts/Common/index.ts +1 -1
  350. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  351. package/src/contracts/Configuration/Registration.ts +92 -48
  352. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  353. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  354. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  355. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  356. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  357. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  358. package/src/contracts/Handlers/JsonContract.ts +14 -4
  359. package/src/contracts/Locations/Authority.ts +7 -3
  360. package/src/contracts/Locations/Options.ts +1 -1
  361. package/src/contracts/Locations/Stores.ts +14 -0
  362. package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
  363. package/src/contracts/Spots/Contracts.ts +1 -1
  364. package/src/internal.ts +15 -0
  365. package/src/nest-integration.ts +28 -10
  366. package/src/runtime/abort.ts +6 -5
  367. package/src/runtime/activation-admission.ts +72 -0
  368. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  369. package/src/runtime/actors/actor-client.ts +77 -204
  370. package/src/runtime/actors/actor-context.ts +45 -39
  371. package/src/runtime/actors/actor-handoff.ts +55 -45
  372. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  373. package/src/runtime/actors/actor-local-native-join.ts +174 -215
  374. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  375. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  376. package/src/runtime/actors/actor-remote-joiner.ts +15 -36
  377. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  378. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  379. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  380. package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
  381. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  382. package/src/runtime/actors/actor-source-transfer.ts +5 -18
  383. package/src/runtime/actors/bound-session-wire.ts +2 -8
  384. package/src/runtime/actors/deferred-join-completion.ts +44 -0
  385. package/src/runtime/actors/index.ts +122 -88
  386. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  387. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  388. package/src/runtime/admission.ts +13 -2
  389. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  390. package/src/runtime/backend/contracts/index.ts +15 -42
  391. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
  392. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  393. package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
  394. package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
  395. package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
  396. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  397. package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
  398. package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
  399. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
  400. package/src/runtime/backend/raw-binding-port.ts +14 -1
  401. package/src/runtime/backend/runtime-values.ts +4 -1
  402. package/src/runtime/channels/channel-clients.ts +132 -96
  403. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  404. package/src/runtime/channels/channel-envelope.ts +58 -29
  405. package/src/runtime/channels/channel-outbound-operations.ts +10 -31
  406. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  407. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  408. package/src/runtime/channels/channel-runtime-manager.ts +8 -15
  409. package/src/runtime/channels/channel-socket-options.ts +8 -2
  410. package/src/runtime/channels/channel-socket-registry.ts +369 -262
  411. package/src/runtime/channels/channel-transports.ts +161 -115
  412. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  413. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  414. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  415. package/src/runtime/channels/fanout-location-runtime.ts +175 -106
  416. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  417. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  418. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  419. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  420. package/src/runtime/diagnostics/flow-context.ts +16 -2
  421. package/src/runtime/diagnostics/index.ts +27 -17
  422. package/src/runtime/diagnostics/message-flow.ts +15 -25
  423. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  424. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  425. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  426. package/src/runtime/disposal.ts +19 -0
  427. package/src/runtime/execution/index.ts +116 -38
  428. package/src/runtime/execution/serial-execution-queue.ts +179 -34
  429. package/src/runtime/execution/state-lane.ts +142 -4
  430. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  431. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  432. package/src/runtime/foundation/listener-records.ts +21 -0
  433. package/src/runtime/foundation/operation-identity.ts +11 -5
  434. package/src/runtime/foundation/operation-registry.ts +33 -50
  435. package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
  436. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  437. package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
  438. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  439. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  440. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  441. package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
  442. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  443. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  444. package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
  445. package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
  446. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  447. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  448. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
  449. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  450. package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
  451. package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
  452. package/src/runtime/foundation/service-topology-registry.ts +30 -79
  453. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  454. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  455. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  456. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  457. package/src/runtime/framework-errors-internal.ts +380 -134
  458. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  459. package/src/runtime/host/actor-packet-relay.ts +57 -147
  460. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  461. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  462. package/src/runtime/host/actor-transfer-runtime.ts +266 -418
  463. package/src/runtime/host/application-job-queue.ts +28 -34
  464. package/src/runtime/host/bound-session-relay.ts +1 -2
  465. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  466. package/src/runtime/host/index.ts +408 -312
  467. package/src/runtime/host/instance-activation-authority.ts +89 -109
  468. package/src/runtime/host/location-runtime-owner.ts +4 -2
  469. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  470. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  471. package/src/runtime/host/remote-bound-session-relay.ts +12 -44
  472. package/src/runtime/host/route-mesh-runtime.ts +236 -275
  473. package/src/runtime/host/runtime-shutdown.ts +17 -21
  474. package/src/runtime/host/service-relocation-control.ts +14 -1
  475. package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
  476. package/src/runtime/host/spot-address-transport.ts +73 -195
  477. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  478. package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
  479. package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
  480. package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
  481. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  482. package/src/runtime/locations/authority-key-codec.ts +7 -3
  483. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  484. package/src/runtime/locations/creation-operation-id.ts +6 -3
  485. package/src/runtime/locations/domain-store-contract.ts +12 -3
  486. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  487. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  488. package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
  489. package/src/runtime/locations/key-codec.ts +3 -2
  490. package/src/runtime/locations/lease-tracker.ts +8 -14
  491. package/src/runtime/locations/lifecycle.ts +16 -45
  492. package/src/runtime/locations/location-store-failure.ts +4 -0
  493. package/src/runtime/locations/location-store-pages.ts +18 -0
  494. package/src/runtime/locations/location-store-repository.ts +450 -478
  495. package/src/runtime/locations/relocation-blob.ts +17 -6
  496. package/src/runtime/locations/resolvers.ts +90 -58
  497. package/src/runtime/locations/runtime.ts +220 -110
  498. package/src/runtime/locations/spot-location-claims.ts +54 -26
  499. package/src/runtime/messaging/payload-codec.ts +35 -24
  500. package/src/runtime/messaging/submission-result.ts +57 -1
  501. package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
  502. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
  503. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
  504. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
  505. package/src/runtime/spots/index.ts +687 -437
  506. package/src/runtime/spots/spot-activation-registry.ts +42 -71
  507. package/src/runtime/spots/spot-activation-state.ts +4 -16
  508. package/src/runtime/spots/spot-activation.ts +167 -115
  509. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  510. package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
  511. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
  512. package/src/runtime/spots/spot-actor-membership.ts +107 -75
  513. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  514. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  515. package/src/runtime/spots/spot-context.ts +3 -3
  516. package/src/runtime/spots/spot-entry-activation.ts +13 -33
  517. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  518. package/src/runtime/spots/spot-manager-public.ts +29 -21
  519. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  520. package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
  521. package/src/runtime/spots/spot-outbound.ts +47 -68
  522. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  523. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  524. package/src/runtime/spots/spot-route-replies.ts +6 -4
  525. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
  526. package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
  527. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  528. package/src/runtime/spots/spot-runtime-ports.ts +10 -43
  529. package/src/runtime/spots/spot-serial-executor.ts +10 -2
  530. package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
  531. package/src/runtime/spots/spot-timer.ts +3 -2
  532. package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
  533. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
  534. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  535. package/src/runtime/streams/bound-session-service.ts +23 -37
  536. package/src/runtime/streams/index.ts +102 -88
  537. package/src/runtime/streams/managed-stream.ts +29 -10
  538. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  539. package/src/runtime/streams/protocol.ts +34 -88
  540. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  541. package/src/runtime/streams/session-calls.ts +6 -5
  542. package/src/runtime/streams/session-context.ts +54 -10
  543. package/src/runtime/streams/session-requests.ts +2 -1
  544. package/src/runtime/streams/session-serial-executor.ts +2 -2
  545. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  546. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  547. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  548. package/src/runtime/workers/index.ts +13 -12
  549. package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
  550. package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
  551. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  552. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  553. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  554. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  555. package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
  556. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  557. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,78 +1,98 @@
1
- import {
2
- ZLinkFrameworkInternalErrorKind,
3
- createInternalFrameworkException,
4
- internalFrameworkWireReply
5
- } from '../framework-errors-internal';
1
+ import { listAllMeshNodeDescriptors } from '../locations/location-store-pages';
2
+ import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
6
3
  import { randomBytes, randomUUID } from 'node:crypto';
7
- import { ZLinkBufferMessage as RuntimeMessage } from '../backend/runtime-message';
8
- import {
9
- RequestResult,
10
- SubmitResult,
11
- type ZLinkBackendMessageLike as MessageLike
12
- } from '../backend/runtime-values';
13
- import {
14
- OperationKind,
15
- ReceiveKind,
16
- type ReadyRecord,
17
- type ReceiveRecord
18
- } from '../foundation/service-runtime-contracts';
19
- import type { ServiceMessageFollowRecord } from '../foundation/service-stateful-wire-codec';
20
- import { runtimeAcceptsWork, runtimeStateIsReady } from '../foundation/runtime-state-projections';
21
- import { createDeadlineExceededError, isDeadlineExceededError } from '../abort';
22
- import { meshActorSessionNodeAdapter, ZLinkNodeBackendAdapterFactory } from '../backend';
23
- import type {
24
- ZLinkBackendAdapterFactory,
25
- ZLinkBackendContext,
26
- ZLinkBackendMeshNode
27
- } from '../backend';
28
-
29
- const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
30
- import type { ZLinkFrameworkRegistration } from '../configuration';
31
- import type {
32
- ActorRef,
33
- RoutingId,
34
- ZLinkMeshNodeDescriptor,
35
- ZLinkClientServerRuntime,
36
- ZLinkFanoutRuntime,
37
- ZLinkFrameworkRuntime,
38
- ZLinkFrameworkLifecycleOptions,
39
- ZLinkFrameworkRelocationOptions,
40
- ZLinkFrameworkRelocationResult,
41
- ZLinkObservedStatus,
42
- ZLinkFrameworkRuntimeStatus,
43
- ZLinkFrameworkTerminationResult,
44
- ZLinkRouteMeshRuntime
45
- } from '../../contracts';
46
- import type { ZLinkLocationOwnerToken } from '../../contracts/Locations';
47
- import type { ZLinkProviderResolver } from '../../contracts/Common/ZLinkProviderResolver';
48
- import type { Type } from '../../contracts/Common/CoreTypes';
49
- import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
50
- import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
51
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,
52
22
  ZLinkFrameworkRelocationMode,
53
23
  ZLinkFrameworkRelocationOutcome,
54
24
  ZLinkFrameworkRelocationReason,
55
25
  ZLinkFrameworkRuntimeState,
56
26
  ZLinkFrameworkTerminationOutcome,
57
27
  ZLinkFrameworkTerminationReason,
28
+ zlinkMessageMetadata,
58
29
  ZLinkObjectRole,
59
30
  ZLinkPeerState,
60
- ZLinkSpotKind,
61
- zlinkMessageMetadata,
62
- ZLinkSpotCreateState
31
+ ZLinkSpotCreateState,
32
+ ZLinkSpotKind
63
33
  } from '../../contracts';
64
- 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';
65
40
  import {
66
- ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
67
41
  ZLinkDispatchErrorSurface,
68
- ZLinkDispatchMessageKind
42
+ ZLinkDispatchMessageKind,
43
+ ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome
69
44
  } from '../../contracts/Dispatch/ZLinkDispatchOptions';
70
- import type { ZLinkMessageFlowControl, ZLinkMessageFlowLogMode } from '../../contracts';
71
- 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';
72
92
  import {
73
93
  DefaultZLinkChannelRuntimeOptions,
74
- ZLinkDispatchErrorReporter,
75
94
  ZLinkChannelRuntimeManager,
95
+ ZLinkDispatchErrorReporter,
76
96
  ZLinkRuntimeRouteTransport,
77
97
  type ZLinkDispatchErrorSink
78
98
  } from '../channels';
@@ -82,33 +102,72 @@ import {
82
102
  encodeChannelErrorReplyParts,
83
103
  encodeChannelReplyParts
84
104
  } from '../channels/channel-envelope';
85
- import { ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET } from '../actors';
86
- import {
87
- ZLINK_INTERNAL_ACTOR_TRANSPORT_DELIVERY_GATE,
88
- type ZLinkInternalActorTransportDeliveryGate
89
- } from '../actors/actor-transport-delivery-gate';
90
- import {
91
- ZLINK_INTERNAL_APPLICATION_JOB_QUEUE_HANDLER_START_GATE,
92
- type ZLinkInternalApplicationJobQueueHandlerStartGate
93
- } from '../application-jobs/application-job-queue-handler-start-gate';
94
- import { ZLinkFrameworkExecutionState, ZLinkRuntimeTaskErrorSink } from '../execution';
105
+ import type { ZLinkFrameworkRegistration } from '../configuration';
95
106
  import {
107
+ type ZLinkRuntimeEventPublisher,
96
108
  createDiagnosticsContext,
97
109
  createInboundFlow,
98
110
  currentOrCreateFlow,
99
111
  DefaultZLinkRuntimeEventPublisher,
100
112
  flowIfEnabled,
101
113
  runWithFlow,
114
+ ZLinkRuntimeMetrics,
102
115
  type ZLinkDiagnosticsContext,
103
116
  type ZLinkMessageFlowModeCell,
104
- type ZLinkRuntimeMetricMeshSnapshot,
105
- ZLinkRuntimeMetrics
117
+ type ZLinkRuntimeMetricMeshSnapshot
106
118
  } from '../diagnostics';
119
+ import { METRIC_NAMES, MILLISECONDS_PER_SECOND } from '../diagnostics/runtime-metrics';
120
+ import { RuntimeEventQueue } from '../diagnostics/runtime-observation-queue';
107
121
  import {
108
122
  ZLinkClientServerRuntimeProjection,
109
123
  ZLinkFanoutRuntimeProjection
110
124
  } from '../diagnostics/topology-runtime-projections';
111
- 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';
112
171
  import {
113
172
  DefaultZLinkSpotManager,
114
173
  ZLinkPublicSpotManager,
@@ -117,83 +176,52 @@ import {
117
176
  type ZLinkDetachedTaskRunner,
118
177
  type ZLinkSpotManagerOptions
119
178
  } from '../spots';
120
- import type { DefaultZLinkActorManager, ZLinkActorManagerOptions } from '../actors';
121
- import { messageFollowOwnerNodeRid, ownerFence } from '../actors/actor-message-follow-context';
122
- import {
123
- DefaultZLinkActorClient,
124
- ZLinkActorHandoffCoordinator,
125
- ZLinkActorTransferRegistry,
126
- decodeRemoteActorSourceLeaveTerminal,
127
- isActorAuthorityPayload,
128
- publishInitialActorAuthority,
129
- rewriteActorAuthorityOwner
130
- } from '../actors';
179
+ import type { ZLinkSpotRouteResolver } from '../spots/spot-routing-internal';
131
180
  import {
132
181
  DefaultZLinkBoundSessionFactory,
133
- type DefaultZLinkBoundSession,
134
- type ZLinkStreamPayloadCodec,
135
182
  ZLinkStreamBindingRuntime,
136
- ZLinkStreamRuntimeManager
183
+ ZLinkStreamRuntimeManager,
184
+ type DefaultZLinkBoundSession,
185
+ type ZLinkStreamPayloadCodec
137
186
  } from '../streams';
138
- import {
139
- ZLinkOwnerCleanupError,
140
- ZLinkAuthoritySpotRouteResolver,
141
- type ZLinkLocationRuntime,
142
- type ZLinkStoreLocationResolvers
143
- } from '../locations';
144
- import {
145
- zlinkDefaultLocationOptions,
146
- type ZLinkLocationRuntimeQuery
147
- } from '../../contracts/Locations';
187
+ import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
148
188
  import { ZLinkActorRuntimeOptionsFactory } from './actor-runtime-options-factory';
149
- import { ZLinkActorTransferRuntime } from './actor-transfer-runtime';
150
189
  import { ZLinkActorTransferAuthorityRuntime } from './actor-transfer-authority-runtime';
151
- import { ZLinkEntryActorRuntimeService } from './entry-actor-runtime';
152
- import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
153
- import { MeshRouterResolver } from './mesh-router-resolver';
154
- import { ZLinkBoundSessionRelay } from './bound-session-relay';
155
- import { decodeRoutingId, encodeRoutingIdStorageHex, routingIdsEqual } from '../routing-id';
156
- import { rewriteServiceAuthorityOwner } from '../foundation/service-authority-payload-codec';
190
+ import { ZLinkActorTransferRuntime } from './actor-transfer-runtime';
157
191
  import {
158
- replaceServiceRelocationAuthorityApplicationPayload,
159
- serviceRelocationAuthorityApplicationPayload
160
- } from '../foundation/service-relocation-runtime';
161
- 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';
162
197
  import { ZLinkChannelRuntimeOptionsFactory } from './channel-runtime-options-factory';
163
- import { ZLinkSpotNodeRuntimeOptionsFactory } from './spot-node-runtime-options-factory';
164
- import { rollbackRuntimeStart, stopRuntimeParts } from './runtime-shutdown';
165
- import { ZLinkRuntimeAdmissionGate } from '../admission';
166
- import { ZLinkRetiringRollbackError, ZLinkRouteMeshRuntimeCoordinator } from './route-mesh-runtime';
167
- import { ZLinkConfigurationException } from '../../contracts/Configuration/ConfigurationException';
168
- import { ZLinkStatefulAuthorityRouteRuntime } from './stateful-authority-route-runtime';
198
+ import { ZLinkEntryActorRuntimeService } from './entry-actor-runtime';
199
+ import { HostCapacityStatusProjection } from './host-capacity-status';
169
200
  import { ZLinkInstanceActivationAuthority } from './instance-activation-authority';
170
- import type {
171
- ServiceAsyncInstanceActivationAuthority,
172
- ServiceInstanceApplicationLifecycle
173
- } from '../foundation/service-stateful-runtime';
174
- import { hasObjectClientCapability, ZLinkHostSpotAddressTransport } from './spot-address-transport';
175
- import { ZLinkUserSpotCreationCoordinator } from './user-spot-creation-coordinator';
176
- import { ZLinkActorPlacementCoordinator } from './actor-placement-coordinator';
177
- import {
178
- decodeFrameworkPayloadMessage,
179
- encodeFrameworkPayloadMessage
180
- } from '../messaging/payload-codec';
201
+ import { ZLinkLocationRuntimeOwner } from './location-runtime-owner';
202
+ import { MeshRouterResolver } from './mesh-router-resolver';
181
203
  import {
182
- decodeFrameworkCreationPayload,
183
- encodeFrameworkCreationPayload
184
- } from '../messaging/creation-payload-codec';
204
+ ZLinkDrainingStatePublishError,
205
+ ZLinkRetiringRollbackError,
206
+ ZLinkRouteMeshRuntimeCoordinator
207
+ } from './route-mesh-runtime';
185
208
  import { DefaultZLinkRouteMeshRuntimeOptions } from './route-mesh-runtime-options';
209
+ import { rollbackRuntimeStart, stopRuntimeParts } from './runtime-shutdown';
186
210
  import {
187
211
  ZLinkHostServiceRelocationRuntime,
188
212
  ZLinkRelocationStateIncompatibleError
189
213
  } from './service-relocation-host-runtime';
190
- import {
191
- ApplicationJobQueue,
192
- nodeEffectiveProcessorCount,
193
- resolveApplicationJobQueueConfiguration
194
- } from './application-job-queue';
195
- import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
196
- 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;
223
+
224
+ const LEGACY_MESH_SEND_TIMEOUT_MS = 1000;
197
225
 
198
226
  export interface ZLinkFrameworkRuntimeLifecycle {
199
227
  readonly isStarted: boolean;
@@ -219,6 +247,7 @@ export class ZLinkFrameworkRuntimeHost
219
247
  private runtimeSequence = 0n;
220
248
  private readonly runtimeObservationSource = Symbol('zlink.framework-runtime');
221
249
  private runtimeDeadline?: Date;
250
+ private shutdownDeadline?: AbortController;
222
251
  private runtimeRelocationResult?: ZLinkFrameworkRelocationResult;
223
252
  private runtimeTerminationResult?: ZLinkFrameworkTerminationResult;
224
253
  private relocationOperation?: Promise<ZLinkFrameworkRelocationResult>;
@@ -245,6 +274,7 @@ export class ZLinkFrameworkRuntimeHost
245
274
  private actorManager?: DefaultZLinkActorManager;
246
275
  private actorPlacement?: ZLinkActorPlacementCoordinator;
247
276
  private spotManager?: DefaultZLinkSpotManager;
277
+ private userSpotCoordinator?: ZLinkUserSpotCreationCoordinator;
248
278
  private ownerLeaseRecoveryRuntime?: ZLinkLocationRuntime;
249
279
  private ownerLeaseRecoveryHandler?: () => void;
250
280
  private registerUserSpotHandlers?: (runtime: ZLinkSpotNodeRuntimeManager) => void;
@@ -256,6 +286,11 @@ export class ZLinkFrameworkRuntimeHost
256
286
  private readonly metricRegistrations: import('../diagnostics').ZLinkRuntimeMetricRegistration[] =
257
287
  [];
258
288
  private readonly admission = new ZLinkRuntimeAdmissionGate(() => this.ownerAdmissionOpen());
289
+ private readonly activationAdmission = new ZLinkActivationAdmission(
290
+ (meshName) =>
291
+ this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ??
292
+ DEFAULT_ACTIVATION_CONCURRENCY_LIMIT
293
+ );
259
294
  private cachedLocationSpotRouteResolver?: ZLinkSpotRouteResolver;
260
295
  private actorClientLocationResolver?: ZLinkStoreLocationResolvers;
261
296
  // Shared, runtime-mutable message-flow mode cell — installed once so
@@ -360,7 +395,8 @@ export class ZLinkFrameworkRuntimeHost
360
395
  this.meshRouters.classifyManualNodeTarget(meshName, targetNodeRid),
361
396
  (meshName, sourceNodeRid, parts) => this.submitLocalMeshRoute(meshName, sourceNodeRid, parts),
362
397
  this.metrics,
363
- () => this.flowCreationEnabled()
398
+ () => this.flowCreationEnabled(),
399
+ () => this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink).flow
364
400
  );
365
401
  this.spotAddressTransport = new ZLinkHostSpotAddressTransport({
366
402
  resolver: () => this.createLocationSpotRouteResolver(),
@@ -373,7 +409,7 @@ export class ZLinkFrameworkRuntimeHost
373
409
  meshNode: (meshName) => this.spotNodeRuntime?.meshNode(meshName),
374
410
  completions: (meshName) => this.spotNodeRuntime?.meshCompletionTable(meshName),
375
411
  codecs: { serializers: options.registration.messageSerializers },
376
- defaultRequestTimeoutMs: options.registration.requestTimeoutMs ?? 30_000,
412
+ defaultRequestTimeoutMs: options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
377
413
  defaultSendTimeoutMs: defaultSpotSendTimeoutMs,
378
414
  sendTimeoutMsForMesh: sendTimeoutMsForSpotMesh,
379
415
  sendTimeoutMsForRouteChannel: sendTimeoutMsForSpotRouteChannel,
@@ -387,6 +423,7 @@ export class ZLinkFrameworkRuntimeHost
387
423
  rewriteAuthorityPayloadForOwner
388
424
  });
389
425
  this.streamBindingRuntime = new ZLinkStreamBindingRuntime({
426
+ dispatchErrors: this.createDispatchErrorReporter(this.runtimeOrPreStartErrorSink),
390
427
  streamPayloadCodec: resolveStreamPayloadCodec(options.registration),
391
428
  streamCompression: options.registration.streamCompression,
392
429
  messageSerializers: options.registration.messageSerializers,
@@ -698,7 +735,6 @@ export class ZLinkFrameworkRuntimeHost
698
735
  actorTransferRegistry: this.actorTransferRegistry,
699
736
  authorityStore: () => this.locationOwner.currentStores?.locationStore,
700
737
  currentOwner: () => this.locationOwner.currentRuntime?.currentOwnerToken,
701
- relocationStore: () => this.options.registration.locations.relocationStoreInstance,
702
738
  liveDescriptors: (meshName, signal) => {
703
739
  const runtime = this.locationOwner.currentRuntime;
704
740
  if (runtime === undefined) {
@@ -766,6 +802,7 @@ export class ZLinkFrameworkRuntimeHost
766
802
  });
767
803
  this.serviceRelocation = new ZLinkHostServiceRelocationRuntime({
768
804
  registration: options.registration,
805
+ targetAdmissionSealed: () => this.shutdownOperationStartedAt !== undefined,
769
806
  providerResolver: options.providerResolver,
770
807
  locationStore: () => this.locationOwner.currentStores?.locationStore,
771
808
  currentOwner: () => this.locationOwner.currentRuntime?.currentOwnerToken,
@@ -795,7 +832,8 @@ export class ZLinkFrameworkRuntimeHost
795
832
  reconcileStatefulAuthorityRoutes: (signal) =>
796
833
  this.statefulAuthorityRoutes?.reconcile(signal) ?? Promise.resolve(),
797
834
  runtimeEventPublisher: this.runtimeEventPublisher,
798
- metrics: this.metrics
835
+ metrics: this.metrics,
836
+ activationAdmission: this.activationAdmission
799
837
  });
800
838
  this.actorTransferAuthorityRuntime = new ZLinkActorTransferAuthorityRuntime({
801
839
  store: () => this.locationOwner.actorTransferStore() as never,
@@ -828,6 +866,7 @@ export class ZLinkFrameworkRuntimeHost
828
866
  },
829
867
  hostState: () => this.runtimeState,
830
868
  admission: this.admission,
869
+ activationAdmission: this.activationAdmission,
831
870
  publishRetiring: (meshName, signal) => this.publishMeshRetiring(meshName, signal),
832
871
  rollbackRetiring: (meshName, signal) => this.publishMeshServing(meshName, signal),
833
872
  publishDraining: (meshName, signal) => this.publishMeshDraining(meshName, signal),
@@ -850,7 +889,7 @@ export class ZLinkFrameworkRuntimeHost
850
889
  }
851
890
 
852
891
  get isStarted(): boolean {
853
- return this.executionState !== undefined;
892
+ return this.executionState !== undefined && !this.executionState.abortController.signal.aborted;
854
893
  }
855
894
 
856
895
  get status(): ZLinkFrameworkRuntimeStatus {
@@ -868,10 +907,24 @@ export class ZLinkFrameworkRuntimeHost
868
907
  };
869
908
  }
870
909
 
910
+ // Bound listener records of the current runtime generation.
911
+ private listenerRecords = new ZLinkListenerRecords();
912
+
913
+ getListenerStatus(kind: ZLinkListenerKind, name: string): ZLinkListenerStatus {
914
+ const endpoint = this.listenerRecords.endpoint(kind, name);
915
+ if (endpoint === undefined || endpoint.length === 0) {
916
+ throw new ZLinkConfigurationException(
917
+ `Listener '${kind}:${name}' is not configured or has not bound.`
918
+ );
919
+ }
920
+ return { kind, name, endpoint, observedAt: new Date() };
921
+ }
922
+
871
923
  observe(signal?: AbortSignal): AsyncIterable<ZLinkObservedStatus<ZLinkFrameworkRuntimeStatus>> {
872
924
  const queue = new RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>(undefined, signal);
873
925
  this.runtimeObservers.add(queue);
874
926
  queue.onClose(() => this.runtimeObservers.delete(queue));
927
+ this.publishRuntimeStatus(queue, this.status);
875
928
  return queue;
876
929
  }
877
930
 
@@ -888,7 +941,7 @@ export class ZLinkFrameworkRuntimeHost
888
941
  options,
889
942
  this.options.registration.applicationVersion
890
943
  );
891
- const deadlineMs = options.deadlineMs ?? 30_000;
944
+ const deadlineMs = options.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
892
945
  if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
893
946
  return Promise.reject(new RangeError('Relocation deadlineMs must be greater than zero.'));
894
947
  }
@@ -957,7 +1010,7 @@ export class ZLinkFrameworkRuntimeHost
957
1010
  }
958
1011
 
959
1012
  shutdown(options?: ZLinkFrameworkLifecycleOptions): Promise<ZLinkFrameworkTerminationResult> {
960
- const deadlineMs = options?.deadlineMs ?? 30_000;
1013
+ const deadlineMs = options?.deadlineMs ?? DEFAULT_HOST_CONTROL_TIMEOUT_MS;
961
1014
  if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
962
1015
  return Promise.reject(new RangeError('Shutdown deadlineMs must be greater than zero.'));
963
1016
  }
@@ -1021,6 +1074,17 @@ export class ZLinkFrameworkRuntimeHost
1021
1074
  stopStartingSignal
1022
1075
  );
1023
1076
  if (drained.kind === 'forceStopped') {
1077
+ // Settled authority on both sides or an expired source owner lease
1078
+ // ends the host in Error (spec 30 §13).
1079
+ if (drained.error instanceof ServiceRelocationAuthorityError) {
1080
+ return this.completeRelocation(
1081
+ blockedRelocation(
1082
+ mode,
1083
+ effectiveTargetApplicationVersion,
1084
+ ZLinkFrameworkRelocationReason.RelocationFailed
1085
+ )
1086
+ );
1087
+ }
1024
1088
  return this.resetBlockedRelocation(
1025
1089
  blockedRelocation(
1026
1090
  mode,
@@ -1059,52 +1123,78 @@ export class ZLinkFrameworkRuntimeHost
1059
1123
  }
1060
1124
 
1061
1125
  private async runShutdown(deadlineMs: number): Promise<ZLinkFrameworkTerminationResult> {
1062
- const deadlineAtMs = performance.now() + deadlineMs;
1063
- try {
1064
- this.admission.close();
1065
- this.setRuntimeState(ZLinkFrameworkRuntimeState.Draining);
1066
- if (
1067
- this.relocationOperation !== undefined &&
1068
- this.relocationStopStarting?.signal.aborted === true
1069
- ) {
1070
- await this.relocationOperation;
1071
- }
1072
- // Seal application admission before the public status reports that the
1073
- // host no longer accepts work. This prevents status polling from racing
1074
- // with the coordinator's synchronous seal step.
1075
- const unscopedStreamDrain = this.streamRuntime?.notifyUnscopedServerDrain();
1076
- const shutdown = this.routeMeshCoordinator.shutdownHost(
1077
- this.runtimeDeadline!,
1078
- undefined,
1079
- Math.max(0, deadlineAtMs - performance.now())
1080
- );
1081
- const drain = await shutdown;
1082
- await unscopedStreamDrain;
1083
- await this.stop();
1084
- if (drain.kind === 'forceStopped') {
1126
+ return await this.runWithShutdownDeadline(deadlineMs, async () => {
1127
+ const deadlineAtMs = performance.now() + deadlineMs;
1128
+ try {
1129
+ this.admission.close();
1130
+ if (this.runtimeState === ZLinkFrameworkRuntimeState.Preparing) {
1131
+ this.executionState?.abortController.abort();
1132
+ }
1133
+ this.setRuntimeState(ZLinkFrameworkRuntimeState.Draining);
1134
+ if (
1135
+ this.relocationOperation !== undefined &&
1136
+ this.relocationStopStarting?.signal.aborted === true
1137
+ ) {
1138
+ await this.relocationOperation;
1139
+ }
1140
+ // Seal application admission before the public status reports that the
1141
+ // host no longer accepts work. This prevents status polling from racing
1142
+ // with the coordinator's synchronous seal step.
1143
+ const unscopedStreamDrain = this.streamRuntime?.notifyUnscopedServerDrain();
1144
+ const shutdown = this.routeMeshCoordinator.shutdownHost(
1145
+ this.runtimeDeadline!,
1146
+ this.shutdownDeadline!.signal
1147
+ );
1148
+ const drain = await shutdown;
1149
+ await unscopedStreamDrain;
1150
+ await this.stop();
1151
+ if (drain.kind === 'forceStopped') {
1152
+ return this.completeTermination({
1153
+ outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
1154
+ reason:
1155
+ drain.reason === 'deadline_exceeded'
1156
+ ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1157
+ : ZLinkFrameworkTerminationReason.TeardownFailed
1158
+ });
1159
+ }
1160
+ if (performance.now() >= deadlineAtMs) {
1161
+ throw createDeadlineExceededError('Shutdown resource cleanup exceeded its deadline.');
1162
+ }
1163
+ return this.completeTermination({
1164
+ outcome: ZLinkFrameworkTerminationOutcome.Stopped,
1165
+ reason: ZLinkFrameworkTerminationReason.None
1166
+ });
1167
+ } catch (error) {
1168
+ await this.stop().catch(() => undefined);
1085
1169
  return this.completeTermination({
1086
1170
  outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
1087
- reason:
1088
- drain.reason === 'deadline_exceeded'
1089
- ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1090
- : ZLinkFrameworkTerminationReason.TeardownFailed
1171
+ reason: isDeadlineExceededError(error)
1172
+ ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1173
+ : ZLinkFrameworkTerminationReason.TeardownFailed
1091
1174
  });
1092
1175
  }
1093
- if (performance.now() >= deadlineAtMs) {
1094
- throw createDeadlineExceededError('Shutdown resource cleanup exceeded its deadline.');
1095
- }
1096
- return this.completeTermination({
1097
- outcome: ZLinkFrameworkTerminationOutcome.Stopped,
1098
- reason: ZLinkFrameworkTerminationReason.None
1099
- });
1100
- } catch (error) {
1101
- await this.stop().catch(() => undefined);
1102
- return this.completeTermination({
1103
- outcome: ZLinkFrameworkTerminationOutcome.ForceStopped,
1104
- reason: isDeadlineExceededError(error)
1105
- ? ZLinkFrameworkTerminationReason.DeadlineExceeded
1106
- : ZLinkFrameworkTerminationReason.TeardownFailed
1107
- });
1176
+ });
1177
+ }
1178
+
1179
+ private async runWithShutdownDeadline<T>(
1180
+ deadlineMs: number,
1181
+ operation: () => Promise<T>
1182
+ ): Promise<T> {
1183
+ if (this.shutdownDeadline !== undefined) return await operation();
1184
+ const deadline = new AbortController();
1185
+ this.shutdownDeadline = deadline;
1186
+ const ownsRuntimeDeadline = this.runtimeDeadline === undefined;
1187
+ this.runtimeDeadline ??= new Date(Date.now() + deadlineMs);
1188
+ const timer = setTimeout(
1189
+ () => deadline.abort(createDeadlineExceededError('Shutdown deadline exceeded.')),
1190
+ Math.max(0, this.runtimeDeadline.getTime() - Date.now())
1191
+ );
1192
+ try {
1193
+ return await operation();
1194
+ } finally {
1195
+ clearTimeout(timer);
1196
+ this.shutdownDeadline = undefined;
1197
+ if (ownsRuntimeDeadline) this.runtimeDeadline = undefined;
1108
1198
  }
1109
1199
  }
1110
1200
 
@@ -1141,8 +1231,9 @@ export class ZLinkFrameworkRuntimeHost
1141
1231
  private recordRelocationResult(result: ZLinkFrameworkRelocationResult): void {
1142
1232
  if (this.relocationOperationStartedAt !== undefined) {
1143
1233
  this.metrics.duration(
1144
- 'zlink.host.relocation.duration',
1145
- Math.max(0, performance.now() - this.relocationOperationStartedAt) / 1000,
1234
+ METRIC_NAMES.HostRelocationDuration,
1235
+ Math.max(0, performance.now() - this.relocationOperationStartedAt) /
1236
+ MILLISECONDS_PER_SECOND,
1146
1237
  {
1147
1238
  mode: relocationModeMetricName(result.mode),
1148
1239
  outcome:
@@ -1151,7 +1242,7 @@ export class ZLinkFrameworkRuntimeHost
1151
1242
  );
1152
1243
  }
1153
1244
  if (result.outcome === ZLinkFrameworkRelocationOutcome.Blocked) {
1154
- this.metrics.count('zlink.host.relocation.blocked', 1, {
1245
+ this.metrics.count(METRIC_NAMES.HostRelocationBlocked, 1, {
1155
1246
  mode: relocationModeMetricName(result.mode),
1156
1247
  reason: relocationReasonMetricName(result.reason)
1157
1248
  });
@@ -1174,8 +1265,8 @@ export class ZLinkFrameworkRuntimeHost
1174
1265
  this.runtimeDeadline = undefined;
1175
1266
  if (this.shutdownOperationStartedAt !== undefined) {
1176
1267
  this.metrics.duration(
1177
- 'zlink.host.shutdown.duration',
1178
- Math.max(0, performance.now() - this.shutdownOperationStartedAt) / 1000,
1268
+ METRIC_NAMES.HostShutdownDuration,
1269
+ Math.max(0, performance.now() - this.shutdownOperationStartedAt) / MILLISECONDS_PER_SECOND,
1179
1270
  {
1180
1271
  outcome:
1181
1272
  result.outcome === ZLinkFrameworkTerminationOutcome.Stopped
@@ -1185,7 +1276,7 @@ export class ZLinkFrameworkRuntimeHost
1185
1276
  );
1186
1277
  }
1187
1278
  if (result.outcome === ZLinkFrameworkTerminationOutcome.ForceStopped) {
1188
- this.metrics.count('zlink.host.shutdown.forced', 1, {
1279
+ this.metrics.count(METRIC_NAMES.HostShutdownForced, 1, {
1189
1280
  reason: terminationReasonMetricName(result.reason)
1190
1281
  });
1191
1282
  }
@@ -1207,14 +1298,18 @@ export class ZLinkFrameworkRuntimeHost
1207
1298
  this.notifyTopologyHostStateChanged();
1208
1299
  const status = this.status;
1209
1300
  for (const observer of this.runtimeObservers) {
1210
- if (state === ZLinkFrameworkRuntimeState.Stopped) {
1211
- observer.seal(status, this.runtimeObservationSource);
1212
- } else {
1213
- observer.push(status, this.runtimeObservationSource);
1214
- }
1301
+ this.publishRuntimeStatus(observer, status);
1215
1302
  }
1216
- if (state === ZLinkFrameworkRuntimeState.Stopped) {
1217
- this.runtimeObservers.clear();
1303
+ }
1304
+
1305
+ private publishRuntimeStatus(
1306
+ observer: RuntimeEventQueue<ZLinkFrameworkRuntimeStatus>,
1307
+ status: ZLinkFrameworkRuntimeStatus
1308
+ ): void {
1309
+ if (runtimeObservationIsTerminal(status.state)) {
1310
+ observer.complete(status, this.runtimeObservationSource);
1311
+ } else {
1312
+ observer.push(status, this.runtimeObservationSource);
1218
1313
  }
1219
1314
  }
1220
1315
 
@@ -1322,6 +1417,8 @@ export class ZLinkFrameworkRuntimeHost
1322
1417
 
1323
1418
  this.setRuntimeState(ZLinkFrameworkRuntimeState.Preparing);
1324
1419
  this.lifecycleSink?.push('framework:start');
1420
+ const listenerRecords = new ZLinkListenerRecords();
1421
+ this.listenerRecords = listenerRecords;
1325
1422
  const channelAdapter = this.backendAdapterFactory.createChannelAdapter();
1326
1423
  const context = channelAdapter.createContext();
1327
1424
  const coreHwm = this.options.registration.coreHwm;
@@ -1344,13 +1441,14 @@ export class ZLinkFrameworkRuntimeHost
1344
1441
  channelAdapter,
1345
1442
  context,
1346
1443
  this.options.providerResolver,
1347
- this.createChannelRuntimeOptions()
1444
+ { ...this.createChannelRuntimeOptions(), listenerRecords }
1348
1445
  );
1349
1446
  this.channelRuntime = channelRuntime;
1350
1447
  channelRuntime.prepareMeshDispatch(this.executionState.taskRunner);
1351
- spotNodeRuntime = new ZLinkSpotNodeRuntimeManager(
1352
- this.createSpotNodeRuntimeOptions(context, dispatchErrors)
1353
- );
1448
+ spotNodeRuntime = new ZLinkSpotNodeRuntimeManager({
1449
+ ...this.createSpotNodeRuntimeOptions(context, dispatchErrors),
1450
+ listenerRecords
1451
+ });
1354
1452
  await spotNodeRuntime.start();
1355
1453
  this.spotNodeRuntime = spotNodeRuntime;
1356
1454
  this.registerUserSpotHandlers?.(spotNodeRuntime);
@@ -1363,7 +1461,9 @@ export class ZLinkFrameworkRuntimeHost
1363
1461
  const locationRuntime = await this.locationOwner.startForRuntime(
1364
1462
  this.meshRouters.primaryMeshName(),
1365
1463
  spotNodeRuntime,
1366
- channelRuntime
1464
+ channelRuntime,
1465
+ this.executionState.abortController.signal,
1466
+ () => this.shutdownDeadline!.signal
1367
1467
  );
1368
1468
  startedLocationRuntime = locationRuntime;
1369
1469
  if (locationRuntime !== undefined) {
@@ -1386,6 +1486,7 @@ export class ZLinkFrameworkRuntimeHost
1386
1486
  }
1387
1487
  }
1388
1488
  streamRuntime = new ZLinkStreamRuntimeManager({
1489
+ listenerRecords,
1389
1490
  registration: this.options.registration,
1390
1491
  backendAdapterFactory: this.backendAdapterFactory,
1391
1492
  context,
@@ -1414,15 +1515,27 @@ export class ZLinkFrameworkRuntimeHost
1414
1515
  this.setRuntimeState(ZLinkFrameworkRuntimeState.Serving);
1415
1516
  this.lifecycleSink?.push('framework:started');
1416
1517
  } catch (error) {
1518
+ if (this.shutdownDeadline !== undefined && isAbortError(error)) throw error;
1417
1519
  await statefulAuthorityRoutes?.stop();
1418
- await rollbackRuntimeStart({
1419
- context,
1420
- startedLocationRuntime,
1421
- streamRuntime,
1422
- spotNodeRuntime,
1423
- channelRuntime,
1424
- ownedStores: registeredRuntimeStores(this.options.registration)
1425
- });
1520
+ try {
1521
+ await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
1522
+ rollbackRuntimeStart({
1523
+ context,
1524
+ startedLocationRuntime: startedLocationRuntime ?? this.locationOwner.currentRuntime,
1525
+ shutdownSignal: this.shutdownDeadline!.signal,
1526
+ streamRuntime,
1527
+ spotNodeRuntime,
1528
+ channelRuntime,
1529
+ ownedStores: registeredRuntimeStores(this.options.registration)
1530
+ })
1531
+ );
1532
+ } catch (cleanupError) {
1533
+ this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
1534
+ 'framework start rollback',
1535
+ cleanupError
1536
+ );
1537
+ throw new AggregateError([error, cleanupError], 'Framework start and rollback failed.');
1538
+ }
1426
1539
  this.executionState = undefined;
1427
1540
  this.channelRuntime = undefined;
1428
1541
  this.spotNodeRuntime = undefined;
@@ -1436,7 +1549,9 @@ export class ZLinkFrameworkRuntimeHost
1436
1549
  }
1437
1550
 
1438
1551
  async stop(): Promise<void> {
1439
- await this.runLifecycle(() => this.stopCore());
1552
+ await this.runWithShutdownDeadline(DEFAULT_HOST_CONTROL_TIMEOUT_MS, async () =>
1553
+ this.runLifecycle(() => this.stopCore())
1554
+ );
1440
1555
  }
1441
1556
 
1442
1557
  private runtimeMetricMeshSnapshots(): readonly ZLinkRuntimeMetricMeshSnapshot[] {
@@ -1477,7 +1592,7 @@ export class ZLinkFrameworkRuntimeHost
1477
1592
  reserved: capacity.reserved,
1478
1593
  limit: capacity.limit
1479
1594
  })),
1480
- activation: descriptor?.activationConcurrency ?? { active: 0, limit: 0 },
1595
+ activation: this.activationAdmission.current(meshName),
1481
1596
  instanceSpots: []
1482
1597
  });
1483
1598
  }
@@ -1489,6 +1604,7 @@ export class ZLinkFrameworkRuntimeHost
1489
1604
  if (state === undefined) {
1490
1605
  return;
1491
1606
  }
1607
+ state.abortController.abort();
1492
1608
 
1493
1609
  const channelRuntime = this.channelRuntime;
1494
1610
  const spotNodeRuntime = this.spotNodeRuntime;
@@ -1497,24 +1613,26 @@ export class ZLinkFrameworkRuntimeHost
1497
1613
  this.stopTopologyObservers();
1498
1614
  this.removeOwnerLeaseRecoveryPublication();
1499
1615
  const locationSnapshot = this.locationOwner.clearForStop();
1500
- this.executionState = undefined;
1501
- this.channelRuntime = undefined;
1502
- this.spotNodeRuntime = undefined;
1503
- this.streamRuntime = undefined;
1504
- this.statefulAuthorityRoutes = undefined;
1505
- this.cachedLocationSpotRouteResolver = undefined;
1506
1616
  this.lifecycleSink?.push('framework:stop');
1507
1617
  await statefulAuthorityRoutes?.stop();
1508
1618
  await stopRuntimeParts({
1509
1619
  state,
1510
1620
  locationSnapshot,
1511
1621
  cleanupDeadline: this.runtimeDeadline,
1622
+ shutdownSignal: this.shutdownDeadline!.signal,
1512
1623
  streamRuntime,
1513
1624
  spotNodeRuntime,
1514
1625
  channelRuntime,
1515
1626
  serviceRelocation: this.serviceRelocation,
1516
1627
  ownedStores: registeredRuntimeStores(this.options.registration)
1517
1628
  });
1629
+ this.executionState = undefined;
1630
+ this.channelRuntime = undefined;
1631
+ this.spotNodeRuntime = undefined;
1632
+ this.streamRuntime = undefined;
1633
+ this.statefulAuthorityRoutes = undefined;
1634
+ this.cachedLocationSpotRouteResolver = undefined;
1635
+ this.listenerRecords.clear();
1518
1636
  this.lifecycleSink?.push('framework:stopped');
1519
1637
  if (this.shutdownOperation === undefined) {
1520
1638
  this.setRuntimeState(ZLinkFrameworkRuntimeState.Stopped);
@@ -1579,7 +1697,7 @@ export class ZLinkFrameworkRuntimeHost
1579
1697
  pollingIntervalMs:
1580
1698
  this.options.registration.locations.options.pollingIntervalMs ??
1581
1699
  zlinkDefaultLocationOptions.pollingIntervalMs,
1582
- pageSize: 1000,
1700
+ pageSize: ZLINK_PROVIDER_MAX_PAGE_SIZE,
1583
1701
  reportError: (error) =>
1584
1702
  this.runtimeOrPreStartErrorSink.reportRuntimeTaskException(
1585
1703
  'stateful authority route reconciliation',
@@ -1834,6 +1952,7 @@ export class ZLinkFrameworkRuntimeHost
1834
1952
  } catch (error) {
1835
1953
  throw new ZLinkDrainingStatePublishError(error);
1836
1954
  }
1955
+ await awaitWithDrainSignal(this.serviceRelocation.drainTargetAttempts(), signal);
1837
1956
  }
1838
1957
 
1839
1958
  private async cleanupOwnerForDrain(signal: AbortSignal): Promise<void> {
@@ -1870,7 +1989,6 @@ export class ZLinkFrameworkRuntimeHost
1870
1989
  ),
1871
1990
  isMaterializing: (target) =>
1872
1991
  spotManager.isInstanceMaterializing(meshName, target.targetSpotId as never),
1873
- isClosing: (target) => spotManager.isInstanceClosing(meshName, target.targetSpotId as never),
1874
1992
  isIdleEvicting: (target) =>
1875
1993
  spotManager.isInstanceSpotIdleEvicting(meshName, target.targetSpotId as never),
1876
1994
  beginIdleEviction: (target) =>
@@ -1926,11 +2044,13 @@ export class ZLinkFrameworkRuntimeHost
1926
2044
  | 'boundSessionFactory'
1927
2045
  | 'shutdownSignal'
1928
2046
  | 'admission'
2047
+ | 'activationAdmission'
1929
2048
  | 'placementCreate'
1930
2049
  > {
1931
2050
  this.ensureLocationRuntime();
1932
2051
  return {
1933
2052
  ...this.actorRuntimeOptionsFactory().createActorManagerOptions(),
2053
+ activationAdmission: this.activationAdmission,
1934
2054
  placementCreate: async (actorId, actorType, createOnly, call, signal) => {
1935
2055
  const placement = this.actorPlacement;
1936
2056
  if (placement === undefined) {
@@ -1992,12 +2112,31 @@ export class ZLinkFrameworkRuntimeHost
1992
2112
  ?.meshNode(meshName)
1993
2113
  ?.completeClosedInstance?.(spotId, objectGeneration);
1994
2114
  },
1995
- beginInstanceIdleClosingAuthority: (meshName, spotId) =>
1996
- this.locationOwner.currentLifecycle?.beginInstanceSpotClosing(meshName, spotId) ??
1997
- Promise.resolve(undefined),
1998
- beginInstanceClosingAuthority: (meshName, spotId) =>
1999
- this.locationOwner.currentLifecycle?.beginInstanceSpotClosing(meshName, spotId) ??
2000
- Promise.resolve(undefined),
2115
+ beginInstanceIdleClosingAuthority: (meshName, spotId, onCommitted) =>
2116
+ this.locationOwner.currentLifecycle?.beginInstanceSpotClosing(
2117
+ meshName,
2118
+ spotId,
2119
+ onCommitted
2120
+ ) ?? Promise.resolve(undefined),
2121
+ beginInstanceClosingAuthority: (meshName, spotId, onCommitted) =>
2122
+ this.locationOwner.currentLifecycle?.beginInstanceSpotClosing(
2123
+ meshName,
2124
+ spotId,
2125
+ onCommitted
2126
+ ) ?? Promise.resolve(undefined),
2127
+ beginUserClosingAuthority: async (meshName, spotId, objectGeneration, onCommitted) => {
2128
+ const coordinator = this.userSpotCoordinator;
2129
+ const nodeRid = this.spotNodeRuntime?.meshNode(meshName)?.status().routingId;
2130
+ if (coordinator === undefined || nodeRid === undefined) {
2131
+ throw new ZLinkConfigurationException(
2132
+ 'User Spot context Close requires its authority coordinator.'
2133
+ );
2134
+ }
2135
+ return await coordinator.beginOwnerClose(
2136
+ { spotId: spotId as never, objectGeneration, meshName, nodeRid },
2137
+ onCommitted
2138
+ );
2139
+ },
2001
2140
  createLocationSpotRouteResolver: () => this.createLocationSpotRouteResolver(),
2002
2141
  boundSessionRelay: this.boundSessionRelay,
2003
2142
  actorHandoff: this.actorHandoff,
@@ -2006,19 +2145,12 @@ export class ZLinkFrameworkRuntimeHost
2006
2145
  detachedTaskRunner: this.detachedTaskRunner(),
2007
2146
  metrics: this.metrics,
2008
2147
  admission: this.admission,
2009
- statefulExecutionAllowed: () => this.ownerAdmissionOpen()
2148
+ statefulExecution: {
2149
+ admissionOpen: () => this.ownerAdmissionOpen(),
2150
+ hostState: () => this.runtimeState
2151
+ }
2010
2152
  }).create(this.actorTransferRuntime),
2011
- activationConcurrencyLimitProvider: (meshName: string) =>
2012
- this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ?? 128,
2013
- onInstanceActivationConcurrencyChanged: (meshName: string) => {
2014
- void this.spotNodeRuntime
2015
- ?.publishMeshNodeState(
2016
- this.runtimeState,
2017
- this.executionState?.abortController.signal,
2018
- meshName
2019
- )
2020
- .catch(() => undefined);
2021
- }
2153
+ activationAdmission: this.activationAdmission
2022
2154
  };
2023
2155
  }
2024
2156
 
@@ -2077,7 +2209,7 @@ export class ZLinkFrameworkRuntimeHost
2077
2209
  );
2078
2210
  }
2079
2211
  const meshNode = this.spotNodeRuntime?.meshNode(meshName);
2080
- const descriptors = (await locationStore.listMeshNodes(meshName, undefined, signal)).items;
2212
+ const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
2081
2213
  const selected = await selectReadyLocationPlacementDescriptor(
2082
2214
  descriptors,
2083
2215
  meshNode,
@@ -2123,7 +2255,7 @@ export class ZLinkFrameworkRuntimeHost
2123
2255
  };
2124
2256
  }
2125
2257
  });
2126
- const coordinator = new ZLinkUserSpotCreationCoordinator({
2258
+ const coordinator = (this.userSpotCoordinator = new ZLinkUserSpotCreationCoordinator({
2127
2259
  store: locationStore,
2128
2260
  publishReadyRoute: (meshName, route) => {
2129
2261
  this.cachedLocationSpotRouteResolver?.invalidate?.(route.spot.spotId);
@@ -2187,7 +2319,7 @@ export class ZLinkFrameworkRuntimeHost
2187
2319
  );
2188
2320
  }
2189
2321
  const meshNode = this.spotNodeRuntime?.meshNode(meshName);
2190
- const descriptors = (await locationStore.listMeshNodes(meshName, undefined, signal)).items;
2322
+ const descriptors = await listAllMeshNodeDescriptors(locationStore, meshName, signal);
2191
2323
  const selected = await selectReadyLocationPlacementDescriptor(
2192
2324
  descriptors,
2193
2325
  meshNode,
@@ -2231,7 +2363,7 @@ export class ZLinkFrameworkRuntimeHost
2231
2363
  localStatus.lifecycleGeneration === selected.lifecycleGeneration
2232
2364
  };
2233
2365
  }
2234
- });
2366
+ }));
2235
2367
  const factories = new Map(
2236
2368
  [...this.options.registration.spotNodes].map(([meshName, node]) => [
2237
2369
  meshName,
@@ -2298,7 +2430,7 @@ export class ZLinkFrameworkRuntimeHost
2298
2430
  try {
2299
2431
  payload = {
2300
2432
  packetName: 'ZLinkFrameworkUserSpotReply',
2301
- contentType: 'application/octet-stream',
2433
+ contentType: ZlinkStreamContentType.Raw,
2302
2434
  payload: Buffer.from(message.data())
2303
2435
  };
2304
2436
  } finally {
@@ -2428,23 +2560,6 @@ export class ZLinkFrameworkRuntimeHost
2428
2560
  );
2429
2561
  },
2430
2562
  close: async (record, signal) => {
2431
- if (!local.hasActiveSpot(record.target.spotId as never)) {
2432
- throw createInternalFrameworkException(
2433
- ZLinkFrameworkInternalErrorKind.SpotMoving,
2434
- `User Spot '${record.target.spotId}' is not materialized on its authority owner.`,
2435
- true
2436
- );
2437
- }
2438
- if (!local.canCloseUserSpot(meshName, record.target.spotId as never)) {
2439
- return {
2440
- terminalResult: RequestResult.Ok,
2441
- failureCode: 0,
2442
- tail: {
2443
- kind: 'userSpotClose' as const,
2444
- closed: false
2445
- }
2446
- };
2447
- }
2448
2563
  return {
2449
2564
  terminalResult: RequestResult.Ok,
2450
2565
  failureCode: 0,
@@ -2452,8 +2567,15 @@ export class ZLinkFrameworkRuntimeHost
2452
2567
  kind: 'userSpotClose' as const,
2453
2568
  closed: await coordinator.handleRemoteClose(
2454
2569
  record,
2455
- (spot, closeSignal) => local.close(spot.meshName, spot.spotId, closeSignal),
2456
- signal
2570
+ (spot, beginAuthority, closeSignal) =>
2571
+ local.closeUserWithAuthority(
2572
+ spot.meshName,
2573
+ spot.spotId,
2574
+ beginAuthority,
2575
+ closeSignal
2576
+ ),
2577
+ signal,
2578
+ (spot) => local.isSpotClosing(spot.meshName, spot.spotId)
2457
2579
  )
2458
2580
  }
2459
2581
  };
@@ -2487,7 +2609,7 @@ export class ZLinkFrameworkRuntimeHost
2487
2609
  }
2488
2610
  return node.requestUserSpotClose(targetNodeRid, request, timeoutMs);
2489
2611
  },
2490
- defaultTimeoutMs: this.options.registration.requestTimeoutMs ?? 30_000,
2612
+ defaultTimeoutMs: this.options.registration.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
2491
2613
  messageSerializers: this.options.registration.messageSerializers
2492
2614
  });
2493
2615
  }
@@ -2509,6 +2631,10 @@ export class ZLinkFrameworkRuntimeHost
2509
2631
  notifyEntrySpotActorCreated: (nodeRid, actor, createRequest, signal) =>
2510
2632
  this.spotNodeRuntime?.notifyEntrySpotActorCreated(nodeRid, actor, createRequest, signal) ??
2511
2633
  Promise.resolve(undefined),
2634
+ notifyEntrySpotActorJoined: (actor, signal) =>
2635
+ this.spotNodeRuntime?.notifyPrimaryEntrySpotActorJoined(actor, signal) ?? Promise.resolve(),
2636
+ notifyEntrySpotActorLeft: (actor, signal) =>
2637
+ this.spotNodeRuntime?.notifyPrimaryEntrySpotActorLeft(actor, signal) ?? Promise.resolve(),
2512
2638
  locationLifecycle: () => this.locationOwner.currentLifecycle,
2513
2639
  primaryMeshName: () => this.meshRouters.primaryMeshName(),
2514
2640
  actorMeshName: (actorType) => this.meshRouters.actorMeshName(actorType),
@@ -2626,6 +2752,7 @@ export class ZLinkFrameworkRuntimeHost
2626
2752
  }).create();
2627
2753
  return {
2628
2754
  ...options,
2755
+ errorSink: this.runtimeOrPreStartErrorSink,
2629
2756
  peerAdmissionSealed: (meshName: string) => !this.admission.accepts(meshName),
2630
2757
  messageFollowReceiver: (record: ServiceMessageFollowRecord) => {
2631
2758
  if (record.source.kind === 'actor') {
@@ -2655,15 +2782,7 @@ export class ZLinkFrameworkRuntimeHost
2655
2782
  record,
2656
2783
  this.executionState?.abortController.signal
2657
2784
  ),
2658
- instanceActivationConcurrencyProvider: (meshName: string) => {
2659
- return (
2660
- this.spotManager?.instanceActivationConcurrency(meshName) ?? {
2661
- active: 0,
2662
- limit:
2663
- this.options.registration.spotNodes.get(meshName)?.activationConcurrencyLimit ?? 128
2664
- }
2665
- );
2666
- }
2785
+ activationConcurrency: (meshName: string) => this.activationAdmission.current(meshName)
2667
2786
  };
2668
2787
  }
2669
2788
 
@@ -2688,14 +2807,8 @@ export class ZLinkFrameworkRuntimeHost
2688
2807
  );
2689
2808
  }
2690
2809
  const binding = record.kindData;
2691
- const replyBindingFailure = (
2692
- kind: ZLinkFrameworkInternalErrorKind,
2693
- message: string
2694
- ): void => {
2695
- const terminal =
2696
- kind === ZLinkFrameworkInternalErrorKind.ActorGenerationStale
2697
- ? { terminalResult: RequestResult.InvalidState, failureCode: 0 }
2698
- : internalFrameworkWireReply(createInternalFrameworkException(kind, message));
2810
+ const replyBindingFailure = (kind: ZLinkFrameworkInternalErrorKind): void => {
2811
+ const terminal = internalFrameworkWireReply(kind);
2699
2812
  if (
2700
2813
  record.replyFailure?.(terminal.terminalResult, terminal.failureCode) !== SubmitResult.Ok
2701
2814
  ) {
@@ -2719,17 +2832,11 @@ export class ZLinkFrameworkRuntimeHost
2719
2832
  nativeActorRef.actorId !== binding.actor.actorId ||
2720
2833
  !routingIdsEqual(nativeActorRef.nodeRid, binding.actor.nodeRid)
2721
2834
  ) {
2722
- replyBindingFailure(
2723
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2724
- `Actor '${binding.actor.actorId}' binding target is no longer current.`
2725
- );
2835
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2726
2836
  return;
2727
2837
  }
2728
2838
  if (nativeActorRef.generation !== binding.actor.generation) {
2729
- replyBindingFailure(
2730
- ZLinkFrameworkInternalErrorKind.ActorGenerationStale,
2731
- `Actor '${binding.actor.actorId}' binding object generation is stale.`
2732
- );
2839
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorGenerationStale);
2733
2840
  return;
2734
2841
  }
2735
2842
  const node =
@@ -2744,10 +2851,7 @@ export class ZLinkFrameworkRuntimeHost
2744
2851
  state.locationGeneration !== binding.authorityOwnerGeneration ||
2745
2852
  state.isMoving
2746
2853
  ) {
2747
- replyBindingFailure(
2748
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2749
- `Actor '${binding.actor.actorId}' binding authority fence is stale.`
2750
- );
2854
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2751
2855
  return;
2752
2856
  }
2753
2857
  const sessionOwnerIsLocal =
@@ -2761,6 +2865,7 @@ export class ZLinkFrameworkRuntimeHost
2761
2865
  nodeRid: binding.actor.nodeRid
2762
2866
  };
2763
2867
  if (sessionOwnerIsLocal) {
2868
+ releaseApplicationJobPermitBeforeHandler();
2764
2869
  await this.streamBindingRuntime.retireRemoteBinding(
2765
2870
  actorRef,
2766
2871
  binding.sessionRid,
@@ -2777,10 +2882,7 @@ export class ZLinkFrameworkRuntimeHost
2777
2882
  binding.sessionRid
2778
2883
  );
2779
2884
  if (target === undefined) {
2780
- replyBindingFailure(
2781
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2782
- `Actor '${binding.actor.actorId}' Session route is unavailable.`
2783
- );
2885
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2784
2886
  return;
2785
2887
  }
2786
2888
  const installed = state.installBoundSessionBinding({
@@ -2793,10 +2895,7 @@ export class ZLinkFrameworkRuntimeHost
2793
2895
  bindingGeneration: binding.bindingGeneration
2794
2896
  });
2795
2897
  if (!installed) {
2796
- replyBindingFailure(
2797
- ZLinkFrameworkInternalErrorKind.ActorLocationStale,
2798
- `Actor '${binding.actor.actorId}' Session binding generation is stale.`
2799
- );
2898
+ replyBindingFailure(ZLinkFrameworkInternalErrorKind.ActorLocationStale);
2800
2899
  return;
2801
2900
  }
2802
2901
  replyBindingSuccess();
@@ -3017,7 +3116,7 @@ export class ZLinkFrameworkRuntimeHost
3017
3116
  return reporter;
3018
3117
  }
3019
3118
 
3020
- private detachedTaskRunner(): ZLinkDetachedTaskRunner {
3119
+ detachedTaskRunner(): ZLinkDetachedTaskRunner {
3021
3120
  return {
3022
3121
  runDetached: (taskName, callback) => {
3023
3122
  const runner = this.executionState?.taskRunner;
@@ -3093,8 +3192,8 @@ export class ZLinkFrameworkRuntimeHost
3093
3192
  undefined,
3094
3193
  async (meshName, nodeRid, expectedLifecycleGeneration, signal) => {
3095
3194
  const descriptor = (
3096
- await authority.listMeshNodes(meshName, undefined, signal)
3097
- ).items.find(
3195
+ await listAllMeshNodeDescriptors(authority, meshName, signal)
3196
+ ).find(
3098
3197
  (candidate) =>
3099
3198
  routingIdsEqual(candidate.rid, nodeRid) &&
3100
3199
  candidate.lifecycleGeneration === expectedLifecycleGeneration
@@ -3191,7 +3290,7 @@ export function hasExactPeerReadiness(
3191
3290
  peer.routingId !== null &&
3192
3291
  String(peer.routingId) === String(descriptor.rid) &&
3193
3292
  peer.lifecycleGeneration === descriptor.lifecycleGeneration &&
3194
- peer.state === 3
3293
+ peer.state === MeshPeerRuntimeState.Serving
3195
3294
  )
3196
3295
  )
3197
3296
  );
@@ -3201,7 +3300,11 @@ export {
3201
3300
  ZLinkActorTransferAuthorityRuntime,
3202
3301
  transferIdString
3203
3302
  } from './actor-transfer-authority-runtime';
3204
- export { ZLinkRetiringRollbackError, ZLinkRouteMeshRuntimeCoordinator } from './route-mesh-runtime';
3303
+ export {
3304
+ ZLinkDrainingStatePublishError,
3305
+ ZLinkRetiringRollbackError,
3306
+ ZLinkRouteMeshRuntimeCoordinator
3307
+ } from './route-mesh-runtime';
3205
3308
  export { ZLinkRelocationStateIncompatibleError } from './service-relocation-host-runtime';
3206
3309
  export {
3207
3310
  ZLinkHostSpotAddressTransport,
@@ -3220,7 +3323,7 @@ async function waitForForcedSessionNotification(
3220
3323
  if (operation === undefined) return;
3221
3324
  let timeoutHandle: ReturnType<typeof setTimeout> | undefined;
3222
3325
  const timeout = new Promise<void>((resolve) => {
3223
- timeoutHandle = setTimeout(resolve, 100);
3326
+ timeoutHandle = setTimeout(resolve, HOST_SHUTDOWN_POLL_INTERVAL_MS);
3224
3327
  });
3225
3328
  try {
3226
3329
  await Promise.race([operation.catch(() => undefined), timeout]);
@@ -3253,13 +3356,6 @@ async function awaitWithDrainSignal(
3253
3356
  });
3254
3357
  }
3255
3358
 
3256
- class ZLinkDrainingStatePublishError extends Error {
3257
- constructor(cause: unknown) {
3258
- super('Failed to publish draining peer rows.', { cause });
3259
- this.name = 'ZLinkDrainingStatePublishError';
3260
- }
3261
- }
3262
-
3263
3359
  function resolveBackendAdapterFactory(internalOptions: unknown): ZLinkBackendAdapterFactory {
3264
3360
  if (
3265
3361
  typeof internalOptions === 'object' &&
@@ -3418,7 +3514,7 @@ function waitForPlacementReadiness(signal?: AbortSignal): Promise<void> {
3418
3514
  const timer = setTimeout(() => {
3419
3515
  signal?.removeEventListener('abort', abort);
3420
3516
  resolve();
3421
- }, 10);
3517
+ }, HANDOFF_ACCEPTANCE_POLL_INTERVAL_MS);
3422
3518
  const abort = () => {
3423
3519
  clearTimeout(timer);
3424
3520
  signal?.removeEventListener('abort', abort);