@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
@@ -4,24 +4,18 @@ import { closeMeshCompletion } from '../backend';
4
4
  import { RequestResult } from '../backend/runtime-values';
5
5
  import type { ZLinkActorManagerOptions } from './actor-runtime-contracts';
6
6
  import type { ZLinkActorRuntimeState } from './actor-runtime-state';
7
- import { ZLinkActorRetryDelay } from './actor-retry-delay';
7
+ import { createActorMembership } from './actor-lifecycle-snapshot';
8
8
 
9
9
  type ZLinkTransferredActorRollbackOptions = Pick<
10
10
  ZLinkActorManagerOptions,
11
- | 'actorDestroyedCleanup'
12
- | 'nativeActorNode'
13
- | 'nativeActorNodeProvider'
14
- | 'nativeActorCompletionTableProvider'
15
- | 'shutdownSignal'
16
- | 'metrics'
11
+ 'nativeActorNode' | 'nativeActorNodeProvider' | 'nativeActorCompletionTableProvider'
17
12
  >;
18
13
 
19
14
  export class ZLinkTransferredActorRollbackCoordinator {
20
- private readonly tasks = new Map<string, Promise<void>>();
21
-
22
15
  constructor(
23
16
  private readonly states: Map<string, ZLinkActorRuntimeState>,
24
- private readonly options: ZLinkTransferredActorRollbackOptions
17
+ private readonly options: ZLinkTransferredActorRollbackOptions,
18
+ private readonly finalize: (actorId: string, state: ZLinkActorRuntimeState) => Promise<void>
25
19
  ) {}
26
20
 
27
21
  async rollback(actor: ZLinkActor, signal?: AbortSignal): Promise<void> {
@@ -37,54 +31,10 @@ export class ZLinkTransferredActorRollbackCoordinator {
37
31
 
38
32
  const actorRef = state.nativeActorRef;
39
33
  const node = this.options.nativeActorNode ?? this.options.nativeActorNodeProvider?.();
40
- try {
41
- if (node !== undefined && actorRef !== undefined) {
42
- await this.destroyNativeActor(node, actorRef, signal);
43
- }
44
- } catch (error) {
45
- this.schedule(actor, state, node, actorRef);
46
- throw error;
47
- }
48
- this.complete(actor, state);
49
- }
50
-
51
- private schedule(
52
- actor: ZLinkActor,
53
- state: ZLinkActorRuntimeState,
54
- node: ZLinkBackendMeshNode | undefined,
55
- actorRef: ZLinkBackendActorRef | undefined
56
- ): void {
57
- if (this.tasks.has(actor.context.actorId)) {
58
- return;
59
- }
60
- const task = this.retry(actor, state, node, actorRef).finally(() =>
61
- this.tasks.delete(actor.context.actorId)
62
- );
63
- this.tasks.set(actor.context.actorId, task);
64
- }
65
-
66
- private async retry(
67
- actor: ZLinkActor,
68
- state: ZLinkActorRuntimeState,
69
- node: ZLinkBackendMeshNode | undefined,
70
- actorRef: ZLinkBackendActorRef | undefined
71
- ): Promise<void> {
72
- const retryDelay = new ZLinkActorRetryDelay();
73
- while (
74
- this.states.get(actor.context.actorId) === state &&
75
- this.options.shutdownSignal?.aborted !== true
76
- ) {
77
- if (!(await retryDelay.wait(this.options.shutdownSignal))) return;
78
- try {
79
- if (node !== undefined && actorRef !== undefined) {
80
- await this.destroyNativeActor(node, actorRef);
81
- }
82
- this.complete(actor, state);
83
- return;
84
- } catch {
85
- // The tombstone prevents dispatch while the next retry is pending.
86
- }
34
+ if (node !== undefined && actorRef !== undefined) {
35
+ await this.destroyNativeActor(node, actorRef, signal);
87
36
  }
37
+ await this.complete(actor, state);
88
38
  }
89
39
 
90
40
  private async destroyNativeActor(
@@ -116,13 +66,12 @@ export class ZLinkTransferredActorRollbackCoordinator {
116
66
  }
117
67
  }
118
68
 
119
- private complete(actor: ZLinkActor, state: ZLinkActorRuntimeState): void {
69
+ private async complete(actor: ZLinkActor, state: ZLinkActorRuntimeState): Promise<void> {
120
70
  if (this.states.get(actor.context.actorId) !== state) {
121
71
  return;
122
72
  }
123
- this.options.actorDestroyedCleanup?.(actor.context.actorId);
124
- state.clearAfterDestroy();
125
- this.states.delete(actor.context.actorId);
126
- this.options.metrics?.change('zlink.actor.count', -1);
73
+ await state.getOrStartDestroy(createActorMembership(actor).actor.nodeRid, () =>
74
+ this.finalize(actor.context.actorId, state)
75
+ );
127
76
  }
128
77
  }
@@ -2,10 +2,21 @@ import {
2
2
  ZLinkFrameworkInternalErrorKind,
3
3
  createInternalFrameworkException
4
4
  } from './framework-errors-internal';
5
+ const BACKING_ARRAY_COMPACTION_MIN_HEAD = 1024;
6
+
7
+ /** 소비한 배열 prefix가 정리 조건에 도달했는지 판정합니다. */
8
+ export function shouldCompactBackingArray(head: number, length: number): boolean {
9
+ return head >= BACKING_ARRAY_COMPACTION_MIN_HEAD && head * 2 >= length;
10
+ }
11
+
5
12
  export class ZLinkRuntimeAdmissionGate {
6
13
  private readonly meshes = new Map<string, ZLinkMeshAdmissionState>();
7
14
 
8
- constructor(private readonly ownerAdmissionOpen: () => boolean = () => true) {}
15
+ /**
16
+ * Location runtime §5: the host's single new-work decision (local admission deadline and host
17
+ * execution combination). A host without a Location Store has no such block.
18
+ */
19
+ constructor(readonly ownerAdmissionOpen: () => boolean = () => true) {}
9
20
 
10
21
  get acceptsNewWork(): boolean {
11
22
  if (!this.ownerAdmissionOpen()) return false;
@@ -188,7 +199,7 @@ function compactWaiters(state: ZLinkMeshAdmissionState): void {
188
199
  if (state.waiterCount === 0) {
189
200
  state.waiters.length = 0;
190
201
  state.waiterHead = 0;
191
- } else if (state.waiterHead >= 1024 && state.waiterHead * 2 >= state.waiters.length) {
202
+ } else if (shouldCompactBackingArray(state.waiterHead, state.waiters.length)) {
192
203
  state.waiters.splice(0, state.waiterHead);
193
204
  state.waiterHead = 0;
194
205
  }
@@ -43,12 +43,12 @@ export function hasApplicationJobPermit(): boolean {
43
43
  }
44
44
 
45
45
  /** Re-enters the captured permit scope when a serial executor runs later. */
46
- export function bindApplicationJobPermit<TResult>(
47
- callback: () => Promise<TResult> | TResult
48
- ): () => Promise<TResult> | TResult {
46
+ export function bindApplicationJobPermit<TResult, TArgument>(
47
+ callback: (argument?: TArgument) => Promise<TResult> | TResult
48
+ ): (argument?: TArgument) => Promise<TResult> | TResult {
49
49
  const scope = applicationJobPermitScope.getStore();
50
50
  if (scope === undefined) return callback;
51
- return () => applicationJobPermitScope.run(scope, callback);
51
+ return (argument?: TArgument) => applicationJobPermitScope.run(scope, callback, argument);
52
52
  }
53
53
 
54
54
  /**
@@ -141,14 +141,16 @@ export interface ZLinkBackendMeshNode {
141
141
  route: ServiceInstanceRouteFence,
142
142
  parts: MessageLike | readonly MessageLike[],
143
143
  sourceSpotId?: string,
144
- metadata?: ReadonlyMap<string, string>
144
+ metadata?: ReadonlyMap<string, string>,
145
+ instanceIntent?: boolean
145
146
  ): Promise<SubmitResult>;
146
147
  requestInstanceSpot(
147
148
  route: ServiceInstanceRouteFence,
148
149
  parts: MessageLike | readonly MessageLike[],
149
150
  timeoutMs?: number,
150
151
  sourceSpotId?: string,
151
- metadata?: ReadonlyMap<string, string>
152
+ metadata?: ReadonlyMap<string, string>,
153
+ instanceIntent?: boolean
152
154
  ): MeshOperationId;
153
155
  registerUserSpotOperationHandler(handler: ServiceUserSpotOperationHandler): void;
154
156
  requestUserSpotCreate(
@@ -249,6 +251,12 @@ export interface ZLinkBackendMeshNode {
249
251
  readonly objectGeneration: bigint;
250
252
  }
251
253
  | undefined;
254
+ registerInstanceIntent?(
255
+ instanceType: string,
256
+ route: import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence,
257
+ expectedCurrentRoute?:
258
+ import('../../foundation/service-stateful-wire-codec').ServiceInstanceRouteFence | null
259
+ ): void;
252
260
  waitForInstanceApplicationQuiescence?(spotId: string, signal?: AbortSignal): Promise<void>;
253
261
  restoreUserSpotAuthority?(
254
262
  spotId: string,
@@ -269,7 +277,7 @@ export interface ZLinkBackendMeshNode {
269
277
  stableType: string,
270
278
  generation: bigint,
271
279
  authorityOwnerGeneration: bigint,
272
- spotId: string,
280
+ spotId: string | undefined,
273
281
  spotGeneration: bigint,
274
282
  membershipEpoch: bigint
275
283
  ): ZLinkBackendActorRef;
@@ -369,8 +377,7 @@ export interface ZLinkBackendMeshNode {
369
377
  actor: ZLinkBackendActorRef,
370
378
  expectedBindingGeneration: bigint,
371
379
  parts: MessageLike | readonly MessageLike[],
372
- flags?: number,
373
- actorFence?: ZLinkBackendActorSessionSendFence
380
+ flags?: number
374
381
  ): Promise<SubmitResult>;
375
382
  closeActorBoundSession(
376
383
  actor: ZLinkBackendActorRef,
@@ -413,20 +420,12 @@ export interface ZLinkBackendActorRef {
413
420
  readonly generation: bigint;
414
421
  }
415
422
 
416
- export interface ZLinkBackendActorSessionSendFence {
417
- readonly targetNodeGeneration: bigint;
418
- readonly authorityOwnerGeneration: bigint;
419
- readonly ownerLeaseGeneration: bigint;
420
- }
421
-
422
423
  export interface ZLinkBackendActorSessionNode {
423
- actorNodeGeneration?(actor: ZLinkBackendActorRef): bigint | undefined;
424
424
  sendActorBoundSession(
425
425
  actor: ZLinkBackendActorRef,
426
426
  expectedBindingGeneration: bigint,
427
427
  parts: readonly Message[],
428
- flags: number,
429
- actorFence?: ZLinkBackendActorSessionSendFence
428
+ flags: number
430
429
  ): Promise<ZLinkSubmitResult>;
431
430
  closeActorBoundSession(
432
431
  actor: ZLinkBackendActorRef,
@@ -444,27 +443,6 @@ export interface ZLinkBackendActorRecvInfo {
444
443
  readonly flags: number;
445
444
  }
446
445
 
447
- export interface ZLinkBackendActorJoinInfo {
448
- readonly sourceActor: ZLinkBackendActorRef;
449
- readonly targetActor: ZLinkBackendActorRef;
450
- readonly sourceNodeRid: RoutingId;
451
- readonly sourceSpotId: RoutingId;
452
- readonly targetNodeRid: RoutingId;
453
- readonly targetSpotId: RoutingId;
454
- readonly joinEpoch: bigint;
455
- readonly flags: number;
456
- }
457
-
458
- export interface ZLinkBackendActorJoinRequest {
459
- readonly info: ZLinkBackendActorJoinInfo;
460
- readonly message: Message;
461
- }
462
-
463
- export interface ZLinkBackendActorJoinReplyOperation {
464
- message(message: Message): ZLinkBackendActorJoinReplyOperation;
465
- submit(): void;
466
- }
467
-
468
446
  export interface ZLinkBackendSpotDispatchInfo {
469
447
  readonly event: ZLinkBackendSpotDispatchEvent;
470
448
  readonly subjectKind?: number;
@@ -474,6 +452,7 @@ export interface ZLinkBackendSpotDispatchInfo {
474
452
 
475
453
  export interface ZLinkBackendSocketMonitorEvent {
476
454
  readonly nativeEvent: MonitorEventType;
455
+ readonly readyEdge: boolean;
477
456
  readonly routingId?: unknown;
478
457
  readonly localAddr: string;
479
458
  readonly remoteAddr: string;
@@ -572,6 +551,7 @@ export interface ZLinkBackendRouterSocket extends ZLinkBackendConnectableSocket
572
551
  }
573
552
 
574
553
  export interface ZLinkBackendPublisherSocket extends ZLinkBackendSocket {
554
+ sendTimeoutMs: number;
575
555
  sendHighWaterMark: number;
576
556
  noDrop: boolean;
577
557
  publish(topic: string, message: Message | readonly Message[]): void;
@@ -720,7 +700,6 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
720
700
  recvActorLifecycle(flags: ZLinkBackendRecvFlags): unknown | null;
721
701
  drainReply(): number;
722
702
  drainChannelReply(subjectHandle: bigint): number;
723
- recvRoute(result: Received, flags: ZLinkBackendRecvFlags): boolean;
724
703
  setDispatchHandler(handler: (info: ZLinkBackendSpotDispatchInfo) => void): void;
725
704
  requestToChannel(
726
705
  channelName: string,
@@ -744,11 +723,6 @@ export interface ZLinkBackendSpot extends ZLinkBackendObject {
744
723
  payload: Message | readonly Message[],
745
724
  timeoutMs?: number
746
725
  ): Promise<readonly Message[]>;
747
- recvActorJoin(flags: ZLinkBackendRecvFlags): ZLinkBackendActorJoinRequest | null;
748
- replyActorJoin(
749
- request: ZLinkBackendActorJoinRequest,
750
- joinResultCode: number
751
- ): ZLinkBackendActorJoinReplyOperation;
752
726
  dispose(): Promise<void>;
753
727
  }
754
728
 
@@ -788,7 +762,6 @@ export interface ZLinkMonitoringBackendAdapter {
788
762
  }
789
763
 
790
764
  export interface ZLinkBackendAdapterFactory {
791
- createReceived(): Received;
792
765
  createTopicMessage(): TopicMessage;
793
766
  createChannelAdapter(): ZLinkChannelBackendAdapter;
794
767
  createMeshAdapter(): ZLinkMeshBackendAdapter;
@@ -1,44 +1,20 @@
1
- import { SubmitResult } from './runtime-values';
2
- import { ZLinkSubmitStatus } from '../messaging/submission-result';
1
+ import { classifySubmitResult } from '../messaging/submission-result';
3
2
  import type { ZLinkBackendActorSessionNode, ZLinkBackendMeshNode } from './contracts';
4
3
  import { closeMeshCompletion, type ZLinkMeshCompletionTable } from './mesh-completion-table';
5
- import { routingIdsEqual } from '../routing-id';
6
4
 
7
5
  export function meshActorSessionNodeAdapter(
8
6
  node: ZLinkBackendMeshNode,
9
7
  completions?: ZLinkMeshCompletionTable
10
8
  ): ZLinkBackendActorSessionNode {
11
9
  return {
12
- actorNodeGeneration(actor) {
13
- const status = node.status();
14
- return routingIdsEqual(status.routingId, actor.nodeRid)
15
- ? status.lifecycleGeneration
16
- : undefined;
17
- },
18
- async sendActorBoundSession(actor, expectedBindingGeneration, parts, flags, actorFence) {
10
+ async sendActorBoundSession(actor, expectedBindingGeneration, parts, flags) {
19
11
  const result = await node.sendActorBoundSession(
20
12
  actor,
21
13
  expectedBindingGeneration,
22
14
  parts as never,
23
- flags,
24
- actorFence
15
+ flags
25
16
  );
26
- switch (result) {
27
- case SubmitResult.Ok:
28
- return { status: ZLinkSubmitStatus.Submitted };
29
- case SubmitResult.Backpressured:
30
- case SubmitResult.NotAdmitted:
31
- return { status: ZLinkSubmitStatus.Backpressured };
32
- case SubmitResult.NotFound:
33
- case SubmitResult.InvalidState:
34
- return { status: ZLinkSubmitStatus.TargetNotFound };
35
- case SubmitResult.NotConnected:
36
- return { status: ZLinkSubmitStatus.RouteNotConnected };
37
- case SubmitResult.Terminated:
38
- return { status: ZLinkSubmitStatus.Shutdown };
39
- default:
40
- throw new Error(`Actor bound-session send failed with result '${result}'.`);
41
- }
17
+ return classifySubmitResult(result, 'Actor bound-session send');
42
18
  },
43
19
  async closeActorBoundSession(actor, expectedBindingGeneration, timeoutMs, signal) {
44
20
  if (completions === undefined) {
@@ -1,6 +1,11 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
2
  import { availableParallelism } from 'node:os';
3
- import { ZLINK_BACKEND_RECV_DONT_WAIT } from './runtime-values';
3
+ import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
4
+ import type {
5
+ ApplicationJobPermitPort,
6
+ ApplicationJobQueuePort
7
+ } from '../application-jobs/contracts';
8
+ import { runZLinkExecutionArea } from '../execution';
4
9
  import {
5
10
  ReadyDomain,
6
11
  type ReadyBatch,
@@ -8,13 +13,20 @@ import {
8
13
  type ReceiveBatch,
9
14
  type ReceiveRecord
10
15
  } from '../foundation/service-runtime-contracts';
16
+ import {
17
+ SERVICE_WIRE_COMMAND_OFFSET,
18
+ SERVICE_WIRE_MAJOR_OFFSET,
19
+ SERVICE_WIRE_PREFIX_SIZE
20
+ } from '../foundation/service-wire-binary-primitives';
21
+ import {
22
+ SERVICE_WIRE_MAGIC,
23
+ SERVICE_WIRE_MAJOR
24
+ } from '../foundation/service-wire-constants.generated';
11
25
  import type { ZLinkBackendMeshNode } from './contracts';
12
- import { runZLinkExecutionArea } from '../execution';
13
- import type {
14
- ApplicationJobPermitPort,
15
- ApplicationJobQueuePort
16
- } from '../application-jobs/contracts';
17
- import { runWithApplicationJobPermit } from '../application-jobs/application-job-queue-scope';
26
+ import { ZLINK_BACKEND_RECV_DONT_WAIT } from './runtime-values';
27
+ const DEFAULT_MESH_READY_CAPACITY = 32;
28
+
29
+ const DEFAULT_MESH_PART_CAPACITY = 256;
18
30
 
19
31
  const MESH_DISPATCH_YIELD_RECORDS = 16;
20
32
  const MESH_DISPATCH_YIELD_INTERVAL_MS = 2;
@@ -45,21 +57,10 @@ export interface ZLinkMeshDispatchFailureContext {
45
57
  readonly commandId?: number;
46
58
  }
47
59
 
48
- class ZLinkMeshDispatchFailure extends Error {
49
- constructor(
50
- readonly context: ZLinkMeshDispatchFailureContext,
51
- readonly dispatchCause: unknown
52
- ) {
53
- super('Mesh record dispatch failed.', { cause: dispatchCause });
54
- this.name = 'ZLinkMeshDispatchFailure';
55
- }
56
- }
57
-
58
60
  export class ZLinkMeshDispatchPump {
59
61
  private pendingDomains: number = ReadyDomain.None;
60
62
  private infrastructureScheduled = false;
61
63
  private disposed = false;
62
- private infrastructureDrainPromise?: Promise<void>;
63
64
  private readonly activeDrains = new Set<Promise<void>>();
64
65
  private readonly idleApplicationWorkers = new Set<() => void>();
65
66
  private applicationWorkerCount = 0;
@@ -152,7 +153,7 @@ export class ZLinkMeshDispatchPump {
152
153
  const readyBatch = this.node.createReadyBatch(1);
153
154
  const receiveBatch = this.node.createReceiveBatch(
154
155
  MESH_DISPATCH_RECEIVE_CAPACITY,
155
- this.options.partCapacity ?? 256
156
+ this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
156
157
  );
157
158
  try {
158
159
  for (;;) {
@@ -179,12 +180,8 @@ export class ZLinkMeshDispatchPump {
179
180
  return new Promise((resolve) => this.idleApplicationWorkers.add(resolve));
180
181
  }
181
182
 
182
- private reportDispatchError(error: unknown): void {
183
- if (error instanceof ZLinkMeshDispatchFailure) {
184
- this.options.reportError?.(error.dispatchCause, error.context);
185
- return;
186
- }
187
- this.options.reportError?.(error);
183
+ private reportDispatchError(error: unknown, context?: ZLinkMeshDispatchFailureContext): void {
184
+ this.options.reportError?.(error, context);
188
185
  }
189
186
 
190
187
  /**
@@ -205,34 +202,23 @@ export class ZLinkMeshDispatchPump {
205
202
  runZLinkExecutionArea('infrastructure', () => this.drainInfrastructure())
206
203
  )
207
204
  )
208
- .catch((error) => {
209
- if (error instanceof ZLinkMeshDispatchFailure) {
210
- this.options.reportError?.(error.dispatchCause, error.context);
211
- return;
212
- }
213
- this.options.reportError?.(error);
214
- });
205
+ .catch((error) => this.reportDispatchError(error));
215
206
  this.activeDrains.add(drain);
216
- this.infrastructureDrainPromise = drain;
217
207
  void drain.finally(() => {
218
208
  this.activeDrains.delete(drain);
219
- if (this.infrastructureDrainPromise === drain) {
220
- this.infrastructureDrainPromise = undefined;
221
- this.infrastructureScheduled = false;
222
- if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
223
- this.scheduleInfrastructure();
224
- }
209
+ this.infrastructureScheduled = false;
210
+ if (!this.disposed && (this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
211
+ this.scheduleInfrastructure();
225
212
  }
226
213
  });
227
214
  }
228
215
 
229
216
  private async drainInfrastructure(): Promise<void> {
230
217
  const readyBatch = this.node.createReadyBatch(
231
- Math.min(this.options.readyCapacity ?? 32, MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET)
232
- );
233
- const receiveBatch = this.node.createReceiveBatch(
234
- MESH_DISPATCH_RECEIVE_CAPACITY,
235
- this.options.partCapacity ?? 256
218
+ Math.min(
219
+ this.options.readyCapacity ?? DEFAULT_MESH_READY_CAPACITY,
220
+ MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
221
+ )
236
222
  );
237
223
  try {
238
224
  while (!this.disposed) {
@@ -246,7 +232,7 @@ export class ZLinkMeshDispatchPump {
246
232
  const lifecycleBudgetExhausted = await this.drainDomain(
247
233
  ReadyDomain.Infrastructure,
248
234
  readyBatch,
249
- receiveBatch,
235
+ undefined,
250
236
  MESH_DISPATCH_LIFECYCLE_CLAIM_BUDGET
251
237
  );
252
238
  if (lifecycleBudgetExhausted) {
@@ -255,7 +241,6 @@ export class ZLinkMeshDispatchPump {
255
241
  }
256
242
  }
257
243
  } finally {
258
- receiveBatch.close();
259
244
  readyBatch.close();
260
245
  }
261
246
  }
@@ -263,7 +248,7 @@ export class ZLinkMeshDispatchPump {
263
248
  private async drainDomain(
264
249
  domain: number,
265
250
  readyBatch: ReadyBatch,
266
- receiveBatch: ReceiveBatch,
251
+ receiveBatch: ReceiveBatch | undefined,
267
252
  claimBudget?: number
268
253
  ): Promise<boolean> {
269
254
  let claimsDrained = 0;
@@ -285,85 +270,91 @@ export class ZLinkMeshDispatchPump {
285
270
  for (let index = 0; index < drained.records.length; index += 1) {
286
271
  const claim = readyBatch.takeClaim(index);
287
272
  claimsDrained += 1;
288
- const owner = drained.records[index];
273
+ const owner = drained.records[index]!;
289
274
  // Raw ingress already attached one host permit to each record.
290
275
  // A claim that reserves admission here may receive only that permit's record.
291
- try {
292
- const capacity =
293
- owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
294
- for (;;) {
295
- let claimPermit =
296
- owner.terminalCompletion === true ||
297
- owner.ordinaryIngressPreAdmitted === true ||
298
- domain === ReadyDomain.Infrastructure
299
- ? undefined
300
- : await this.acquirePermit();
301
- try {
302
- if (this.capacityStop.signal.aborted) return false;
303
- receiveBatch.reset(capacity);
304
- const received = claim.recvBatch(receiveBatch, ZLINK_BACKEND_RECV_DONT_WAIT);
305
- if (!received.ok) break;
306
- // This owner keeps its claim while it drains. Other owners and
307
- // infrastructure may progress if one of its handlers suspends.
308
- if (domain === ReadyDomain.Infrastructure) {
309
- this.infrastructureScheduled = false;
310
- this.infrastructureDrainPromise = undefined;
311
- if ((this.pendingDomains & ReadyDomain.Infrastructure) !== 0) {
312
- this.scheduleInfrastructure();
313
- }
314
- }
276
+ const drainClaim = async () => {
277
+ let ownerReceiveBatch = receiveBatch;
278
+ try {
279
+ ownerReceiveBatch ??= this.node.createReceiveBatch(
280
+ MESH_DISPATCH_RECEIVE_CAPACITY,
281
+ this.options.partCapacity ?? DEFAULT_MESH_PART_CAPACITY
282
+ );
283
+ const capacity =
284
+ owner.ordinaryIngressPreAdmitted === true ? MESH_DISPATCH_RECEIVE_CAPACITY : 1;
285
+ for (;;) {
286
+ let claimPermit =
287
+ owner.terminalCompletion === true ||
288
+ owner.ordinaryIngressPreAdmitted === true ||
289
+ domain === ReadyDomain.Infrastructure
290
+ ? undefined
291
+ : await this.acquirePermit();
315
292
  try {
316
- for (const record of received.records) {
317
- if (this.disposed) break;
318
- const permit = record.applicationJobPermit ?? claimPermit;
319
- if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
320
- throw new Error(
321
- 'Pre-admitted raw ingress record lost its Application Job Queue permit.'
322
- );
323
- }
324
- this.recordsSinceYield += 1;
325
- const dispatch = async () => {
326
- try {
327
- await this.options.dispatch(drained.records[index], record);
328
- } catch (error) {
329
- throw new ZLinkMeshDispatchFailure(
330
- meshDispatchFailureContext(record),
331
- error
293
+ if (this.capacityStop.signal.aborted) return;
294
+ ownerReceiveBatch.reset(capacity);
295
+ const received = claim.recvBatch(ownerReceiveBatch, ZLINK_BACKEND_RECV_DONT_WAIT);
296
+ if (!received.ok) break;
297
+ // This owner keeps its claim while it drains, so its records stay in FIFO order.
298
+ try {
299
+ for (const record of received.records) {
300
+ if (this.disposed) break;
301
+ const permit = record.applicationJobPermit ?? claimPermit;
302
+ if (owner.ordinaryIngressPreAdmitted === true && permit === undefined) {
303
+ throw new Error(
304
+ 'Pre-admitted raw ingress record lost its Application Job Queue permit.'
332
305
  );
333
306
  }
334
- await record.onTerminalCompletion?.();
335
- };
336
- if (permit === undefined) {
337
- await dispatch();
338
- } else {
339
- if (
340
- domain === ReadyDomain.Application &&
341
- record.applicationJobPermit === undefined
342
- )
343
- permit.markApplicationQueued();
344
- // The scope now owns this reservation, including failure
345
- // and detached handler handoff. Only unused permits remain
346
- // owned by the receive attempt's finally block.
347
- if (permit === claimPermit) claimPermit = undefined;
348
- await runWithApplicationJobPermit(permit, dispatch);
307
+ this.recordsSinceYield += 1;
308
+ const dispatch = async () => {
309
+ try {
310
+ await this.options.dispatch(owner, record);
311
+ await record.onTerminalCompletion?.();
312
+ } catch (error) {
313
+ this.reportDispatchError(error, meshDispatchFailureContext(record));
314
+ }
315
+ };
316
+ if (permit === undefined) {
317
+ await dispatch();
318
+ } else {
319
+ if (
320
+ domain === ReadyDomain.Application &&
321
+ record.applicationJobPermit === undefined
322
+ )
323
+ permit.markApplicationQueued();
324
+ // The scope now owns this reservation, including failure
325
+ // and detached handler handoff. Only unused permits remain
326
+ // owned by the receive attempt's finally block.
327
+ if (permit === claimPermit) claimPermit = undefined;
328
+ await runWithApplicationJobPermit(permit, dispatch);
329
+ }
330
+ const yieldTurn = this.yieldIfNeeded();
331
+ if (yieldTurn !== undefined) await yieldTurn;
332
+ }
333
+ } finally {
334
+ // Batch ownership includes records whose dispatch never began,
335
+ // including on failure or shutdown in the middle of the batch.
336
+ for (const record of received.records) {
337
+ for (const part of record.parts) part.close();
338
+ record.releaseRetainedIngress?.();
349
339
  }
350
- const yieldTurn = this.yieldIfNeeded();
351
- if (yieldTurn !== undefined) await yieldTurn;
352
340
  }
353
341
  } finally {
354
- // Batch ownership includes records whose dispatch never began,
355
- // including on failure or shutdown in the middle of the batch.
356
- for (const record of received.records) {
357
- for (const part of record.parts) part.close();
358
- record.releaseRetainedIngress?.();
359
- }
342
+ claimPermit?.releaseAfterInternalProcessing();
360
343
  }
361
- } finally {
362
- claimPermit?.releaseAfterInternalProcessing();
363
344
  }
345
+ } finally {
346
+ claim.release();
347
+ if (receiveBatch === undefined) ownerReceiveBatch?.close();
364
348
  }
365
- } finally {
366
- claim.release();
349
+ };
350
+ // An application worker drains the one owner it claimed. Infrastructure owners
351
+ // drain independently, so a suspended owner does not hold the other claims.
352
+ if (receiveBatch !== undefined) {
353
+ await drainClaim();
354
+ } else {
355
+ const drain = drainClaim().catch((error) => this.reportDispatchError(error));
356
+ this.activeDrains.add(drain);
357
+ void drain.finally(() => this.activeDrains.delete(drain));
367
358
  }
368
359
  }
369
360
  if (claimBudget !== undefined && claimsDrained >= claimBudget) {
@@ -425,8 +416,11 @@ function meshDispatchFailureContext(record: ReceiveRecord): ZLinkMeshDispatchFai
425
416
  function serviceWireCommand(record: ReceiveRecord): number | undefined {
426
417
  if (record.parts.length !== 1) return undefined;
427
418
  const bytes = record.parts[0]!.data();
428
- return bytes.byteLength >= 5 && bytes[0] === 0x5a && bytes[1] === 0x4d && bytes[2] === 1
429
- ? bytes[3]
419
+ return bytes.byteLength >= SERVICE_WIRE_PREFIX_SIZE &&
420
+ bytes[0] === SERVICE_WIRE_MAGIC[0] &&
421
+ bytes[1] === SERVICE_WIRE_MAGIC[1] &&
422
+ bytes[SERVICE_WIRE_MAJOR_OFFSET] === SERVICE_WIRE_MAJOR
423
+ ? bytes[SERVICE_WIRE_COMMAND_OFFSET]
430
424
  : undefined;
431
425
  }
432
426