@zlink-systems/framework 0.30.0 → 0.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/LICENSE +150 -68
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
  4. package/dist/contracts/Channels/Calls.d.ts +2 -1
  5. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  6. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  7. package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
  8. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  9. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  10. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  16. package/dist/contracts/Handlers/Attributes.d.ts +5 -13
  17. package/dist/contracts/Handlers/Attributes.js +7 -11
  18. package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
  19. package/dist/contracts/Handlers/JsonContract.js +4 -153
  20. package/dist/contracts/Locations/Rows.d.ts +2 -0
  21. package/dist/contracts/Spots/Contracts.d.ts +6 -1
  22. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  23. package/dist/nest-integration.d.ts +1 -1
  24. package/dist/nest-integration.js +2 -1
  25. package/dist/runtime/abort.d.ts +5 -0
  26. package/dist/runtime/abort.js +10 -0
  27. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  28. package/dist/runtime/actors/actor-client.d.ts +1 -2
  29. package/dist/runtime/actors/actor-client.js +52 -57
  30. package/dist/runtime/actors/actor-context.d.ts +2 -0
  31. package/dist/runtime/actors/actor-context.js +46 -9
  32. package/dist/runtime/actors/actor-handoff.d.ts +8 -4
  33. package/dist/runtime/actors/actor-handoff.js +219 -92
  34. package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
  35. package/dist/runtime/actors/actor-local-native-join.js +13 -12
  36. package/dist/runtime/actors/actor-mailbox.js +27 -1
  37. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  38. package/dist/runtime/actors/actor-remote-wire.js +15 -0
  39. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  40. package/dist/runtime/actors/actor-reply.js +29 -0
  41. package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
  42. package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
  43. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  44. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  45. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  46. package/dist/runtime/actors/index.d.ts +8 -3
  47. package/dist/runtime/actors/index.js +55 -27
  48. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  49. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  50. package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
  51. package/dist/runtime/admission.d.ts +9 -1
  52. package/dist/runtime/admission.js +56 -23
  53. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
  54. package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
  55. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
  56. package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
  57. package/dist/runtime/application-jobs/contracts.d.ts +12 -1
  58. package/dist/runtime/backend/contracts/index.d.ts +37 -12
  59. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  60. package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
  61. package/dist/runtime/backend/mesh-completion-table.js +154 -49
  62. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
  63. package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
  64. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
  65. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
  66. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  67. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
  68. package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
  69. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
  70. package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
  71. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  72. package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
  73. package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
  74. package/dist/runtime/backend/runtime-message.d.ts +1 -0
  75. package/dist/runtime/backend/runtime-message.js +5 -0
  76. package/dist/runtime/backend/runtime-values.d.ts +1 -0
  77. package/dist/runtime/backend/runtime-values.js +2 -1
  78. package/dist/runtime/channels/channel-clients.d.ts +2 -0
  79. package/dist/runtime/channels/channel-clients.js +75 -23
  80. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
  81. package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
  82. package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
  83. package/dist/runtime/channels/channel-dispatch-services.js +45 -0
  84. package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
  85. package/dist/runtime/channels/channel-dispatchers.js +62 -54
  86. package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
  87. package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
  88. package/dist/runtime/channels/channel-envelope.d.ts +2 -0
  89. package/dist/runtime/channels/channel-envelope.js +146 -28
  90. package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
  91. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  94. package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
  95. package/dist/runtime/channels/channel-runtime-manager.js +16 -16
  96. package/dist/runtime/channels/channel-transports.d.ts +18 -16
  97. package/dist/runtime/channels/channel-transports.js +77 -58
  98. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  99. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  100. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  101. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  102. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  103. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  104. package/dist/runtime/channels/local-spot-route-transport.js +2 -1
  105. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
  106. package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
  107. package/dist/runtime/channels/source-spot-router.d.ts +2 -2
  108. package/dist/runtime/channels/source-spot-router.js +4 -4
  109. package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
  110. package/dist/runtime/channels/spot-node-route-transport.js +4 -4
  111. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
  112. package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
  113. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
  114. package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
  115. package/dist/runtime/diagnostics/flow-context.js +19 -7
  116. package/dist/runtime/diagnostics/index.js +4 -9
  117. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  118. package/dist/runtime/diagnostics/message-flow.js +35 -5
  119. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  120. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  121. package/dist/runtime/execution/index.d.ts +4 -2
  122. package/dist/runtime/execution/index.js +33 -10
  123. package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
  124. package/dist/runtime/execution/serial-execution-queue.js +22 -2
  125. package/dist/runtime/execution/state-lane.d.ts +2 -0
  126. package/dist/runtime/execution/state-lane.js +5 -0
  127. package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
  128. package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
  129. package/dist/runtime/foundation/durable-service-request.js +98 -0
  130. package/dist/runtime/foundation/operation-identity.d.ts +1 -0
  131. package/dist/runtime/foundation/operation-identity.js +5 -1
  132. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  133. package/dist/runtime/foundation/operation-registry.js +86 -18
  134. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
  135. package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
  136. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  137. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  138. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  139. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  140. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
  141. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
  142. package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
  143. package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
  144. package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
  145. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  146. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  147. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  148. package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
  149. package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
  150. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
  151. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  152. package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
  153. package/dist/runtime/foundation/service-topology-registry.js +61 -27
  154. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  155. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  156. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  157. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  158. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
  159. package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
  160. package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
  161. package/dist/runtime/handlers/handler-instance-scope.js +54 -11
  162. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  163. package/dist/runtime/host/actor-packet-relay.js +59 -72
  164. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  165. package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
  166. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  167. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  168. package/dist/runtime/host/application-job-queue.d.ts +40 -7
  169. package/dist/runtime/host/application-job-queue.js +137 -42
  170. package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
  171. package/dist/runtime/host/entry-actor-runtime.js +3 -0
  172. package/dist/runtime/host/index.d.ts +12 -2
  173. package/dist/runtime/host/index.js +300 -202
  174. package/dist/runtime/host/location-runtime-owner.js +2 -6
  175. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  176. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  177. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  178. package/dist/runtime/host/remote-bound-session-relay.js +73 -208
  179. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  180. package/dist/runtime/host/route-mesh-runtime.js +6 -4
  181. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  182. package/dist/runtime/host/runtime-shutdown.js +3 -2
  183. package/dist/runtime/host/service-relocation-control.d.ts +1 -0
  184. package/dist/runtime/host/service-relocation-control.js +10 -4
  185. package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
  186. package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
  187. package/dist/runtime/host/spot-address-transport.js +3 -2
  188. package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
  189. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  190. package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
  191. package/dist/runtime/locations/actor-location-claims.js +34 -19
  192. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  193. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  194. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  195. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  196. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  197. package/dist/runtime/locations/descriptor-publication.js +11 -0
  198. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  199. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  200. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  201. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  202. package/dist/runtime/locations/index.d.ts +1 -0
  203. package/dist/runtime/locations/index.js +1 -0
  204. package/dist/runtime/locations/lease-tracker.js +1 -6
  205. package/dist/runtime/locations/lifecycle.d.ts +1 -2
  206. package/dist/runtime/locations/lifecycle.js +2 -5
  207. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  208. package/dist/runtime/locations/location-store-repository.js +363 -139
  209. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  210. package/dist/runtime/locations/relocation-blob.js +52 -1
  211. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  212. package/dist/runtime/locations/request-source-resolver.js +80 -0
  213. package/dist/runtime/locations/resolvers.js +1 -1
  214. package/dist/runtime/locations/runtime.d.ts +7 -3
  215. package/dist/runtime/locations/runtime.js +61 -53
  216. package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
  217. package/dist/runtime/messaging/framework-json-v1.js +38 -294
  218. package/dist/runtime/messaging/packet-name.d.ts +1 -1
  219. package/dist/runtime/messaging/packet-name.js +8 -24
  220. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  221. package/dist/runtime/messaging/payload-codec.js +7 -6
  222. package/dist/runtime/messaging/request-result.d.ts +2 -0
  223. package/dist/runtime/messaging/request-result.js +57 -0
  224. package/dist/runtime/messaging/submission-result.d.ts +1 -0
  225. package/dist/runtime/messaging/submission-result.js +5 -2
  226. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
  227. package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
  228. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
  229. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
  230. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
  231. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
  232. package/dist/runtime/spots/index.d.ts +21 -11
  233. package/dist/runtime/spots/index.js +243 -178
  234. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  235. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  236. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  237. package/dist/runtime/spots/spot-activation-state.js +7 -7
  238. package/dist/runtime/spots/spot-activation.d.ts +7 -3
  239. package/dist/runtime/spots/spot-activation.js +140 -52
  240. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  241. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  242. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  243. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  244. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  245. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  246. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  247. package/dist/runtime/spots/spot-entry-activation.js +20 -11
  248. package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
  249. package/dist/runtime/spots/spot-handler-registry.js +24 -10
  250. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  251. package/dist/runtime/spots/spot-manager-public.js +2 -2
  252. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  253. package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
  254. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  255. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  256. package/dist/runtime/spots/spot-outbound.d.ts +3 -0
  257. package/dist/runtime/spots/spot-outbound.js +27 -18
  258. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  259. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
  260. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
  261. package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
  262. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  263. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  264. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  265. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
  266. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  267. package/dist/runtime/spots/spot-timer.js +288 -103
  268. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  269. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  270. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  271. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  272. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  273. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  274. package/dist/runtime/streams/bound-session-service.js +6 -11
  275. package/dist/runtime/streams/index.d.ts +3 -2
  276. package/dist/runtime/streams/index.js +6 -4
  277. package/dist/runtime/streams/managed-stream.js +3 -2
  278. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  279. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  280. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  281. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  282. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
  283. package/dist/runtime/streams/stream-session-runtime.js +14 -31
  284. package/dist/runtime/workers/index.js +1 -1
  285. package/package.json +3 -3
  286. package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
  287. package/src/contracts/Channels/Calls.ts +2 -1
  288. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  289. package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
  290. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  291. package/src/contracts/Configuration/Builders.ts +4 -1
  292. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  293. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  294. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  295. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  296. package/src/contracts/Handlers/Attributes.ts +14 -21
  297. package/src/contracts/Handlers/JsonContract.ts +8 -216
  298. package/src/contracts/Locations/Rows.ts +2 -0
  299. package/src/contracts/Spots/Contracts.ts +10 -1
  300. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  301. package/src/nest-integration.ts +1 -0
  302. package/src/runtime/abort.ts +12 -0
  303. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  304. package/src/runtime/actors/actor-client.ts +100 -85
  305. package/src/runtime/actors/actor-context.ts +49 -9
  306. package/src/runtime/actors/actor-handoff.ts +291 -110
  307. package/src/runtime/actors/actor-join-relocation.ts +3 -0
  308. package/src/runtime/actors/actor-local-native-join.ts +21 -26
  309. package/src/runtime/actors/actor-mailbox.ts +40 -2
  310. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  311. package/src/runtime/actors/actor-remote-wire.ts +17 -0
  312. package/src/runtime/actors/actor-reply.ts +42 -0
  313. package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
  314. package/src/runtime/actors/actor-routed-json-request.ts +10 -2
  315. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  316. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  317. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  318. package/src/runtime/actors/index.ts +60 -32
  319. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  320. package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
  321. package/src/runtime/admission.ts +69 -21
  322. package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
  323. package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
  324. package/src/runtime/application-jobs/contracts.ts +16 -1
  325. package/src/runtime/backend/contracts/index.ts +92 -18
  326. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  327. package/src/runtime/backend/mesh-completion-table.ts +160 -57
  328. package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
  329. package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
  330. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
  331. package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
  332. package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
  333. package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
  334. package/src/runtime/backend/raw-binding-port.ts +7 -2
  335. package/src/runtime/backend/runtime-message.ts +6 -0
  336. package/src/runtime/backend/runtime-values.ts +1 -0
  337. package/src/runtime/channels/channel-clients.ts +132 -58
  338. package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
  339. package/src/runtime/channels/channel-dispatch-services.ts +69 -1
  340. package/src/runtime/channels/channel-dispatchers.ts +136 -90
  341. package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
  342. package/src/runtime/channels/channel-envelope.ts +225 -31
  343. package/src/runtime/channels/channel-outbound-operations.ts +22 -8
  344. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  345. package/src/runtime/channels/channel-runtime-manager.ts +41 -17
  346. package/src/runtime/channels/channel-transports.ts +171 -112
  347. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  348. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  349. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  350. package/src/runtime/channels/local-spot-route-transport.ts +3 -1
  351. package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
  352. package/src/runtime/channels/source-spot-router.ts +8 -4
  353. package/src/runtime/channels/spot-node-route-transport.ts +8 -4
  354. package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
  355. package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
  356. package/src/runtime/diagnostics/flow-context.ts +20 -7
  357. package/src/runtime/diagnostics/index.ts +1 -7
  358. package/src/runtime/diagnostics/message-flow.ts +47 -9
  359. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  360. package/src/runtime/execution/index.ts +40 -14
  361. package/src/runtime/execution/serial-execution-queue.ts +33 -4
  362. package/src/runtime/execution/state-lane.ts +7 -0
  363. package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
  364. package/src/runtime/foundation/durable-service-request.ts +137 -0
  365. package/src/runtime/foundation/operation-identity.ts +5 -1
  366. package/src/runtime/foundation/operation-registry.ts +98 -20
  367. package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
  368. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  369. package/src/runtime/foundation/service-mailbox.ts +8 -0
  370. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  371. package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
  372. package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
  373. package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
  374. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  375. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  376. package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
  377. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
  378. package/src/runtime/foundation/service-topology-registry.ts +91 -36
  379. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  380. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  381. package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
  382. package/src/runtime/handlers/handler-instance-scope.ts +67 -16
  383. package/src/runtime/host/actor-packet-relay.ts +113 -94
  384. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  385. package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
  386. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  387. package/src/runtime/host/application-job-queue.ts +160 -41
  388. package/src/runtime/host/entry-actor-runtime.ts +4 -0
  389. package/src/runtime/host/index.ts +473 -271
  390. package/src/runtime/host/location-runtime-owner.ts +2 -6
  391. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  392. package/src/runtime/host/remote-bound-session-relay.ts +88 -271
  393. package/src/runtime/host/route-mesh-runtime.ts +12 -6
  394. package/src/runtime/host/runtime-shutdown.ts +15 -4
  395. package/src/runtime/host/service-relocation-control.ts +11 -5
  396. package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
  397. package/src/runtime/host/spot-address-transport.ts +4 -2
  398. package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
  399. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  400. package/src/runtime/locations/actor-location-claims.ts +52 -30
  401. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  402. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  403. package/src/runtime/locations/auto-connect-types.ts +0 -1
  404. package/src/runtime/locations/descriptor-publication.ts +7 -0
  405. package/src/runtime/locations/domain-store-contract.ts +5 -0
  406. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  407. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  408. package/src/runtime/locations/index.ts +1 -0
  409. package/src/runtime/locations/lease-tracker.ts +2 -9
  410. package/src/runtime/locations/lifecycle.ts +8 -26
  411. package/src/runtime/locations/location-store-repository.ts +628 -152
  412. package/src/runtime/locations/relocation-blob.ts +75 -1
  413. package/src/runtime/locations/request-source-resolver.ts +138 -0
  414. package/src/runtime/locations/resolvers.ts +2 -2
  415. package/src/runtime/locations/runtime.ts +98 -64
  416. package/src/runtime/messaging/framework-json-v1.ts +5 -325
  417. package/src/runtime/messaging/packet-name.ts +5 -25
  418. package/src/runtime/messaging/payload-codec.ts +8 -11
  419. package/src/runtime/messaging/request-result.ts +62 -0
  420. package/src/runtime/messaging/submission-result.ts +5 -1
  421. package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
  422. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
  423. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
  424. package/src/runtime/spots/index.ts +389 -283
  425. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  426. package/src/runtime/spots/spot-activation-state.ts +12 -19
  427. package/src/runtime/spots/spot-activation.ts +198 -96
  428. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  429. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  430. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  431. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  432. package/src/runtime/spots/spot-entry-activation.ts +33 -21
  433. package/src/runtime/spots/spot-handler-registry.ts +56 -12
  434. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  435. package/src/runtime/spots/spot-manager-public.ts +2 -2
  436. package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
  437. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  438. package/src/runtime/spots/spot-outbound.ts +39 -19
  439. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  440. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
  441. package/src/runtime/spots/spot-runtime-ports.ts +1 -1
  442. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  443. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  444. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
  445. package/src/runtime/spots/spot-timer.ts +418 -158
  446. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  447. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  448. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  449. package/src/runtime/streams/bound-session-service.ts +7 -10
  450. package/src/runtime/streams/index.ts +12 -6
  451. package/src/runtime/streams/managed-stream.ts +4 -2
  452. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  453. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  454. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  455. package/src/runtime/streams/stream-session-runtime.ts +13 -34
  456. package/src/runtime/workers/index.ts +1 -1
