@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,24 +1,10 @@
1
+ import { ZLinkFrameworkException, ZLinkSpotKind, type RoutingId } from '../../contracts';
1
2
  import {
2
- ZLinkFrameworkInternalErrorKind,
3
- createInternalFrameworkException,
4
- internalFrameworkErrorKind,
5
- internalFrameworkErrorKindFromWireReply,
6
- isCanonicalWireReplyTerminal
7
- } from '../framework-errors-internal';
8
- import {
9
- RequestResult,
10
- SubmitResult,
11
- type ZLinkBackendMessageLike as MessageLike
12
- } from '../backend/runtime-values';
13
- import { ZLinkFrameworkException, type RoutingId } from '../../contracts';
14
- import { ZLinkSubmitStatus, type ZLinkSubmitResult } from '../messaging/submission-result';
15
- import { ZLinkSpotKind } from '../../contracts';
16
- import {
17
- ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
18
3
  ZLinkRuntimeDispatchErrorAction as ZLinkDispatchErrorAction,
19
4
  ZLinkRuntimeDispatchErrorReason as ZLinkDispatchErrorReason,
20
5
  ZLinkDispatchErrorSurface,
21
- ZLinkDispatchMessageKind
6
+ ZLinkDispatchMessageKind,
7
+ ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome
22
8
  } from '../../contracts/Dispatch/ZLinkDispatchOptions';
23
9
  import { awaitWithAbort } from '../abort';
24
10
  import type { ZLinkBackendMeshNode } from '../backend/contracts';
@@ -27,16 +13,32 @@ import {
27
13
  type ZLinkMeshCompletionTable
28
14
  } from '../backend/mesh-completion-table';
29
15
  import {
16
+ RequestResult,
17
+ type ZLinkBackendMessageLike as MessageLike
18
+ } from '../backend/runtime-values';
19
+ import type { ZLinkDispatchErrorReporter } from '../channels';
20
+ import {
21
+ ZLinkChannelMessageKind,
30
22
  decodeChannelReply,
31
23
  encodeChannelEnvelopeParts,
32
24
  encodeChannelEnvelopePartsAtDeadline,
33
- type ZLinkChannelEnvelopeCodecRegistry,
34
- ZLinkChannelMessageKind
25
+ type ZLinkChannelEnvelopeCodecRegistry
35
26
  } from '../channels/channel-envelope';
36
- import type { ZLinkDispatchErrorReporter } from '../channels';
37
27
  import { flowIfEnabled } from '../diagnostics';
38
28
  import { runWithOutboundFlow } from '../diagnostics/flow-context';
29
+ import {
30
+ ZLinkFrameworkInternalErrorKind,
31
+ createInternalFrameworkException,
32
+ internalFrameworkErrorKind,
33
+ internalFrameworkErrorKindFromWireReply,
34
+ isCanonicalWireReplyTerminal
35
+ } from '../framework-errors-internal';
39
36
  import { resolveFrameworkPacketName } from '../messaging/packet-name';
