@zlink-systems/framework 0.26.0 → 0.28.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 (561) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Actors/ZLinkActorClient.d.ts +1 -1
  3. package/dist/contracts/Channels/Calls.d.ts +1 -1
  4. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  5. package/dist/contracts/Common/CoreTypes.js +7 -0
  6. package/dist/contracts/Common/index.d.ts +1 -1
  7. package/dist/contracts/Common/index.js +0 -1
  8. package/dist/contracts/Configuration/Builders.d.ts +0 -1
  9. package/dist/contracts/Configuration/Configs.d.ts +0 -1
  10. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  11. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  12. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  13. package/dist/contracts/Configuration/Registration.js +58 -36
  14. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  15. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  16. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  17. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  18. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -5
  19. package/dist/contracts/Configuration/RegistrationValidators.js +15 -14
  20. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  21. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  22. package/dist/contracts/Handlers/JsonContract.js +10 -4
  23. package/dist/contracts/Locations/Authority.d.ts +1 -1
  24. package/dist/contracts/Locations/Authority.js +3 -2
  25. package/dist/contracts/Locations/Options.js +1 -1
  26. package/dist/contracts/Locations/Stores.d.ts +12 -0
  27. package/dist/contracts/Locations/Stores.js +9 -0
  28. package/dist/contracts/Spots/Contracts.d.ts +2 -2
  29. package/dist/contracts/Streams/BoundSessionContracts.d.ts +1 -1
  30. package/dist/contracts/Streams/IZLinkSession.d.ts +2 -3
  31. package/dist/contracts/Streams/IZLinkSessionActor.d.ts +2 -2
  32. package/dist/internal.d.ts +4 -0
  33. package/dist/internal.js +15 -1
  34. package/dist/nest-integration.d.ts +4 -2
  35. package/dist/nest-integration.js +14 -4
  36. package/dist/runtime/abort.d.ts +1 -0
  37. package/dist/runtime/abort.js +8 -5
  38. package/dist/runtime/activation-admission.d.ts +1 -2
  39. package/dist/runtime/activation-admission.js +2 -6
  40. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  41. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  42. package/dist/runtime/actors/actor-client.d.ts +2 -2
  43. package/dist/runtime/actors/actor-client.js +49 -153
  44. package/dist/runtime/actors/actor-context.d.ts +3 -5
  45. package/dist/runtime/actors/actor-context.js +13 -11
  46. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  47. package/dist/runtime/actors/actor-handoff.js +8 -8
  48. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  49. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  50. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  51. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  52. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  53. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  54. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  55. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  56. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  57. package/dist/runtime/actors/actor-request-deadline.d.ts +1 -0
  58. package/dist/runtime/actors/actor-request-deadline.js +6 -0
  59. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  60. package/dist/runtime/actors/actor-routed-join-transport.d.ts +2 -3
  61. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  62. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  63. package/dist/runtime/actors/bound-session-wire.js +2 -7
  64. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  65. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  66. package/dist/runtime/actors/index.d.ts +9 -7
  67. package/dist/runtime/actors/index.js +87 -69
  68. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  69. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  70. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  71. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  72. package/dist/runtime/admission.d.ts +2 -0
  73. package/dist/runtime/admission.js +7 -1
  74. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  75. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  76. package/dist/runtime/backend/contracts/index.d.ts +7 -27
  77. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  78. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  79. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  80. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +3 -1
  81. package/dist/runtime/backend/node/node-backend-adapter-support.js +51 -10
  82. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  83. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +1 -2
  84. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  85. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  86. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  87. package/dist/runtime/backend/node/node-raw-binding-port.js +41 -34
  88. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  89. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  90. package/dist/runtime/backend/node/node-socket-backend-adapter.js +4 -3
  91. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  92. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  93. package/dist/runtime/backend/runtime-values.js +2 -0
  94. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  95. package/dist/runtime/channels/channel-clients.js +73 -59
  96. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  97. package/dist/runtime/channels/channel-envelope.d.ts +1 -1
  98. package/dist/runtime/channels/channel-envelope.js +51 -39
  99. package/dist/runtime/channels/channel-outbound-operations.d.ts +5 -2
  100. package/dist/runtime/channels/channel-outbound-operations.js +25 -42
  101. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  102. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  103. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  104. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  105. package/dist/runtime/channels/channel-runtime-manager.d.ts +4 -4
  106. package/dist/runtime/channels/channel-runtime-manager.js +13 -10
  107. package/dist/runtime/channels/channel-socket-options.js +3 -12
  108. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  109. package/dist/runtime/channels/channel-socket-registry.js +240 -177
  110. package/dist/runtime/channels/channel-transports.d.ts +21 -31
  111. package/dist/runtime/channels/channel-transports.js +80 -62
  112. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  113. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  114. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  115. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  116. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  117. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  118. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  119. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  120. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  121. package/dist/runtime/channels/local-spot-route-transport.js +1 -3
  122. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +1 -1
  123. package/dist/runtime/channels/router-socket-spot-route-transport.js +2 -2
  124. package/dist/runtime/channels/source-spot-router.d.ts +1 -1
  125. package/dist/runtime/channels/source-spot-router.js +2 -4
  126. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  127. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  128. package/dist/runtime/channels/spot-node-route-transport.d.ts +1 -1
  129. package/dist/runtime/channels/spot-node-route-transport.js +5 -5
  130. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +1 -1
  131. package/dist/runtime/channels/spot-route-bridge-transport.js +2 -2
  132. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +2 -4
  133. package/dist/runtime/channels/spot-route-dispatch-strategy.js +11 -12
  134. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  135. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  136. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  137. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  138. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  139. package/dist/runtime/diagnostics/flow-context.js +16 -2
  140. package/dist/runtime/diagnostics/index.d.ts +4 -2
  141. package/dist/runtime/diagnostics/index.js +14 -4
  142. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  143. package/dist/runtime/diagnostics/message-flow.js +10 -19
  144. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  145. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  146. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  147. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  148. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  149. package/dist/runtime/disposal.d.ts +5 -0
  150. package/dist/runtime/disposal.js +22 -0
  151. package/dist/runtime/execution/index.d.ts +12 -9
  152. package/dist/runtime/execution/index.js +58 -14
  153. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  154. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  155. package/dist/runtime/execution/state-lane.d.ts +8 -1
  156. package/dist/runtime/execution/state-lane.js +118 -3
  157. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  158. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  159. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  160. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  161. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  162. package/dist/runtime/foundation/operation-identity.js +9 -5
  163. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  164. package/dist/runtime/foundation/operation-registry.js +34 -44
  165. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  166. package/dist/runtime/foundation/raw-service-mesh-runtime.js +79 -94
  167. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  168. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  169. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  170. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  171. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  172. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  173. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  174. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  175. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  176. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  177. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  178. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  179. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  180. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  181. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  182. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  183. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  184. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  185. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  186. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  187. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  188. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  189. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  190. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  191. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  192. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  193. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  194. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  195. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  196. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  197. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  198. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  199. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  200. package/dist/runtime/framework-errors-internal.js +343 -122
  201. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  202. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  203. package/dist/runtime/host/actor-packet-relay.d.ts +11 -8
  204. package/dist/runtime/host/actor-packet-relay.js +54 -99
  205. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  206. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  207. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  208. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  209. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  210. package/dist/runtime/host/application-job-queue.js +16 -33
  211. package/dist/runtime/host/bound-session-relay.js +1 -1
  212. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  213. package/dist/runtime/host/index.d.ts +14 -13
  214. package/dist/runtime/host/index.js +190 -171
  215. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  216. package/dist/runtime/host/instance-activation-authority.js +17 -45
  217. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  218. package/dist/runtime/host/location-runtime-owner.js +2 -2
  219. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  220. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  221. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  222. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  223. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  224. package/dist/runtime/host/remote-bound-session-relay.js +15 -28
  225. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  226. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  227. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  228. package/dist/runtime/host/runtime-shutdown.js +18 -21
  229. package/dist/runtime/host/service-relocation-control.js +6 -1
  230. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  231. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  232. package/dist/runtime/host/spot-address-transport.d.ts +3 -12
  233. package/dist/runtime/host/spot-address-transport.js +78 -220
  234. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  235. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  236. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  237. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  238. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  239. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  240. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  241. package/dist/runtime/locations/authority-key-codec.js +4 -3
  242. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  243. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  244. package/dist/runtime/locations/creation-operation-id.js +6 -4
  245. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  246. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  247. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  248. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  249. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  250. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  251. package/dist/runtime/locations/key-codec.js +3 -2
  252. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  253. package/dist/runtime/locations/lease-tracker.js +7 -11
  254. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  255. package/dist/runtime/locations/lifecycle.js +2 -31
  256. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  257. package/dist/runtime/locations/location-store-failure.js +7 -0
  258. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  259. package/dist/runtime/locations/location-store-pages.js +13 -0
  260. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  261. package/dist/runtime/locations/location-store-repository.js +309 -336
  262. package/dist/runtime/locations/relocation-blob.js +18 -5
  263. package/dist/runtime/locations/resolvers.d.ts +5 -5
  264. package/dist/runtime/locations/resolvers.js +37 -28
  265. package/dist/runtime/locations/runtime.d.ts +5 -4
  266. package/dist/runtime/locations/runtime.js +123 -92
  267. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  268. package/dist/runtime/locations/spot-location-claims.js +42 -1
  269. package/dist/runtime/messaging/payload-codec.js +26 -20
  270. package/dist/runtime/messaging/request-deadline.d.ts +3 -0
  271. package/dist/runtime/messaging/request-deadline.js +39 -0
  272. package/dist/runtime/messaging/submission-result.d.ts +4 -0
  273. package/dist/runtime/messaging/submission-result.js +56 -1
  274. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  275. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  276. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  277. package/dist/runtime/spots/index.d.ts +14 -20
  278. package/dist/runtime/spots/index.js +302 -176
  279. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  280. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  281. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  282. package/dist/runtime/spots/spot-activation-state.js +2 -2
  283. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  284. package/dist/runtime/spots/spot-activation.js +49 -32
  285. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  286. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  287. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  288. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  289. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  290. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  291. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  292. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  293. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  294. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  295. package/dist/runtime/spots/spot-context.d.ts +2 -2
  296. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  297. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  298. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  299. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  300. package/dist/runtime/spots/spot-manager-public.js +5 -4
  301. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  302. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  303. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  304. package/dist/runtime/spots/spot-outbound.d.ts +7 -8
  305. package/dist/runtime/spots/spot-outbound.js +21 -23
  306. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  307. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  308. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  309. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  310. package/dist/runtime/spots/spot-route-replies.js +3 -1
  311. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  312. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  313. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  314. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  315. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  316. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  317. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  318. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  319. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  320. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  321. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  322. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  323. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  324. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  325. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +8 -4
  326. package/dist/runtime/streams/bound-actor-relay-sender.js +65 -41
  327. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  328. package/dist/runtime/streams/bound-session-service.js +12 -2
  329. package/dist/runtime/streams/index.d.ts +16 -17
  330. package/dist/runtime/streams/index.js +22 -23
  331. package/dist/runtime/streams/managed-stream.d.ts +5 -2
  332. package/dist/runtime/streams/managed-stream.js +20 -13
  333. package/dist/runtime/streams/native-fallback-bound-session.js +14 -19
  334. package/dist/runtime/streams/protocol.d.ts +6 -33
  335. package/dist/runtime/streams/protocol.js +38 -110
  336. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  337. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  338. package/dist/runtime/streams/session-calls.d.ts +6 -8
  339. package/dist/runtime/streams/session-calls.js +6 -22
  340. package/dist/runtime/streams/session-context.d.ts +10 -10
  341. package/dist/runtime/streams/session-context.js +25 -10
  342. package/dist/runtime/streams/session-requests.js +2 -1
  343. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  344. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  345. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  346. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  347. package/dist/runtime/workers/index.d.ts +2 -2
  348. package/dist/runtime/workers/index.js +5 -4
  349. package/package.json +3 -3
  350. package/src/contracts/Actors/ZLinkActorClient.ts +1 -1
  351. package/src/contracts/Channels/Calls.ts +1 -1
  352. package/src/contracts/Common/CoreTypes.ts +7 -0
  353. package/src/contracts/Common/index.ts +1 -1
  354. package/src/contracts/Configuration/Builders.ts +0 -1
  355. package/src/contracts/Configuration/Configs.ts +0 -1
  356. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  357. package/src/contracts/Configuration/Registration.ts +92 -48
  358. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  359. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -71
  360. package/src/contracts/Configuration/RegistrationTypes.ts +1 -5
  361. package/src/contracts/Configuration/RegistrationValidators.ts +19 -17
  362. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  363. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  364. package/src/contracts/Handlers/JsonContract.ts +14 -4
  365. package/src/contracts/Locations/Authority.ts +7 -3
  366. package/src/contracts/Locations/Options.ts +1 -1
  367. package/src/contracts/Locations/Stores.ts +14 -0
  368. package/src/contracts/Spots/Contracts.ts +2 -2
  369. package/src/contracts/Streams/BoundSessionContracts.ts +1 -1
  370. package/src/contracts/Streams/IZLinkSession.ts +2 -3
  371. package/src/contracts/Streams/IZLinkSessionActor.ts +2 -6
  372. package/src/internal.ts +14 -0
  373. package/src/nest-integration.ts +28 -10
  374. package/src/runtime/abort.ts +6 -5
  375. package/src/runtime/activation-admission.ts +2 -8
  376. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  377. package/src/runtime/actors/actor-client.ts +85 -218
  378. package/src/runtime/actors/actor-context.ts +39 -33
  379. package/src/runtime/actors/actor-handoff.ts +24 -22
  380. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  381. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  382. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  383. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  384. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  385. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  386. package/src/runtime/actors/actor-request-deadline.ts +4 -0
  387. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  388. package/src/runtime/actors/actor-routed-join-transport.ts +3 -5
  389. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  390. package/src/runtime/actors/bound-session-wire.ts +2 -8
  391. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  392. package/src/runtime/actors/index.ts +100 -79
  393. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  394. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  395. package/src/runtime/admission.ts +8 -1
  396. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  397. package/src/runtime/backend/contracts/index.ts +14 -37
  398. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  399. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  400. package/src/runtime/backend/node/node-backend-adapter-support.ts +67 -10
  401. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +0 -2
  402. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  403. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  404. package/src/runtime/backend/node/node-raw-binding-port.ts +44 -49
  405. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  406. package/src/runtime/backend/node/node-socket-backend-adapter.ts +4 -3
  407. package/src/runtime/backend/raw-binding-port.ts +1 -1
  408. package/src/runtime/backend/runtime-values.ts +4 -1
  409. package/src/runtime/channels/channel-clients.ts +139 -102
  410. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  411. package/src/runtime/channels/channel-envelope.ts +74 -57
  412. package/src/runtime/channels/channel-outbound-operations.ts +40 -55
  413. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  414. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  415. package/src/runtime/channels/channel-runtime-manager.ts +12 -30
  416. package/src/runtime/channels/channel-socket-options.ts +8 -15
  417. package/src/runtime/channels/channel-socket-registry.ts +291 -196
  418. package/src/runtime/channels/channel-transports.ts +168 -145
  419. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  420. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  421. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  422. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  423. package/src/runtime/channels/local-spot-route-transport.ts +1 -5
  424. package/src/runtime/channels/router-socket-spot-route-transport.ts +2 -6
  425. package/src/runtime/channels/source-spot-router.ts +2 -9
  426. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  427. package/src/runtime/channels/spot-node-route-transport.ts +7 -9
  428. package/src/runtime/channels/spot-route-bridge-transport.ts +5 -12
  429. package/src/runtime/channels/spot-route-dispatch-strategy.ts +11 -30
  430. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  431. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  432. package/src/runtime/diagnostics/flow-context.ts +16 -2
  433. package/src/runtime/diagnostics/index.ts +27 -17
  434. package/src/runtime/diagnostics/message-flow.ts +15 -25
  435. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  436. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  437. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  438. package/src/runtime/disposal.ts +19 -0
  439. package/src/runtime/execution/index.ts +60 -20
  440. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  441. package/src/runtime/execution/state-lane.ts +142 -4
  442. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  443. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  444. package/src/runtime/foundation/operation-identity.ts +11 -5
  445. package/src/runtime/foundation/operation-registry.ts +33 -50
  446. package/src/runtime/foundation/raw-service-mesh-runtime.ts +127 -125
  447. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  448. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  449. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  450. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  451. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  452. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  453. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  454. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  455. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  456. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  457. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  458. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  459. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  460. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  461. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  462. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  463. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  464. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  465. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  466. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  467. package/src/runtime/framework-errors-internal.ts +380 -134
  468. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  469. package/src/runtime/host/actor-packet-relay.ts +63 -160
  470. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  471. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  472. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  473. package/src/runtime/host/application-job-queue.ts +28 -34
  474. package/src/runtime/host/bound-session-relay.ts +1 -2
  475. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  476. package/src/runtime/host/index.ts +327 -320
  477. package/src/runtime/host/instance-activation-authority.ts +89 -109
  478. package/src/runtime/host/location-runtime-owner.ts +4 -2
  479. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  480. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  481. package/src/runtime/host/remote-bound-session-relay.ts +16 -57
  482. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  483. package/src/runtime/host/runtime-shutdown.ts +17 -21
  484. package/src/runtime/host/service-relocation-control.ts +14 -1
  485. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  486. package/src/runtime/host/spot-address-transport.ts +175 -356
  487. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  488. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  489. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  490. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  491. package/src/runtime/locations/authority-key-codec.ts +7 -3
  492. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  493. package/src/runtime/locations/creation-operation-id.ts +6 -3
  494. package/src/runtime/locations/domain-store-contract.ts +12 -3
  495. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  496. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  497. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  498. package/src/runtime/locations/key-codec.ts +3 -2
  499. package/src/runtime/locations/lease-tracker.ts +8 -14
  500. package/src/runtime/locations/lifecycle.ts +13 -43
  501. package/src/runtime/locations/location-store-failure.ts +4 -0
  502. package/src/runtime/locations/location-store-pages.ts +18 -0
  503. package/src/runtime/locations/location-store-repository.ts +457 -482
  504. package/src/runtime/locations/relocation-blob.ts +17 -6
  505. package/src/runtime/locations/resolvers.ts +75 -49
  506. package/src/runtime/locations/runtime.ts +220 -110
  507. package/src/runtime/locations/spot-location-claims.ts +58 -1
  508. package/src/runtime/messaging/payload-codec.ts +35 -24
  509. package/src/runtime/messaging/request-deadline.ts +58 -0
  510. package/src/runtime/messaging/submission-result.ts +72 -2
  511. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  512. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  513. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  514. package/src/runtime/spots/index.ts +433 -229
  515. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  516. package/src/runtime/spots/spot-activation-state.ts +2 -2
  517. package/src/runtime/spots/spot-activation.ts +67 -37
  518. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  519. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  520. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  521. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  522. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  523. package/src/runtime/spots/spot-context.ts +3 -3
  524. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  525. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  526. package/src/runtime/spots/spot-manager-public.ts +21 -17
  527. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  528. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  529. package/src/runtime/spots/spot-outbound.ts +59 -47
  530. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  531. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  532. package/src/runtime/spots/spot-route-replies.ts +6 -4
  533. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  534. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  535. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  536. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  537. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  538. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  539. package/src/runtime/spots/spot-timer.ts +3 -2
  540. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  541. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  542. package/src/runtime/streams/bound-actor-relay-sender.ts +98 -66
  543. package/src/runtime/streams/bound-session-service.ts +22 -2
  544. package/src/runtime/streams/index.ts +78 -68
  545. package/src/runtime/streams/managed-stream.ts +32 -23
  546. package/src/runtime/streams/native-fallback-bound-session.ts +14 -28
  547. package/src/runtime/streams/protocol.ts +34 -88
  548. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  549. package/src/runtime/streams/session-calls.ts +11 -36
  550. package/src/runtime/streams/session-context.ts +60 -25
  551. package/src/runtime/streams/session-requests.ts +2 -1
  552. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  553. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  554. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  555. package/src/runtime/workers/index.ts +13 -12
  556. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  557. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  558. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  559. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  560. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  561. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultZLinkSpotManager = exports.ZLinkPublicSpotManager = exports.ZLinkSpotNodeRuntimeManager = exports.createFrameworkEntrySpotId = exports.ZLinkEntrySpotActivation = exports.ZLinkRuntimeSpotPublisherTransport = exports.DefaultZLinkSpotHandlerRegistry = exports.DefaultZLinkSpotOutbound = exports.ZLinkSpotTimerRegistry = exports.ZLinkManagedTimer = exports.ZLinkSpotSerialExecutor = exports.ZLinkSpotSerialTurnExecutor = exports.ZLinkSpotActorAdmissionCoordinator = exports.ZLinkSpotRoutedBoundSessionDispatch = exports.sendToSpotHandle = exports.requestToSpotHandle = exports.resolveSpotHandle = exports.createSpotHandle = void 0;
