@zlink-systems/framework 0.26.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 (521) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  3. package/dist/contracts/Common/CoreTypes.js +7 -0
  4. package/dist/contracts/Common/index.d.ts +1 -1
  5. package/dist/contracts/Common/index.js +0 -1
  6. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  7. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  8. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  9. package/dist/contracts/Configuration/Registration.js +58 -36
  10. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  12. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  16. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  17. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  18. package/dist/contracts/Handlers/JsonContract.js +10 -4
  19. package/dist/contracts/Locations/Authority.d.ts +1 -1
  20. package/dist/contracts/Locations/Authority.js +3 -2
  21. package/dist/contracts/Locations/Options.js +1 -1
  22. package/dist/contracts/Locations/Stores.d.ts +12 -0
  23. package/dist/contracts/Locations/Stores.js +9 -0
  24. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  25. package/dist/internal.d.ts +4 -0
  26. package/dist/internal.js +15 -1
  27. package/dist/nest-integration.d.ts +4 -2
  28. package/dist/nest-integration.js +14 -4
  29. package/dist/runtime/abort.d.ts +1 -0
  30. package/dist/runtime/abort.js +8 -5
  31. package/dist/runtime/activation-admission.d.ts +1 -2
  32. package/dist/runtime/activation-admission.js +2 -6
  33. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  34. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  35. package/dist/runtime/actors/actor-client.d.ts +2 -2
  36. package/dist/runtime/actors/actor-client.js +42 -143
  37. package/dist/runtime/actors/actor-context.d.ts +3 -5
  38. package/dist/runtime/actors/actor-context.js +13 -11
  39. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  40. package/dist/runtime/actors/actor-handoff.js +8 -8
  41. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  42. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  43. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  44. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  45. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  46. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  47. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  48. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  49. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  50. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  51. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  52. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  53. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  54. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  55. package/dist/runtime/actors/bound-session-wire.js +2 -7
  56. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  57. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  58. package/dist/runtime/actors/index.d.ts +9 -7
  59. package/dist/runtime/actors/index.js +87 -69
  60. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  61. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  62. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  63. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  64. package/dist/runtime/admission.d.ts +2 -0
  65. package/dist/runtime/admission.js +7 -1
  66. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  67. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  68. package/dist/runtime/backend/contracts/index.d.ts +6 -23
  69. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  70. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  71. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  72. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
  73. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
  74. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  75. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  76. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  77. package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
  78. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  79. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  80. package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
  81. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  82. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  83. package/dist/runtime/backend/runtime-values.js +2 -0
  84. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  85. package/dist/runtime/channels/channel-clients.js +68 -52
  86. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  87. package/dist/runtime/channels/channel-envelope.js +47 -29
  88. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  89. package/dist/runtime/channels/channel-outbound-operations.js +9 -10
  90. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  91. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  94. package/dist/runtime/channels/channel-runtime-manager.js +5 -2
  95. package/dist/runtime/channels/channel-socket-options.js +3 -2
  96. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  97. package/dist/runtime/channels/channel-socket-registry.js +248 -174
  98. package/dist/runtime/channels/channel-transports.d.ts +11 -17
  99. package/dist/runtime/channels/channel-transports.js +68 -47
  100. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  101. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  102. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  103. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  104. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  105. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  106. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  107. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  108. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  109. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  110. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  111. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  112. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  113. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  114. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  115. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  116. package/dist/runtime/diagnostics/flow-context.js +16 -2
  117. package/dist/runtime/diagnostics/index.d.ts +4 -2
  118. package/dist/runtime/diagnostics/index.js +14 -4
  119. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  120. package/dist/runtime/diagnostics/message-flow.js +10 -19
  121. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  122. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  123. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  124. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  125. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  126. package/dist/runtime/disposal.d.ts +5 -0
  127. package/dist/runtime/disposal.js +22 -0
  128. package/dist/runtime/execution/index.d.ts +12 -9
  129. package/dist/runtime/execution/index.js +58 -14
  130. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  131. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  132. package/dist/runtime/execution/state-lane.d.ts +8 -1
  133. package/dist/runtime/execution/state-lane.js +118 -3
  134. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  135. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  136. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  137. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  138. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  139. package/dist/runtime/foundation/operation-identity.js +9 -5
  140. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  141. package/dist/runtime/foundation/operation-registry.js +34 -44
  142. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  143. package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
  144. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  145. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  146. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  147. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  148. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  149. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  150. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  151. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  152. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  153. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  154. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  155. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  156. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  157. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  158. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  159. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  160. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  161. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  162. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  163. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  164. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  165. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  166. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  167. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  168. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  169. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  170. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  171. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  172. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  173. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  174. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  175. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  176. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  177. package/dist/runtime/framework-errors-internal.js +343 -122
  178. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  179. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  180. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  181. package/dist/runtime/host/actor-packet-relay.js +48 -91
  182. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  183. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  184. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  185. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  186. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  187. package/dist/runtime/host/application-job-queue.js +16 -33
  188. package/dist/runtime/host/bound-session-relay.js +1 -1
  189. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  190. package/dist/runtime/host/index.d.ts +14 -13
  191. package/dist/runtime/host/index.js +190 -157
  192. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  193. package/dist/runtime/host/instance-activation-authority.js +17 -45
  194. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  195. package/dist/runtime/host/location-runtime-owner.js +2 -2
  196. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  197. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  198. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  199. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  200. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  201. package/dist/runtime/host/remote-bound-session-relay.js +7 -20
  202. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  203. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  204. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  205. package/dist/runtime/host/runtime-shutdown.js +18 -21
  206. package/dist/runtime/host/service-relocation-control.js +6 -1
  207. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  208. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  209. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  210. package/dist/runtime/host/spot-address-transport.js +34 -136
  211. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  212. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  213. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  214. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  215. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  216. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  217. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  218. package/dist/runtime/locations/authority-key-codec.js +4 -3
  219. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  220. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  221. package/dist/runtime/locations/creation-operation-id.js +6 -4
  222. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  223. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  224. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  225. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  226. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  227. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  228. package/dist/runtime/locations/key-codec.js +3 -2
  229. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  230. package/dist/runtime/locations/lease-tracker.js +7 -11
  231. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  232. package/dist/runtime/locations/lifecycle.js +2 -31
  233. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  234. package/dist/runtime/locations/location-store-failure.js +7 -0
  235. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  236. package/dist/runtime/locations/location-store-pages.js +13 -0
  237. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  238. package/dist/runtime/locations/location-store-repository.js +303 -332
  239. package/dist/runtime/locations/relocation-blob.js +18 -5
  240. package/dist/runtime/locations/resolvers.d.ts +5 -5
  241. package/dist/runtime/locations/resolvers.js +37 -28
  242. package/dist/runtime/locations/runtime.d.ts +5 -4
  243. package/dist/runtime/locations/runtime.js +123 -92
  244. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  245. package/dist/runtime/locations/spot-location-claims.js +42 -1
  246. package/dist/runtime/messaging/payload-codec.js +26 -20
  247. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  248. package/dist/runtime/messaging/submission-result.js +48 -0
  249. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  250. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  251. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  252. package/dist/runtime/spots/index.d.ts +14 -20
  253. package/dist/runtime/spots/index.js +302 -176
  254. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  255. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  256. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  257. package/dist/runtime/spots/spot-activation-state.js +2 -2
  258. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  259. package/dist/runtime/spots/spot-activation.js +49 -32
  260. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  261. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  262. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  263. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  264. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  265. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  266. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  267. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  268. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  269. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  270. package/dist/runtime/spots/spot-context.d.ts +2 -2
  271. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  272. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  273. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  274. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  275. package/dist/runtime/spots/spot-manager-public.js +5 -4
  276. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  277. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  278. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  279. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  280. package/dist/runtime/spots/spot-outbound.js +9 -8
  281. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  282. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  283. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  284. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  285. package/dist/runtime/spots/spot-route-replies.js +3 -1
  286. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  287. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  288. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  289. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  290. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  291. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  292. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  293. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  294. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  295. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  296. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  297. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  298. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  299. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  300. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  301. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  302. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  303. package/dist/runtime/streams/bound-session-service.js +11 -1
  304. package/dist/runtime/streams/index.d.ts +14 -15
  305. package/dist/runtime/streams/index.js +20 -21
  306. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  307. package/dist/runtime/streams/managed-stream.js +17 -8
  308. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  309. package/dist/runtime/streams/protocol.d.ts +6 -33
  310. package/dist/runtime/streams/protocol.js +38 -110
  311. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  312. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  313. package/dist/runtime/streams/session-calls.d.ts +1 -1
  314. package/dist/runtime/streams/session-calls.js +5 -4
  315. package/dist/runtime/streams/session-context.d.ts +6 -6
  316. package/dist/runtime/streams/session-context.js +22 -4
  317. package/dist/runtime/streams/session-requests.js +2 -1
  318. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  319. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  320. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  321. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  322. package/dist/runtime/workers/index.d.ts +2 -2
  323. package/dist/runtime/workers/index.js +5 -4
  324. package/package.json +3 -3
  325. package/src/contracts/Common/CoreTypes.ts +7 -0
  326. package/src/contracts/Common/index.ts +1 -1
  327. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  328. package/src/contracts/Configuration/Registration.ts +92 -48
  329. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  330. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  331. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  332. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  333. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  334. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  335. package/src/contracts/Handlers/JsonContract.ts +14 -4
  336. package/src/contracts/Locations/Authority.ts +7 -3
  337. package/src/contracts/Locations/Options.ts +1 -1
  338. package/src/contracts/Locations/Stores.ts +14 -0
  339. package/src/contracts/Spots/Contracts.ts +1 -1
  340. package/src/internal.ts +14 -0
  341. package/src/nest-integration.ts +28 -10
  342. package/src/runtime/abort.ts +6 -5
  343. package/src/runtime/activation-admission.ts +2 -8
  344. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  345. package/src/runtime/actors/actor-client.ts +77 -204
  346. package/src/runtime/actors/actor-context.ts +39 -33
  347. package/src/runtime/actors/actor-handoff.ts +24 -22
  348. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  349. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  350. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  351. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  352. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  353. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  354. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  355. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  356. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  357. package/src/runtime/actors/bound-session-wire.ts +2 -8
  358. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  359. package/src/runtime/actors/index.ts +100 -79
  360. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  361. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  362. package/src/runtime/admission.ts +8 -1
  363. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  364. package/src/runtime/backend/contracts/index.ts +13 -29
  365. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  366. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  367. package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
  368. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  369. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  370. package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
  371. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  372. package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
  373. package/src/runtime/backend/raw-binding-port.ts +1 -1
  374. package/src/runtime/backend/runtime-values.ts +4 -1
  375. package/src/runtime/channels/channel-clients.ts +132 -85
  376. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  377. package/src/runtime/channels/channel-envelope.ts +58 -29
  378. package/src/runtime/channels/channel-outbound-operations.ts +10 -23
  379. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  380. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  381. package/src/runtime/channels/channel-runtime-manager.ts +6 -2
  382. package/src/runtime/channels/channel-socket-options.ts +8 -2
  383. package/src/runtime/channels/channel-socket-registry.ts +301 -192
  384. package/src/runtime/channels/channel-transports.ts +161 -112
  385. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  386. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  387. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  388. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  389. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  390. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  391. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  392. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  393. package/src/runtime/diagnostics/flow-context.ts +16 -2
  394. package/src/runtime/diagnostics/index.ts +27 -17
  395. package/src/runtime/diagnostics/message-flow.ts +15 -25
  396. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  397. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  398. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  399. package/src/runtime/disposal.ts +19 -0
  400. package/src/runtime/execution/index.ts +60 -20
  401. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  402. package/src/runtime/execution/state-lane.ts +142 -4
  403. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  404. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  405. package/src/runtime/foundation/operation-identity.ts +11 -5
  406. package/src/runtime/foundation/operation-registry.ts +33 -50
  407. package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
  408. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  409. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  410. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  411. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  412. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  413. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  414. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  415. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  416. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  417. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  418. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  419. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  420. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  421. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  422. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  423. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  424. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  425. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  426. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  427. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  428. package/src/runtime/framework-errors-internal.ts +380 -134
  429. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  430. package/src/runtime/host/actor-packet-relay.ts +57 -147
  431. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  432. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  433. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  434. package/src/runtime/host/application-job-queue.ts +28 -34
  435. package/src/runtime/host/bound-session-relay.ts +1 -2
  436. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  437. package/src/runtime/host/index.ts +327 -296
  438. package/src/runtime/host/instance-activation-authority.ts +89 -109
  439. package/src/runtime/host/location-runtime-owner.ts +4 -2
  440. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  441. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  442. package/src/runtime/host/remote-bound-session-relay.ts +8 -41
  443. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  444. package/src/runtime/host/runtime-shutdown.ts +17 -21
  445. package/src/runtime/host/service-relocation-control.ts +14 -1
  446. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  447. package/src/runtime/host/spot-address-transport.ts +73 -195
  448. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  449. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  450. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  451. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  452. package/src/runtime/locations/authority-key-codec.ts +7 -3
  453. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  454. package/src/runtime/locations/creation-operation-id.ts +6 -3
  455. package/src/runtime/locations/domain-store-contract.ts +12 -3
  456. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  457. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  458. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  459. package/src/runtime/locations/key-codec.ts +3 -2
  460. package/src/runtime/locations/lease-tracker.ts +8 -14
  461. package/src/runtime/locations/lifecycle.ts +13 -43
  462. package/src/runtime/locations/location-store-failure.ts +4 -0
  463. package/src/runtime/locations/location-store-pages.ts +18 -0
  464. package/src/runtime/locations/location-store-repository.ts +450 -478
  465. package/src/runtime/locations/relocation-blob.ts +17 -6
  466. package/src/runtime/locations/resolvers.ts +75 -49
  467. package/src/runtime/locations/runtime.ts +220 -110
  468. package/src/runtime/locations/spot-location-claims.ts +58 -1
  469. package/src/runtime/messaging/payload-codec.ts +35 -24
  470. package/src/runtime/messaging/submission-result.ts +57 -1
  471. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  472. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  473. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  474. package/src/runtime/spots/index.ts +433 -229
  475. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  476. package/src/runtime/spots/spot-activation-state.ts +2 -2
  477. package/src/runtime/spots/spot-activation.ts +67 -37
  478. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  479. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  480. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  481. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  482. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  483. package/src/runtime/spots/spot-context.ts +3 -3
  484. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  485. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  486. package/src/runtime/spots/spot-manager-public.ts +21 -17
  487. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  488. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  489. package/src/runtime/spots/spot-outbound.ts +45 -23
  490. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  491. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  492. package/src/runtime/spots/spot-route-replies.ts +6 -4
  493. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  494. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  495. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  496. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  497. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  498. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  499. package/src/runtime/spots/spot-timer.ts +3 -2
  500. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  501. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  502. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  503. package/src/runtime/streams/bound-session-service.ts +21 -1
  504. package/src/runtime/streams/index.ts +76 -64
  505. package/src/runtime/streams/managed-stream.ts +29 -10
  506. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  507. package/src/runtime/streams/protocol.ts +34 -88
  508. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  509. package/src/runtime/streams/session-calls.ts +6 -5
  510. package/src/runtime/streams/session-context.ts +54 -10
  511. package/src/runtime/streams/session-requests.ts +2 -1
  512. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  513. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  514. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  515. package/src/runtime/workers/index.ts +13 -12
  516. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  517. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  518. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  519. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  520. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  521. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,3 +1,4 @@
