@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,18 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ZLinkRetiringRollbackError = exports.ZLinkRouteMeshRuntimeCoordinator = void 0;
4
- const framework_errors_internal_1 = require("../framework-errors-internal");
3
+ exports.ZLinkRetiringRollbackError = exports.ZLinkDrainingStatePublishError = exports.ZLinkRouteMeshRuntimeCoordinator = void 0;
5
4
  const contracts_1 = require("../../contracts");
6
- const runtime_observation_queue_1 = require("../diagnostics/runtime-observation-queue");
5
+ const RegistrationBuilderPolicy_1 = require("../../contracts/Configuration/RegistrationBuilderPolicy");
7
6
  const abort_1 = require("../abort");
7
+ const diagnostics_1 = require("../diagnostics");
8
+ const runtime_observation_queue_1 = require("../diagnostics/runtime-observation-queue");
9
+ const state_lane_1 = require("../execution/state-lane");
8
10
  const runtime_state_projections_1 = require("../foundation/runtime-state-projections");
9
- const contracts_2 = require("../../contracts");
11
+ const service_runtime_contracts_1 = require("../foundation/service-runtime-contracts");
12
+ const framework_errors_internal_1 = require("../framework-errors-internal");
13
+ const runtime_1 = require("../locations/runtime");
14
+ const DEFAULT_ROUTE_MESH_DRAIN_TIMEOUT_MS = 30_000;
15
+ const MAX_ROUTE_MESH_OBSERVATION_WAIT_MS = 1000;
16
+ const PLACEMENT_OBSERVATION_INTERVAL_MS = 100;
10
17
  class ZLinkRouteMeshRuntimeCoordinator {
11
18
  options;
12
19
  states = new Map();
13
- placementFingerprints = new Map();
14
- peerFingerprints = new Map();
15
- locationStoreHealthFingerprints = new Map();
16
20
  placementObserver;
17
21
  hostOperation;
18
22
  shutdownOperation;
@@ -23,7 +27,6 @@ class ZLinkRouteMeshRuntimeCoordinator {
23
27
  options.admission.register(meshName);
24
28
  this.states.set(meshName, {
25
29
  state: contracts_1.ZLinkTopologyState.Starting,
26
- sequence: 0n,
27
30
  waiters: [],
28
31
  observers: new Set()
29
32
  });
@@ -37,6 +40,12 @@ class ZLinkRouteMeshRuntimeCoordinator {
37
40
  }
38
41
  }
39
42
  snapshot(meshName) {
43
+ const published = this.publishCurrentStatus(meshName, this.requireState(meshName));
44
+ if (published === undefined)
45
+ throw routeNotFound(meshName);
46
+ return published;
47
+ }
48
+ buildSnapshot(meshName, sequence) {
40
49
  const drain = this.requireState(meshName);
41
50
  const node = this.options.meshNode(meshName);
42
51
  if (node === undefined)
@@ -44,17 +53,19 @@ class ZLinkRouteMeshRuntimeCoordinator {
44
53
  const status = node.status();
45
54
  const descriptor = this.options.meshNodeDescriptor?.(meshName);
46
55
  const localPlacementCounts = this.options.localPlacementCounts?.(meshName);
47
- const populationCapacity = descriptor === undefined || localPlacementCounts === undefined
48
- ? descriptor?.populationCapacity
56
+ // Active counts come only from this MeshNode's activation records (runtime monitoring §5);
57
+ // before the object managers exist nothing is active on it.
58
+ const populationCapacity = descriptor === undefined
59
+ ? undefined
49
60
  : {
50
61
  ...descriptor.populationCapacity,
51
62
  actors: {
52
63
  ...descriptor.populationCapacity.actors,
53
- active: localPlacementCounts.activeActorCount
64
+ active: localPlacementCounts?.activeActorCount ?? 0
54
65
  },
55
66
  spots: {
56
67
  ...descriptor.populationCapacity.spots,
57
- active: localPlacementCounts.activeSpotCount
68
+ active: localPlacementCounts?.activeSpotCount ?? 0
58
69
  }
59
70
  };
60
71
  const backendPeers = node.peers();
@@ -72,7 +83,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
72
83
  const channels = Object.entries(this.options.meshOptions.get(meshName)?.meshChannels ?? {}).map(([channelName, channel]) => {
73
84
  const readyMemberCount = BigInt(peerChannels.filter((entry, index) => peers[index]?.state === contracts_1.ZLinkPeerState.Ready &&
74
85
  entry.names.some((name, channelIndex) => name === channelName && (entry.weights[channelIndex] ?? 0) > 0)).length);
75
- const localWeight = descriptor?.channelWeights[channelName] ?? channel.weight ?? 100;
86
+ const localWeight = descriptor?.channelWeights[channelName] ?? channel.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT;
76
87
  const readyTargetCount = Number(readyMemberCount) + (channel.server === true && localWeight > 0 ? 1 : 0);
77
88
  return { channelName, isReady: readyTargetCount > 0, readyTargetCount };
78
89
  });
@@ -87,14 +98,14 @@ class ZLinkRouteMeshRuntimeCoordinator {
87
98
  ? contracts_1.ZLinkTopologyState.Degraded
88
99
  : hostTopologyState;
89
100
  const hostReady = (0, runtime_state_projections_1.runtimeStateIsReady)(hostState);
90
- const objectRole = descriptor?.objectRole ?? contracts_2.ZLinkObjectRole.None;
101
+ const objectRole = descriptor?.objectRole ?? contracts_1.ZLinkObjectRole.None;
91
102
  const placementWeight = descriptor?.placementWeight ?? 0;
92
103
  const capacityAvailable = descriptor !== undefined &&
93
104
  populationCapacity !== undefined &&
94
- hasRemainingCapacity(descriptor.activationConcurrency) &&
105
+ (this.options.activationAdmission?.hasHeadroom(meshName) ?? true) &&
95
106
  (hasRemainingCapacity(populationCapacity.actors) ||
96
107
  hasRemainingCapacity(populationCapacity.spots));
97
- const placementAvailable = objectRole === contracts_2.ZLinkObjectRole.Server &&
108
+ const placementAvailable = objectRole === contracts_1.ZLinkObjectRole.Server &&
98
109
  placementWeight > 0 &&
99
110
  capacityAvailable &&
100
111
  locationStoreHealthy &&
@@ -111,113 +122,51 @@ class ZLinkRouteMeshRuntimeCoordinator {
111
122
  isAvailable: placementAvailable,
112
123
  activeActorCount: populationCapacity?.actors.active ?? 0,
113
124
  activeSpotCount: populationCapacity?.spots.active ?? 0,
114
- unavailableReason: placementAvailable
115
- ? undefined
116
- : localTopologyState !== contracts_1.ZLinkTopologyState.Ready
117
- ? contracts_1.ZLinkTopologyReason.RuntimeNotReady
118
- : !locationStoreHealthy
119
- ? contracts_1.ZLinkTopologyReason.LocationUnavailable
120
- : placementWeight <= 0
121
- ? contracts_1.ZLinkTopologyReason.NoReadyTarget
122
- : contracts_1.ZLinkTopologyReason.CapacityExceeded
125
+ unavailableReason: placementUnavailableReason(placementAvailable, hostState, locationStoreHealthy)
123
126
  },
124
- sequence: drain.sequence > status.lastChangedMs ? drain.sequence : status.lastChangedMs,
127
+ sequence,
125
128
  observedAt: new Date()
126
129
  };
127
- drain.lastSnapshot = snapshot;
128
130
  return snapshot;
129
131
  }
130
132
  observe(meshName, capacity = runtime_observation_queue_1.ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY, signal) {
131
133
  const state = this.requireState(meshName);
132
134
  if (!Number.isInteger(capacity) || capacity <= 0)
133
135
  throw new RangeError('Observer capacity must be positive.');
134
- if (state.observers.size === 0)
135
- this.seedPlacementFingerprint(meshName);
136
+ const snapshot = this.snapshot(meshName);
136
137
  const queue = new runtime_observation_queue_1.RuntimeEventQueue(capacity, signal);
138
+ state.observers.add(queue);
139
+ this.startPlacementObserver();
137
140
  queue.onClose(() => {
138
141
  state.observers.delete(queue);
139
142
  this.stopPlacementObserverIfIdle();
140
143
  });
141
- this.snapshot(meshName);
142
- state.observers.add(queue);
143
- this.startPlacementObserver();
144
+ this.publishStatus(meshName, queue, snapshot);
144
145
  return queue;
145
146
  }
146
147
  isReady(meshName) {
147
148
  return this.snapshot(meshName).isReady;
148
149
  }
149
150
  hostStateChanged() {
150
- for (const [meshName, state] of this.states) {
151
- state.sequence += 1n;
152
- let snapshot;
153
- try {
154
- snapshot = this.snapshot(meshName);
155
- }
156
- catch {
157
- continue;
158
- }
159
- for (const observer of state.observers)
160
- observer.push(snapshot, meshName);
161
- }
151
+ for (const [meshName, state] of this.states)
152
+ this.publishCurrentStatus(meshName, state);
162
153
  }
163
154
  stopObservers() {
164
155
  for (const [meshName, state] of this.states) {
165
- state.sequence += 1n;
166
- let terminal;
167
- try {
168
- const current = this.snapshot(meshName);
169
- const terminalSequence = current.sequence >= state.sequence ? current.sequence + 1n : state.sequence;
170
- state.sequence = terminalSequence;
171
- terminal = {
172
- ...current,
173
- state: contracts_1.ZLinkTopologyState.Stopped,
174
- isReady: false,
175
- channels: current.channels.map((channel) => ({
176
- ...channel,
177
- isReady: false
178
- })),
179
- placement: {
180
- ...current.placement,
181
- isAvailable: false,
182
- unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
183
- },
184
- sequence: terminalSequence,
185
- observedAt: new Date()
186
- };
187
- }
188
- catch {
189
- const current = state.lastSnapshot;
190
- if (current !== undefined) {
191
- const terminalSequence = current.sequence >= state.sequence ? current.sequence + 1n : state.sequence;
192
- state.sequence = terminalSequence;
193
- terminal = {
194
- ...current,
195
- state: contracts_1.ZLinkTopologyState.Stopped,
196
- isReady: false,
197
- channels: current.channels.map((channel) => ({
198
- ...channel,
199
- isReady: false
200
- })),
201
- placement: {
202
- ...current.placement,
203
- isAvailable: false,
204
- unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
205
- },
206
- sequence: terminalSequence,
207
- observedAt: new Date()
208
- };
209
- }
210
- }
211
- for (const observer of [...state.observers]) {
212
- if (terminal === undefined)
156
+ const published = state.lastSnapshot;
157
+ if (published !== undefined && (0, runtime_state_projections_1.topologyObservationIsTerminal)(published.state))
158
+ continue;
159
+ const current = published ?? this.publishCurrentStatus(meshName, state);
160
+ if (current === undefined) {
161
+ for (const observer of [...state.observers])
213
162
  observer.close();
214
- else
215
- observer.seal(terminal, meshName);
216
163
  }
217
- state.observers.clear();
164
+ else {
165
+ this.publishSnapshot(meshName, state, terminalSnapshot(current, contracts_1.ZLinkTopologyState.Stopped));
166
+ }
218
167
  }
219
168
  }
220
- drain(meshName, deadlineMs = 30_000, signal) {
169
+ drain(meshName, deadlineMs = DEFAULT_ROUTE_MESH_DRAIN_TIMEOUT_MS, signal) {
221
170
  const state = this.requireState(meshName);
222
171
  if (this.states.size > 1)
223
172
  return Promise.reject(multiMeshDrainError());
@@ -235,7 +184,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
235
184
  new Promise((resolve) => state.waiters.push(resolve));
236
185
  return waitForOperation(operation, signal);
237
186
  }
238
- drainHost(deadlineMs = 30_000, signal) {
187
+ drainHost(deadlineMs = DEFAULT_ROUTE_MESH_DRAIN_TIMEOUT_MS, signal) {
239
188
  if (!Number.isFinite(deadlineMs) || deadlineMs <= 0) {
240
189
  return Promise.reject(new TypeError('Drain deadlineMs must be greater than zero.'));
241
190
  }
@@ -248,12 +197,12 @@ class ZLinkRouteMeshRuntimeCoordinator {
248
197
  }
249
198
  return waitForOperation(this.hostOperation, signal);
250
199
  }
251
- shutdownHost(deadline = 30_000, signal, remainingTimeoutMs) {
200
+ shutdownHost(deadline, signal) {
252
201
  if (typeof deadline === 'number' && (!Number.isFinite(deadline) || deadline <= 0)) {
253
202
  return Promise.reject(new TypeError('Shutdown deadlineMs must be greater than zero.'));
254
203
  }
255
204
  if (this.shutdownOperation === undefined) {
256
- const operation = this.performHostShutdown(deadline, remainingTimeoutMs);
205
+ const operation = this.performHostShutdown(deadline, signal);
257
206
  this.shutdownOperation = operation;
258
207
  for (const state of this.states.values())
259
208
  state.operation ??= operation;
@@ -278,7 +227,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
278
227
  // A failed response can still follow a committed Store write. Restore
279
228
  // every attempted descriptor before the host reports a reversible block.
280
229
  const rollback = new AbortController();
281
- const rollbackTimer = setTimeout(() => rollback.abort((0, abort_1.createDeadlineExceededError)('Retire descriptor rollback deadline exceeded.')), Math.min(deadlineMs, 1000));
230
+ const rollbackTimer = setTimeout(() => rollback.abort((0, abort_1.createDeadlineExceededError)('Retire descriptor rollback deadline exceeded.')), Math.min(deadlineMs, MAX_ROUTE_MESH_OBSERVATION_WAIT_MS));
282
231
  let rollbackFailed = false;
283
232
  for (const meshName of attempted.reverse()) {
284
233
  try {
@@ -316,14 +265,14 @@ class ZLinkRouteMeshRuntimeCoordinator {
316
265
  }
317
266
  catch (error) {
318
267
  const classified = drainFailureReason(error);
319
- if (process.env.ZLINK_DEBUG_FRAMEWORK_RELOCATION === '1') {
268
+ if ((0, diagnostics_1.isRelocationDebugEnabled)()) {
320
269
  console.error('[zlink.runtime.relocation.drain_failed]', classified, error);
321
270
  }
322
271
  const reason = deadline.signal.aborted
323
272
  ? 'deadline_exceeded'
324
273
  : classified;
325
274
  const rollback = new AbortController();
326
- const rollbackTimer = setTimeout(() => rollback.abort((0, abort_1.createDeadlineExceededError)('Relocation descriptor rollback deadline exceeded.')), Math.min(Math.max(1, deadlineMs), 1000));
275
+ const rollbackTimer = setTimeout(() => rollback.abort((0, abort_1.createDeadlineExceededError)('Relocation descriptor rollback deadline exceeded.')), Math.min(Math.max(1, deadlineMs), MAX_ROUTE_MESH_OBSERVATION_WAIT_MS));
327
276
  try {
328
277
  await Promise.all(entries.map(([meshName]) => this.options.rollbackRetiring(meshName, rollback.signal)));
329
278
  }
@@ -430,29 +379,23 @@ class ZLinkRouteMeshRuntimeCoordinator {
430
379
  }
431
380
  return result;
432
381
  }
433
- async performHostShutdown(cleanupDeadline, remainingTimeoutMs) {
434
- const timeoutMs = Math.max(0, remainingTimeoutMs ??
435
- (cleanupDeadline instanceof Date ? cleanupDeadline.getTime() - Date.now() : cleanupDeadline));
382
+ async performHostShutdown(cleanupDeadline, signal) {
436
383
  const deadlineAt = cleanupDeadline instanceof Date ? cleanupDeadline : new Date(Date.now() + cleanupDeadline);
437
384
  const entries = [...this.states.entries()];
438
- if (entries.length === 0)
439
- return { kind: 'drained' };
440
385
  for (const [, state] of entries) {
441
386
  state.deadline = deadlineAt;
442
387
  }
443
- const deadline = new AbortController();
444
- const timer = setTimeout(() => deadline.abort((0, abort_1.createDeadlineExceededError)('Shutdown deadline exceeded.')), timeoutMs);
445
388
  let result;
446
389
  try {
447
390
  for (const [meshName, state] of entries) {
448
391
  this.options.admission.seal(meshName, framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RuntimeShutdown);
449
392
  this.transition(meshName, state, contracts_1.ZLinkTopologyState.Stopping);
450
393
  }
451
- await Promise.all(entries.map(([meshName]) => this.options.publishDraining(meshName, deadline.signal)));
452
- await this.options.publishHostDraining(deadline.signal);
453
- await Promise.all(entries.map(([meshName]) => this.options.admission.awaitZero(meshName, deadline.signal)));
454
- await Promise.all(entries.map(([meshName]) => this.options.shutdownResources?.(meshName, deadline.signal)));
455
- await this.options.cleanupHostResources(deadline.signal);
394
+ await Promise.all(entries.map(([meshName]) => this.options.publishDraining(meshName, signal)));
395
+ await this.options.publishHostDraining(signal);
396
+ await Promise.all(entries.map(([meshName]) => this.options.admission.awaitZero(meshName, signal)));
397
+ await Promise.all(entries.map(([meshName]) => this.options.shutdownResources?.(meshName, signal)));
398
+ await this.options.cleanupHostResources(signal);
456
399
  result = { kind: 'drained' };
457
400
  for (const [meshName, state] of entries) {
458
401
  this.transition(meshName, state, contracts_1.ZLinkTopologyState.Stopped);
@@ -462,7 +405,7 @@ class ZLinkRouteMeshRuntimeCoordinator {
462
405
  const classified = drainFailureReason(error);
463
406
  const reason = classified !== 'teardown_failed'
464
407
  ? classified
465
- : deadline.signal.aborted
408
+ : signal.aborted
466
409
  ? 'deadline_exceeded'
467
410
  : classified;
468
411
  await Promise.all(entries.map(([meshName]) => this.options.forceStopResources(meshName).catch(() => undefined)));
@@ -471,9 +414,6 @@ class ZLinkRouteMeshRuntimeCoordinator {
471
414
  this.transition(meshName, state, contracts_1.ZLinkTopologyState.Failed);
472
415
  }
473
416
  }
474
- finally {
475
- clearTimeout(timer);
476
- }
477
417
  for (const [, state] of entries) {
478
418
  state.result = result;
479
419
  for (const resolve of state.waiters)
@@ -486,112 +426,65 @@ class ZLinkRouteMeshRuntimeCoordinator {
486
426
  if (state.state === next)
487
427
  return;
488
428
  state.state = next;
489
- state.sequence += 1n;
490
- let current;
491
- let snapshotAvailable = false;
492
- try {
493
- current = this.snapshot(meshName);
494
- snapshotAvailable = true;
495
- }
496
- catch {
497
- current = state.lastSnapshot;
498
- }
499
- const terminal = next === contracts_1.ZLinkTopologyState.Stopped || next === contracts_1.ZLinkTopologyState.Failed;
500
- if (current !== undefined) {
501
- if (terminal) {
502
- const terminalSequence = current.sequence >= state.sequence ? current.sequence + 1n : state.sequence;
503
- state.sequence = terminalSequence;
504
- const terminalStatus = {
505
- ...current,
506
- state: next,
507
- isReady: false,
508
- channels: current.channels.map((channel) => ({
509
- ...channel,
510
- isReady: false
511
- })),
512
- placement: {
513
- ...current.placement,
514
- isAvailable: false,
515
- unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
516
- },
517
- sequence: terminalSequence,
518
- observedAt: new Date()
519
- };
520
- for (const observer of state.observers)
521
- observer.seal(terminalStatus, meshName);
522
- }
523
- else if (snapshotAvailable) {
524
- for (const observer of state.observers)
525
- observer.push(current, meshName);
526
- }
527
- }
528
- if (terminal) {
529
- if (current === undefined) {
530
- for (const observer of state.observers)
531
- observer.close();
532
- }
533
- state.observers.clear();
534
- this.stopPlacementObserverIfIdle();
429
+ const published = this.publishCurrentStatus(meshName, state);
430
+ if ((0, runtime_state_projections_1.topologyObservationIsTerminal)(next) && published === undefined) {
431
+ for (const observer of [...state.observers])
432
+ observer.close();
535
433
  }
536
434
  }
537
- seedPlacementFingerprint(meshName) {
538
- this.locationStoreHealthFingerprints.set(meshName, this.options.isLocationStoreHealthy?.() ?? true);
539
- const descriptor = this.options.meshNodeDescriptor?.(meshName);
540
- if (descriptor !== undefined) {
541
- this.placementFingerprints.set(meshName, placementFingerprint(descriptor));
435
+ publishCurrentStatus(meshName, state) {
436
+ const published = state.lastSnapshot;
437
+ if (published !== undefined && (0, runtime_state_projections_1.topologyObservationIsTerminal)(published.state))
438
+ return published;
439
+ const desired = (0, runtime_state_projections_1.topologyObservationIsTerminal)(state.state)
440
+ ? state.state
441
+ : topologyStateForHost(this.options.hostState?.() ?? contracts_1.ZLinkFrameworkRuntimeState.Serving, state.state);
442
+ if (published !== undefined && (0, runtime_state_projections_1.topologyObservationIsTerminal)(desired)) {
443
+ return this.publishSnapshot(meshName, state, terminalSnapshot(published, desired));
444
+ }
445
+ if (this.options.meshNode(meshName) === undefined)
446
+ return undefined;
447
+ const current = this.buildSnapshot(meshName, published?.sequence ?? 0n);
448
+ return this.publishSnapshot(meshName, state, (0, runtime_state_projections_1.topologyObservationIsTerminal)(current.state)
449
+ ? terminalSnapshot(current, current.state)
450
+ : current);
451
+ }
452
+ publishSnapshot(meshName, state, current) {
453
+ const published = state.lastSnapshot;
454
+ if (published !== undefined && samePublicRouteMeshStatus(published, current))
455
+ return published;
456
+ const next = { ...current, sequence: (published?.sequence ?? 0n) + 1n, observedAt: new Date() };
457
+ state.lastSnapshot = next;
458
+ for (const observer of [...state.observers])
459
+ this.publishStatus(meshName, observer, next);
460
+ return next;
461
+ }
462
+ publishStatus(meshName, observer, status) {
463
+ if ((0, runtime_state_projections_1.topologyObservationIsTerminal)(status.state)) {
464
+ observer.seal(status, meshName);
465
+ }
466
+ else {
467
+ observer.push(status, meshName);
542
468
  }
543
- this.peerFingerprints.set(meshName, peerFingerprintMap(this.options.meshNode(meshName)?.peers() ?? []));
544
469
  }
545
470
  startPlacementObserver() {
546
471
  if (this.placementObserver !== undefined)
547
472
  return;
548
- this.placementObserver = setInterval(() => this.observePlacementChanges(), 100);
473
+ this.placementObserver = setInterval(() => this.observePlacementChanges(), PLACEMENT_OBSERVATION_INTERVAL_MS);
549
474
  this.placementObserver.unref();
550
475
  }
551
476
  stopPlacementObserverIfIdle() {
552
- if ([...this.states.values()].some((state) => state.observers.size > 0))
553
- return;
477
+ for (const state of this.states.values()) {
478
+ if (state.observers.size > 0)
479
+ return;
480
+ }
554
481
  if (this.placementObserver !== undefined)
555
482
  clearInterval(this.placementObserver);
556
483
  this.placementObserver = undefined;
557
484
  }
558
485
  observePlacementChanges() {
559
486
  for (const [meshName, state] of this.states) {
560
- if (state.observers.size === 0)
561
- continue;
562
- const locationStoreHealthy = this.options.isLocationStoreHealthy?.() ?? true;
563
- if (locationStoreHealthy !== this.locationStoreHealthFingerprints.get(meshName)) {
564
- this.locationStoreHealthFingerprints.set(meshName, locationStoreHealthy);
565
- state.sequence += 1n;
566
- for (const observer of state.observers) {
567
- observer.push(this.snapshot(meshName), meshName);
568
- }
569
- }
570
- const descriptor = this.options.meshNodeDescriptor?.(meshName);
571
- if (descriptor === undefined)
572
- continue;
573
- const fingerprint = placementFingerprint(descriptor);
574
- const previous = this.placementFingerprints.get(meshName);
575
- this.placementFingerprints.set(meshName, fingerprint);
576
- const node = this.options.meshNode(meshName);
577
- if (previous !== undefined && previous !== fingerprint) {
578
- state.sequence += 1n;
579
- for (const observer of state.observers) {
580
- observer.push(this.snapshot(meshName), meshName);
581
- }
582
- }
583
- const previousPeers = this.peerFingerprints.get(meshName) ?? new Map();
584
- const peers = node?.peers() ?? [];
585
- const nextPeers = peerFingerprintMap(peers);
586
- this.peerFingerprints.set(meshName, nextPeers);
587
- for (const peerRid of new Set([...previousPeers.keys(), ...nextPeers.keys()])) {
588
- if (previousPeers.get(peerRid) === nextPeers.get(peerRid))
589
- continue;
590
- state.sequence += 1n;
591
- for (const observer of state.observers) {
592
- observer.push(this.snapshot(meshName), meshName);
593
- }
594
- }
487
+ this.publishCurrentStatus(meshName, state);
595
488
  }
596
489
  }
597
490
  requireState(meshName) {
@@ -602,6 +495,59 @@ class ZLinkRouteMeshRuntimeCoordinator {
602
495
  }
603
496
  }
604
497
  exports.ZLinkRouteMeshRuntimeCoordinator = ZLinkRouteMeshRuntimeCoordinator;
498
+ function terminalSnapshot(current, state) {
499
+ return {
500
+ ...current,
501
+ state,
502
+ isReady: false,
503
+ channels: current.channels.map((channel) => ({ ...channel, isReady: false })),
504
+ placement: {
505
+ ...current.placement,
506
+ isAvailable: false,
507
+ unavailableReason: contracts_1.ZLinkTopologyReason.RuntimeNotReady
508
+ }
509
+ };
510
+ }
511
+ function samePublicRouteMeshStatus(left, right) {
512
+ return (left.meshName === right.meshName &&
513
+ left.state === right.state &&
514
+ left.isReady === right.isReady &&
515
+ left.readyPeerCount === right.readyPeerCount &&
516
+ left.placement.isAvailable === right.placement.isAvailable &&
517
+ left.placement.activeActorCount === right.placement.activeActorCount &&
518
+ left.placement.activeSpotCount === right.placement.activeSpotCount &&
519
+ left.placement.unavailableReason === right.placement.unavailableReason &&
520
+ left.channels.length === right.channels.length &&
521
+ left.channels.every((channel, index) => {
522
+ const other = right.channels[index];
523
+ return (channel.channelName === other.channelName &&
524
+ channel.isReady === other.isReady &&
525
+ channel.readyTargetCount === other.readyTargetCount);
526
+ }) &&
527
+ left.peers.length === right.peers.length &&
528
+ left.peers.every((peer, index) => {
529
+ const other = right.peers[index];
530
+ return (peer.nodeRid === other.nodeRid &&
531
+ peer.state === other.state &&
532
+ peer.unavailableReason === other.unavailableReason);
533
+ }));
534
+ }
535
+ function placementUnavailableReason(available, hostState, locationStoreHealthy) {
536
+ if (available)
537
+ return undefined;
538
+ switch (hostState) {
539
+ case contracts_1.ZLinkFrameworkRuntimeState.Relocating:
540
+ case contracts_1.ZLinkFrameworkRuntimeState.Relocated:
541
+ case contracts_1.ZLinkFrameworkRuntimeState.Draining:
542
+ return contracts_1.ZLinkTopologyReason.Draining;
543
+ case contracts_1.ZLinkFrameworkRuntimeState.Serving:
544
+ return !locationStoreHealthy
545
+ ? contracts_1.ZLinkTopologyReason.LocationUnavailable
546
+ : contracts_1.ZLinkTopologyReason.CapacityExceeded;
547
+ default:
548
+ return contracts_1.ZLinkTopologyReason.RuntimeNotReady;
549
+ }
550
+ }
605
551
  function topologyStateForHost(state, fallback) {
606
552
  switch (state) {
607
553
  case contracts_1.ZLinkFrameworkRuntimeState.Serving:
@@ -618,44 +564,16 @@ function topologyStateForHost(state, fallback) {
618
564
  return contracts_1.ZLinkTopologyState.Failed;
619
565
  }
620
566
  }
621
- function placementFingerprint(descriptor) {
622
- const spotTypes = [...descriptor.populationCapacity.spotTypes]
623
- .sort((left, right) => {
624
- const kind = left.objectKind.localeCompare(right.objectKind);
625
- return kind !== 0 ? kind : left.stableType.localeCompare(right.stableType);
626
- })
627
- .map((entry) => [
628
- entry.objectKind,
629
- entry.stableType,
630
- entry.active,
631
- entry.reserved,
632
- entry.limit
633
- ]);
634
- return JSON.stringify([
635
- descriptor.objectRole,
636
- descriptor.placementWeight,
637
- descriptor.populationCapacity.actors,
638
- descriptor.populationCapacity.spots,
639
- spotTypes,
640
- descriptor.activationConcurrency,
641
- Object.entries(descriptor.channelWeights).sort(([left], [right]) => left.localeCompare(right))
642
- ]);
643
- }
644
567
  function hasRemainingCapacity(capacity) {
645
568
  return capacity.limit === 0 || capacity.active + (capacity.reserved ?? 0) < capacity.limit;
646
569
  }
647
- function peerFingerprintMap(peers) {
648
- return new Map(peers.map((peer) => [
649
- String(peer.routingId),
650
- JSON.stringify([
651
- peer.lifecycleGeneration.toString(),
652
- peer.descriptorRevision.toString(),
653
- peer.endpoint,
654
- peer.state,
655
- peer.lastError
656
- ])
657
- ]));
570
+ class ZLinkDrainingStatePublishError extends Error {
571
+ constructor(cause) {
572
+ super('Failed to publish draining peer rows.', { cause });
573
+ this.name = 'ZLinkDrainingStatePublishError';
574
+ }
658
575
  }
576
+ exports.ZLinkDrainingStatePublishError = ZLinkDrainingStatePublishError;
659
577
  class ZLinkRetiringRollbackError extends Error {
660
578
  constructor() {
661
579
  super('Retiring descriptor publication could not be rolled back to Serving.');
@@ -671,15 +589,14 @@ function multiMeshDrainError() {
671
589
  }
672
590
  function backendState(state) {
673
591
  switch (state) {
674
- case 1:
592
+ case service_runtime_contracts_1.MeshNodeRuntimeState.Preparing:
675
593
  return contracts_1.ZLinkTopologyState.Starting;
676
- case 2:
677
- case 3:
678
- case 4:
594
+ case service_runtime_contracts_1.MeshNodeRuntimeState.Serving:
679
595
  return contracts_1.ZLinkTopologyState.Ready;
680
- case 5:
596
+ case service_runtime_contracts_1.MeshNodeRuntimeState.Retiring:
597
+ case service_runtime_contracts_1.MeshNodeRuntimeState.Draining:
681
598
  return contracts_1.ZLinkTopologyState.Stopping;
682
- case 6:
599
+ case service_runtime_contracts_1.MeshNodeRuntimeState.Stopped:
683
600
  return contracts_1.ZLinkTopologyState.Stopped;
684
601
  default:
685
602
  return contracts_1.ZLinkTopologyState.Failed;
@@ -687,14 +604,14 @@ function backendState(state) {
687
604
  }
688
605
  function peerState(state) {
689
606
  switch (state) {
690
- case 3:
607
+ case service_runtime_contracts_1.MeshPeerRuntimeState.Serving:
691
608
  return contracts_1.ZLinkPeerState.Ready;
692
- case 4:
609
+ case service_runtime_contracts_1.MeshPeerRuntimeState.Draining:
693
610
  return contracts_1.ZLinkPeerState.Draining;
694
- case 6:
611
+ case service_runtime_contracts_1.MeshPeerRuntimeState.NotRequired:
695
612
  return contracts_1.ZLinkPeerState.NotRequired;
696
- case 1:
697
- case 2:
613
+ case service_runtime_contracts_1.MeshPeerRuntimeState.Connecting:
614
+ case service_runtime_contracts_1.MeshPeerRuntimeState.Preparing:
698
615
  return contracts_1.ZLinkPeerState.Connecting;
699
616
  default:
700
617
  return contracts_1.ZLinkPeerState.NotConnected;
@@ -712,12 +629,16 @@ function peerUnavailableReason(state) {
712
629
  }
713
630
  }
714
631
  function drainFailureReason(error) {
715
- const name = error instanceof Error ? error.name : '';
716
- if (name === 'ZLinkDrainingStatePublishError')
632
+ if ((0, state_lane_1.isStructuralGuardEnabled)()) {
633
+ const pending = (0, state_lane_1.debugPendingWorkNames)();
634
+ if (pending.length > 0)
635
+ console.error('[zlink.runtime.drain.pending]', pending);
636
+ }
637
+ if (error instanceof ZLinkDrainingStatePublishError)
717
638
  return 'drain_state_publish_failed';
718
- if (name === 'ZLinkOwnerCleanupError' ||
639
+ if (error instanceof runtime_1.ZLinkOwnerCleanupError ||
719
640
  (error instanceof AggregateError &&
720
- error.errors.some((nested) => nested instanceof Error && nested.name === 'ZLinkOwnerCleanupError'))) {
641
+ error.errors.some((nested) => nested instanceof runtime_1.ZLinkOwnerCleanupError))) {
721
642
  return 'owner_cleanup_failed';
722
643
  }
723
644
  return 'teardown_failed';