4
+ const dispatch_error_details_1 = require("../diagnostics/dispatch-error-details");
4
5
  var spot_handle_1 = require("./spot-handle");
5
6
  Object.defineProperty(exports, "createSpotHandle", { enumerable: true, get: function () { return spot_handle_1.createSpotHandle; } });
6
7
  Object.defineProperty(exports, "resolveSpotHandle", { enumerable: true, get: function () { return spot_handle_1.resolveSpotHandle; } });
@@ -15,11 +16,13 @@ const abort_1 = require("../abort");
15
16
  const contracts_1 = require("../../contracts");
16
17
  const ZLinkDispatchOptions_1 = require("../../contracts/Dispatch/ZLinkDispatchOptions");
17
18
  const diagnostics_1 = require("../diagnostics");
19
+ const diagnostic_text_1 = require("../diagnostics/diagnostic-text");
18
20
  const runtime_message_1 = require("../backend/runtime-message");
19
21
  const runtime_values_1 = require("../backend/runtime-values");
20
22
  const service_runtime_contracts_1 = require("../foundation/service-runtime-contracts");
21
23
  const serial_work_size_1 = require("../execution/serial-work-size");
22
24
  const configuration_1 = require("../configuration");
25
+ const application_job_queue_scope_1 = require("../application-jobs/application-job-queue-scope");
23
26
  const framework_errors_internal_1 = require("../framework-errors-internal");