1
+ import { ConfigError, ConfigResult } from '@zlink-systems/zlink';
1
2
  import type {
2
3
  ZLinkBackendActorRef,
3
4
  ZLinkBackendMeshNode,
@@ -22,17 +23,9 @@ export function lookupNativeActorRef(
22
23
  generation: actor.generation
23
24
  };
24
25
  } catch (error) {
25
- if (nativeErrno(error) === 2) {
26
+ if (error instanceof ConfigError && error.result === ConfigResult.NotFound) {
26
27
  return undefined;
27
28
  }
28
29
  throw error;
29
30
  }
30
31
  }
31
-
32
- function nativeErrno(error: unknown): number | undefined {
33
- if (typeof error !== 'object' || error === null || !('nativeErrno' in error)) {
34
- return undefined;
35
- }
36
- const value = error.nativeErrno;
37
- return typeof value === 'number' ? value : undefined;
38
- }
@@ -1,11 +1,12 @@
1
- import type { ActorRef, RoutingId } from '../../contracts';
2
- import { ZLinkSpotKind } from '../../contracts';
1
+ import { type ActorRef, type RoutingId, ZLinkSpotKind } from '../../contracts';
2
+
3
+ import { ZLINK_MAX_SPOT_ID_BYTES } from '../../contracts/Common/CoreTypes';
3
4
  import { decodeRoutingId, routingIdWireHex } from '../routing-id';