@@ -12,6 +12,7 @@ import {
12
12
  import { ZLinkBufferMessage } from '../backend/runtime-message';
13
13
  import {
14
14
  RequestResult,
15
+ ZLINK_BACKEND_SEND_DONT_WAIT,
15
16
  isZLinkBackendResultError,
16
17
  type ZLinkBackendMessageLike as MessageLike
17
18
  } from '../backend/runtime-values';
@@ -61,6 +62,8 @@ import {
61
62
  type ZLinkChannelEnvelopeCodecRegistry
62
63
  } from './channel-envelope';
63
64
 
65
+ const NON_BLOCKING_SEND_OPTIONS = Object.freeze({ flags: ZLINK_BACKEND_SEND_DONT_WAIT });
66
+
64
67
  export interface ZLinkChannelClientTransport {
65
68
  send(
66
69
  channelName: string,
@@ -74,7 +77,8 @@ export interface ZLinkChannelClientTransport {
74
77
  request: unknown,
75
78
  timeoutMs: number | undefined,
76
79
  signal?: AbortSignal,
77
- metadata?: ReadonlyMap<string, string>
80
+ metadata?: ReadonlyMap<string, string>,
81
+ onAdmitted?: () => void
78
82
  ): Promise<TReply>;
79
83
  tryPublish?(
80
84
  channelName: string,
@@ -131,7 +135,8 @@ export interface ZLinkRouteClientTransport {
131
135
  request: unknown,
132
136
  timeoutMs: number | undefined,
133
137
  signal?: AbortSignal,
134
- metadata?: ReadonlyMap<string, string>
138
+ metadata?: ReadonlyMap<string, string>,
139
+ onAdmitted?: () => void
135
140
  ): Promise<TReply>;
136
141
  submitToChannel(
137
142
  meshName: string,
@@ -147,7 +152,8 @@ export interface ZLinkRouteClientTransport {
147
152
  request: unknown,
148
153
  timeoutMs: number | undefined,
149
154
  signal?: AbortSignal,
150
- metadata?: ReadonlyMap<string, string>
155
+ metadata?: ReadonlyMap<string, string>,
156
+ onAdmitted?: () => void
151
157
  ): Promise<TReply>;
152
158
  sendToSpot?(
153
159
  spotRouteTarget: ZLinkSpotRouteTarget,
@@ -164,6 +170,7 @@ export interface ZLinkRouteClientTransport {
164
170
  readonly packetName?: string;
165
171
  readonly timeoutMs?: number;
166
172
  readonly signal?: AbortSignal;
173
+ readonly onAdmitted?: () => void;
167
174
  readonly metadata?: ReadonlyMap<string, string>;
168
175
  }
169
176
  ): Promise<TReply>;
@@ -182,7 +189,8 @@ interface ZLinkChannelTransportRuntime {
182
189
  request: unknown,
183
190
  timeoutMs: number | undefined,
184
191
  signal?: AbortSignal,
185
- metadata?: ReadonlyMap<string, string>
192
+ metadata?: ReadonlyMap<string, string>,
193
+ onAdmitted?: () => void
186
194
  ): Promise<TReply>;
187
195
  tryPublish(
188
196
  channelName: string,
@@ -215,7 +223,8 @@ interface ZLinkChannelTransportRuntime {
215
223
  request: unknown,
216
224
  timeoutMs: number | undefined,
217
225
  signal?: AbortSignal,
218
- metadata?: ReadonlyMap<string, string>
226
+ metadata?: ReadonlyMap<string, string>,
227
+ onAdmitted?: () => void
219
228
  ): Promise<TReply>;
220
229
  routeSendToSpot(
221
230
  spotRouteTarget: ZLinkSpotRouteTarget,
@@ -236,7 +245,8 @@ interface ZLinkChannelTransportRuntime {
236
245
  request: unknown,
237
246
  timeoutMs: number | undefined,
238
247
  signal?: AbortSignal,
239
- metadata?: ReadonlyMap<string, string>
248
+ metadata?: ReadonlyMap<string, string>,
249
+ onAdmitted?: () => void
240
250
  ): Promise<TReply>;
241
251
  routeRequestFromSpotToSpot<TReply>(
242
252
  sourceSpot: ZLinkBackendSpot,
@@ -244,20 +254,23 @@ interface ZLinkChannelTransportRuntime {
244
254
  packetName: string | undefined,
245
255
  request: unknown,
246
256
  timeoutMs: number | undefined,
247
- signal?: AbortSignal
257
+ signal?: AbortSignal,
258
+ onAdmitted?: () => void
248
259
  ): Promise<TReply>;
249
260
  routeRequestRawFromSpotToSpot(
250
261
  sourceSpot: ZLinkBackendSpot,
251
262
  spotRouteTarget: ZLinkSpotRouteTarget,
252
263
  request: Message,
253
264
  timeoutMs: number | undefined,
254
- signal?: AbortSignal
265
+ signal?: AbortSignal,
266
+ onAdmitted?: () => void
255
267
  ): Promise<readonly Message[]>;
256
268
  routeRequestRawToSpot(
257
269
  spotRouteTarget: ZLinkSpotRouteTarget,
258
270
  request: Message,
259
271
  timeoutMs: number | undefined,
260
- signal?: AbortSignal
272
+ signal?: AbortSignal,
273
+ onAdmitted?: () => void
261
274
  ): Promise<readonly Message[]>;
262
275
  }
263
276
 
@@ -269,7 +282,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
269
282
  private readonly meshRuntime:
270
283
  | (() =>
271
284
  | {
272
- readonly meshNode: (meshName: string) => ZLinkBackendMeshNode | undefined;
285
+ readonly meshNode?: (meshName: string) => ZLinkBackendMeshNode | undefined;
273
286
  readonly meshCompletionTable: (
274
287
  meshName: string
275
288
  ) => ZLinkMeshCompletionTable | undefined;
@@ -307,40 +320,44 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
307
320
  );
308
321
  }
309
322
 
310
- async submit(
323
+ submit(
311
324
  meshName: string,
312
325
  targetNodeRid: string,
313
326
  packetName: string | undefined,
314
327
  message: unknown,
315
328
  metadata?: ReadonlyMap<string, string>
316
- ): Promise<ZLinkSubmitResult> {
329
+ ): ZLinkSubmitResult | Promise<ZLinkSubmitResult> {
317
330
  // Call-scoped flow (spec 27 §4): the envelope flow pair lives only for
318
331
  // the duration of this outbound call, never in the caller's context.
319
- return runWithOutboundFlow(this.flowCreationEnabled(), () =>
332
+ if (!this.flowCreationEnabled())
333
+ return this.submitNode(meshName, targetNodeRid, packetName, message, metadata, false);
334
+ return runWithOutboundFlow(true, () =>
320
335
  this.submitNode(meshName, targetNodeRid, packetName, message, metadata, false)
321
336
  );
322
337
  }
323
338
 
324
- async submitInfrastructure(
339
+ submitInfrastructure(
325
340
  meshName: string,
326
341
  targetNodeRid: string,
327
342
  packetName: string | undefined,
328
343
  message: unknown,
329
344
  metadata?: ReadonlyMap<string, string>
330
- ): Promise<ZLinkSubmitResult> {
331
- return runWithOutboundFlow(this.flowCreationEnabled(), () =>
345
+ ): ZLinkSubmitResult | Promise<ZLinkSubmitResult> {
346
+ if (!this.flowCreationEnabled())
347
+ return this.submitNode(meshName, targetNodeRid, packetName, message, metadata, true);
348
+ return runWithOutboundFlow(true, () =>
332
349
  this.submitNode(meshName, targetNodeRid, packetName, message, metadata, true)
333
350
  );
334
351
  }
335
352
 
336
- private async submitNode(
353
+ private submitNode(
337
354
  meshName: string,
338
355
  targetNodeRid: string,
339
356
  packetName: string | undefined,
340
357
  message: unknown,
341
358
  metadata: ReadonlyMap<string, string> | undefined,
342
359
  allowObjectClientTarget: boolean
343
- ): Promise<ZLinkSubmitResult> {
360
+ ): ZLinkSubmitResult | Promise<ZLinkSubmitResult> {
344
361
  const node = this.meshNode(meshName);
345
362
  if (node === undefined) {
346
363
  return this.requireManager().routeSubmit(
@@ -365,22 +382,33 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
365
382
  undefined,
366
383
  metadata
367
384
  );
368
- const operation = `MeshNode '${meshName}' send to node '${targetNodeRid}'`;
369
- if (this.isSelfNode(node, targetNodeRid)) {
370
- return this.submitLocalNode(meshName, String(node.status().routingId), parts);
385
+ const sourceNodeRid =
386
+ node.routingId ?? (node.status().routingId as unknown as import('../../contracts').RoutingId);
387
+ if (routingIdsEqual(sourceNodeRid, targetNodeRid)) {
388
+ return this.submitLocalNode(meshName, String(sourceNodeRid), parts);
371
389
  }
372
390
  if (
373
- !this.isKnownBackendPeer(node, targetNodeRid) &&
374
- this.manualNodeTarget?.(meshName, targetNodeRid) === false
391
+ this.manualNodeTarget?.(meshName, targetNodeRid) === false &&
392
+ !this.isKnownBackendPeer(node, targetNodeRid)
375
393
  ) {
376
394
  return { status: ZLinkSubmitStatus.TargetNotFound };
377
395
  }
378
396
  try {
379
- return mapMeshSubmitResult(
380
- await node.sendToNode(toBackendRoutingId(targetNodeRid), parts, { flags: 1 })
397
+ const submitted = node.sendToNode(
398
+ toBackendRoutingId(targetNodeRid),
399
+ parts,
400
+ NON_BLOCKING_SEND_OPTIONS
381
401
  );
402
+ return submitted instanceof Promise
403
+ ? submitted.then(mapMeshSubmitResult, (error) => {
404
+ throw mapMeshSubmissionError(
405
+ error,
406
+ `MeshNode '${meshName}' send to node '${targetNodeRid}'`
407
+ );
408
+ })
409
+ : mapMeshSubmitResult(submitted);
382
410
  } catch (error) {
383
- throw mapMeshSubmissionError(error, operation);
411
+ throw mapMeshSubmissionError(error, `MeshNode '${meshName}' send to node '${targetNodeRid}'`);
384
412
  }
385
413
  }
386
414
 
@@ -391,9 +419,21 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
391
419
  request: unknown,
392
420
  timeoutMs: number | undefined,
393
421
  signal?: AbortSignal,
394
- metadata?: ReadonlyMap<string, string>
422
+ metadata?: ReadonlyMap<string, string>,
423
+ onAdmitted?: () => void
395
424
  ): Promise<TReply> {
396
- return runWithOutboundFlow(this.flowCreationEnabled(), () =>
425
+ if (!this.flowCreationEnabled())
426
+ return this.requestScoped<TReply>(
427
+ meshName,
428
+ targetNodeRid,
429
+ packetName,
430
+ request,
431
+ timeoutMs,
432
+ signal,
433
+ metadata,
434
+ onAdmitted
435
+ );
436
+ return runWithOutboundFlow(true, () =>
397
437
  this.requestScoped<TReply>(
398
438
  meshName,
399
439
  targetNodeRid,
@@ -401,7 +441,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
401
441
  request,
402
442
  timeoutMs,
403
443
  signal,
404
- metadata
444
+ metadata,
445
+ onAdmitted
405
446
  )
406
447
  );
407
448
  }
@@ -413,7 +454,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
413
454
  request: unknown,
414
455
  timeoutMs: number | undefined,
415
456
  signal?: AbortSignal,
416
- metadata?: ReadonlyMap<string, string>
457
+ metadata?: ReadonlyMap<string, string>,
458
+ onAdmitted?: () => void
417
459
  ): Promise<TReply> {
418
460
  const node = this.meshNode(meshName);
419
461
  if (node === undefined) {
@@ -424,7 +466,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
424
466
  request,
425
467
  timeoutMs,
426
468
  signal,
427
- metadata
469
+ metadata,
470
+ onAdmitted
428
471
  );
429
472
  }
430
473
  const correlationId = newChannelCorrelationId();
@@ -445,16 +488,15 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
445
488
  metadata,
446
489
  correlationId
447
490
  );
448
- const completion = await this.submitRequestOperation(
449
- meshName,
450
- timeoutMs,
451
- signal,
452
- `MeshNode '${meshName}' request to node '${targetNodeRid}'`,
453
- (remainingTimeoutMs) => {
454
- const operationId = node.requestToNode(toBackendRoutingId(targetNodeRid), parts, {
455
- flags: 1,
456
- timeoutMs: remainingTimeoutMs
457
- });
491
+ const requestOptions = { flags: 1, onAdmitted, timeoutMs: requestTimeoutBudget(timeoutMs) };
492
+ let completion: ZLinkMeshCompletion;
493
+ try {
494
+ completion = await this.completionTable(meshName).submit(() => {
495
+ const operationId = node.requestToNode(
496
+ toBackendRoutingId(targetNodeRid),
497
+ parts,
498
+ requestOptions
499
+ );
458
500
  this.traceNodeRequest(
459
501
  ZLinkMessageFlowOutcome.Sent,
460
502
  undefined,
@@ -464,8 +506,13 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
464
506
  correlationId
465
507
  );
466
508
  return operationId;
467
- }
468
- );
509
+ }, signal);
510
+ } catch (error) {
511
+ throw mapMeshSubmissionError(
512
+ error,
513
+ `MeshNode '${meshName}' request to node '${targetNodeRid}'`
514
+ );
515
+ }
469
516
  const reply = this.decodeMeshReply<TReply>(meshName, completion);
470
517
  this.traceNodeRequest(
471
518
  ZLinkMessageFlowOutcome.ReplyReceived,
@@ -546,7 +593,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
546
593
  const operation = `MeshNode '${meshName}' send to channel '${channelName}'`;
547
594
  try {
548
595
  const result = mapMeshSubmitResult(
549
- await node.sendToChannel(channelName, parts, { flags: 1 })
596
+ await node.sendToChannel(channelName, parts, NON_BLOCKING_SEND_OPTIONS)
550
597
  );
551
598
  if (result.status === ZLinkSubmitStatus.TargetNotFound) {
552
599
  this.metrics?.recordChannelSelectionFailure(meshName, channelName, 'no_ready_target');
@@ -564,9 +611,21 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
564
611
  request: unknown,
565
612
  timeoutMs: number | undefined,
566
613
  signal?: AbortSignal,
567
- metadata?: ReadonlyMap<string, string>
614
+ metadata?: ReadonlyMap<string, string>,
615
+ onAdmitted?: () => void
568
616
  ): Promise<TReply> {
569
- return runWithOutboundFlow(this.flowCreationEnabled(), () =>
617
+ if (!this.flowCreationEnabled())
618
+ return this.requestToChannelScoped<TReply>(
619
+ meshName,
620
+ channelName,
621
+ packetName,
622
+ request,
623
+ timeoutMs,
624
+ signal,
625
+ metadata,
626
+ onAdmitted
627
+ );
628
+ return runWithOutboundFlow(true, () =>
570
629
  this.requestToChannelScoped<TReply>(
571
630
  meshName,
572
631
  channelName,
@@ -574,7 +633,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
574
633
  request,
575
634
  timeoutMs,
576
635
  signal,
577
- metadata
636
+ metadata,
637
+ onAdmitted
578
638
  )
579
639
  );
580
640
  }
@@ -586,7 +646,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
586
646
  request: unknown,
587
647
  timeoutMs: number | undefined,
588
648
  signal?: AbortSignal,
589
- metadata?: ReadonlyMap<string, string>
649
+ metadata?: ReadonlyMap<string, string>,
650
+ onAdmitted?: () => void
590
651
  ): Promise<TReply> {
591
652
  throwIfAborted(signal);
592
653
  const node = this.requireMeshNode(meshName);
@@ -600,54 +661,34 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
600
661
  );
601
662
  const metric = this.metrics?.startRequest(meshName, 'channel');
602
663
  try {
603
- const completion = await this.submitRequestOperation(
604
- meshName,
605
- timeoutMs,
606
- signal,
607
- `MeshNode '${meshName}' request to channel '${channelName}'`,
608
- (remainingTimeoutMs) =>
609
- node.requestToChannel(channelName, parts, { flags: 1, timeoutMs: remainingTimeoutMs })
610
- );
664
+ const requestOptions = { flags: 1, timeoutMs: requestTimeoutBudget(timeoutMs), onAdmitted };
665
+ let completion: ZLinkMeshCompletion;
666
+ try {
667
+ completion = await this.completionTable(meshName).submit(
668
+ () => node.requestToChannel(channelName, parts, requestOptions),
669
+ signal
670
+ );
671
+ } catch (error) {
672
+ throw mapMeshSubmissionError(
673
+ error,
674
+ `MeshNode '${meshName}' request to channel '${channelName}'`
675
+ );
676
+ }
611
677
  const reply = this.decodeMeshReply<TReply>(meshName, completion);
612
678
  metric?.complete('completed');
613
679
  return reply;
614
680
  } catch (error) {
615
- metric?.complete(requestMetricOutcome(error));
616
- if (requestMetricOutcome(error) === 'target_not_found') {
681
+ metric?.complete(requestMetricOutcome(error, signal));
682
+ if (
683
+ error instanceof ZLinkFrameworkException &&
684
+ internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound
685
+ ) {
617
686
  this.metrics?.recordChannelSelectionFailure(meshName, channelName, 'no_ready_target');
618
687
  }
619
688
  throw error;
620
689
  }
621
690
  }
622
691
 
623
- private async submitRequestOperation(
624
- meshName: string,
625
- timeoutMs: number | undefined,
626
- signal: AbortSignal | undefined,
627
- operation: string,
628
- attempt: (
629
- remainingTimeoutMs: number
630
- ) => ReturnType<Parameters<ZLinkMeshCompletionTable['submit']>[0]>
631
- ): Promise<ZLinkMeshCompletion> {
632
- const effectiveTimeoutMs = Math.max(1, timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS);
633
- const deadlineMs = performance.now() + effectiveTimeoutMs;
634
- const remainingTimeoutMs = deadlineMs - performance.now();
635
- if (remainingTimeoutMs <= 0) {
636
- throw createInternalFrameworkException(
637
- ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
638
- `${operation} timed out before submission.`
639
- );
640
- }
641
- try {
642
- return await this.completionTable(meshName).submit(
643
- () => attempt(Math.max(1, Math.ceil(remainingTimeoutMs))),
644
- signal
645
- );
646
- } catch (error) {
647
- throw mapMeshSubmissionError(error, operation);
648
- }
649
- }
650
-
651
692
  sendToSpot(
652
693
  spotRouteTarget: ZLinkSpotRouteTarget,
653
694
  message: unknown,
@@ -767,7 +808,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
767
808
  request,
768
809
  options.timeoutMs,
769
810
  options.signal,
770
- options.metadata
811
+ options.metadata,
812
+ options.onAdmitted
771
813
  );
772
814
  }
773
815
  throwIfAborted(options.signal);
@@ -790,7 +832,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
790
832
  options.timeoutMs,
791
833
  undefined,
792
834
  options.metadata,
793
- options.instanceSpot
835
+ options.instanceSpot,
836
+ options.onAdmitted
794
837
  )
795
838
  : node
796
839
  .entrySpot()
@@ -801,6 +844,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
801
844
  encoded,
802
845
  {
803
846
  flags: 1,
847
+ onAdmitted: options.onAdmitted,
804
848
  timeoutMs: options.timeoutMs,
805
849
  routeFence: directSpotRouteFence(spotRouteTarget),
806
850
  entrySpot: spotRouteTarget.spotKind === ZLinkSpotKind.Entry
@@ -825,6 +869,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
825
869
  readonly packetName?: string;
826
870
  readonly timeoutMs?: number;
827
871
  readonly signal?: AbortSignal;
872
+ readonly onAdmitted?: () => void;
828
873
  }
829
874
  ): Promise<TReply> {
830
875
  return this.requireManager().routeRequestFromSpotToSpot<TReply>(
@@ -833,7 +878,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
833
878
  options.packetName,
834
879
  request,
835
880
  options.timeoutMs,
836
- options.signal
881
+ options.signal,
882
+ options.onAdmitted
837
883
  );
838
884
  }
839
885
 
@@ -841,21 +887,30 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
841
887
  sourceSpot: ZLinkBackendSpot,
842
888
  spotRouteTarget: ZLinkSpotRouteTarget,
843
889
  request: Message,
844
- options: { readonly timeoutMs?: number; readonly signal?: AbortSignal }
890
+ options: {
891
+ readonly timeoutMs?: number;
892
+ readonly signal?: AbortSignal;
893
+ readonly onAdmitted?: () => void;
894
+ }
845
895
  ): Promise<readonly Message[]> {
846
896
  return this.requireManager().routeRequestRawFromSpotToSpot(
847
897
  sourceSpot,
848
898
  spotRouteTarget,
849
899
  request,
850
900
  options.timeoutMs,
851
- options.signal
901
+ options.signal,
902
+ options.onAdmitted
852
903
  );
853
904
  }
854
905
 
855
906
  requestRawToSpot(
856
907
  spotRouteTarget: ZLinkSpotRouteTarget,
857
908
  request: Message,
858
- options: { readonly timeoutMs?: number; readonly signal?: AbortSignal }
909
+ options: {
910
+ readonly timeoutMs?: number;
911
+ readonly signal?: AbortSignal;
912
+ readonly onAdmitted?: () => void;
913
+ }
859
914
  ): Promise<readonly Message[]> {
860
915
  return runWithOutboundFlow(this.flowCreationEnabled(), () =>
861
916
  this.requestRawToSpotScoped(spotRouteTarget, request, options)
@@ -865,7 +920,11 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
865
920
  private async requestRawToSpotScoped(
866
921
  spotRouteTarget: ZLinkSpotRouteTarget,
867
922
  request: Message,
868
- options: { readonly timeoutMs?: number; readonly signal?: AbortSignal }
923
+ options: {
924
+ readonly timeoutMs?: number;
925
+ readonly signal?: AbortSignal;
926
+ readonly onAdmitted?: () => void;
927
+ }
869
928
  ): Promise<readonly Message[]> {
870
929
  const meshName = spotRouteTarget.routerChannelId;
871
930
  const node = this.meshNode(meshName);
@@ -893,6 +952,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
893
952
  parts,
894
953
  {
895
954
  flags: 1,
955
+ onAdmitted: options.onAdmitted,
896
956
  timeoutMs: options.timeoutMs,
897
957
  routeFence: directSpotRouteFence(spotRouteTarget),
898
958
  entrySpot: spotRouteTarget.spotKind === ZLinkSpotKind.Entry
@@ -925,7 +985,8 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
925
985
  spotRouteTarget,
926
986
  request,
927
987
  options.timeoutMs,
928
- options.signal
988
+ options.signal,
989
+ options.onAdmitted
929
990
  );
930
991
  }
931
992
 
@@ -938,21 +999,7 @@ export class ZLinkRuntimeRouteTransport implements ZLinkRouteClientTransport {
938
999
  }
939
1000
 
940
1001
  private meshNode(meshName: string): ZLinkBackendMeshNode | undefined {
941
- const runtime = this.meshRuntime?.();
942
- return (
943
- runtime as unknown as
944
- | {
945
- meshNode?: (meshName: string) => ZLinkBackendMeshNode | undefined;
946
- }
947
- | undefined
948
- )?.meshNode?.(meshName);
949
- }
950
-
951
- private isSelfNode(node: ZLinkBackendMeshNode, targetNodeRid: string): boolean {
952
- return routingIdsEqual(
953
- node.status().routingId as unknown as import('../../contracts').RoutingId,
954
- targetNodeRid
955
- );
1002
+ return this.meshRuntime?.()?.meshNode?.(meshName);
956
1003
  }
957
1004
 
958
1005
  private isKnownBackendPeer(node: ZLinkBackendMeshNode, targetNodeRid: string): boolean {
@@ -1101,6 +1148,14 @@ function instanceSpotRouteFence(target: ZLinkSpotRouteTarget): ServiceInstanceRo
1101
1148
  };
1102
1149
  }
1103
1150
 
1151
+ /**
1152
+ * The binding request timeout for one submission. The binding owns the
1153
+ * deadline after submit; the completion table slot only waits for it.
1154
+ */
1155
+ function requestTimeoutBudget(timeoutMs: number | undefined): number {
1156
+ return Math.max(1, Math.ceil(timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS));
1157
+ }
1158
+
1104
1159
  function mapMeshSubmitResult(result: number): ZLinkSubmitResult {
1105
1160
  return classifySubmitResult(result, 'Mesh submission');
1106
1161
  }
@@ -1192,14 +1247,18 @@ export function meshRequestFailure(
1192
1247
  return error;
1193
1248
  }
1194
1249
 
1195
- function requestMetricOutcome(error: unknown): string {
1250
+ function requestMetricOutcome(error: unknown, signal?: AbortSignal): string {
1196
1251
  if (error instanceof ZLinkFrameworkException) {
1197
- if (internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound)
1198
- return 'target_not_found';
1199
1252
  if (internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.DeadlineExceeded)
1200
1253
  return 'timed_out';
1201
1254
  if (internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RuntimeShutdown)
1202
1255
  return 'shutdown';
1203
1256
  }
1257
+ if (
1258
+ signal?.aborted === true &&
1259
+ (error === signal.reason ||
1260
+ (error instanceof Error && (error.cause === signal.reason || error.name === 'AbortError')))
1261
+ )
1262
+ return 'cancelled';
1204
1263
  return 'failed';
1205
1264
  }
@@ -1,3 +1,4 @@
1
+ import { routingIdsEqual } from '../routing-id';
1
2
  import type { Message } from '../../contracts/Common/Message';
2
3
  import { ZLINK_DEFAULT_PUBLIC_WEIGHT } from '../../contracts/Configuration/RegistrationBuilderPolicy';
3
4
  import {
@@ -121,9 +122,9 @@ export class ZLinkClientServerLocationRuntime {
121
122
  ownerId: owner.ownerId,
122
123
  leaseGeneration: owner.leaseGeneration
123
124
  };
124
- const result = await this.store.updateClientServer(
125
- candidate,
126
- ZLinkLocationWriteIntent.Takeover,
125
+ const result = await this.locationRuntime.writeDescriptor(
126
+ (writeSignal) =>
127
+ this.store.updateClientServer(candidate, ZLinkLocationWriteIntent.Takeover, writeSignal),
127
128
  signal
128
129
  );
129
130
  if (result.status !== ZLinkLocationWriteStatus.Stored) {
@@ -152,9 +153,9 @@ export class ZLinkClientServerLocationRuntime {
152
153
  descriptorRevision: current.descriptorRevision + 1n,
153
154
  weight: runtimeWeight
154
155
  };
155
- const result = await this.store.updateClientServer(
156
- candidate,
157
- ZLinkLocationWriteIntent.Renew,
156
+ const result = await this.locationRuntime.writeDescriptor(
157
+ (writeSignal) =>
158
+ this.store.updateClientServer(candidate, ZLinkLocationWriteIntent.Renew, writeSignal),
158
159
  signal
159
160
  );
160
161
  if (result.status !== ZLinkLocationWriteStatus.Stored) {
@@ -181,9 +182,9 @@ export class ZLinkClientServerLocationRuntime {
181
182
  leaseGeneration: owner.leaseGeneration,
182
183
  updatedAt: new Date(0)
183
184
  };
184
- const result = await this.store.updateClientServer(
185
- descriptor,
186
- ZLinkLocationWriteIntent.NewClaim,
185
+ const result = await this.locationRuntime.writeDescriptor(
186
+ (writeSignal) =>
187
+ this.store.updateClientServer(descriptor, ZLinkLocationWriteIntent.NewClaim, writeSignal),
187
188
  signal
188
189
  );
189
190
  if (result.status !== ZLinkLocationWriteStatus.Stored) {
@@ -587,7 +588,7 @@ function requireMatchingAdmission(
587
588
  ): void {
588
589
  if (
589
590
  actual.channelName !== expected.channelName ||
590
- actual.serverRid !== String(expected.serverRid) ||
591
+ !routingIdsEqual(actual.serverRid, expected.serverRid) ||
591
592
  actual.lifecycleGeneration !== expected.lifecycleGeneration ||
592
593
  actual.descriptorRevision !== expected.descriptorRevision ||
593
594
  actual.weight !== expected.weight ||
@@ -21,6 +21,7 @@ export type { ZLinkDispatchErrorSink } from '../diagnostics/dispatch-error-port'
21
21
 
22
22
  type ZLinkRuntimeDispatchFailure = ZLinkDispatchFailure & {
23
23
  readonly error?: unknown;
24
+ readonly severity?: 'warning';
24
25
  };
25
26
 
26
27
  export class ZLinkDispatchErrorReporter {
@@ -37,7 +38,7 @@ export class ZLinkDispatchErrorReporter {
37
38
  _providerResolver: unknown,
38
39
  errorSink: ZLinkDispatchErrorSink,
39
40
  ctx?: ZLinkDiagnosticsContext,
40
- private readonly metrics?: ZLinkRuntimeMetrics
41
+ readonly metrics?: ZLinkRuntimeMetrics
41
42
  ) {
42
43
  const flowCtx: ZLinkDiagnosticsContext = ctx ?? {
43
44
  diagnostics: DEFAULT_ZLINK_DIAGNOSTICS,
@@ -86,7 +87,8 @@ export class ZLinkDispatchErrorReporter {
86
87
  errorType: errorInfo.errorType,
87
88
  errorMessage: errorInfo.errorMessage,
88
89
  errorCauseType: errorInfo.errorCauseType,
89
- errorCauseMessage: errorInfo.errorCauseMessage
90
+ errorCauseMessage: errorInfo.errorCauseMessage,
91
+ severity: normalized.severity
90
92
  });
91
93
  }
92
94