24
27
  const workers_1 = require("../workers");
25
28
  const payload_codec_1 = require("../messaging/payload-codec");
@@ -81,7 +84,10 @@ class DefaultZLinkSpotManager {
81
84
  idleSweepRunning = false;
82
85
  constructor(options, timerClock) {
83
86
  this.options = options;
84
- this.activations = new spot_activation_registry_1.ZLinkSpotActivationRegistry(options.metrics, (meshName, spotId) => this.isSpotClosing(meshName, spotId));
87
+ if (options.detachedTaskRunner === undefined) {
88
+ throw new configuration_1.ZLinkConfigurationException('Spot manager requires a detached task runner.');
89
+ }
90
+ this.activations = new spot_activation_registry_1.ZLinkSpotActivationRegistry(options.metrics);
85
91
  this.factories = new Set(options.spotFactories);
86
92
  this.workerRuntime = options.workerRuntime ?? new workers_1.ZLinkWorkerRuntime();
87
93
  this.locationClaim = new spot_location_claim_1.ZLinkSpotLocationClaim({
@@ -91,7 +97,7 @@ class DefaultZLinkSpotManager {
91
97
  nodeGenerationProvider: options.nodeGenerationProvider
92
98
  });
93
99
  this.routedSpotPackets = new spot_routed_spot_packet_dispatch_1.ZLinkRoutedSpotPacketDispatch({
94
- resolveActivation: (spotId) => this.activations.resolveUnique(spotId),
100
+ resolveActivation: (spotId) => this.resolveApplicationActivation(spotId),
95
101
  claimApplicationWork: options.admission === undefined
96
102
  ? undefined
97
103
  : (meshName) => options.admission.claim(meshName, 'Spot route dispatch'),
@@ -99,8 +105,6 @@ class DefaultZLinkSpotManager {
99
105
  dispatchErrors: options.dispatchErrors
100
106
  });
101
107
  this.actorMembership = new spot_actor_membership_1.ZLinkSpotActorMembership({
102
- isSpotClosing: (activation) => this.isSpotClosing(activation.meshName, activation.spotId) ||
103
- this.activations.resolve(activation.meshName, activation.spotId) !== activation,
104
108
  resolveActivation: (spotId, meshName) => meshName === undefined
105
109
  ? this.activations.resolveUnique(spotId)
106
110
  : this.activations.resolve(meshName, spotId),
@@ -150,11 +154,9 @@ class DefaultZLinkSpotManager {
150
154
  boundSessionRuntime: options.boundSessionRuntime,
151
155
  actorHandoffRuntime: options.actorHandoffRuntime,
152
156
  admission: options.admission,
153
- statefulExecutionAllowed: options.statefulExecutionAllowed,
157
+ statefulExecutionAllowed: options.statefulExecution?.admissionOpen,
154
158
  leaveActor: (spotId, actor, signal, meshName) => this.actorMembership.leaveActor(spotId, actor, signal, meshName),
155
159
  requestContextClose: (activation, objectGeneration, signal) => this.closeFromContext(activation, objectGeneration, signal),
156
- isSpotClosing: (activation) => this.isSpotClosing(activation.meshName, activation.spotId) ||
157
- this.activations.resolve(activation.meshName, activation.spotId) !== activation,
158
160
  registerActivation: (activation) => {
159
161
  this.activations.register(activation);
160
162
  this.scheduleIdleSweep();
@@ -264,10 +266,6 @@ class DefaultZLinkSpotManager {
264
266
  await (0, abort_1.awaitWithAbort)(pendingClose, signal);
265
267
  continue;
266
268
  }
267
- if (closeOperation?.committed === true) {
268
- await (0, abort_1.awaitWithAbort)(this.closeWithReason(meshName, spotId), signal);
269
- continue;
270
- }
271
269
  const closing = this.activations.closingOperation(meshName, spotId);
272
270
  if (closing !== undefined) {
273
271
  await (0, abort_1.awaitWithAbort)(closing.ready, signal);
@@ -344,24 +342,36 @@ class DefaultZLinkSpotManager {
344
342
  }
345
343
  }
346
344
  isInstanceMaterialized(meshName, instanceType, spotId) {
347
- const activation = this.activations.resolve(meshName, spotId);
345
+ const activation = this.resolveApplicationActivation(spotId, meshName);
348
346
  return (activation !== undefined &&
349
347
  activation.spotType === this.requireInstanceFactory(meshName, instanceType));
350
348
  }
349
+ resolveApplicationActivation(spotId, meshName) {
350
+ const current = meshName === undefined
351
+ ? this.activations.resolveUnique(spotId)
352
+ : this.activations.resolve(meshName, spotId);
353
+ if (current !== undefined)
354
+ return current;
355
+ if (meshName !== undefined)
356
+ return this.closeOperations.get(`${meshName}\0${String(spotId)}`)?.activation;
357
+ for (const operation of this.closeOperations.values()) {
358
+ if (String(operation.activation.spotId) === String(spotId))
359
+ return operation.activation;
360
+ }
361
+ return undefined;
362
+ }
351
363
  isInstanceMaterializing(meshName, spotId) {
352
364
  const prefix = instanceMaterializationPrefix(meshName, spotId);
353
- return (this.pendingInstanceMaterializationsByPrefix.get(prefix)?.size ?? 0) > 0;
365
+ return ((this.pendingInstanceMaterializationsByPrefix.get(prefix)?.size ?? 0) > 0 ||
366
+ this.closeOperations.get(`${meshName}\0${String(spotId)}`)?.authority !== undefined);
354
367
  }
355
368
  isSpotClosing(meshName, spotId) {
356
- const key = `${meshName}\0${String(spotId)}`;
357
- return this.closeOperations.get(key)?.committed === true;
369
+ return (this.closeOperations.get(`${meshName}\0${String(spotId)}`)?.authority !== undefined ||
370
+ this.activations.activationForClose(meshName, spotId)?.executionBarrier.isCloseSealed === true);
358
371
  }
359
372
  pendingSpotCloseDecision(meshName, spotId) {
360
373
  return this.closeOperations.get(`${meshName}\0${String(spotId)}`)?.authorityDecision;
361
374
  }
362
- isInstanceClosing(meshName, spotId) {
363
- return this.closeOperations.has(`${meshName}\0${String(spotId)}`);
364
- }
365
375
  async discardInstance(meshName, spotId) {
366
376
  const activation = this.activations.resolve(meshName, spotId);
367
377
  if (activation === undefined)
@@ -508,10 +518,7 @@ class DefaultZLinkSpotManager {
508
518
  throw error;
509
519
  }
510
520
  };
511
- this.options.detachedTaskRunner?.runDetached(`instance idle eviction ${String(activation.spotId)}`, run);
512
- if (this.options.detachedTaskRunner === undefined) {
513
- void run().catch(() => undefined);
514
- }
521
+ this.options.detachedTaskRunner.runDetached(`instance idle eviction ${String(activation.spotId)}`, run);
515
522
  }
516
523
  }
517
524
  finally {
@@ -541,8 +548,8 @@ class DefaultZLinkSpotManager {
541
548
  requireMeshName(meshName);
542
549
  const args = normalizeSpotCreateArgs(requestOrSignal, signal);
543
550
  (0, abort_1.throwIfAborted)(args.signal);
551
+ this.options.admission?.requireRequest('SPOT create', meshName);
544
552
  const operation = this.activations.getOrBegin(meshName, spotType, spotId, async () => {
545
- this.options.admission?.requireRequest('SPOT create', meshName);
546
553
  const release = await this.options.activationAdmission?.acquire(meshName, args.signal);
547
554
  const ownedRequest = args.request === undefined
548
555
  ? runtime_message_1.ZLinkBufferMessage.from(Buffer.alloc(0))
@@ -559,11 +566,15 @@ class DefaultZLinkSpotManager {
559
566
  }
560
567
  async find(meshName, spotId) {
561
568
  requireMeshName(meshName);
562
- return this.activations.has(meshName, spotId) ? { spotId } : null;
569
+ return this.activations.has(meshName, spotId) && !this.isSpotClosing(meshName, spotId)
570
+ ? { spotId }
571
+ : null;
563
572
  }
564
573
  async list(meshName) {
565
574
  requireMeshName(meshName);
566
- return this.activations.list(meshName);
575
+ return this.activations
576
+ .list(meshName)
577
+ .filter(({ spotId }) => !this.isSpotClosing(meshName, spotId));
567
578
  }
568
579
  async drainForShutdown(meshName, signal, deadline) {
569
580
  const results = await Promise.allSettled(this.activations
@@ -612,12 +623,13 @@ class DefaultZLinkSpotManager {
612
623
  beginUserAuthority === undefined) {
613
624
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `User Spot '${String(spotId)}' Close requires its authority owner.`);
614
625
  }
626
+ const domain = activation.domain;
615
627
  const beginAuthority = beginUserAuthority ??
616
- (activation.domain.kind === 'instance' &&
628
+ (domain.kind === 'instance' &&
617
629
  reason === contracts_1.ZLinkSpotCloseReason.ExplicitClose &&
618
630
  this.options.beginInstanceClosingAuthority !== undefined
619
- ? (onCommitted) => this.options.beginInstanceClosingAuthority(meshName, spotId, onCommitted)
620
- : activation.domain.kind === 'instance' &&
631
+ ? (onCommitted) => this.options.beginInstanceClosingAuthority(meshName, spotId, onCommitted, domain.objectGeneration)
632
+ : domain.kind === 'instance' &&
621
633
  reason === contracts_1.ZLinkSpotCloseReason.IdleEvicted &&
622
634
  this.options.beginInstanceIdleClosingAuthority !== undefined
623
635
  ? (onCommitted) => this.options.beginInstanceIdleClosingAuthority(meshName, spotId, onCommitted)
@@ -628,14 +640,21 @@ class DefaultZLinkSpotManager {
628
640
  operation = {
629
641
  activation,
630
642
  reason,
631
- beginAuthority,
632
- committed: false
643
+ beginAuthority
633
644
  };
645
+ if (reason === contracts_1.ZLinkSpotCloseReason.ExplicitClose) {
646
+ operation.canExecuteApplication = (record) => {
647
+ const context = record.context;
648
+ return context === undefined;
649
+ };
650
+ }
634
651
  this.closeOperations.set(key, operation);
635
652
  }
636
653
  if (operation.ready === undefined) {
637
654
  const active = operation;
638
- const run = active.activation.serial.executeLifecycleOperation(() => this.runCloseOperation(meshName, spotId, active, signal, deadline));
655
+ const run = active.activation.serial.executeControlLifecycleOperation(() => this.runCloseOperation(meshName, spotId, active, signal, deadline), active.canExecuteApplication === undefined
656
+ ? undefined
657
+ : active);
639
658
  active.ready = run.finally(() => {
640
659
  active.ready = undefined;
641
660
  if (this.closeOperations.get(key) === active) {
@@ -646,17 +665,83 @@ class DefaultZLinkSpotManager {
646
665
  return await operation.ready;
647
666
  }
648
667
  async runCloseOperation(meshName, spotId, operation, signal, deadline) {
649
- const began = await this.beginCloseAuthority(meshName, spotId, operation, signal);
650
- if (!began)
668
+ const seal = await this.beginCloseAuthority(meshName, spotId, operation, signal);
669
+ if (seal === undefined)
651
670
  return false;
652
- const seal = operation.activation.sealExecution(true);
653
- await this.activationLifecycle.sealForClose(operation.activation, seal);
671
+ if (seal !== true) {
672
+ await this.activationLifecycle.sealForClose(operation.activation, seal);
673
+ }
674
+ else {
675
+ await operation.activation.executionBarrier.waitForStartedTurns(signal);
676
+ }
654
677
  const closingFailure = await this.activationLifecycle.cleanupClosedActivation(operation.activation, operation.reason, deadline);
655
- await operation.authority?.release();
656
- // The incarnation has no further lifecycle item once its authority is
657
- // released, so its lifecycle lane admission closes with this Close.
658
- operation.activation.serial.closeAdmission();
659
678
  this.activations.finishClose(meshName, spotId);
679
+ const intentRecords = [];
680
+ operation.activation.serial.visitPendingApplication((record) => {
681
+ const context = record.context;
682
+ if (context?.replay !== undefined)
683
+ intentRecords.push(record);
684
+ });
685
+ const hasIntent = intentRecords.length > 0;
686
+ // Spot messaging §7 step 3: with no Instance intent message waiting, the
687
+ // release decision also ends this Instance incarnation's admission in this turn.
688
+ if (!hasIntent && operation.activation.domain.kind === 'instance')
689
+ operation.activation.serial.closeAdmission();
690
+ const hostState = this.options.statefulExecution?.hostState();
691
+ const intentFailure = !hasIntent
692
+ ? undefined
693
+ : hostState === contracts_1.ZLinkFrameworkRuntimeState.Draining
694
+ ? (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RuntimeShutdown, 'Instance intent cannot continue while the host is draining.')
695
+ : hostState === contracts_1.ZLinkFrameworkRuntimeState.Relocating ||
696
+ hostState === contracts_1.ZLinkFrameworkRuntimeState.Relocated ||
697
+ this.options.statefulExecution?.admissionOpen() === false ||
698
+ (operation.activation.executionBarrier.isSealed &&
699
+ !operation.activation.executionBarrier.isCloseSealed)
700
+ ? (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, 'Instance intent cannot continue on an unavailable or relocating owner.')
701
+ : undefined;
702
+ if (operation.reason === contracts_1.ZLinkSpotCloseReason.ExplicitClose &&
703
+ hasIntent &&
704
+ intentFailure === undefined &&
705
+ operation.authority?.reincarnate !== undefined) {
706
+ try {
707
+ await operation.authority.reincarnate(async (authority) => {
708
+ await this.activationLifecycle.materializeInstance(meshName, authority.stableType, operation.activation.spotType, spotId, authority.objectGeneration, signal, operation.activation);
709
+ });
710
+ // The new incarnation shares this serial owner and admits membership work again.
711
+ operation.activation.serial.setLifecycleAdmissionClosed(false);
712
+ }
713
+ catch (error) {
714
+ const initialized = this.activations.resolve(meshName, spotId);
715
+ if (initialized !== undefined && initialized !== operation.activation) {
716
+ await this.activationLifecycle.cleanupFailedIncarnation(initialized);
717
+ }
718
+ this.activations.finishClose(meshName, spotId);
719
+ operation.activation.serial.visitPendingApplication((record) => {
720
+ const context = record.context;
721
+ if (context?.replay !== undefined)
722
+ record.operation = () => context.replay(error);
723
+ });
724
+ operation.activation.serial.closeAdmission();
725
+ throw error;
726
+ }
727
+ }
728
+ else {
729
+ await operation.authority?.release();
730
+ operation.activation.serial.closeAdmission();
731
+ if (!operation.activation.executionBarrier.isSealed) {
732
+ const closed = operation.activation.sealExecution('close');
733
+ operation.activation.commitExecutionSeal(closed);
734
+ }
735
+ }
736
+ if (operation.reason === contracts_1.ZLinkSpotCloseReason.ExplicitClose) {
737
+ operation.activation.serial.visitPendingApplication((record) => {
738
+ const context = record.context;
739
+ if (context?.replay !== undefined) {
740
+ record.operation =
741
+ intentFailure === undefined ? context.replay : () => context.replay(intentFailure);
742
+ }
743
+ });
744
+ }
660
745
  this.closeOperations.delete(`${meshName}\0${String(spotId)}`);
661
746
  // An OnClosing failure never changes a Close result; host shutdown alone
662
747
  // reports it as its teardown outcome after cleanup has finished.
@@ -666,24 +751,33 @@ class DefaultZLinkSpotManager {
666
751
  return true;
667
752
  }
668
753
  async beginCloseAuthority(meshName, spotId, operation, signal) {
754
+ // Spot messaging §4 step 12 with §7 step 1: a Close of any reason begins its
755
+ // Closing CAS only after the first terminal record of an activated message.
669
756
  await this.options.instanceSpotApplicationQuiescenceProvider?.(meshName, spotId, signal);
670
757
  if (!operation.activation.canClose(operation.reason))
671
- return false;
758
+ return undefined;
672
759
  if (operation.activation.executionBarrier.isSealed) {
673
760
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving, `Spot '${String(spotId)}' is sealed for relocation.`, true);
674
761
  }
762
+ let seal;
675
763
  const authorityPromise = Promise.resolve().then(() => operation.beginAuthority(() => {
676
- operation.committed = true;
764
+ if (operation.reason === contracts_1.ZLinkSpotCloseReason.ExplicitClose) {
765
+ operation.activation.serial.setLifecycleAdmissionClosed(true);
766
+ seal = true;
767
+ }
768
+ else {
769
+ seal = operation.activation.sealExecution('close');
770
+ }
677
771
  }));
678
772
  operation.authorityDecision = authorityPromise.then(() => undefined, () => undefined);
679
773
  const authority = await authorityPromise;
680
774
  if (authority === undefined)
681
- return false;
775
+ return undefined;
682
776
  operation.authority = authority;
683
- if (!this.isSpotClosing(meshName, spotId)) {
777
+ if (seal === undefined) {
684
778
  throw new Error(`Spot '${String(spotId)}' Closing authority did not confirm its commit.`);
685
779
  }
686
- return true;
780
+ return seal;
687
781
  }
688
782
  async executeOnSpot(spotType, spotId, operation, signal) {
689
783
  (0, abort_1.throwIfAborted)(signal);
@@ -732,6 +826,9 @@ class DefaultZLinkSpotManager {
732
826
  async admitActorJoin(spotId, actor, request, commit, signal, leaveSource, contentType = 'application/json') {
733
827
  const meshName = this.activations.resolveUnique(spotId)?.meshName;
734
828
  this.options.admission?.requireRequest('Actor join admission', meshName);
829
+ if (meshName !== undefined && this.isSpotClosing(meshName, spotId)) {
830
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected, `Spot '${String(spotId)}' is closing.`);
831
+ }
735
832
  return await this.actorMembership.admitActorJoin(spotId, actor, request, commit, signal, leaveSource, contentType);
736
833
  }
737
834
  async leaveActor(spotId, actor, signal) {
@@ -841,7 +938,7 @@ class DefaultZLinkSpotManager {
841
938
  if (target === undefined)
842
939
  return;
843
940
  for (;;) {
844
- const current = this.activations.resolve(meshName, spotId);
941
+ const current = this.resolveApplicationActivation(spotId, meshName);
845
942
  if (current !== undefined &&
846
943
  current.objectGeneration === target.objectGeneration &&
847
944
  current.spotType === this.requireInstanceFactory(meshName, target.stableType))
@@ -868,7 +965,7 @@ class DefaultZLinkSpotManager {
868
965
  this.traceInstanceMessage(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Received, meshName, spotId, record, envelope, 'activating');
869
966
  try {
870
967
  await this.ensureInstanceApplicationActivation(meshName, spotId);
871
- const activation = this.activations.resolve(meshName, spotId);
968
+ const activation = this.resolveApplicationActivation(spotId, meshName);
872
969
  if (activation === undefined || activation.domain.kind !== 'instance') {
873
970
  throw new configuration_1.ZLinkConfigurationException(`MeshNode Instance Spot target '${String(spotId)}' is not active.`);
874
971
  }
@@ -885,9 +982,26 @@ class DefaultZLinkSpotManager {
885
982
  channelName: envelope.header.channelName,
886
983
  contentType: envelope.header.contentType,
887
984
  awaitFirstHandlerTurn: record.kind === service_runtime_contracts_1.ReceiveKind.InstanceSpotActivation,
985
+ activationRecord: record,
986
+ onOneWayError: this.options.dispatchErrors?.captureEnabled() === true
987
+ ? (error) => this.reportInstanceDispatchFailure(meshName, spotId, record, envelope, false, error)
988
+ : undefined,
888
989
  workOptions: (0, serial_work_size_1.zlinkSerialWorkOptions)(envelope.payload.byteLength, record.applicationMetadata?.byteLength ??
889
990
  (0, serial_work_size_1.zlinkMetadataByteLength)(envelope.header.metadata))
890
991
  };
992
+ // Spot messaging §7 step 3: an Instance intent request that reaches an
993
+ // incarnation whose Close ended admission is refused before admission
994
+ // with the owner fence terminal, so its caller re-reads authority.
995
+ const instanceIntent = record.activationRecord?.activation === 'missing' ||
996
+ (record.activationRecord?.activation === 'ready' &&
997
+ record.activationRecord.instanceIntent);
998
+ const refusal = activation.serial.applicationAdmissionRefusal(instanceIntent === true);
999
+ if (request && refusal !== undefined && record.replyFailure !== undefined) {
1000
+ this.reportInstanceDispatchFailure(meshName, spotId, record, envelope, request, refusal);
1001
+ const terminal = (0, framework_errors_internal_1.internalFrameworkWireReply)(refusal);
1002
+ requireMeshSpotReply(record.replyFailure(terminal.terminalResult, terminal.failureCode));
1003
+ return;
1004
+ }
891
1005
  this.traceInstanceMessage(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Admitted, meshName, spotId, record, envelope, 'ready', target?.stableType);
892
1006
  if (!request) {
893
1007
  this.traceInstanceMessage(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dispatched, meshName, spotId, record, envelope, 'ready', target?.stableType);
@@ -901,33 +1015,39 @@ class DefaultZLinkSpotManager {
901
1015
  this.traceInstanceMessage(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Replied, meshName, spotId, record, envelope, 'ready', target?.stableType);
902
1016
  }
903
1017
  catch (error) {
904
- const reason = instanceDispatchErrorReason(error);
1018
+ this.reportInstanceDispatchFailure(meshName, spotId, record, envelope, request, error);
1019
+ const reason = (0, dispatch_error_details_1.dispatchReasonFromError)(error);
905
1020
  if (!request) {
906
1021
  this.traceInstanceMessage(ZLinkDispatchOptions_1.ZLinkRuntimeMessageFlowOutcome.Dropped, meshName, spotId, record, envelope, 'closing', undefined, reason);
907
1022
  return;
908
1023
  }
909
- this.options.dispatchErrors?.report({
910
- surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.InstanceSpot,
911
- messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request,
912
- packetName: envelope.packetName,
913
- channelName: envelope.header.channelName,
914
- meshName,
915
- correlationId: envelope.header.correlationId ?? undefined,
916
- sourceRid: record.sourceNodeRid === null ? undefined : String(record.sourceNodeRid),
917
- spotId: String(spotId),
918
- instanceSpotType: this.options.instanceSpotApplicationTargetProvider?.(meshName, spotId)
919
- ?.stableType,
920
- activationState: 'closing',
921
- flowId: envelope.header.flowId,
922
- flowOrigin: envelope.header.flowOrigin,
923
- reason,
924
- action: ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError,
925
- error
926
- });
927
1024
  requireMeshSpotReply(record.reply((0, channel_envelope_1.encodeChannelErrorReplyParts)(envelope.header, error)));
928
1025
  }
929
1026
  });
930
1027
  }
1028
+ reportInstanceDispatchFailure(meshName, spotId, record, envelope, request, error) {
1029
+ const reporter = this.options.dispatchErrors;
1030
+ if (reporter?.captureEnabled() !== true)
1031
+ return;
1032
+ reporter.report({
1033
+ surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.InstanceSpot,
1034
+ messageKind: request ? ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Request : ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
1035
+ packetName: envelope.packetName,
1036
+ channelName: envelope.header.channelName,
1037
+ meshName,
1038
+ correlationId: envelope.header.correlationId ?? undefined,
1039
+ sourceRid: record.sourceNodeRid === null ? undefined : String(record.sourceNodeRid),
1040
+ spotId: String(spotId),
1041
+ instanceSpotType: this.options.instanceSpotApplicationTargetProvider?.(meshName, spotId)
1042
+ ?.stableType,
1043
+ activationState: 'closing',
1044
+ flowId: envelope.header.flowId,
1045
+ flowOrigin: envelope.header.flowOrigin,
1046
+ reason: (0, dispatch_error_details_1.dispatchReasonFromError)(error),
1047
+ action: request ? ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.ReplyError : ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorAction.Drop,
1048
+ error
1049
+ });
1050
+ }
931
1051
  traceInstanceMessage(outcome, meshName, spotId, record, envelope, activationState, instanceSpotType, errorReason) {
932
1052
  const flow = (0, diagnostics_1.flowIfEnabled)(this.options.dispatchErrors?.flow, outcome, undefined, envelope.header.flowId);
933
1053
  if (flow === undefined)
@@ -960,9 +1080,6 @@ class DefaultZLinkSpotManager {
960
1080
  throw new configuration_1.ZLinkConfigurationException('MeshNode Actor record is missing its Actor owner.');
961
1081
  }
962
1082
  const request = record.kind === service_runtime_contracts_1.ReceiveKind.ActorRequest;
963
- if (record.sourceBindingGeneration > 0n) {
964
- this.options.actorBindingGenerationObserver?.(actor.actorId, record.sourceBindingGeneration);
965
- }
966
1083
  const resolvedOwner = this.options.actorDispatchOwnerResolver?.(actor.actorId);
967
1084
  const resolvedActorRef = resolvedOwner?.actorRef ?? {
968
1085
  actorId: actor.actorId,
@@ -1016,36 +1133,41 @@ class DefaultZLinkSpotManager {
1016
1133
  }
1017
1134
  requireMeshSpotReply(record.reply(this.encodeMeshActorReply(record.parts[0], protocol_1.ZLinkStreamMessageKind.Error, {
1018
1135
  message: error instanceof Error ? error.message : String(error),
1019
- kind: error instanceof contracts_1.ZLinkFrameworkException
1020
- ? error.kind
1021
- : contracts_1.ZLinkFrameworkErrorKind.InternalFailure
1136
+ kind: spotActorFailureKind(error)
1022
1137
  })));
1023
1138
  }
1024
1139
  }
1025
1140
  async dispatchMeshActorJoin(meshName, owner, record) {
1026
1141
  const spotId = owner.spotId;
1027
1142
  const activation = spotId === null ? undefined : this.activations.resolve(meshName, spotId);
1028
- if (activation?.domain.kind === 'user') {
1029
- await activation.serial.executeLifecycleOperation(async () => {
1030
- if (this.isSpotClosing(meshName, activation.spotId) ||
1031
- this.activations.resolve(meshName, activation.spotId) !== activation) {
1032
- const rejection = (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestRejected, `User Spot '${String(spotId)}' is closing.`);
1033
- if (record.replyFailure !== undefined) {
1034
- const terminal = (0, framework_errors_internal_1.internalFrameworkWireReply)(rejection);
1035
- requireMeshSpotReply(record.replyFailure(terminal.terminalResult, terminal.failureCode));
1036
- }
1037
- else {
1038
- requireMeshSpotReply(record.replyActorJoin(1, []));
1039
- }
1040
- return;
1143
+ const replyState = { targetCommitPublished: false };
1144
+ try {
1145
+ if (record.kindData?.kind === 'actorControl' &&
1146
+ record.kindData.canonicalActorJoin !== undefined) {
1147
+ const entrySpotId = this.options.entryNodeRidProvider?.() ?? this.options.entryNodeRid;
1148
+ if (spotId !== null && entrySpotId !== undefined && String(spotId) === String(entrySpotId)
1149
+ ? this.options.dispatchEntryActorJoin === undefined
1150
+ : activation === undefined) {
1151
+ throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RouteNotConnected, `Spot '${String(spotId)}' is not active on this node.`);
1041
1152
  }
1042
- await this.dispatchMeshActorJoinCore(meshName, owner, record);
1043
- });
1044
- return;
1153
+ }
1154
+ if (activation?.domain.kind === 'user') {
1155
+ await activation.serial.executeLifecycleOperation(() => this.dispatchMeshActorJoinCore(meshName, owner, record, replyState));
1156
+ return;
1157
+ }
1158
+ await this.dispatchMeshActorJoinCore(meshName, owner, record, replyState);
1159
+ }
1160
+ catch (error) {
1161
+ if (replyState.targetCommitPublished || record.replyFailure === undefined)
1162
+ throw error;
1163
+ const failure = error instanceof contracts_1.ZLinkFrameworkException
1164
+ ? error
1165
+ : (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestFailed, 'Actor Join target admission failed.', error);
1166
+ const terminal = (0, framework_errors_internal_1.internalFrameworkWireReply)(failure);
1167
+ requireMeshSpotReply(record.replyFailure(terminal.terminalResult, terminal.failureCode));
1045
1168
  }
1046
- await this.dispatchMeshActorJoinCore(meshName, owner, record);
1047
1169
  }
1048
- async dispatchMeshActorJoinCore(meshName, owner, record) {
1170
+ async dispatchMeshActorJoinCore(meshName, owner, record, replyState) {
1049
1171
  const spotId = owner.spotId;
1050
1172
  const control = record.kindData;
1051
1173
  if (control?.kind !== 'actorControl') {
@@ -1098,15 +1220,11 @@ class DefaultZLinkSpotManager {
1098
1220
  admissionRecord = provisional.record;
1099
1221
  canonicalAdmissionCreated = provisional.created;
1100
1222
  try {
1223
+ (0, application_job_queue_scope_1.releaseApplicationJobPermitBeforeHandler)();
1101
1224
  canonicalActorType = (await resolver({ actorId, ...control.canonicalActorJoin })).actorType;
1102
1225
  }
1103
1226
  catch (error) {
1104
1227
  this.formalRemoteActorAdmissions.fail(control.canonicalActorJoin.handoffId, error);
1105
- if (error instanceof contracts_1.ZLinkFrameworkException && record.replyFailure !== undefined) {
1106
- const terminal = (0, framework_errors_internal_1.internalFrameworkWireReply)(error);
1107
- requireMeshSpotReply(record.replyFailure(terminal.terminalResult, terminal.failureCode));
1108
- return;
1109
- }
1110
1228
  throw error;
1111
1229
  }
1112
1230
  }
@@ -1134,7 +1252,6 @@ class DefaultZLinkSpotManager {
1134
1252
  let admissionOutcome;
1135
1253
  let accepted = false;
1136
1254
  let committedAdmissionReplay = isRemoteCommit && admissionRecord?.state === 'committed';
1137
- let targetCommitPublished;
1138
1255
  const actorJoinIsCurrent = () => (record.deadlineUnixMs === undefined || record.deadlineUnixMs > BigInt(Date.now())) &&
1139
1256
  (record.isPending?.() ?? true);
1140
1257
  const abandonStaleAdmission = () => {
@@ -1185,13 +1302,10 @@ class DefaultZLinkSpotManager {
1185
1302
  if (canonicalAdmissionCreated) {
1186
1303
  if (targetsEntrySpot) {
1187
1304
  admissionOutcome = {
1188
- accepted: this.options.dispatchEntryActorJoin !== undefined,
1305
+ accepted: true,
1189
1306
  actorRef
1190
1307
  };
1191
1308
  }
1192
- else if (activation === undefined) {
1193
- admissionOutcome = { accepted: false, actorRef };
1194
- }
1195
1309
  else {
1196
1310
  const response = await activation.serial.execute(async () => activation.spot.onActorJoin(actorRef.actorId, (0, payload_codec_1.wrapFrameworkPayloadMessage)(callbackRequest, this.options.messageSerializers, requestContentType)));
1197
1311
  let encodedReply;
@@ -1446,16 +1560,6 @@ class DefaultZLinkSpotManager {
1446
1560
  return;
1447
1561
  }
1448
1562
  }
1449
- if (accepted &&
1450
- transferRequest !== undefined &&
1451
- this.options.actorTransferRuntime !== undefined &&
1452
- !isRemoteAdmission) {
1453
- // A lightweight Core actor-join notification can create the Actor
1454
- // before the formal transfer request reaches this branch. Preserve
1455
- // the full relocation fence in that race so a later Session bind
1456
- // refresh cannot erase the seal.
1457
- this.options.actorTransferRuntime.rememberRoutedActorTransferTarget(actorId, transferRequest.remoteBoundSessionTarget);
1458
- }
1459
1563
  if (accepted &&
1460
1564
  actor !== undefined &&
1461
1565
  transferRequest !== undefined &&
@@ -1466,7 +1570,8 @@ class DefaultZLinkSpotManager {
1466
1570
  spotId,
1467
1571
  transferId: transferRequest.transferId,
1468
1572
  handoffBacklog: transferRequest.handoffBacklog,
1469
- deferredJoinCompletion
1573
+ deferredJoinCompletion,
1574
+ sealedSession: transferRequest.remoteBoundSessionTarget
1470
1575
  });
1471
1576
  if (isRemoteCommit && admissionRecord !== undefined) {
1472
1577
  this.formalRemoteActorAdmissions.markCommitted(transferRequest.transferId, actor);
@@ -1482,7 +1587,7 @@ class DefaultZLinkSpotManager {
1482
1587
  // Core commits the target membership while it accepts this reply.
1483
1588
  // From this call onward a later callback/transport failure is
1484
1589
  // post-commit and must not roll the materialized Actor back.
1485
- targetCommitPublished = true;
1590
+ replyState.targetCommitPublished = true;
1486
1591
  }
1487
1592
  requireMeshSpotReply(joinReplyResult);
1488
1593
  return true;
@@ -1512,38 +1617,52 @@ class DefaultZLinkSpotManager {
1512
1617
  return;
1513
1618
  const commitEntryTransfer = async () => {
1514
1619
  try {
1515
- await this.options.dispatchEntryActorJoin?.(meshName, entryActor, []);
1516
- }
1517
- finally {
1518
- this.formalRemoteTransfers.completeTargetLifecycle(entryActor.context.actorId, pendingTransfer.transferId);
1519
- }
1520
- const sourceLeaveSubmitted = await pendingTransfer.sourceLeaveSubmitted;
1521
- if (!sourceLeaveSubmitted) {
1522
- throw new Error(`Actor '${entryActor.context.actorId}' source authority commit failed before leave submission.`);
1620
+ try {
1621
+ await this.options.dispatchEntryActorJoin?.(meshName, entryActor, []);
1622
+ }
1623
+ finally {
1624
+ this.formalRemoteTransfers.completeTargetLifecycle(entryActor.context.actorId, pendingTransfer.transferId);
1625
+ }
1626
+ const sourceLeaveSubmitted = await pendingTransfer.sourceLeaveSubmitted;
1627
+ if (!sourceLeaveSubmitted) {
1628
+ throw new Error(`Actor '${entryActor.context.actorId}' source authority commit failed before leave submission.`);
1629
+ }
1630
+ const handoffResults = await (0, actor_handoff_1.replayActorHandoffBacklog)(pendingTransfer.handoffBacklog, async (parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) => {
1631
+ if (this.options.dispatchEntryActorPacket === undefined) {
1632
+ throw new Error('Entry Spot saved handoff replay requires its Actor packet runtime.');
1633
+ }
1634
+ return await this.options.dispatchEntryActorPacket(entryActor.context.actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef);
1635
+ }, (index) => this.options.runtimeEventPublisher?.publish({
1636
+ sourceName: 'zlink.framework.actor-handoff',
1637
+ timestamp: new Date(),
1638
+ marker: 'backlog_enqueued',
1639
+ actorId: entryActor.context.actorId,
1640
+ index
1641
+ }));
1642
+ const failedHandoff = handoffResults.find((result) => !result.ok);
1643
+ if (failedHandoff !== undefined) {
1644
+ throw new Error(`Actor '${entryActor.context.actorId}' saved Entry handoff packet ` +
1645
+ `${failedHandoff.index} failed: ${(0, diagnostic_text_1.diagnosticTextOrAbsent)(failedHandoff.error)}.`);
1646
+ }
1523
1647
  }
1524
- const handoffResults = await (0, actor_handoff_1.replayActorHandoffBacklog)(pendingTransfer.handoffBacklog, async (parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef) => {
1525
- if (this.options.dispatchEntryActorPacket === undefined) {
1526
- throw new Error('Entry Spot saved handoff replay requires its Actor packet runtime.');
1648
+ catch (error) {
1649
+ const completion = pendingTransfer.deferredJoinCompletion;
1650
+ if (completion !== undefined) {
1651
+ await this.options.actorTransferRuntime?.deliverDeferredJoinCompletion({
1652
+ ...completion,
1653
+ status: 'failed',
1654
+ kind: spotActorFailureKind(error)
1655
+ }, entryActor, completion.actor, (operation) => this.options.executeEntryActor(meshName, entryActor.context.actorId, operation));
1527
1656
  }
1528
- return await this.options.dispatchEntryActorPacket(entryActor.context.actorId, parts, returnResponse, remoteBoundSessionTarget, fallbackActorRef);
1529
- }, (index) => this.options.runtimeEventPublisher?.publish({
1530
- sourceName: 'zlink.framework.actor-handoff',
1531
- timestamp: new Date(),
1532
- marker: 'backlog_enqueued',
1533
- actorId: entryActor.context.actorId,
1534
- index
1535
- }));
1536
- const failedHandoff = handoffResults.find((result) => !result.ok);
1537
- if (failedHandoff !== undefined) {
1538
- throw new Error(`Actor '${entryActor.context.actorId}' saved Entry handoff packet ` +
1539
- `${failedHandoff.index} failed: ${failedHandoff.error ?? 'unknown error'}.`);
1657
+ throw error;
1658
+ }
1659
+ const completion = pendingTransfer.deferredJoinCompletion;
1660
+ if (completion !== undefined) {
1661
+ await this.options.actorTransferRuntime?.deliverDeferredJoinCompletion(completion, entryActor, completion.actor, (operation) => this.options.executeEntryActor(meshName, entryActor.context.actorId, operation));
1540
1662
  }
1541
1663
  this.formalRemoteTransfers.delete(entryActor.context.actorId);
1542
1664
  };
1543
- this.options.detachedTaskRunner?.runDetached(`actor Entry Spot transfer ${entryActor.context.actorId}`, commitEntryTransfer);
1544
- if (this.options.detachedTaskRunner === undefined) {
1545
- void commitEntryTransfer().catch(() => undefined);
1546
- }
1665
+ this.options.detachedTaskRunner.runDetached(`actor Entry Spot transfer ${entryActor.context.actorId}`, commitEntryTransfer);
1547
1666
  }
1548
1667
  }
1549
1668
  else {
@@ -1555,10 +1674,10 @@ class DefaultZLinkSpotManager {
1555
1674
  if (control.canonicalActorJoin !== undefined) {
1556
1675
  this.formalRemoteActorAdmissions.fail(control.canonicalActorJoin.handoffId, error);
1557
1676
  }
1558
- if (targetCommitPublished !== true) {
1677
+ if (!replyState.targetCommitPublished) {
1559
1678
  this.formalRemoteTransfers.delete(actorId);
1560
1679
  }
1561
- if (materialized && targetCommitPublished !== true) {
1680
+ if (materialized && !replyState.targetCommitPublished) {
1562
1681
  await this.options.actorTransferRuntime?.rollbackRoutedActor(actor);
1563
1682
  }
1564
1683
  throw error;
@@ -1587,9 +1706,7 @@ class DefaultZLinkSpotManager {
1587
1706
  control.lifecycleKind === service_runtime_contracts_1.ActorLifecycleKind.Joined &&
1588
1707
  actorId !== undefined &&
1589
1708
  this.formalRemoteTransfers.get(actorId) !== undefined) {
1590
- this.options.detachedTaskRunner?.runDetached(`actor transfer target commit ${actorId}`, async () => await operation);
1591
- if (this.options.detachedTaskRunner === undefined)
1592
- void operation.catch(() => undefined);
1709
+ this.options.detachedTaskRunner.runDetached(`actor transfer target commit ${actorId}`, async () => await operation);
1593
1710
  return;
1594
1711
  }
1595
1712
  await operation;
@@ -1668,7 +1785,7 @@ class DefaultZLinkSpotManager {
1668
1785
  if (currentRef === null) {
1669
1786
  throw new Error(`Actor '${actor.context.actorId}' has no target ref for deferred Join completion.`);
1670
1787
  }
1671
- await this.options.actorTransferRuntime?.deliverDeferredJoinAccepted(deferredJoinCompletion, actor, currentRef, (operation) => activation.executeActor(actor.context.actorId, async () => await operation()));
1788
+ await this.options.actorTransferRuntime?.deliverDeferredJoinCompletion(deferredJoinCompletion, actor, currentRef, (operation) => activation.executeActor(actor.context.actorId, async () => await operation()));
1672
1789
  }
1673
1790
  };
1674
1791
  const completeTargetReady = async () => {
@@ -1683,7 +1800,7 @@ class DefaultZLinkSpotManager {
1683
1800
  const failedHandoff = handoffResults.find((result) => !result.ok);
1684
1801
  if (failedHandoff !== undefined) {
1685
1802
  throw new Error(`Actor '${actor.context.actorId}' saved handoff packet ` +
1686
- `${failedHandoff.index} failed: ${failedHandoff.error ?? 'unknown error'}.`);
1803
+ `${failedHandoff.index} failed: ${(0, diagnostic_text_1.diagnosticTextOrAbsent)(failedHandoff.error)}.`);
1687
1804
  }
1688
1805
  // Spec 15 §4.2 relocation temporary queue: arrivals parked at
1689
1806
  // this target directly (not relayed through the source's
@@ -1696,13 +1813,14 @@ class DefaultZLinkSpotManager {
1696
1813
  // the Session binding aggregate after this boundary.
1697
1814
  this.formalRemoteTransfers.delete(actor.context.actorId);
1698
1815
  }
1816
+ const sealedSession = pendingTransfer?.sealedSession;
1699
1817
  const updateBoundSessionRoute = async () => {
1700
- await this.options.actorTransferRuntime?.publishRoutedActorOwnership(actor);
1818
+ await this.options.actorTransferRuntime?.publishRoutedActorOwnership(actor, sealedSession);
1701
1819
  await this.options.actorTransferRuntime?.openRoutedActorSession(actor);
1702
1820
  };
1703
- // Session routing is an independent post-Ready branch. Callback
1704
- // sends are retained by the Session owner seal until this converges.
1705
- if (pendingTransfer !== undefined && this.options.detachedTaskRunner !== undefined) {
1821
+ // Session routing is an independent post-Ready branch. The Session
1822
+ // owner submits current-binding pushes while the route seal remains installed.
1823
+ if (pendingTransfer !== undefined) {
1706
1824
  this.options.detachedTaskRunner.runDetached(`actor transfer Session route ${actor.context.actorId}`, updateBoundSessionRoute);
1707
1825
  }
1708
1826
  else {
@@ -1731,10 +1849,7 @@ class DefaultZLinkSpotManager {
1731
1849
  onDetachedTerminal(terminal);
1732
1850
  }
1733
1851
  else {
1734
- this.options.detachedTaskRunner?.runDetached(`actor transfer target commit ${actor.context.actorId}`, async () => await terminal);
1735
- if (this.options.detachedTaskRunner === undefined) {
1736
- void terminal.catch(() => undefined);
1737
- }
1852
+ this.options.detachedTaskRunner.runDetached(`actor transfer target commit ${actor.context.actorId}`, async () => await terminal);
1738
1853
  }
1739
1854
  return;
1740
1855
  }
@@ -1784,30 +1899,48 @@ class DefaultZLinkSpotManager {
1784
1899
  }
1785
1900
  const entrySpotId = this.options.entryNodeRidProvider?.() ?? this.options.entryNodeRid;
1786
1901
  const targetsEntry = entrySpotId !== undefined && String(admission.admission.spotId) === String(entrySpotId);
1787
- if (targetsEntry) {
1788
- await this.options.dispatchEntryActorJoin?.(meshName, actor, []);
1789
- }
1790
- else {
1791
- const activation = this.activations.resolve(meshName, admission.admission.spotId);
1792
- if (activation === undefined) {
1793
- throw new Error(`Actor Join relocation '${relocationId}' target Spot is not active.`);
1902
+ const activation = targetsEntry
1903
+ ? undefined
1904
+ : this.activations.resolve(meshName, admission.admission.spotId);
1905
+ let lifecycleFailure;
1906
+ try {
1907
+ if (targetsEntry) {
1908
+ await this.options.dispatchEntryActorJoin?.(meshName, actor, []);
1909
+ }
1910
+ else {
1911
+ if (activation === undefined) {
1912
+ throw new Error(`Actor Join relocation '${relocationId}' target Spot is not active.`);
1913
+ }
1914
+ await activation.serial.execute(() => activation.spot.onJoinedActor(actor));
1794
1915
  }
1795
- await activation.serial.execute(() => activation.spot.onJoinedActor(actor));
1796
1916
  }
1797
- await submitSourceLeave(admission.admission.actorRef.nodeRid);
1917
+ catch (error) {
1918
+ lifecycleFailure = { error };
1919
+ }
1920
+ if (lifecycleFailure === undefined) {
1921
+ const sourceLeave = submitSourceLeave(admission.admission.actorRef.nodeRid);
1922
+ this.options.detachedTaskRunner.runDetached(`actor Join source leave ${actor.context.actorId}`, () => sourceLeave);
1923
+ }
1798
1924
  if (outcome.deferredJoinCompletion !== undefined &&
1799
1925
  this.options.actorTransferRuntime !== undefined) {
1800
1926
  const submitMailbox = targetsEntry
1801
1927
  ? (operation) => operation()
1802
1928
  : (operation) => {
1803
- const activation = this.activations.resolve(meshName, admission.admission.spotId);
1804
1929
  if (activation === undefined) {
1805
1930
  throw new Error(`Actor Join relocation '${relocationId}' target mailbox is missing.`);
1806
1931
  }
1807
1932
  return activation.executeActor(actor.context.actorId, operation);
1808
1933
  };
1809
- await this.options.actorTransferRuntime.deliverDeferredJoinAccepted(outcome.deferredJoinCompletion, actor, actorRef, submitMailbox, signal);
1810
- }
1934
+ await this.options.actorTransferRuntime.deliverDeferredJoinCompletion(lifecycleFailure === undefined
1935
+ ? outcome.deferredJoinCompletion
1936
+ : {
1937
+ ...outcome.deferredJoinCompletion,
1938
+ status: 'failed',
1939
+ kind: spotActorFailureKind(lifecycleFailure.error)
1940
+ }, actor, actorRef, submitMailbox, signal);
1941
+ }
1942
+ if (lifecycleFailure !== undefined)
1943
+ throw lifecycleFailure.error;
1811
1944
  this.formalRemoteActorAdmissions.markCommitted(relocationId, actor);
1812
1945
  return true;
1813
1946
  }
@@ -1934,17 +2067,10 @@ class DefaultZLinkSpotManager {
1934
2067
  }
1935
2068
  }
1936
2069
  exports.DefaultZLinkSpotManager = DefaultZLinkSpotManager;
1937
- function instanceDispatchErrorReason(error) {
1938
- if (error instanceof contracts_1.ZLinkFrameworkException) {
1939
- const kind = (0, framework_errors_internal_1.internalFrameworkErrorKind)(error);
1940
- if (kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotGenerationStale ||
1941
- kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotMoving ||
1942
- kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.SpotRouteNotFound ||
1943
- kind === framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.RequestTargetNotFound) {
1944
- return ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.StaleTarget;
1945
- }
1946
- }
1947
- return ZLinkDispatchOptions_1.ZLinkRuntimeDispatchErrorReason.HandlerException;
2070
+ function spotActorFailureKind(error) {
2071
+ return error instanceof contracts_1.ZLinkFrameworkException
2072
+ ? error.kind
2073
+ : contracts_1.ZLinkFrameworkErrorKind.InternalFailure;
1948
2074
  }
1949
2075
  function decodeFormalRemoteTransferRequest(message) {
1950
2076
  return decodeFormalRemoteTransferRequestBytes(message.data());