4
- import type { ZLinkRemoteActorPacketTarget } from './actor-runtime-state';
5
5
  import {
6
6
  decodeActorMessageFollowContext,
7
7
  type ZLinkActorMessageFollowContext
8
8
  } from './actor-message-follow-context';
9
+ import type { ZLinkRemoteActorPacketTarget } from './actor-runtime-state';
9
10
 
10
11
  export const ZLINK_REMOTE_ACTOR_PACKET_RELAY_PACKET = '__zlink.actor.packet.relay';
11
12
  export const ZLINK_REMOTE_ACTOR_SESSION_DISCONNECTED_PACKET =
@@ -48,6 +49,7 @@ export function encodeRemoteActorPacketRelayPayload(input: {
48
49
  readonly header: Uint8Array;
49
50
  readonly payload: Uint8Array;
50
51
  readonly bindingActorRef?: ActorRef;
52
+ readonly bindingGeneration?: bigint;
51
53
  /** The actor reference used to preserve relocation context at the target Spot. */
52
54
  readonly actorRef?: ActorRef;
53
55
  readonly returnResponse?: boolean;
@@ -70,13 +72,15 @@ export function encodeRemoteActorPacketRelayPayload(input: {
70
72
  ? undefined
71
73
  : routingIdWireHex(input.bindingActorRef.nodeRid),
72
74
  bindingActorGeneration: input.bindingActorRef?.objectGeneration.toString(),
73
- bindingGeneration: (
74
- input.bindingActorRef as
75
- | (ActorRef & {
76
- readonly bindingGeneration?: bigint;
77
- })
78
- | undefined
79
- )?.bindingGeneration?.toString(),
75
+ bindingGeneration:
76
+ input.bindingGeneration?.toString() ??
77
+ (
78
+ input.bindingActorRef as
79
+ | (ActorRef & {
80
+ readonly bindingGeneration?: bigint;
81
+ })
82
+ | undefined
83
+ )?.bindingGeneration?.toString(),
80
84
  returnResponse: input.returnResponse,
81
85
  messageFollowContext: input.messageFollowContext,
82
86
  header: Buffer.from(input.header).toString('base64'),
@@ -169,8 +173,10 @@ export function decodeRemoteActorPacketTarget(
169
173
 
170
174
  function requireSpotId(value: string): string {
171
175
  const bytes = Buffer.byteLength(value, 'utf8');
172
- if (bytes < 1 || bytes > 255) {
173
- throw new Error('Actor packet target SpotId must contain 1..255 UTF-8 bytes.');
176
+ if (bytes < 1 || bytes > ZLINK_MAX_SPOT_ID_BYTES) {
177
+ throw new Error(
178
+ `Actor packet target SpotId must contain 1..${ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`
179
+ );
174
180
  }
175
181
  return value;
176
182
  }
@@ -11,12 +11,14 @@ import type {
11
11
  import type { ZLinkActorSourceTransfer } from './actor-source-transfer';
12
12
  import { ZLinkActorRuntimeState, toFrameworkRoutingId } from './actor-runtime-state';
13
13
  import { lookupNativeActorRef } from './actor-native-lookup';
14
- import { ZLinkPostCommitActorLocation } from './post-commit-actor-location';
15
14
  import { ZLinkLocalNativeActorJoin } from './actor-local-native-join';
16
15
  import { ZLinkPostCommitActorBinder } from './post-commit-actor-binder';
17
16
  import type { ZLinkActorJoinRelocation } from './actor-join-relocation';
18
17
 
19
- export interface ZLinkActorNativeJoinCoordinatorOptions {
18
+ export interface ZLinkActorNativeJoinCoordinatorOptions extends Pick<
19
+ import('./actor-local-native-join').ZLinkLocalNativeActorJoinOptions,
20
+ 'localSpotJoin' | 'localEntryJoin' | 'localSourceLeave' | 'reportSourceLeaveError'
21
+ > {
20
22
  readonly messageFlow?: () =>
21
23
  import('../diagnostics/message-flow').ZLinkMessageFlowTracer | undefined;
22
24
  readonly node: ZLinkBackendMeshNode | (() => ZLinkBackendMeshNode);
@@ -46,16 +48,12 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
46
48
  }
47
49
 
48
50
  constructor(private readonly options: ZLinkActorNativeJoinCoordinatorOptions) {
49
- const postCommitLocation =
50
- options.locationLifecycle === undefined
51
- ? undefined
52
- : new ZLinkPostCommitActorLocation({
53
- lifecycle: options.locationLifecycle,
54
- reportError: options.postCommitErrorReporter,
55
- signal: options.shutdownSignal
56
- });
57
51
  this.localJoin = new ZLinkLocalNativeActorJoin({
58
- postCommitLocation,
52
+ locationLifecycle: options.locationLifecycle,
53
+ localSpotJoin: options.localSpotJoin,
54
+ localEntryJoin: options.localEntryJoin,
55
+ localSourceLeave: options.localSourceLeave,
56
+ reportSourceLeaveError: options.reportSourceLeaveError,
59
57
  postCommitBinder:
60
58
  options.remoteActorBinder === undefined
61
59
  ? undefined
@@ -1,3 +1,5 @@
1
+ import { ZLINK_MAX_SPOT_ID_BYTES } from '../../contracts/Common/CoreTypes';
2
+ import { ZlinkStreamContentType } from '@zlink-systems/stream-wire';
1
3
  import type { RoutingId, SpotId } from '../../contracts';
2
4
  import { decodeRoutingId } from '../routing-id';
3
5
 
@@ -133,7 +135,7 @@ export function decodeRemoteActorJoinPayload(payload: unknown): {
133
135
  ),
134
136
  boundSessionSpotId: optionalSpotId(payload, 'boundSessionSpotId'),
135
137
  request: (payload as { request: string }).request,
136
- requestContentType: optionalString(payload, 'requestContentType') ?? 'application/json'
138
+ requestContentType: optionalString(payload, 'requestContentType') ?? ZlinkStreamContentType.Json
137
139
  };
138
140
  }
139
141
 
@@ -158,8 +160,8 @@ function optionalSpotId(value: object, key: string): SpotId | undefined {
158
160
 
159
161
  function requireSpotId(value: string): SpotId {
160
162
  const bytes = Buffer.byteLength(value, 'utf8');
161
- if (bytes < 1 || bytes > 255) {
162
- throw new Error('Remote actor SpotId must contain 1..255 UTF-8 bytes.');
163
+ if (bytes < 1 || bytes > ZLINK_MAX_SPOT_ID_BYTES) {
164
+ throw new Error(`Remote actor SpotId must contain 1..${ZLINK_MAX_SPOT_ID_BYTES} UTF-8 bytes.`);
163
165
  }
164
166
  return value;
165
167
  }
@@ -0,0 +1,49 @@
1
+ import { awaitWithAbort } from '../abort';
2
+ import {
3
+ createInternalFrameworkException,
4
+ ZLinkFrameworkInternalErrorKind
5
+ } from '../framework-errors-internal';
6
+
7
+ export function remainingActorRequestTimeout(
8
+ actorId: string,
9
+ deadlineMs: number | undefined
10
+ ): number | undefined {
11
+ if (deadlineMs === undefined) return undefined;
12
+ const remaining = deadlineMs - performance.now();
13
+ if (remaining <= 0) {
14
+ throw createInternalFrameworkException(
15
+ ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
16
+ `Actor request '${actorId}' exceeded its deadline.`
17
+ );
18
+ }
19
+ return Math.max(1, Math.ceil(remaining));
20
+ }
21
+
22
+ /** Only actual Store, delivery-gate, and handoff waits acquire a deadline handle. */
23
+ export async function waitActorReply<T>(
24
+ reply: Promise<T>,
25
+ actorId: string,
26
+ deadlineMs: number | undefined,
27
+ signal?: AbortSignal
28
+ ): Promise<T> {
29
+ if (deadlineMs === undefined) return await awaitWithAbort(reply, signal);
30
+ let timer: ReturnType<typeof setTimeout> | undefined;
31
+ const timeout = new Promise<never>((_resolve, reject) => {
32
+ const remaining = remainingActorRequestTimeout(actorId, deadlineMs);
33
+ timer = setTimeout(
34
+ () =>
35
+ reject(
36
+ createInternalFrameworkException(
37
+ ZLinkFrameworkInternalErrorKind.DeadlineExceeded,
38
+ `Actor request '${actorId}' exceeded its deadline.`
39
+ )
40
+ ),
41
+ remaining
42
+ );
43
+ });
44
+ try {
45
+ return await awaitWithAbort(Promise.race([reply, timeout]), signal);
46
+ } finally {
47
+ clearTimeout(timer);
48
+ }
49
+ }
@@ -1,5 +1,6 @@
1
1
  const INITIAL_RETRY_DELAY_MS = 25;
2
2
  const MAX_RETRY_DELAY_MS = 1_000;
3
+ const RETRY_BACKOFF_MULTIPLIER = 2;
3
4
 
4
5
  export class ZLinkActorRetryDelay {
5
6
  private delayMs = INITIAL_RETRY_DELAY_MS;
@@ -11,7 +12,7 @@ export class ZLinkActorRetryDelay {
11
12
  async wait(signal: AbortSignal | undefined): Promise<boolean> {
12
13
  const completed = await delayUnlessAborted(this.delayMs, signal);
13
14
  if (completed) {
14
- this.delayMs = Math.min(this.delayMs * 2, MAX_RETRY_DELAY_MS);
15
+ this.delayMs = Math.min(this.delayMs * RETRY_BACKOFF_MULTIPLIER, MAX_RETRY_DELAY_MS);
15
16
  }
16
17
  return completed;
17
18
  }
@@ -1,17 +1,19 @@
1
1
  import {
2
- ZLinkFrameworkInternalErrorKind,
3
- createInternalFrameworkException
4
- } from '../framework-errors-internal';
5
- import type {
6
- ActorRef,
7
- RoutingId,
8
- ZLinkActor,
9
- ZLinkActorContext,
10
- ZLinkSpot
2
+ type ActorRef,
3
+ type RoutingId,
4
+ type ZLinkActor,
5
+ type ZLinkActorContext,
6
+ type ZLinkSpot,
7
+ ZLinkSpotKind
11
8
  } from '../../contracts';
12
- import { ZLinkSpotKind } from '../../contracts';
9
+
13
10
  import type { Message } from '../../contracts/Common/Message';
14
11
  import type { ZLinkBackendActorRef, ZLinkBackendMeshNode } from '../backend/contracts';
12
+ import { isStructuralGuardEnabled } from '../execution/state-lane';
13
+ import {
14
+ ZLinkFrameworkInternalErrorKind,
15
+ createInternalFrameworkException
16
+ } from '../framework-errors-internal';
15
17
  import { routingIdsEqual } from '../routing-id';
16
18
  import { lookupNativeActorRef } from './actor-native-lookup';
17
19
 
@@ -52,85 +54,24 @@ export interface ZLinkRemoteBoundSessionTarget {
52
54
  }
53
55
 
54
56
  /**
55
- * Applies a lightweight Session binding refresh without discarding the
56
- * relocation fence that was staged for the same route. Core emits the bind
57
- * refresh with routing coordinates only; the relocation owner retains the
58
- * service-wire relocation identity until command 44 releases the owner seal.
57
+ * Session–Actor binding §5·§6: the Actor owner keeps one current binding. The
58
+ * stored value is the binding identity and the route to its Session owner; a
59
+ * relocation fence belongs to the relocation operation that created it.
59
60
  */
60
- export function mergeRemoteBoundSessionTarget(
61
- target: ZLinkRemoteBoundSessionTarget,
62
- fallback: ZLinkRemoteBoundSessionTarget | undefined
61
+ function boundSessionIdentity(
62
+ target: ZLinkRemoteBoundSessionTarget
63
63
  ): ZLinkRemoteBoundSessionTarget {
64
- if (
65
- fallback === undefined ||
66
- fallback.routerChannelId !== target.routerChannelId ||
67
- !routingIdsEqual(fallback.targetNodeRid, target.targetNodeRid) ||
68
- (!routingIdsEqual(fallback.spotId, target.spotId) &&
69
- !samePhysicalRemoteSession(fallback, target)) ||
70
- isSuccessorSessionBinding(fallback, target)
71
- ) {
72
- return target;
73
- }
74
- const merged = {
75
- ...fallback,
76
- ...target,
77
- sessionNodeRid: target.sessionNodeRid ?? fallback.sessionNodeRid,
78
- sessionRid: target.sessionRid ?? fallback.sessionRid,
79
- sessionOwnerNodeGeneration:
80
- target.sessionOwnerNodeGeneration ?? fallback.sessionOwnerNodeGeneration,
81
- sessionOwnerId: target.sessionOwnerId ?? fallback.sessionOwnerId,
82
- sessionOwnerLeaseGeneration:
83
- target.sessionOwnerLeaseGeneration ?? fallback.sessionOwnerLeaseGeneration,
84
- bindingGeneration: target.bindingGeneration ?? fallback.bindingGeneration,
85
- previousAuthorityOwnerGeneration:
86
- target.previousAuthorityOwnerGeneration ?? fallback.previousAuthorityOwnerGeneration,
87
- previousOwnerLeaseGeneration:
88
- target.previousOwnerLeaseGeneration ?? fallback.previousOwnerLeaseGeneration,
89
- relocationSealId: target.relocationSealId ?? fallback.relocationSealId,
90
- serviceWireRelocation: target.serviceWireRelocation ?? fallback.serviceWireRelocation
64
+ return {
65
+ routerChannelId: target.routerChannelId,
66
+ targetNodeRid: target.targetNodeRid,
67
+ spotId: target.spotId,
68
+ sessionNodeRid: target.sessionNodeRid,
69
+ sessionRid: target.sessionRid,
70
+ sessionOwnerNodeGeneration: target.sessionOwnerNodeGeneration,
71
+ sessionOwnerId: target.sessionOwnerId,
72
+ sessionOwnerLeaseGeneration: target.sessionOwnerLeaseGeneration,
73
+ bindingGeneration: target.bindingGeneration
91
74
  };
92
- return merged;
93
- }
94
-
95
- /**
96
- * Spec 48 §125: reconnection creates a new Session; the previous Session's
97
- * binding — and its staged relocation fence — is never inherited by a
98
- * successor. A Core bind refresh only omits routing coordinates it did not
99
- * recompute, so an explicit Session identity on both sides that disagrees
100
- * marks the refresh as belonging to a different Session binding, not a
101
- * same-Session coordinate/generation-only refresh (a bindingGeneration bump
102
- * with the same sessionNodeRid/sessionRid is a legitimate same-Session
103
- * refresh and must keep the fence — see the transfer-target generation test
104
- * below).
105
- *
106
- * NOTE: this identity check is a no-op on the path exercised by
107
- * `remoteBoundSessionTargetForSource` (mesh-router-resolver.ts), which never
108
- * populates sessionNodeRid/sessionRid on the refresh it emits. Confirmed via
109
- * TTT reproduction (2026-08-22, run-dir preserved) that a rejected successor
110
- * bound-session send still occurs through that path after this change; see
111
- * session report for the STOP writeup.
112
- */
113
- function isSuccessorSessionBinding(
114
- fallback: ZLinkRemoteBoundSessionTarget,
115
- target: ZLinkRemoteBoundSessionTarget
116
- ): boolean {
117
- return (
118
- (fallback.sessionNodeRid !== undefined &&
119
- target.sessionNodeRid !== undefined &&
120
- !routingIdsEqual(fallback.sessionNodeRid, target.sessionNodeRid)) ||
121
- (fallback.sessionRid !== undefined &&
122
- target.sessionRid !== undefined &&
123
- !routingIdsEqual(fallback.sessionRid, target.sessionRid)) ||
124
- (fallback.sessionOwnerNodeGeneration !== undefined &&
125
- target.sessionOwnerNodeGeneration !== undefined &&
126
- fallback.sessionOwnerNodeGeneration !== target.sessionOwnerNodeGeneration) ||
127
- (fallback.sessionOwnerId !== undefined &&
128
- target.sessionOwnerId !== undefined &&
129
- fallback.sessionOwnerId !== target.sessionOwnerId) ||
130
- (fallback.sessionOwnerLeaseGeneration !== undefined &&
131
- target.sessionOwnerLeaseGeneration !== undefined &&
132
- fallback.sessionOwnerLeaseGeneration !== target.sessionOwnerLeaseGeneration)
133
- );
134
75
  }
135
76
 
136
77
  type ZLinkRemoteSessionOwnerIdentity = Pick<
@@ -144,20 +85,6 @@ type ZLinkRemoteSessionOwnerIdentity = Pick<
144
85
 
145
86
  type ZLinkRemoteSessionOwnerLifecycle = Omit<ZLinkRemoteSessionOwnerIdentity, 'sessionRid'>;
146
87
 
147
- function samePhysicalRemoteSession(
148
- left: ZLinkRemoteBoundSessionTarget,
149
- right: Pick<ZLinkRemoteBoundSessionTarget, 'sessionNodeRid' | 'sessionRid'>
150
- ): boolean {
151
- return (
152
- left.sessionNodeRid !== undefined &&
153
- right.sessionNodeRid !== undefined &&
154
- left.sessionRid !== undefined &&
155
- right.sessionRid !== undefined &&
156
- routingIdsEqual(left.sessionNodeRid, right.sessionNodeRid) &&
157
- routingIdsEqual(left.sessionRid, right.sessionRid)
158
- );
159
- }
160
-
161
88
  function sameRemoteSessionOwnerLifecycle(
162
89
  left: ZLinkRemoteBoundSessionTarget,
163
90
  right: ZLinkRemoteSessionOwnerLifecycle
@@ -207,23 +134,6 @@ function sameRemoteSessionBinding(
207
134
  );
208
135
  }
209
136
 
210
- /**
211
- * Selects the route that still carries the relocation fence when a Core
212
- * binding refresh and a formal transfer target temporarily coexist.
213
- */
214
- export function preferredRemoteBoundSessionTarget(
215
- remote: ZLinkRemoteBoundSessionTarget | undefined,
216
- transfer: ZLinkRemoteBoundSessionTarget | undefined
217
- ): ZLinkRemoteBoundSessionTarget | undefined {
218
- if (remote === undefined) return transfer;
219
- if (hasRelocationFence(remote) || transfer === undefined) return remote;
220
- return transfer;
221
- }
222
-
223
- function hasRelocationFence(target: ZLinkRemoteBoundSessionTarget): boolean {
224
- return target.relocationSealId !== undefined || target.serviceWireRelocation !== undefined;
225
- }
226
-
227
137
  export interface ZLinkRemoteActorPacketTarget {
228
138
  readonly routerChannelId: string;
229
139
  readonly targetNodeRid: RoutingId;
@@ -269,10 +179,8 @@ export class ZLinkActorRuntimeState {
269
179
  private spotGenerationValue: bigint | undefined;
270
180
  private spotMembershipEpochValue = 0n;
271
181
  private nativeActorRefValue: ZLinkBackendActorRef | undefined;
272
- private boundSessionBindingGenerationValue = 0n;
273
182
  private entryNodeRidValue: RoutingId | undefined;
274
- private remoteBoundSessionTargetValue: ZLinkRemoteBoundSessionTarget | undefined;
275
- private boundSessionTransferTargetValue: ZLinkRemoteBoundSessionTarget | undefined;
183
+ private boundSessionValue: ZLinkRemoteBoundSessionTarget | undefined;
276
184
  private remoteActorPacketTargetValue: ZLinkRemoteActorPacketTarget | undefined;
277
185
  private createRequestPayloadValue: Buffer | undefined;
278
186
  private ownsLocationValue = false;
@@ -282,7 +190,11 @@ export class ZLinkActorRuntimeState {
282
190
  private deferredJoinPendingValue = false;
283
191
  private destroyTask: Promise<void> | undefined;
284
192
 
285
- constructor(readonly actorId: string) {}
193
+ constructor(readonly actorId: string) {
194
+ if (isStructuralGuardEnabled()) {
195
+ guardBoundSessionTargetWrites(this);
196
+ }
197
+ }
286
198
 
287
199
  get actorType(): string | undefined {
288
200
  return this.actorTypeValue;
@@ -323,19 +235,31 @@ export class ZLinkActorRuntimeState {
323
235
  }
324
236
 
325
237
  get boundSessionBindingGeneration(): bigint {
326
- return this.boundSessionBindingGenerationValue;
238
+ return this.boundSessionValue?.bindingGeneration ?? 0n;
327
239
  }
328
240
 
329
241
  get entryNodeRid(): RoutingId | undefined {
330
242
  return this.entryNodeRidValue;
331
243
  }
332
244
 
333
- get remoteBoundSessionTarget(): ZLinkRemoteBoundSessionTarget | undefined {
334
- return this.remoteBoundSessionTargetValue;
245
+ /** The one current Session binding of this Actor (Session–Actor binding §6). */
246
+ get boundSession(): ZLinkRemoteBoundSessionTarget | undefined {
247
+ return this.boundSessionValue;
335
248
  }
336
249
 
337
- get boundSessionTransferTarget(): ZLinkRemoteBoundSessionTarget | undefined {
338
- return this.boundSessionTransferTargetValue;
250
+ /**
251
+ * The current binding when its Session owner is another node. A same-node
252
+ * binding is served by the local Session registry, so remote routing sees
253
+ * no target for it.
254
+ */
255
+ get remoteBoundSessionTarget(): ZLinkRemoteBoundSessionTarget | undefined {
256
+ const binding = this.boundSessionValue;
257
+ const actorNodeRid = this.nativeActorRefValue?.nodeRid;
258
+ return binding?.sessionNodeRid !== undefined &&
259
+ actorNodeRid !== undefined &&
260
+ routingIdsEqual(binding.sessionNodeRid, toFrameworkRoutingId(actorNodeRid))
261
+ ? undefined
262
+ : binding;
339
263
  }
340
264
 
341
265
  get remoteActorPacketTarget(): ZLinkRemoteActorPacketTarget | undefined {
@@ -559,24 +483,6 @@ export class ZLinkActorRuntimeState {
559
483
  this.entryNodeRidValue ??= toFrameworkRoutingId(actorRef.nodeRid);
560
484
  }
561
485
 
562
- setBoundSessionBindingGeneration(generation: bigint): void {
563
- if (generation > this.boundSessionBindingGenerationValue) {
564
- this.boundSessionBindingGenerationValue = generation;
565
- if (this.remoteBoundSessionTargetValue !== undefined) {
566
- this.remoteBoundSessionTargetValue = {
567
- ...this.remoteBoundSessionTargetValue,
568
- bindingGeneration: generation
569
- };
570
- }
571
- if (this.boundSessionTransferTargetValue !== undefined) {
572
- this.boundSessionTransferTargetValue = {
573
- ...this.boundSessionTransferTargetValue,
574
- bindingGeneration: generation
575
- };
576
- }
577
- }
578
- }
579
-
580
486
  /** @internal Installs one authority-confirmed binding inside its Actor owner turn. */
581
487
  installBoundSessionBinding(target: ZLinkRemoteBoundSessionTarget): boolean {
582
488
  if (
@@ -587,34 +493,22 @@ export class ZLinkActorRuntimeState {
587
493
  target.sessionOwnerLeaseGeneration === undefined ||
588
494
  target.bindingGeneration === undefined
589
495
  ) {
590
- throw new TypeError(
591
- 'An installed bound Session target requires its complete binding identity.'
592
- );
496
+ throw new TypeError('An installed bound Session target requires its binding identity.');
593
497
  }
594
- const current = preferredRemoteBoundSessionTarget(
595
- this.remoteBoundSessionTargetValue,
596
- this.boundSessionTransferTargetValue
597
- );
498
+ const current = this.boundSessionValue;
598
499
  if (current !== undefined && sameRemoteSessionOwnerLifecycle(current, target)) {
599
- // A duplicate command for the exact physical Session is idempotent. A
600
- // different Session in the same owner lifecycle must advance that
601
- // lifecycle's generation; a late equal/lower generation is stale.
602
- if (sameRemoteSessionOwner(current, target)) return true;
603
- if (
604
- current.bindingGeneration !== undefined &&
605
- current.bindingGeneration >= target.bindingGeneration
606
- )
607
- return false;
500
+ // A duplicate or late older command for the exact physical Session
501
+ // leaves the current binding; a newer generation of the same Session
502
+ // replaces it. A different Session in the same owner lifecycle must
503
+ // advance that lifecycle's generation; a late equal/lower one is stale.
504
+ const advances =
505
+ current.bindingGeneration === undefined ||
506
+ target.bindingGeneration > current.bindingGeneration;
507
+ if (!advances) return sameRemoteSessionOwner(current, target);
608
508
  }
609
- const installed = mergeRemoteBoundSessionTarget(target, current);
610
509
  // Binding generations are scoped to a Session-owner lifecycle. A restarted
611
510
  // owner can legitimately reset its counter below the predecessor value.
612
- this.boundSessionBindingGenerationValue = target.bindingGeneration;
613
- this.remoteBoundSessionTargetValue = undefined;
614
- this.boundSessionTransferTargetValue = {
615
- ...installed,
616
- bindingGeneration: target.bindingGeneration
617
- };
511
+ this.boundSessionValue = boundSessionIdentity(target);
618
512
  return true;
619
513
  }
620
514
 
@@ -628,75 +522,18 @@ export class ZLinkActorRuntimeState {
628
522
  target.sessionOwnerLeaseGeneration === undefined ||
629
523
  target.bindingGeneration === undefined
630
524
  ) {
631
- throw new TypeError('A retired bound Session target requires its complete binding identity.');
525
+ throw new TypeError('A retired bound Session target requires its binding identity.');
632
526
  }
633
- let retired = false;
634
- if (
635
- this.remoteBoundSessionTargetValue !== undefined &&
636
- sameRemoteSessionBinding(this.remoteBoundSessionTargetValue, target)
637
- ) {
638
- this.remoteBoundSessionTargetValue = undefined;
639
- retired = true;
640
- }
641
- if (
642
- this.boundSessionTransferTargetValue !== undefined &&
643
- sameRemoteSessionBinding(this.boundSessionTransferTargetValue, target)
644
- ) {
645
- this.boundSessionTransferTargetValue = undefined;
646
- retired = true;
647
- }
648
- if (retired) {
649
- this.boundSessionBindingGenerationValue =
650
- preferredRemoteBoundSessionTarget(
651
- this.remoteBoundSessionTargetValue,
652
- this.boundSessionTransferTargetValue
653
- )?.bindingGeneration ?? 0n;
654
- }
655
- return retired;
527
+ const current = this.boundSessionValue;
528
+ if (current === undefined || !sameRemoteSessionBinding(current, target)) return false;
529
+ this.boundSessionValue = undefined;
530
+ return true;
656
531
  }
657
532
 
658
533
  setEntryNodeRid(entryNodeRid: RoutingId): void {
659
534
  this.entryNodeRidValue = entryNodeRid;
660
535
  }
661
536
 
662
- setRemoteBoundSessionTarget(target: ZLinkRemoteBoundSessionTarget | undefined): void {
663
- const current = preferredRemoteBoundSessionTarget(
664
- this.remoteBoundSessionTargetValue,
665
- this.boundSessionTransferTargetValue
666
- );
667
- const merged =
668
- target === undefined ? undefined : mergeRemoteBoundSessionTarget(target, current);
669
- const bindingGeneration = maxBindingGeneration(
670
- merged?.bindingGeneration,
671
- this.remoteBoundSessionTargetValue?.bindingGeneration,
672
- this.boundSessionBindingGenerationValue
673
- );
674
- this.remoteBoundSessionTargetValue =
675
- merged === undefined
676
- ? undefined
677
- : bindingGeneration === undefined
678
- ? merged
679
- : { ...merged, bindingGeneration };
680
- }
681
-
682
- setBoundSessionTransferTarget(target: ZLinkRemoteBoundSessionTarget | undefined): void {
683
- const merged =
684
- target === undefined
685
- ? undefined
686
- : mergeRemoteBoundSessionTarget(target, this.boundSessionTransferTargetValue);
687
- const bindingGeneration = maxBindingGeneration(
688
- merged?.bindingGeneration,
689
- this.boundSessionTransferTargetValue?.bindingGeneration,
690
- this.boundSessionBindingGenerationValue
691
- );
692
- this.boundSessionTransferTargetValue =
693
- merged === undefined
694
- ? undefined
695
- : bindingGeneration === undefined
696
- ? merged
697
- : { ...merged, bindingGeneration };
698
- }
699
-
700
537
  setRemoteActorPacketTarget(target: ZLinkRemoteActorPacketTarget | undefined): void {
701
538
  this.remoteActorPacketTargetValue = target;
702
539
  }
@@ -737,10 +574,8 @@ export class ZLinkActorRuntimeState {
737
574
  this.spotGenerationValue = undefined;
738
575
  this.spotMembershipEpochValue = 0n;
739
576
  this.nativeActorRefValue = undefined;
740
- this.boundSessionBindingGenerationValue = 0n;
741
577
  this.entryNodeRidValue = undefined;
742
- this.remoteBoundSessionTargetValue = undefined;
743
- this.boundSessionTransferTargetValue = undefined;
578
+ this.boundSessionValue = undefined;
744
579
  this.remoteActorPacketTargetValue = undefined;
745
580
  this.createRequestPayloadValue = undefined;
746
581
  this.ownsLocationValue = false;
@@ -753,11 +588,6 @@ export class ZLinkActorRuntimeState {
753
588
 
754
589
  prepareForRemoteReentry(): void {
755
590
  if (this.remoteActorPacketTargetValue === undefined) return;
756
- const relocationTransferTarget =
757
- this.boundSessionTransferTargetValue !== undefined &&
758
- hasRelocationFence(this.boundSessionTransferTargetValue)
759
- ? this.boundSessionTransferTargetValue
760
- : undefined;
761
591
  this.creationTask = undefined;
762
592
  this.configured = false;
763
593
  this.context = undefined;
@@ -766,9 +596,8 @@ export class ZLinkActorRuntimeState {
766
596
  this.spotValue = undefined;
767
597
  this.spotIdValue = undefined;
768
598
  this.nativeActorRefValue = undefined;
769
- this.boundSessionBindingGenerationValue = relocationTransferTarget?.bindingGeneration ?? 0n;
770
- this.remoteBoundSessionTargetValue = undefined;
771
- this.boundSessionTransferTargetValue = relocationTransferTarget;
599
+ // The arriving relocation installs the binding it carries.
600
+ this.boundSessionValue = undefined;
772
601
  this.remoteActorPacketTargetValue = undefined;
773
602
  this.createRequestPayloadValue = undefined;
774
603
  this.ownsLocationValue = false;
@@ -780,13 +609,22 @@ export class ZLinkActorRuntimeState {
780
609
  }
781
610
  }
782
611
 
783
- function maxBindingGeneration(...values: (bigint | undefined)[]): bigint | undefined {
784
- let maximum: bigint | undefined;
785
- for (const value of values) {
786
- if (value === undefined || value <= 0n) continue;
787
- if (maximum === undefined || value > maximum) maximum = value;
788
- }
789
- return maximum;
612
+ function guardBoundSessionTargetWrites(actor: ZLinkActorRuntimeState): void {
613
+ let current: ZLinkRemoteBoundSessionTarget | undefined;
614
+ Object.defineProperty(actor, 'boundSessionValue', {
615
+ configurable: true,
616
+ enumerable: true,
617
+ get: () => current,
618
+ set: (target: ZLinkRemoteBoundSessionTarget | undefined) => {
619
+ if (
620
+ target !== undefined &&
621
+ new Error().stack?.includes('installBoundSessionBinding') !== true
622
+ ) {
623
+ throw new Error('Bound Session target must be installed by installBoundSessionBinding.');
624
+ }
625
+ current = target;
626
+ }
627
+ });
790
628
  }
791
629
 
792
630
  export function toFrameworkRoutingId(routingId: unknown): RoutingId {