37
+ import {
38
+ ZLinkSubmitStatus,
39
+ classifySubmitResult,
40
+ type ZLinkSubmitResult
41
+ } from '../messaging/submission-result';
40
42
  import type {
41
43
  ZLinkSpotAddressCallOptions,
42
44
  ZLinkSpotAddressTransport,
@@ -84,11 +86,6 @@ type MissingTargetSelection =
84
86
  | { readonly kind: 'capacity' }
85
87
  | { readonly kind: 'unavailable' };
86
88
 
87
- // Only a synchronous target-admission rejection is safe to retry. A
88
- // completion with the same public error kind may already represent an
89
- // admitted application operation, so it must not enter the retry loop.
90
- const PRE_ADMISSION_MISSING_INSTANCE_ERRORS = new WeakSet<ZLinkFrameworkException>();
91
-
92
89
  /** Owns global Spot authority lookup and Missing Instance placement. */
93
90
  export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport {
94
91
  constructor(private readonly options: ZLinkHostSpotAddressTransportOptions) {}
@@ -123,6 +120,7 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
123
120
  try {
124
121
  const result = await awaitWithAbort(
125
122
  this.options.routed.sendToSpot(existing, message, {
123
+ instanceSpot: call.instanceSpot,
126
124
  timeoutMs: deadline.requireRemaining(),
127
125
  signal: deadline.signal,
128
126
  metadata: call.metadata
@@ -226,7 +224,7 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
226
224
  const encoded = this.encode(ZLinkChannelMessageKind.Command, selected.meshName, message);
227
225
  const sourceSpotId =
228
226
  call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId);
229
- const mapped = mapSubmitResult(
227
+ const mapped = classifySubmitResult(
230
228
  await awaitWithAbort(
231
229
  selected.node.sendToMissingInstanceSpot(
232
230
  selected.target,
@@ -236,7 +234,8 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
236
234
  call.metadata
237
235
  ),
238
236
  deadline.signal
239
- )
237
+ ),
238
+ 'Instance Spot submission'
240
239
  );
241
240
  this.traceInstanceAddress(
242
241
  submitResultFlowOutcome(mapped.status),
@@ -280,57 +279,41 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
280
279
  const timeoutMs = call.timeoutMs ?? this.options.defaultRequestTimeoutMs;
281
280
  const deadline = createSpotAddressDeadline(timeoutMs, call.signal);
282
281
  try {
283
- for (;;) {
284
- const existing = await this.resolveExisting(spotId, deadline.signal);
285
- deadline.requireRemaining();
286
-
287
- if (existing !== undefined) {
288
- this.validateExisting(existing, call);
289
- try {
290
- return await this.requestToExistingSpot(spotId, request, call, existing, deadline);
291
- } catch (error) {
292
- if (isSpotRouteRefreshError(error)) {
293
- this.options.resolver()?.invalidate?.(spotId);
294
- }
295
- const recovery = await this.recoverStaleInstanceRoute(
296
- spotId,
297
- call,
298
- deadline,
299
- error,
300
- existing
301
- );
302
- if (recovery.kind === 'route') {
303
- // Retry only after the resolver exposes a different route. The
304
- // stale target cannot have admitted the application operation.
305
- continue;
306
- }
307
- if (recovery.kind !== 'cold') {
308
- this.reportInstanceRequestError(
309
- spotId,
310
- request,
311
- error,
312
- existing.routerChannelId,
313
- existing.targetNodeRid,
314
- existing.stableType,
315
- addressedInstanceErrorReason(error)
316
- );
317
- throw error;
318
- }
319
- // The logical authority is no longer Ready, so the Instance
320
- // intent path below may submit the original operation once.
321
- }
282
+ const existing = await this.resolveExisting(spotId, deadline.signal);
283
+ deadline.requireRemaining();
284
+ if (existing === undefined) {
285
+ return await this.requestToMissingInstance(spotId, request, call, deadline);
286
+ }
287
+ this.validateExisting(existing, call);
288
+ try {
289
+ return await this.requestToExistingSpot(spotId, request, call, existing, deadline);
290
+ } catch (error) {
291
+ if (isSpotRouteRefreshError(error)) {
292
+ this.options.resolver()?.invalidate?.(spotId);
322
293
  }
323
-
324
- try {
294
+ // Failover policy §4.4: SpotMoving is the owner's Ready owner-fence
295
+ // refusal, made before admission. With Instance intent, one authority
296
+ // read under the same deadline decides: Missing means Close released
297
+ // the incarnation, so the request activates a new one. Any other
298
+ // answer, and any message the owner admitted, keeps this terminal.
299
+ if (
300
+ call.instanceSpot &&
301
+ isOwnerFenceRefusal(error) &&
302
+ (await this.resolveExisting(spotId, deadline.signal)) === undefined
303
+ ) {
304
+ deadline.requireRemaining();
325
305
  return await this.requestToMissingInstance(spotId, request, call, deadline);
326
- } catch (error) {
327
- if (!isMissingInstanceRetryError(error)) throw error;
328
- // A placement node can finish cleanup before its stale native result
329
- // reaches this process. Refresh authority and select again under the
330
- // same end-to-end deadline; the old envelope was not admitted.
331
- this.options.resolver()?.invalidate?.(spotId);
332
- await waitForSpotRouteRefresh(Math.min(10, deadline.requireRemaining()), deadline.signal);
333
306
  }
307
+ this.reportInstanceRequestError(
308
+ spotId,
309
+ request,
310
+ error,
311
+ existing.routerChannelId,
312
+ existing.targetNodeRid,
313
+ existing.stableType,
314
+ addressedInstanceErrorReason(error)
315
+ );
316
+ throw error;
334
317
  }
335
318
  } catch (error) {
336
319
  if (
@@ -372,6 +355,7 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
372
355
  );
373
356
  const reply = await awaitWithAbort(
374
357
  this.options.routed.requestToSpot<TReply>(existing, request, {
358
+ instanceSpot: call.instanceSpot,
375
359
  timeoutMs: deadline.requireRemaining(),
376
360
  signal: deadline.signal,
377
361
  metadata: call.metadata
@@ -446,28 +430,17 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
446
430
  const table = this.options.completions(selected.meshName);
447
431
  if (table === undefined)
448
432
  throw new Error(`MeshNode '${selected.meshName}' completion table is not started.`);
449
- let completionPromise: ReturnType<ZLinkMeshCompletionTable['submit']>;
450
- try {
451
- completionPromise = table.submit(
452
- () =>
453
- selected.node.requestToMissingInstanceSpot(
454
- selected.target,
455
- encoded,
456
- deadlineUnixMs,
457
- call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId),
458
- call.metadata
459
- ),
460
- deadline.signal
461
- );
462
- } catch (error) {
463
- if (
464
- error instanceof ZLinkFrameworkException &&
465
- internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound
466
- ) {
467
- PRE_ADMISSION_MISSING_INSTANCE_ERRORS.add(error);
468
- }
469
- throw error;
470
- }
433
+ const completionPromise = table.submit(
434
+ () =>
435
+ selected.node.requestToMissingInstanceSpot(
436
+ selected.target,
437
+ encoded,
438
+ deadlineUnixMs,
439
+ call.sourceSpot === undefined ? undefined : String(call.sourceSpot.routingId),
440
+ call.metadata
441
+ ),
442
+ deadline.signal
443
+ );
471
444
  this.traceInstanceAddress(
472
445
  ZLinkMessageFlowOutcome.Sent,
473
446
  ZLinkDispatchMessageKind.Request,
@@ -580,35 +553,6 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
580
553
  }
581
554
  }
582
555
 
583
- private async recoverStaleInstanceRoute(
584
- spotId: RoutingId,
585
- call: ZLinkSpotAddressCallOptions,
586
- deadline: ZLinkSpotAddressDeadline,
587
- error: unknown,
588
- staleRoute: ZLinkSpotRouteTarget
589
- ): Promise<
590
- | { readonly kind: 'route'; readonly route: ZLinkSpotRouteTarget }
591
- | { readonly kind: 'cold' }
592
- | { readonly kind: 'fail' }
593
- > {
594
- if (
595
- !call.instanceSpot ||
596
- !(error instanceof ZLinkFrameworkException) ||
597
- !isInstanceRouteStaleError(error)
598
- ) {
599
- return { kind: 'fail' };
600
- }
601
- for (;;) {
602
- deadline.requireRemaining();
603
- const current = await this.resolveExisting(spotId, deadline.signal);
604
- if (current === undefined) return { kind: 'cold' };
605
- if (!sameSpotRouteSnapshot(current, staleRoute)) {
606
- return { kind: 'route', route: current };
607
- }
608
- await waitForSpotRouteRefresh(Math.min(10, deadline.requireRemaining()), deadline.signal);
609
- }
610
- }
611
-
612
556
  private selectMissingTarget(
613
557
  spotId: RoutingId,
614
558
  call: ZLinkSpotAddressCallOptions
@@ -771,25 +715,6 @@ export class ZLinkHostSpotAddressTransport implements ZLinkSpotAddressTransport
771
715
  }
772
716
  }
773
717
 
774
- function isInstanceRouteStaleError(error: unknown): error is ZLinkFrameworkException {
775
- if (!(error instanceof ZLinkFrameworkException)) return false;
776
- const kind = internalFrameworkErrorKind(error);
777
- // RequestTargetNotFound from an existing route is a pre-admission route
778
- // lookup failure. A stale owner result is terminal for this application
779
- // operation: the routed request may already have crossed the transport
780
- // boundary, so refreshing the route and resubmitting it could execute the
781
- // same operation twice. Instance cold activation is selected only when the
782
- // authority resolver itself reports that the Ready route is absent.
783
- if (kind === ZLinkFrameworkInternalErrorKind.RequestTargetNotFound) return true;
784
- return false;
785
- }
786
-
787
- function isMissingInstanceRetryError(error: unknown): error is ZLinkFrameworkException {
788
- return (
789
- error instanceof ZLinkFrameworkException && PRE_ADMISSION_MISSING_INSTANCE_ERRORS.has(error)
790
- );
791
- }
792
-
793
718
  function missingInstanceRequestFailure(
794
719
  result: number,
795
720
  nativeErrno: number
@@ -819,27 +744,6 @@ function missingInstanceRequestFailure(
819
744
  );
820
745
  }
821
746
 
822
- function mapSubmitResult(result: number): ZLinkSubmitResult {
823
- switch (result) {
824
- case SubmitResult.Ok:
825
- return { status: ZLinkSubmitStatus.Submitted };
826
- case SubmitResult.Backpressured:
827
- case SubmitResult.NotAdmitted:
828
- return { status: ZLinkSubmitStatus.Backpressured };
829
- case SubmitResult.NotFound:
830
- return { status: ZLinkSubmitStatus.TargetNotFound };
831
- case SubmitResult.NotConnected:
832
- return { status: ZLinkSubmitStatus.RouteNotConnected };
833
- case SubmitResult.Terminated:
834
- return { status: ZLinkSubmitStatus.Shutdown };
835
- default:
836
- throw createInternalFrameworkException(
837
- ZLinkFrameworkInternalErrorKind.RequestFailed,
838
- `Instance Spot submission failed with result ${result}.`
839
- );
840
- }
841
- }
842
-
843
747
  function missingInstancePlacementCapacity(
844
748
  spotId: RoutingId,
845
749
  stableType: string | undefined
@@ -877,39 +781,13 @@ function isSpotRouteRefreshError(error: unknown): error is ZLinkFrameworkExcepti
877
781
  );
878
782
  }
879
783
 
880
- function sameSpotRouteSnapshot(left: ZLinkSpotRouteTarget, right: ZLinkSpotRouteTarget): boolean {
784
+ function isOwnerFenceRefusal(error: unknown): boolean {
881
785
  return (
882
- String(left.targetNodeRid) === String(right.targetNodeRid) &&
883
- String(left.spotId) === String(right.spotId) &&
884
- left.routerChannelId === right.routerChannelId &&
885
- left.spotKind === right.spotKind &&
886
- left.stableType === right.stableType &&
887
- left.targetSpotGeneration === right.targetSpotGeneration &&
888
- left.targetNodeGeneration === right.targetNodeGeneration &&
889
- left.authorityOwnerGeneration === right.authorityOwnerGeneration &&
890
- left.targetOwnerId === right.targetOwnerId &&
891
- left.ownerLeaseGeneration === right.ownerLeaseGeneration &&
892
- left.authorityStoreVersion === right.authorityStoreVersion
786
+ error instanceof ZLinkFrameworkException &&
787
+ internalFrameworkErrorKind(error) === ZLinkFrameworkInternalErrorKind.SpotMoving
893
788
  );
894
789
  }
895
790
 
896
- function waitForSpotRouteRefresh(delayMs: number, signal: AbortSignal): Promise<void> {
897
- return new Promise((resolve, reject) => {
898
- const finish = () => {
899
- signal.removeEventListener('abort', abort);
900
- resolve();
901
- };
902
- const abort = () => {
903
- clearTimeout(timer);
904
- signal.removeEventListener('abort', abort);
905
- reject(signal.reason);
906
- };
907
- const timer = setTimeout(finish, delayMs);
908
- signal.addEventListener('abort', abort, { once: true });
909
- if (signal.aborted) abort();
910
- });
911
- }
912
-
913
791
  function submitResultReason(status: ZLinkSubmitStatus): ZLinkDispatchErrorReason {
914
792
  switch (status) {
915
793
  case ZLinkSubmitStatus.Backpressured:
@@ -51,7 +51,8 @@ export interface ZLinkSpotNodeRuntimeOptionsFactoryOptions {
51
51
  export class ZLinkSpotNodeRuntimeOptionsFactory {
52
52
  constructor(private readonly options: ZLinkSpotNodeRuntimeOptionsFactoryOptions) {}
53
53
 
54
- create(): ZLinkSpotNodeRuntimeManagerOptions {
54
+ create(): Omit<ZLinkSpotNodeRuntimeManagerOptions, 'errorSink'> {
55
+ const spotRouterChannelIdForMesh = this.options.meshRouters.spotRouterChannelIdByMesh();
55
56
  return {
56
57
  registration: this.options.registration,
57
58
  primaryMeshName: this.options.meshRouters.primaryMeshName(),
@@ -59,7 +60,9 @@ export class ZLinkSpotNodeRuntimeOptionsFactory {
59
60
  context: this.options.context,
60
61
  channelClient: new DefaultZLinkChannelClient(
61
62
  this.options.registration,
62
- this.options.channelTransport
63
+ this.options.channelTransport,
64
+ this.options.routeTransport,
65
+ spotRouterChannelIdForMesh
63
66
  ),
64
67
  fanoutClient: new DefaultZLinkFanoutClient(
65
68
  this.options.registration,
@@ -70,7 +73,7 @@ export class ZLinkSpotNodeRuntimeOptionsFactory {
70
73
  this.options.spotPublisherTransport
71
74
  ),
72
75
  routedTransport: this.options.routeTransport,
73
- spotRouterChannelIdForMesh: this.options.meshRouters.spotRouterChannelIdByMesh(),
76
+ spotRouterChannelIdForMesh,
74
77
  providerResolver: this.options.providerResolver,
75
78
  dispatchErrors: this.options.dispatchErrors,
76
79
  runtimeEventPublisher: this.options.runtimeEventPublisher,
@@ -51,18 +51,24 @@ export interface ZLinkSpotRuntimeOptionsFactoryOptions {
51
51
  meshName: string,
52
52
  spotId: string,
53
53
  onCommitted: () => void
54
- ) => Promise<{ release(): Promise<void> } | undefined>;
54
+ ) => Promise<
55
+ import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined
56
+ >;
55
57
  readonly beginInstanceClosingAuthority: (
56
58
  meshName: string,
57
59
  spotId: string,
58
60
  onCommitted: () => void
59
- ) => Promise<{ release(): Promise<void> } | undefined>;
61
+ ) => Promise<
62
+ import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined
63
+ >;
60
64
  readonly beginUserClosingAuthority: (
61
65
  meshName: string,
62
66
  spotId: string,
63
67
  objectGeneration: bigint,
64
68
  onCommitted: () => void
65
- ) => Promise<{ release(): Promise<void> } | undefined>;
69
+ ) => Promise<
70
+ import('../locations/spot-location-claims').ZLinkInstanceClosingAuthority | undefined
71
+ >;
66
72
  readonly createLocationSpotRouteResolver: () => ZLinkSpotRouteResolver | undefined;
67
73
  readonly boundSessionRelay: ZLinkBoundSessionRelay;
68
74
  readonly actorHandoff: ZLinkActorHandoffCoordinator;
@@ -71,13 +77,14 @@ export interface ZLinkSpotRuntimeOptionsFactoryOptions {
71
77
  readonly detachedTaskRunner: ZLinkDetachedTaskRunner;
72
78
  readonly metrics: import('../diagnostics').ZLinkRuntimeMetrics;
73
79
  readonly admission: ZLinkRuntimeAdmissionGate;
74
- readonly statefulExecutionAllowed: () => boolean;
80
+ readonly statefulExecution: NonNullable<ZLinkSpotManagerOptions['statefulExecution']>;
75
81
  }
76
82
 
77
83
  export class ZLinkSpotRuntimeOptionsFactory {
78
84
  constructor(private readonly options: ZLinkSpotRuntimeOptionsFactoryOptions) {}
79
85
 
80
86
  create(actorTransferRuntime: ZLinkActorTransferRuntime): Partial<ZLinkSpotManagerOptions> {
87
+ const spotRouterChannelIdForMesh = this.options.meshRouters.spotRouterChannelIdByMesh();
81
88
  return {
82
89
  nodeRid: undefined,
83
90
  nodeRidProvider: (meshName) => this.meshNodeRoutingId(meshName),
@@ -128,9 +135,20 @@ export class ZLinkSpotRuntimeOptionsFactory {
128
135
  }
129
136
  await runtime.dispatchEntryActorJoin(meshName, actor, handoffBacklog);
130
137
  },
138
+ executeEntryActor: (meshName, actorId, operation) => {
139
+ const runtime = this.options.spotNodeRuntime();
140
+ if (runtime === undefined) {
141
+ throw new ZLinkConfigurationException(
142
+ 'Entry Spot Actor completion requires the MeshNode runtime.'
143
+ );
144
+ }
145
+ return runtime.executeEntryActor(meshName, actorId, operation);
146
+ },
131
147
  channelClient: new DefaultZLinkChannelClient(
132
148
  this.options.registration,
133
- this.options.channelTransport
149
+ this.options.channelTransport,
150
+ this.options.routeTransport,
151
+ spotRouterChannelIdForMesh
134
152
  ),
135
153
  fanoutClient: new DefaultZLinkFanoutClient(
136
154
  this.options.registration,
@@ -142,15 +160,7 @@ export class ZLinkSpotRuntimeOptionsFactory {
142
160
  ),
143
161
  routedTransport: this.options.routeTransport,
144
162
  addressTransport: this.options.addressTransport,
145
- spotRouterChannelIdForMesh: this.options.meshRouters.spotRouterChannelIdByMesh(),
146
- channelMeshNameForChannel: (channelName) => {
147
- const matches = [...this.options.registration.spotNodes.entries()]
148
- .filter(([, node]) =>
149
- Object.prototype.hasOwnProperty.call(node.meshChannels ?? {}, channelName)
150
- )
151
- .map(([meshName]) => meshName);
152
- return matches.length === 1 ? matches[0] : undefined;
153
- },
163
+ spotRouterChannelIdForMesh,
154
164
  messageSerializers: this.options.registration.messageSerializers,
155
165
  runtimeEventPublisher: this.options.runtimeEventPublisher,
156
166
  detachedTaskRunner: this.options.detachedTaskRunner,
@@ -159,8 +169,54 @@ export class ZLinkSpotRuntimeOptionsFactory {
159
169
  this.options.releaseInstanceAuthority(meshName, String(spotId), objectGeneration),
160
170
  beginInstanceIdleClosingAuthority: (meshName, spotId, onCommitted) =>
161
171
  this.options.beginInstanceIdleClosingAuthority(meshName, String(spotId), onCommitted),
162
- beginInstanceClosingAuthority: (meshName, spotId, onCommitted) =>
163
- this.options.beginInstanceClosingAuthority(meshName, String(spotId), onCommitted),
172
+ beginInstanceClosingAuthority: async (meshName, spotId, onCommitted, objectGeneration) => {
173
+ const authority = await this.options.beginInstanceClosingAuthority(
174
+ meshName,
175
+ String(spotId),
176
+ onCommitted
177
+ );
178
+ if (authority === undefined) return undefined;
179
+ // A Close without Reincarnate ends this incarnation. The Instance authority
180
+ // release also forgets the node's Ready projection, so a request on a cached
181
+ // Ready route is refused instead of rematerializing the closed generation.
182
+ const release = () =>
183
+ this.options.releaseInstanceAuthority(meshName, String(spotId), objectGeneration);
184
+ if (authority.reincarnate === undefined) return { release };
185
+ return {
186
+ release,
187
+ reincarnate: async (initialize) => {
188
+ const current = await authority.reincarnate!(initialize);
189
+ const node = this.options.spotNodeRuntime()?.meshNode(meshName);
190
+ const route = {
191
+ targetSpotId: String(spotId),
192
+ targetNodeRid: String(current.allocation.descriptor.rid),
193
+ targetNodeGeneration: current.allocation.descriptorLifecycleGeneration,
194
+ objectGeneration: current.objectGeneration,
195
+ authorityOwnerGeneration: current.authorityOwnerGeneration,
196
+ ownerId: current.ownerId,
197
+ leaseGeneration: current.ownerLeaseGeneration,
198
+ storeVersion: current.storeVersion.value
199
+ };
200
+ node?.restoreSpotAuthority?.(
201
+ String(spotId),
202
+ 'instance_spot',
203
+ current.stableType,
204
+ current.objectGeneration,
205
+ current.authorityOwnerGeneration
206
+ );
207
+ node?.registerInstanceIntent?.(current.stableType, route);
208
+ node?.rememberSpotRoute?.({
209
+ spot: { spotId: String(spotId), generation: current.objectGeneration },
210
+ targetNodeRid: route.targetNodeRid,
211
+ targetNodeGeneration: route.targetNodeGeneration,
212
+ authorityOwnerGeneration: route.authorityOwnerGeneration,
213
+ ownerLeaseGeneration: route.leaseGeneration,
214
+ storeVersion: route.storeVersion
215
+ });
216
+ return current;
217
+ }
218
+ };
219
+ },
164
220
  beginUserClosingAuthority: (meshName, spotId, objectGeneration, onCommitted) =>
165
221
  this.options.beginUserClosingAuthority(
166
222
  meshName,
@@ -274,17 +330,12 @@ export class ZLinkSpotRuntimeOptionsFactory {
274
330
  ZLinkSpotRelocationCoordinationMode.FrameworkManaged
275
331
  );
276
332
  },
277
- actorBindingGenerationObserver: (actorId, generation) =>
278
- this.options
279
- .actorManager()
280
- ?.getState(actorId)
281
- ?.setBoundSessionBindingGeneration(generation),
282
333
  actorTransferRuntime,
283
334
  boundSessionRuntime: this.options.boundSessionRelay.boundSessions,
284
335
  actorHandoffRuntime: this.options.actorHandoff,
285
336
  metrics: this.options.metrics,
286
337
  admission: this.options.admission,
287
- statefulExecutionAllowed: this.options.statefulExecutionAllowed,
338
+ statefulExecution: this.options.statefulExecution,
288
339
  closeErrorSink: this.options.runtimeOrPreStartErrorSink,
289
340
  dispatchErrors: this.options.dispatchErrorReporter(this.options.runtimeOrPreStartErrorSink)
290
341
  };
@@ -1,10 +1,29 @@
1
+ import { createHash } from 'node:crypto';
2
+ import {
3
+ type RoutingId,
4
+ type SpotRef,
5
+ type ZLinkSpotCreateResult,
6
+ ZLinkFrameworkException,
7
+ ZLinkSpotCreateState
8
+ } from '../../contracts';
9
+
10
+ import {
11
+ decodeServiceClosingSpotAuthority,
12
+ decodeServiceReadySpotAuthority,
13
+ encodeServiceUserSpotAuthorityPayload
14
+ } from '../foundation/service-authority-payload-codec';
15
+ import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
16
+ import type {
17
+ ServiceDirectSpotRouteFence,
18
+ ServiceUserSpotCloseRecord,
19
+ ServiceUserSpotCreateRecord
20
+ } from '../foundation/service-stateful-wire-codec';
1
21
  import {
2
22
  ZLinkFrameworkInternalErrorKind,
3
23
  createInternalFrameworkException,
4
24
  wireReplyFailureException
5
25
  } from '../framework-errors-internal';
6
- import { createHash } from 'node:crypto';
7
- import type { RoutingId, SpotRef, ZLinkSpotCreateResult } from '../../contracts';
26
+ import { encodeAuthorityKey } from '../locations/authority-key-codec';
8
27
  import type {
9
28
  ZLinkAuthoritySnapshot,
10
29
  ZLinkLocationOwnerToken,
@@ -14,20 +33,9 @@ import type {
14
33
  ZLinkAuthorityStore,
15
34
  ZLinkObjectCreationStore
16
35
  } from '../locations/internal-store-contracts';
17
- import { ZLinkFrameworkException, ZLinkSpotCreateState } from '../../contracts';
18
- import {
19
- decodeServiceReadySpotAuthority,
20
- decodeServiceClosingSpotAuthority,
21
- encodeServiceUserSpotAuthorityPayload
22
- } from '../foundation/service-authority-payload-codec';
23
- import { encodeAuthorityKey } from '../locations/authority-key-codec';
24
36
  import type { ZLinkLocalSpotCreateResult } from '../spots/spot-manager-internal-contracts';
25
- import type { ServiceUserSpotOperationResult } from '../foundation/service-stateful-runtime';
26
- import type {
27
- ServiceUserSpotCloseRecord,
28
- ServiceUserSpotCreateRecord,
29
- ServiceDirectSpotRouteFence
30
- } from '../foundation/service-stateful-wire-codec';
37
+ const DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS = 1_000;
38
+ const DEFAULT_USER_SPOT_POLL_INTERVAL_MS = 10;
31
39
 
32
40
  export interface ZLinkUserSpotCreationCoordinatorOptions {
33
41
  readonly store: ZLinkObjectCreationStore & ZLinkAuthorityStore;
@@ -109,9 +117,10 @@ export class ZLinkUserSpotCreationCoordinator {
109
117
  ) => Promise<ZLinkLocalSpotCreateResult>,
110
118
  discard?: (signal?: AbortSignal) => Promise<void>
111
119
  ): Promise<ZLinkUserSpotCreationResult> {
112
- const deadline = createDeadline(request.timeoutMs, request.signal);
113
- const deadlineMs = performance.now() + request.timeoutMs;
114
120
  const deadlineUnixMs = Date.now() + request.timeoutMs;
121
+ const remainingMs = Math.max(0, deadlineUnixMs - Date.now());
122
+ const deadline = createDeadline(remainingMs, request.signal);
123
+ const deadlineMs = performance.now() + remainingMs;
115
124
  const signal = deadline.signal;
116
125
  signal.throwIfAborted();
117
126
  const sha256 = createHash('sha256').update(request.requestPayload).digest();
@@ -187,7 +196,8 @@ export class ZLinkUserSpotCreationCoordinator {
187
196
  }
188
197
  }
189
198
  },
190
- signal
199
+ signal,
200
+ BigInt(deadlineUnixMs)
191
201
  );
192
202
  } catch (error) {
193
203
  deadline.close();
@@ -530,7 +540,8 @@ export class ZLinkUserSpotCreationCoordinator {
530
540
  }
531
541
  }
532
542
  },
533
- signal
543
+ signal,
544
+ record.deadlineUnixMs
534
545
  );
535
546
  await discard?.(signal);
536
547
  return {
@@ -565,7 +576,8 @@ export class ZLinkUserSpotCreationCoordinator {
565
576
  ownerNodeGeneration: current.allocation.descriptorLifecycleGeneration
566
577
  })
567
578
  },
568
- signal
579
+ signal,
580
+ record.deadlineUnixMs
569
581
  );
570
582
  } catch (error) {
571
583
  throw createInternalFrameworkException(
@@ -596,7 +608,9 @@ export class ZLinkUserSpotCreationCoordinator {
596
608
  };
597
609
  } catch (error) {
598
610
  local?.publication?.abort();
599
- const cleanupDeadline = createDeadline(this.options.cleanupTimeoutMs ?? 1_000);
611
+ const cleanupDeadline = createDeadline(
612
+ this.options.cleanupTimeoutMs ?? DEFAULT_USER_SPOT_CLEANUP_TIMEOUT_MS
613
+ );
600
614
  const cleanupSignal = cleanupDeadline.signal;
601
615
  const cleanup = await Promise.allSettled([
602
616
  waitForAbort(
@@ -760,7 +774,7 @@ export class ZLinkUserSpotCreationCoordinator {
760
774
  if (current.kind === 'snapshot' && current.allocation.state === 'active') {
761
775
  return spotRef(current, request);
762
776
  }
763
- await wait(this.options.pollIntervalMs ?? 10, signal);
777
+ await wait(this.options.pollIntervalMs ?? DEFAULT_USER_SPOT_POLL_INTERVAL_MS, signal);
764
778
  }
765
779
  }
766
780