@zlink-systems/framework 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Channels/IZLinkFanoutClient.d.ts +0 -6
  3. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  4. package/dist/contracts/Common/CoreTypes.js +7 -0
  5. package/dist/contracts/Common/index.d.ts +1 -1
  6. package/dist/contracts/Common/index.js +0 -1
  7. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  8. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  9. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  10. package/dist/contracts/Configuration/Registration.js +58 -36
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  14. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  15. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  16. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  17. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  18. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  19. package/dist/contracts/Handlers/JsonContract.js +10 -4
  20. package/dist/contracts/Locations/Authority.d.ts +1 -1
  21. package/dist/contracts/Locations/Authority.js +3 -2
  22. package/dist/contracts/Locations/Options.js +1 -1
  23. package/dist/contracts/Locations/Stores.d.ts +12 -0
  24. package/dist/contracts/Locations/Stores.js +9 -0
  25. package/dist/contracts/RouteMesh/RuntimeTopology.d.ts +8 -0
  26. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  27. package/dist/internal.d.ts +5 -0
  28. package/dist/internal.js +16 -1
  29. package/dist/nest-integration.d.ts +4 -2
  30. package/dist/nest-integration.js +14 -4
  31. package/dist/runtime/abort.d.ts +1 -0
  32. package/dist/runtime/abort.js +8 -5
  33. package/dist/runtime/activation-admission.d.ts +28 -0
  34. package/dist/runtime/activation-admission.js +57 -0
  35. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  36. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  37. package/dist/runtime/actors/actor-client.d.ts +2 -2
  38. package/dist/runtime/actors/actor-client.js +42 -143
  39. package/dist/runtime/actors/actor-context.d.ts +3 -5
  40. package/dist/runtime/actors/actor-context.js +19 -17
  41. package/dist/runtime/actors/actor-handoff.d.ts +13 -7
  42. package/dist/runtime/actors/actor-handoff.js +36 -25
  43. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  44. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  45. package/dist/runtime/actors/actor-local-native-join.js +85 -123
  46. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  47. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  48. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  49. package/dist/runtime/actors/actor-remote-joiner.d.ts +3 -3
  50. package/dist/runtime/actors/actor-remote-joiner.js +11 -17
  51. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  52. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  53. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  54. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  55. package/dist/runtime/actors/actor-runtime-contracts.d.ts +4 -2
  56. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  57. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  58. package/dist/runtime/actors/actor-source-transfer.d.ts +5 -5
  59. package/dist/runtime/actors/bound-session-wire.js +2 -7
  60. package/dist/runtime/actors/deferred-join-completion.d.ts +19 -0
  61. package/dist/runtime/actors/deferred-join-completion.js +21 -0
  62. package/dist/runtime/actors/index.d.ts +10 -8
  63. package/dist/runtime/actors/index.js +101 -73
  64. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  65. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  66. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  67. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  68. package/dist/runtime/admission.d.ts +7 -1
  69. package/dist/runtime/admission.js +11 -1
  70. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  71. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  72. package/dist/runtime/backend/contracts/index.d.ts +8 -33
  73. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +3 -26
  74. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  75. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  76. package/dist/runtime/backend/node/node-backend-adapter-factory.d.ts +1 -2
  77. package/dist/runtime/backend/node/node-backend-adapter-factory.js +4 -18
  78. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +7 -4
  79. package/dist/runtime/backend/node/node-backend-adapter-support.js +28 -34
  80. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  81. package/dist/runtime/backend/node/node-event-loop-poller.js +11 -6
  82. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  83. package/dist/runtime/backend/node/node-raw-binding-port.d.ts +1 -1
  84. package/dist/runtime/backend/node/node-raw-binding-port.js +51 -19
  85. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +21 -19
  86. package/dist/runtime/backend/node/node-raw-mesh-backend.js +171 -111
  87. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  88. package/dist/runtime/backend/raw-binding-port.d.ts +13 -1
  89. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  90. package/dist/runtime/backend/runtime-values.js +2 -0
  91. package/dist/runtime/channels/channel-clients.d.ts +20 -9
  92. package/dist/runtime/channels/channel-clients.js +68 -60
  93. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  94. package/dist/runtime/channels/channel-envelope.js +47 -29
  95. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  96. package/dist/runtime/channels/channel-outbound-operations.js +9 -18
  97. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  98. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  99. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  100. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  101. package/dist/runtime/channels/channel-runtime-manager.d.ts +2 -5
  102. package/dist/runtime/channels/channel-runtime-manager.js +4 -12
  103. package/dist/runtime/channels/channel-socket-options.js +3 -2
  104. package/dist/runtime/channels/channel-socket-registry.d.ts +30 -32
  105. package/dist/runtime/channels/channel-socket-registry.js +296 -235
  106. package/dist/runtime/channels/channel-transports.d.ts +11 -20
  107. package/dist/runtime/channels/channel-transports.js +68 -47
  108. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  109. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  110. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  111. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  112. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  113. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  114. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  115. package/dist/runtime/channels/fanout-location-runtime.js +133 -81
  116. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  117. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  118. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  119. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  120. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  121. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  122. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  123. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  124. package/dist/runtime/diagnostics/flow-context.js +16 -2
  125. package/dist/runtime/diagnostics/index.d.ts +4 -2
  126. package/dist/runtime/diagnostics/index.js +14 -4
  127. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  128. package/dist/runtime/diagnostics/message-flow.js +10 -19
  129. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  130. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  131. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  132. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  133. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  134. package/dist/runtime/disposal.d.ts +5 -0
  135. package/dist/runtime/disposal.js +22 -0
  136. package/dist/runtime/execution/index.d.ts +22 -9
  137. package/dist/runtime/execution/index.js +107 -37
  138. package/dist/runtime/execution/serial-execution-queue.d.ts +12 -7
  139. package/dist/runtime/execution/serial-execution-queue.js +99 -26
  140. package/dist/runtime/execution/state-lane.d.ts +8 -1
  141. package/dist/runtime/execution/state-lane.js +118 -3
  142. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  143. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  144. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  145. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  146. package/dist/runtime/foundation/listener-records.d.ts +11 -0
  147. package/dist/runtime/foundation/listener-records.js +20 -0
  148. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  149. package/dist/runtime/foundation/operation-identity.js +9 -5
  150. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  151. package/dist/runtime/foundation/operation-registry.js +34 -44
  152. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +18 -26
  153. package/dist/runtime/foundation/raw-service-mesh-runtime.js +122 -469
  154. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  155. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  156. package/dist/runtime/foundation/service-authority-payload-codec.d.ts +1 -0
  157. package/dist/runtime/foundation/service-authority-payload-codec.js +30 -12
  158. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  159. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  160. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  161. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  162. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  163. package/dist/runtime/foundation/service-maintenance-runtime.js +23 -8
  164. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  165. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  166. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  167. package/dist/runtime/foundation/service-relocation-coordinator.d.ts +9 -0
  168. package/dist/runtime/foundation/service-relocation-coordinator.js +14 -1
  169. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +8 -0
  170. package/dist/runtime/foundation/service-relocation-object-owner.js +19 -6
  171. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  172. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  173. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  174. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -19
  175. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  176. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  177. package/dist/runtime/foundation/service-stateful-runtime.d.ts +28 -24
  178. package/dist/runtime/foundation/service-stateful-runtime.js +297 -244
  179. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +12 -7
  180. package/dist/runtime/foundation/service-stateful-wire-codec.js +240 -143
  181. package/dist/runtime/foundation/service-topology-registry.d.ts +1 -3
  182. package/dist/runtime/foundation/service-topology-registry.js +22 -61
  183. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  184. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  185. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  186. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  187. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  188. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  189. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  190. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  191. package/dist/runtime/framework-errors-internal.js +343 -122
  192. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  193. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  194. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  195. package/dist/runtime/host/actor-packet-relay.js +48 -91
  196. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  197. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  198. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  199. package/dist/runtime/host/actor-transfer-runtime.d.ts +28 -28
  200. package/dist/runtime/host/actor-transfer-runtime.js +210 -256
  201. package/dist/runtime/host/application-job-queue.js +16 -33
  202. package/dist/runtime/host/bound-session-relay.js +1 -1
  203. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  204. package/dist/runtime/host/index.d.ts +19 -14
  205. package/dist/runtime/host/index.js +234 -175
  206. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  207. package/dist/runtime/host/instance-activation-authority.js +17 -45
  208. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  209. package/dist/runtime/host/location-runtime-owner.js +2 -2
  210. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  211. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  212. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  213. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  214. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  215. package/dist/runtime/host/remote-bound-session-relay.js +11 -23
  216. package/dist/runtime/host/route-mesh-runtime.d.ts +14 -10
  217. package/dist/runtime/host/route-mesh-runtime.js +178 -257
  218. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  219. package/dist/runtime/host/runtime-shutdown.js +18 -21
  220. package/dist/runtime/host/service-relocation-control.js +6 -1
  221. package/dist/runtime/host/service-relocation-host-runtime.d.ts +71 -38
  222. package/dist/runtime/host/service-relocation-host-runtime.js +816 -651
  223. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  224. package/dist/runtime/host/spot-address-transport.js +34 -136
  225. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  226. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  227. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -7
  228. package/dist/runtime/host/spot-runtime-options-factory.js +53 -21
  229. package/dist/runtime/host/stateful-authority-route-runtime.js +6 -2
  230. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +14 -6
  231. package/dist/runtime/host/user-spot-creation-coordinator.js +96 -95
  232. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  233. package/dist/runtime/locations/authority-key-codec.js +4 -3
  234. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  235. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  236. package/dist/runtime/locations/creation-operation-id.js +6 -4
  237. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  238. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  239. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  240. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  241. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  242. package/dist/runtime/locations/in-memory-provider-location-store.js +79 -27
  243. package/dist/runtime/locations/key-codec.js +3 -2
  244. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  245. package/dist/runtime/locations/lease-tracker.js +7 -11
  246. package/dist/runtime/locations/lifecycle.d.ts +5 -10
  247. package/dist/runtime/locations/lifecycle.js +4 -33
  248. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  249. package/dist/runtime/locations/location-store-failure.js +7 -0
  250. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  251. package/dist/runtime/locations/location-store-pages.js +13 -0
  252. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  253. package/dist/runtime/locations/location-store-repository.js +303 -332
  254. package/dist/runtime/locations/relocation-blob.js +18 -5
  255. package/dist/runtime/locations/resolvers.d.ts +5 -5
  256. package/dist/runtime/locations/resolvers.js +44 -30
  257. package/dist/runtime/locations/runtime.d.ts +5 -4
  258. package/dist/runtime/locations/runtime.js +123 -92
  259. package/dist/runtime/locations/spot-location-claims.d.ts +8 -2
  260. package/dist/runtime/locations/spot-location-claims.js +40 -23
  261. package/dist/runtime/messaging/payload-codec.js +26 -20
  262. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  263. package/dist/runtime/messaging/submission-result.js +48 -0
  264. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +2 -0
  265. package/dist/runtime/protocol/service_wire_codec.generated.js +17 -8
  266. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +1 -0
  267. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +3 -2
  268. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +3 -3
  269. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +4 -4
  270. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +6 -3
  271. package/dist/runtime/spots/index.d.ts +29 -29
  272. package/dist/runtime/spots/index.js +441 -313
  273. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -4
  274. package/dist/runtime/spots/spot-activation-registry.js +27 -60
  275. package/dist/runtime/spots/spot-activation-state.d.ts +2 -11
  276. package/dist/runtime/spots/spot-activation-state.js +4 -17
  277. package/dist/runtime/spots/spot-activation.d.ts +10 -9
  278. package/dist/runtime/spots/spot-activation.js +103 -81
  279. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  280. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  281. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  282. package/dist/runtime/spots/spot-actor-join-dispatch.js +5 -55
  283. package/dist/runtime/spots/spot-actor-lifecycle-drain.js +2 -2
  284. package/dist/runtime/spots/spot-actor-membership.d.ts +7 -5
  285. package/dist/runtime/spots/spot-actor-membership.js +44 -53
  286. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  287. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  288. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  289. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  290. package/dist/runtime/spots/spot-context.d.ts +2 -2
  291. package/dist/runtime/spots/spot-entry-activation.d.ts +3 -4
  292. package/dist/runtime/spots/spot-entry-activation.js +9 -21
  293. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  294. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  295. package/dist/runtime/spots/spot-manager-public.js +6 -5
  296. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  297. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +22 -21
  298. package/dist/runtime/spots/spot-node-runtime-manager.js +73 -82
  299. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  300. package/dist/runtime/spots/spot-outbound.js +10 -37
  301. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  302. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  303. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  304. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  305. package/dist/runtime/spots/spot-route-replies.js +3 -1
  306. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -2
  307. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -2
  308. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +2 -7
  309. package/dist/runtime/spots/spot-routed-frame-dispatch.js +1 -70
  310. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  311. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  312. package/dist/runtime/spots/spot-runtime-ports.d.ts +4 -20
  313. package/dist/runtime/spots/spot-serial-executor.d.ts +5 -0
  314. package/dist/runtime/spots/spot-serial-executor.js +9 -2
  315. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +29 -6
  316. package/dist/runtime/spots/spot-serial-turn-executor.js +89 -13
  317. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  318. package/dist/runtime/streams/actor-session-binding-registry.d.ts +17 -32
  319. package/dist/runtime/streams/actor-session-binding-registry.js +145 -367
  320. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +2 -6
  321. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  322. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  323. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  324. package/dist/runtime/streams/bound-session-service.js +12 -19
  325. package/dist/runtime/streams/index.d.ts +15 -14
  326. package/dist/runtime/streams/index.js +38 -39
  327. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  328. package/dist/runtime/streams/managed-stream.js +17 -8
  329. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  330. package/dist/runtime/streams/protocol.d.ts +6 -33
  331. package/dist/runtime/streams/protocol.js +38 -110
  332. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  333. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  334. package/dist/runtime/streams/session-calls.d.ts +1 -1
  335. package/dist/runtime/streams/session-calls.js +5 -4
  336. package/dist/runtime/streams/session-context.d.ts +6 -6
  337. package/dist/runtime/streams/session-context.js +22 -4
  338. package/dist/runtime/streams/session-requests.js +2 -1
  339. package/dist/runtime/streams/session-serial-executor.js +2 -2
  340. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  341. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  342. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  343. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  344. package/dist/runtime/workers/index.d.ts +2 -2
  345. package/dist/runtime/workers/index.js +5 -4
  346. package/package.json +3 -3
  347. package/src/contracts/Channels/IZLinkFanoutClient.ts +0 -7
  348. package/src/contracts/Common/CoreTypes.ts +7 -0
  349. package/src/contracts/Common/index.ts +1 -1
  350. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  351. package/src/contracts/Configuration/Registration.ts +92 -48
  352. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  353. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  354. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  355. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  356. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  357. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  358. package/src/contracts/Handlers/JsonContract.ts +14 -4
  359. package/src/contracts/Locations/Authority.ts +7 -3
  360. package/src/contracts/Locations/Options.ts +1 -1
  361. package/src/contracts/Locations/Stores.ts +14 -0
  362. package/src/contracts/RouteMesh/RuntimeTopology.ts +10 -0
  363. package/src/contracts/Spots/Contracts.ts +1 -1
  364. package/src/internal.ts +15 -0
  365. package/src/nest-integration.ts +28 -10
  366. package/src/runtime/abort.ts +6 -5
  367. package/src/runtime/activation-admission.ts +72 -0
  368. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  369. package/src/runtime/actors/actor-client.ts +77 -204
  370. package/src/runtime/actors/actor-context.ts +45 -39
  371. package/src/runtime/actors/actor-handoff.ts +55 -45
  372. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  373. package/src/runtime/actors/actor-local-native-join.ts +174 -215
  374. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  375. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  376. package/src/runtime/actors/actor-remote-joiner.ts +15 -36
  377. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  378. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  379. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  380. package/src/runtime/actors/actor-runtime-contracts.ts +4 -10
  381. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  382. package/src/runtime/actors/actor-source-transfer.ts +5 -18
  383. package/src/runtime/actors/bound-session-wire.ts +2 -8
  384. package/src/runtime/actors/deferred-join-completion.ts +44 -0
  385. package/src/runtime/actors/index.ts +122 -88
  386. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  387. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  388. package/src/runtime/admission.ts +13 -2
  389. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  390. package/src/runtime/backend/contracts/index.ts +15 -42
  391. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +4 -28
  392. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  393. package/src/runtime/backend/node/node-backend-adapter-factory.ts +5 -25
  394. package/src/runtime/backend/node/node-backend-adapter-support.ts +32 -35
  395. package/src/runtime/backend/node/node-event-loop-poller.ts +16 -8
  396. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  397. package/src/runtime/backend/node/node-raw-binding-port.ts +58 -23
  398. package/src/runtime/backend/node/node-raw-mesh-backend.ts +252 -162
  399. package/src/runtime/backend/node/node-socket-backend-adapter.ts +5 -4
  400. package/src/runtime/backend/raw-binding-port.ts +14 -1
  401. package/src/runtime/backend/runtime-values.ts +4 -1
  402. package/src/runtime/channels/channel-clients.ts +132 -96
  403. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  404. package/src/runtime/channels/channel-envelope.ts +58 -29
  405. package/src/runtime/channels/channel-outbound-operations.ts +10 -31
  406. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  407. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  408. package/src/runtime/channels/channel-runtime-manager.ts +8 -15
  409. package/src/runtime/channels/channel-socket-options.ts +8 -2
  410. package/src/runtime/channels/channel-socket-registry.ts +369 -262
  411. package/src/runtime/channels/channel-transports.ts +161 -115
  412. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  413. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  414. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  415. package/src/runtime/channels/fanout-location-runtime.ts +175 -106
  416. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  417. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  418. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  419. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  420. package/src/runtime/diagnostics/flow-context.ts +16 -2
  421. package/src/runtime/diagnostics/index.ts +27 -17
  422. package/src/runtime/diagnostics/message-flow.ts +15 -25
  423. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  424. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  425. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  426. package/src/runtime/disposal.ts +19 -0
  427. package/src/runtime/execution/index.ts +116 -38
  428. package/src/runtime/execution/serial-execution-queue.ts +179 -34
  429. package/src/runtime/execution/state-lane.ts +142 -4
  430. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  431. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  432. package/src/runtime/foundation/listener-records.ts +21 -0
  433. package/src/runtime/foundation/operation-identity.ts +11 -5
  434. package/src/runtime/foundation/operation-registry.ts +33 -50
  435. package/src/runtime/foundation/raw-service-mesh-runtime.ts +170 -571
  436. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  437. package/src/runtime/foundation/service-authority-payload-codec.ts +41 -13
  438. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  439. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  440. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  441. package/src/runtime/foundation/service-maintenance-runtime.ts +30 -19
  442. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  443. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  444. package/src/runtime/foundation/service-relocation-coordinator.ts +13 -0
  445. package/src/runtime/foundation/service-relocation-object-owner.ts +23 -7
  446. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  447. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  448. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -25
  449. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  450. package/src/runtime/foundation/service-stateful-runtime.ts +435 -327
  451. package/src/runtime/foundation/service-stateful-wire-codec.ts +329 -199
  452. package/src/runtime/foundation/service-topology-registry.ts +30 -79
  453. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  454. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  455. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  456. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  457. package/src/runtime/framework-errors-internal.ts +380 -134
  458. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  459. package/src/runtime/host/actor-packet-relay.ts +57 -147
  460. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  461. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  462. package/src/runtime/host/actor-transfer-runtime.ts +266 -418
  463. package/src/runtime/host/application-job-queue.ts +28 -34
  464. package/src/runtime/host/bound-session-relay.ts +1 -2
  465. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  466. package/src/runtime/host/index.ts +408 -312
  467. package/src/runtime/host/instance-activation-authority.ts +89 -109
  468. package/src/runtime/host/location-runtime-owner.ts +4 -2
  469. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  470. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  471. package/src/runtime/host/remote-bound-session-relay.ts +12 -44
  472. package/src/runtime/host/route-mesh-runtime.ts +236 -275
  473. package/src/runtime/host/runtime-shutdown.ts +17 -21
  474. package/src/runtime/host/service-relocation-control.ts +14 -1
  475. package/src/runtime/host/service-relocation-host-runtime.ts +1161 -904
  476. package/src/runtime/host/spot-address-transport.ts +73 -195
  477. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  478. package/src/runtime/host/spot-runtime-options-factory.ts +92 -30
  479. package/src/runtime/host/stateful-authority-route-runtime.ts +8 -4
  480. package/src/runtime/host/user-spot-creation-coordinator.ts +182 -163
  481. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  482. package/src/runtime/locations/authority-key-codec.ts +7 -3
  483. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  484. package/src/runtime/locations/creation-operation-id.ts +6 -3
  485. package/src/runtime/locations/domain-store-contract.ts +12 -3
  486. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  487. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  488. package/src/runtime/locations/in-memory-provider-location-store.ts +110 -31
  489. package/src/runtime/locations/key-codec.ts +3 -2
  490. package/src/runtime/locations/lease-tracker.ts +8 -14
  491. package/src/runtime/locations/lifecycle.ts +16 -45
  492. package/src/runtime/locations/location-store-failure.ts +4 -0
  493. package/src/runtime/locations/location-store-pages.ts +18 -0
  494. package/src/runtime/locations/location-store-repository.ts +450 -478
  495. package/src/runtime/locations/relocation-blob.ts +17 -6
  496. package/src/runtime/locations/resolvers.ts +90 -58
  497. package/src/runtime/locations/runtime.ts +220 -110
  498. package/src/runtime/locations/spot-location-claims.ts +54 -26
  499. package/src/runtime/messaging/payload-codec.ts +35 -24
  500. package/src/runtime/messaging/submission-result.ts +57 -1
  501. package/src/runtime/protocol/service_wire_codec.generated.ts +27 -10
  502. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +4 -4
  503. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +6 -6
  504. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +6 -3
  505. package/src/runtime/spots/index.ts +687 -437
  506. package/src/runtime/spots/spot-activation-registry.ts +42 -71
  507. package/src/runtime/spots/spot-activation-state.ts +4 -16
  508. package/src/runtime/spots/spot-activation.ts +167 -115
  509. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  510. package/src/runtime/spots/spot-actor-join-dispatch.ts +25 -79
  511. package/src/runtime/spots/spot-actor-lifecycle-drain.ts +20 -18
  512. package/src/runtime/spots/spot-actor-membership.ts +107 -75
  513. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  514. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  515. package/src/runtime/spots/spot-context.ts +3 -3
  516. package/src/runtime/spots/spot-entry-activation.ts +13 -33
  517. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  518. package/src/runtime/spots/spot-manager-public.ts +29 -21
  519. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  520. package/src/runtime/spots/spot-node-runtime-manager.ts +145 -140
  521. package/src/runtime/spots/spot-outbound.ts +47 -68
  522. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  523. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  524. package/src/runtime/spots/spot-route-replies.ts +6 -4
  525. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -6
  526. package/src/runtime/spots/spot-routed-frame-dispatch.ts +6 -77
  527. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  528. package/src/runtime/spots/spot-runtime-ports.ts +10 -43
  529. package/src/runtime/spots/spot-serial-executor.ts +10 -2
  530. package/src/runtime/spots/spot-serial-turn-executor.ts +120 -13
  531. package/src/runtime/spots/spot-timer.ts +3 -2
  532. package/src/runtime/streams/actor-session-binding-registry.ts +182 -560
  533. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +1 -19
  534. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  535. package/src/runtime/streams/bound-session-service.ts +23 -37
  536. package/src/runtime/streams/index.ts +102 -88
  537. package/src/runtime/streams/managed-stream.ts +29 -10
  538. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  539. package/src/runtime/streams/protocol.ts +34 -88
  540. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  541. package/src/runtime/streams/session-calls.ts +6 -5
  542. package/src/runtime/streams/session-context.ts +54 -10
  543. package/src/runtime/streams/session-requests.ts +2 -1
  544. package/src/runtime/streams/session-serial-executor.ts +2 -2
  545. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  546. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  547. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  548. package/src/runtime/workers/index.ts +13 -12
  549. package/dist/runtime/actors/deferred-join-accepted-journal.d.ts +0 -47
  550. package/dist/runtime/actors/deferred-join-accepted-journal.js +0 -992
  551. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  552. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  553. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  554. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  555. package/src/runtime/actors/deferred-join-accepted-journal.ts +0 -1346
  556. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  557. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -11,13 +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
- import { operationIdentityKey } from '../foundation/operation-identity';
18
16
  import type { ZLinkActorJoinRelocation } from './actor-join-relocation';
19
17
 
20
- export interface ZLinkActorNativeJoinCoordinatorOptions {
18
+ export interface ZLinkActorNativeJoinCoordinatorOptions extends Pick<
19
+ import('./actor-local-native-join').ZLinkLocalNativeActorJoinOptions,
20
+ 'localSpotJoin' | 'localEntryJoin' | 'localSourceLeave' | 'reportSourceLeaveError'
21
+ > {
21
22
  readonly messageFlow?: () =>
22
23
  import('../diagnostics/message-flow').ZLinkMessageFlowTracer | undefined;
23
24
  readonly node: ZLinkBackendMeshNode | (() => ZLinkBackendMeshNode);
@@ -47,16 +48,12 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
47
48
  }
48
49
 
49
50
  constructor(private readonly options: ZLinkActorNativeJoinCoordinatorOptions) {
50
- const postCommitLocation =
51
- options.locationLifecycle === undefined
52
- ? undefined
53
- : new ZLinkPostCommitActorLocation({
54
- lifecycle: options.locationLifecycle,
55
- reportError: options.postCommitErrorReporter,
56
- signal: options.shutdownSignal
57
- });
58
51
  this.localJoin = new ZLinkLocalNativeActorJoin({
59
- postCommitLocation,
52
+ locationLifecycle: options.locationLifecycle,
53
+ localSpotJoin: options.localSpotJoin,
54
+ localEntryJoin: options.localEntryJoin,
55
+ localSourceLeave: options.localSourceLeave,
56
+ reportSourceLeaveError: options.reportSourceLeaveError,
60
57
  postCommitBinder:
61
58
  options.remoteActorBinder === undefined
62
59
  ? undefined
@@ -71,28 +68,12 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
71
68
  });
72
69
  }
73
70
 
74
- beginDeferredJoin(
75
- actor: ZLinkActor,
76
- state: ZLinkActorRuntimeState,
77
- operationId: import('../../contracts').ZLinkActorJoinOperationId
78
- ): void {
79
- this.options.sourceTransfer?.beginDeferredActorHandoff?.(
80
- actor,
81
- state,
82
- operationIdentityKey(operationId)
83
- );
71
+ beginDeferredJoin(actor: ZLinkActor, state: ZLinkActorRuntimeState): void {
72
+ this.options.sourceTransfer?.beginDeferredActorHandoff?.(actor, state);
84
73
  }
85
74
 
86
- async abortDeferredJoin(
87
- actor: ZLinkActor,
88
- state: ZLinkActorRuntimeState,
89
- operationId: import('../../contracts').ZLinkActorJoinOperationId
90
- ): Promise<void> {
91
- await this.options.sourceTransfer?.cancelDeferredActorHandoff?.(
92
- actor,
93
- state,
94
- operationIdentityKey(operationId)
95
- );
75
+ async abortDeferredJoin(actor: ZLinkActor, state: ZLinkActorRuntimeState): Promise<void> {
76
+ await this.options.sourceTransfer?.cancelDeferredActorHandoff?.(actor, state);
96
77
  }
97
78
 
98
79
  async joinSpot(
@@ -184,7 +165,6 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
184
165
  operationId: import('../../contracts').ZLinkActorJoinOperationId | undefined
185
166
  ): ZLinkActorJoinRuntimeResult<Message> {
186
167
  if (operationId === undefined || this.options.sourceTransfer === undefined) return result;
187
- const key = operationIdentityKey(operationId);
188
168
  return {
189
169
  ...result,
190
170
  finalizeDeferredJoin: async () => {
@@ -192,11 +172,10 @@ export class ZLinkActorNativeJoinCoordinator implements ZLinkActorJoinCoordinato
192
172
  await this.options.sourceTransfer!.completeDeferredActorHandoff?.(
193
173
  actor,
194
174
  target,
195
- result.actor,
196
- key
175
+ result.actor
197
176
  );
198
177
  } else {
199
- await this.options.sourceTransfer!.cancelDeferredActorHandoff?.(actor, state, key);
178
+ await this.options.sourceTransfer!.cancelDeferredActorHandoff?.(actor, state);
200
179
  }
201
180
  }
202
181
  };
@@ -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
  }
@@ -16,6 +16,7 @@ import type { ZLinkLocationLifecycle } from '../locations';
16
16
  import type { ZLinkActorRuntimeState } from './actor-runtime-state';
17
17
  import type { ZLinkActorTransferRegistry } from './actor-transfer-registry';
18
18
  import type { ZLinkRuntimeAdmissionGate } from '../admission';
19
+ import type { ZLinkActivationAdmission } from '../activation-admission';
19
20
 
20
21
  export interface ZLinkActorJoinRuntimeResult<TReply> {
21
22
  readonly accepted: boolean;
@@ -61,6 +62,7 @@ export interface ZLinkActorManagerOptions {
61
62
  readonly shutdownSignal?: AbortSignal;
62
63
  readonly metrics?: import('../diagnostics').ZLinkRuntimeMetrics;
63
64
  readonly admission?: ZLinkRuntimeAdmissionGate;
65
+ readonly activationAdmission?: ZLinkActivationAdmission;
64
66
  readonly placementCreate?: (
65
67
  actorId: string,
66
68
  actorType: string,
@@ -92,16 +94,8 @@ export interface ZLinkActorJoinCoordinator {
92
94
  * lookup. This is an internal ordering fence; it is not part of the public
93
95
  * actor context contract.
94
96
  */
95
- beginDeferredJoin?(
96
- actor: ZLinkActor,
97
- state: ZLinkActorRuntimeState,
98
- operationId: import('../../contracts').ZLinkActorJoinOperationId
99
- ): void;
100
- abortDeferredJoin?(
101
- actor: ZLinkActor,
102
- state: ZLinkActorRuntimeState,
103
- operationId: import('../../contracts').ZLinkActorJoinOperationId
104
- ): Promise<void>;
97
+ beginDeferredJoin?(actor: ZLinkActor, state: ZLinkActorRuntimeState): void;
98
+ abortDeferredJoin?(actor: ZLinkActor, state: ZLinkActorRuntimeState): Promise<void>;
105
99
  joinSpot(
106
100
  actor: ZLinkActor,
107
101
  state: ZLinkActorRuntimeState,
@@ -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 {