@zlink-systems/framework 0.30.0 → 0.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/LICENSE +150 -68
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/contracts/Actors/ZLinkActorClient.d.ts +2 -1
  4. package/dist/contracts/Channels/Calls.d.ts +2 -1
  5. package/dist/contracts/Common/ZLinkEncodedPayload.d.ts +6 -0
  6. package/dist/contracts/Common/ZLinkEncodedPayload.js +18 -3
  7. package/dist/contracts/Common/ZLinkMessageMetadata.js +11 -5
  8. package/dist/contracts/Common/encoded-payload-storage.d.ts +1 -1
  9. package/dist/contracts/Common/encoded-payload-storage.js +5 -2
  10. package/dist/contracts/Configuration/Builders.d.ts +1 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +2 -1
  12. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +5 -1
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +2 -2
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +2 -2
  16. package/dist/contracts/Handlers/Attributes.d.ts +5 -13
  17. package/dist/contracts/Handlers/Attributes.js +7 -11
  18. package/dist/contracts/Handlers/JsonContract.d.ts +2 -46
  19. package/dist/contracts/Handlers/JsonContract.js +4 -153
  20. package/dist/contracts/Locations/Rows.d.ts +2 -0
  21. package/dist/contracts/Spots/Contracts.d.ts +6 -1
  22. package/dist/contracts/Spots/ZLinkSpot.d.ts +3 -3
  23. package/dist/nest-integration.d.ts +1 -1
  24. package/dist/nest-integration.js +2 -1
  25. package/dist/runtime/abort.d.ts +5 -0
  26. package/dist/runtime/abort.js +10 -0
  27. package/dist/runtime/actors/actor-authority-publication.js +3 -2
  28. package/dist/runtime/actors/actor-client.d.ts +1 -2
  29. package/dist/runtime/actors/actor-client.js +52 -57
  30. package/dist/runtime/actors/actor-context.d.ts +2 -0
  31. package/dist/runtime/actors/actor-context.js +46 -9
  32. package/dist/runtime/actors/actor-handoff.d.ts +8 -4
  33. package/dist/runtime/actors/actor-handoff.js +219 -92
  34. package/dist/runtime/actors/actor-join-relocation.d.ts +3 -0
  35. package/dist/runtime/actors/actor-local-native-join.js +13 -12
  36. package/dist/runtime/actors/actor-mailbox.js +27 -1
  37. package/dist/runtime/actors/actor-remote-joiner.js +3 -1
  38. package/dist/runtime/actors/actor-remote-wire.js +15 -0
  39. package/dist/runtime/actors/actor-reply.d.ts +4 -0
  40. package/dist/runtime/actors/actor-reply.js +29 -0
  41. package/dist/runtime/actors/actor-routed-join-transport.d.ts +6 -2
  42. package/dist/runtime/actors/actor-routed-json-request.d.ts +2 -0
  43. package/dist/runtime/actors/actor-runtime-contracts.d.ts +2 -0
  44. package/dist/runtime/actors/actor-runtime-state.js +2 -20
  45. package/dist/runtime/actors/actor-source-transfer.d.ts +1 -17
  46. package/dist/runtime/actors/index.d.ts +8 -3
  47. package/dist/runtime/actors/index.js +55 -27
  48. package/dist/runtime/actors/session-disconnected-wire.d.ts +8 -0
  49. package/dist/runtime/actors/session-disconnected-wire.js +48 -0
  50. package/dist/runtime/actors/spot-actor-dispatch.js +2 -2
  51. package/dist/runtime/admission.d.ts +9 -1
  52. package/dist/runtime/admission.js +56 -23
  53. package/dist/runtime/application-jobs/application-ingress-record-owner.d.ts +6 -8
  54. package/dist/runtime/application-jobs/application-ingress-record-owner.js +39 -22
  55. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +15 -1
  56. package/dist/runtime/application-jobs/application-job-queue-scope.js +61 -20
  57. package/dist/runtime/application-jobs/contracts.d.ts +12 -1
  58. package/dist/runtime/backend/contracts/index.d.ts +37 -12
  59. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +2 -2
  60. package/dist/runtime/backend/mesh-completion-table.d.ts +9 -1
  61. package/dist/runtime/backend/mesh-completion-table.js +154 -49
  62. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +28 -1
  63. package/dist/runtime/backend/mesh-dispatch-pump.js +208 -101
  64. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +2 -2
  65. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -9
  66. package/dist/runtime/backend/node/node-dealer-channel-client-transport.d.ts +1 -1
  67. package/dist/runtime/backend/node/node-dealer-channel-client-transport.js +5 -2
  68. package/dist/runtime/backend/node/node-raw-binding-port.js +124 -72
  69. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +46 -13
  70. package/dist/runtime/backend/node/node-raw-mesh-backend.js +181 -164
  71. package/dist/runtime/backend/node/node-socket-backend-adapter.d.ts +1 -1
  72. package/dist/runtime/backend/node/node-socket-backend-adapter.js +11 -11
  73. package/dist/runtime/backend/raw-binding-port.d.ts +2 -2
  74. package/dist/runtime/backend/runtime-message.d.ts +1 -0
  75. package/dist/runtime/backend/runtime-message.js +5 -0
  76. package/dist/runtime/backend/runtime-values.d.ts +1 -0
  77. package/dist/runtime/backend/runtime-values.js +2 -1
  78. package/dist/runtime/channels/channel-clients.d.ts +2 -0
  79. package/dist/runtime/channels/channel-clients.js +75 -23
  80. package/dist/runtime/channels/channel-dispatch-pipeline.d.ts +25 -5
  81. package/dist/runtime/channels/channel-dispatch-pipeline.js +111 -56
  82. package/dist/runtime/channels/channel-dispatch-services.d.ts +1 -0
  83. package/dist/runtime/channels/channel-dispatch-services.js +45 -0
  84. package/dist/runtime/channels/channel-dispatchers.d.ts +4 -3
  85. package/dist/runtime/channels/channel-dispatchers.js +62 -54
  86. package/dist/runtime/channels/channel-envelope-inspection.d.ts +1 -2
  87. package/dist/runtime/channels/channel-envelope-inspection.js +1 -16
  88. package/dist/runtime/channels/channel-envelope.d.ts +2 -0
  89. package/dist/runtime/channels/channel-envelope.js +146 -28
  90. package/dist/runtime/channels/channel-outbound-operations.d.ts +2 -2
  91. package/dist/runtime/channels/channel-outbound-operations.js +8 -8
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +4 -3
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +19 -24
  94. package/dist/runtime/channels/channel-runtime-manager.d.ts +9 -8
  95. package/dist/runtime/channels/channel-runtime-manager.js +16 -16
  96. package/dist/runtime/channels/channel-transports.d.ts +18 -16
  97. package/dist/runtime/channels/channel-transports.js +77 -58
  98. package/dist/runtime/channels/client-server-location-runtime.js +5 -4
  99. package/dist/runtime/channels/dispatch-error-reporter.d.ts +2 -1
  100. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  101. package/dist/runtime/channels/fanout-location-runtime.d.ts +1 -1
  102. package/dist/runtime/channels/fanout-location-runtime.js +3 -3
  103. package/dist/runtime/channels/local-spot-route-transport.d.ts +1 -1
  104. package/dist/runtime/channels/local-spot-route-transport.js +2 -1
  105. package/dist/runtime/channels/router-socket-spot-route-transport.d.ts +2 -2
  106. package/dist/runtime/channels/router-socket-spot-route-transport.js +4 -4
  107. package/dist/runtime/channels/source-spot-router.d.ts +2 -2
  108. package/dist/runtime/channels/source-spot-router.js +4 -4
  109. package/dist/runtime/channels/spot-node-route-transport.d.ts +2 -2
  110. package/dist/runtime/channels/spot-node-route-transport.js +4 -4
  111. package/dist/runtime/channels/spot-route-bridge-transport.d.ts +2 -2
  112. package/dist/runtime/channels/spot-route-bridge-transport.js +4 -4
  113. package/dist/runtime/channels/spot-route-dispatch-strategy.d.ts +5 -4
  114. package/dist/runtime/channels/spot-route-dispatch-strategy.js +18 -18
  115. package/dist/runtime/diagnostics/flow-context.js +19 -7
  116. package/dist/runtime/diagnostics/index.js +4 -9
  117. package/dist/runtime/diagnostics/message-flow.d.ts +8 -0
  118. package/dist/runtime/diagnostics/message-flow.js +35 -5
  119. package/dist/runtime/diagnostics/runtime-metrics.d.ts +2 -2
  120. package/dist/runtime/diagnostics/runtime-metrics.js +10 -8
  121. package/dist/runtime/execution/index.d.ts +4 -2
  122. package/dist/runtime/execution/index.js +33 -10
  123. package/dist/runtime/execution/serial-execution-queue.d.ts +5 -0
  124. package/dist/runtime/execution/serial-execution-queue.js +22 -2
  125. package/dist/runtime/execution/state-lane.d.ts +2 -0
  126. package/dist/runtime/execution/state-lane.js +5 -0
  127. package/dist/runtime/foundation/actor-join-recovery-codec.js +2 -2
  128. package/dist/runtime/foundation/durable-service-request.d.ts +14 -0
  129. package/dist/runtime/foundation/durable-service-request.js +98 -0
  130. package/dist/runtime/foundation/operation-identity.d.ts +1 -0
  131. package/dist/runtime/foundation/operation-identity.js +5 -1
  132. package/dist/runtime/foundation/operation-registry.d.ts +25 -1
  133. package/dist/runtime/foundation/operation-registry.js +86 -18
  134. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +61 -8
  135. package/dist/runtime/foundation/raw-service-mesh-runtime.js +486 -266
  136. package/dist/runtime/foundation/service-liveness-registry.d.ts +12 -1
  137. package/dist/runtime/foundation/service-liveness-registry.js +38 -0
  138. package/dist/runtime/foundation/service-mailbox.d.ts +7 -0
  139. package/dist/runtime/foundation/service-maintenance-runtime.js +1 -6
  140. package/dist/runtime/foundation/service-relocation-object-owner.d.ts +3 -3
  141. package/dist/runtime/foundation/service-relocation-object-owner.js +48 -34
  142. package/dist/runtime/foundation/service-relocation-runtime.d.ts +2 -0
  143. package/dist/runtime/foundation/service-relocation-runtime.js +20 -4
  144. package/dist/runtime/foundation/service-runtime-contracts.d.ts +10 -1
  145. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +2 -1
  146. package/dist/runtime/foundation/service-stateful-registry.d.ts +5 -4
  147. package/dist/runtime/foundation/service-stateful-registry.js +24 -26
  148. package/dist/runtime/foundation/service-stateful-runtime.d.ts +75 -9
  149. package/dist/runtime/foundation/service-stateful-runtime.js +486 -218
  150. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +14 -6
  151. package/dist/runtime/foundation/service-stateful-wire-codec.js +48 -27
  152. package/dist/runtime/foundation/service-topology-registry.d.ts +12 -2
  153. package/dist/runtime/foundation/service-topology-registry.js +61 -27
  154. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +6 -1
  155. package/dist/runtime/foundation/service-wire-binary-primitives.js +27 -11
  156. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  157. package/dist/runtime/foundation/service-wire-constants.generated.js +1 -0
  158. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +13 -3
  159. package/dist/runtime/foundation/service-wire-m6a-codec.js +189 -78
  160. package/dist/runtime/handlers/handler-instance-scope.d.ts +8 -0
  161. package/dist/runtime/handlers/handler-instance-scope.js +54 -11
  162. package/dist/runtime/host/actor-packet-relay.d.ts +6 -4
  163. package/dist/runtime/host/actor-packet-relay.js +59 -72
  164. package/dist/runtime/host/actor-placement-coordinator.js +25 -8
  165. package/dist/runtime/host/actor-runtime-options-factory.js +2 -2
  166. package/dist/runtime/host/actor-transfer-runtime.d.ts +7 -31
  167. package/dist/runtime/host/actor-transfer-runtime.js +85 -331
  168. package/dist/runtime/host/application-job-queue.d.ts +40 -7
  169. package/dist/runtime/host/application-job-queue.js +137 -42
  170. package/dist/runtime/host/entry-actor-runtime.d.ts +1 -0
  171. package/dist/runtime/host/entry-actor-runtime.js +3 -0
  172. package/dist/runtime/host/index.d.ts +12 -2
  173. package/dist/runtime/host/index.js +300 -202
  174. package/dist/runtime/host/location-runtime-owner.js +2 -6
  175. package/dist/runtime/host/mesh-router-resolver.d.ts +4 -0
  176. package/dist/runtime/host/mesh-router-resolver.js +14 -6
  177. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -4
  178. package/dist/runtime/host/remote-bound-session-relay.js +73 -208
  179. package/dist/runtime/host/route-mesh-runtime.d.ts +2 -2
  180. package/dist/runtime/host/route-mesh-runtime.js +6 -4
  181. package/dist/runtime/host/runtime-shutdown.d.ts +1 -0
  182. package/dist/runtime/host/runtime-shutdown.js +3 -2
  183. package/dist/runtime/host/service-relocation-control.d.ts +1 -0
  184. package/dist/runtime/host/service-relocation-control.js +10 -4
  185. package/dist/runtime/host/service-relocation-host-runtime.d.ts +22 -14
  186. package/dist/runtime/host/service-relocation-host-runtime.js +754 -599
  187. package/dist/runtime/host/spot-address-transport.js +3 -2
  188. package/dist/runtime/host/spot-runtime-options-factory.js +16 -7
  189. package/dist/runtime/host/user-spot-creation-coordinator.js +33 -84
  190. package/dist/runtime/locations/actor-location-claims.d.ts +2 -2
  191. package/dist/runtime/locations/actor-location-claims.js +34 -19
  192. package/dist/runtime/locations/auto-connect-loop.d.ts +2 -0
  193. package/dist/runtime/locations/auto-connect-loop.js +22 -14
  194. package/dist/runtime/locations/auto-connect-reconciler.js +0 -6
  195. package/dist/runtime/locations/auto-connect-types.d.ts +0 -1
  196. package/dist/runtime/locations/descriptor-publication.d.ts +4 -0
  197. package/dist/runtime/locations/descriptor-publication.js +11 -0
  198. package/dist/runtime/locations/domain-store-contract.d.ts +1 -0
  199. package/dist/runtime/locations/in-memory-authority-store.d.ts +7 -1
  200. package/dist/runtime/locations/in-memory-authority-store.js +56 -19
  201. package/dist/runtime/locations/in-memory-location-store.js +1 -10
  202. package/dist/runtime/locations/index.d.ts +1 -0
  203. package/dist/runtime/locations/index.js +1 -0
  204. package/dist/runtime/locations/lease-tracker.js +1 -6
  205. package/dist/runtime/locations/lifecycle.d.ts +1 -2
  206. package/dist/runtime/locations/lifecycle.js +2 -5
  207. package/dist/runtime/locations/location-store-repository.d.ts +51 -1
  208. package/dist/runtime/locations/location-store-repository.js +363 -139
  209. package/dist/runtime/locations/relocation-blob.d.ts +18 -1
  210. package/dist/runtime/locations/relocation-blob.js +52 -1
  211. package/dist/runtime/locations/request-source-resolver.d.ts +37 -0
  212. package/dist/runtime/locations/request-source-resolver.js +80 -0
  213. package/dist/runtime/locations/resolvers.js +1 -1
  214. package/dist/runtime/locations/runtime.d.ts +7 -3
  215. package/dist/runtime/locations/runtime.js +61 -53
  216. package/dist/runtime/messaging/framework-json-v1.d.ts +4 -6
  217. package/dist/runtime/messaging/framework-json-v1.js +38 -294
  218. package/dist/runtime/messaging/packet-name.d.ts +1 -1
  219. package/dist/runtime/messaging/packet-name.js +8 -24
  220. package/dist/runtime/messaging/payload-codec.d.ts +7 -1
  221. package/dist/runtime/messaging/payload-codec.js +7 -6
  222. package/dist/runtime/messaging/request-result.d.ts +2 -0
  223. package/dist/runtime/messaging/request-result.js +57 -0
  224. package/dist/runtime/messaging/submission-result.d.ts +1 -0
  225. package/dist/runtime/messaging/submission-result.js +5 -2
  226. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +34 -1
  227. package/dist/runtime/protocol/service_wire_codec.generated.js +229 -0
  228. package/dist/runtime/protocol/service_wire_pilot_codec.generated.d.ts +16 -1
  229. package/dist/runtime/protocol/service_wire_pilot_codec.generated.js +37 -8
  230. package/dist/runtime/spots/formal-remote-actor-admission-registry.d.ts +7 -2
  231. package/dist/runtime/spots/formal-remote-actor-admission-registry.js +36 -21
  232. package/dist/runtime/spots/index.d.ts +21 -11
  233. package/dist/runtime/spots/index.js +243 -178
  234. package/dist/runtime/spots/spot-activation-registry.d.ts +4 -2
  235. package/dist/runtime/spots/spot-activation-registry.js +21 -11
  236. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  237. package/dist/runtime/spots/spot-activation-state.js +7 -7
  238. package/dist/runtime/spots/spot-activation.d.ts +7 -3
  239. package/dist/runtime/spots/spot-activation.js +140 -52
  240. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -0
  241. package/dist/runtime/spots/spot-actor-admission-coordinator.js +13 -22
  242. package/dist/runtime/spots/spot-actor-membership.d.ts +0 -1
  243. package/dist/runtime/spots/spot-actor-membership.js +0 -8
  244. package/dist/runtime/spots/spot-actor-packet-dispatch.js +33 -8
  245. package/dist/runtime/spots/spot-actor-packet-drain.js +5 -33
  246. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -0
  247. package/dist/runtime/spots/spot-entry-activation.js +20 -11
  248. package/dist/runtime/spots/spot-handler-registry.d.ts +7 -4
  249. package/dist/runtime/spots/spot-handler-registry.js +24 -10
  250. package/dist/runtime/spots/spot-manager-internal-contracts.d.ts +2 -2
  251. package/dist/runtime/spots/spot-manager-public.js +2 -2
  252. package/dist/runtime/spots/spot-node-autoconnect.d.ts +2 -1
  253. package/dist/runtime/spots/spot-node-autoconnect.js +22 -42
  254. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -2
  255. package/dist/runtime/spots/spot-node-runtime-manager.js +115 -50
  256. package/dist/runtime/spots/spot-outbound.d.ts +3 -0
  257. package/dist/runtime/spots/spot-outbound.js +27 -18
  258. package/dist/runtime/spots/spot-remote-codec.js +5 -1
  259. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +1 -0
  260. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +1 -1
  261. package/dist/runtime/spots/spot-runtime-ports.d.ts +1 -1
  262. package/dist/runtime/spots/spot-serial-executor.d.ts +10 -0
  263. package/dist/runtime/spots/spot-serial-executor.js +61 -8
  264. package/dist/runtime/spots/spot-serial-turn-executor.js +19 -2
  265. package/dist/runtime/spots/spot-subscription-dispatch.js +1 -4
  266. package/dist/runtime/spots/spot-timer.d.ts +57 -5
  267. package/dist/runtime/spots/spot-timer.js +288 -103
  268. package/dist/runtime/streams/actor-session-binding-registry.d.ts +42 -11
  269. package/dist/runtime/streams/actor-session-binding-registry.js +165 -48
  270. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +8 -4
  271. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +2 -1
  272. package/dist/runtime/streams/bound-actor-relay-sender.js +15 -8
  273. package/dist/runtime/streams/bound-session-service.d.ts +1 -1
  274. package/dist/runtime/streams/bound-session-service.js +6 -11
  275. package/dist/runtime/streams/index.d.ts +3 -2
  276. package/dist/runtime/streams/index.js +6 -4
  277. package/dist/runtime/streams/managed-stream.js +3 -2
  278. package/dist/runtime/streams/native-fallback-bound-session.js +8 -73
  279. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -8
  280. package/dist/runtime/streams/session-actor-coordinator.js +15 -32
  281. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +3 -10
  282. package/dist/runtime/streams/stream-session-runtime.d.ts +1 -1
  283. package/dist/runtime/streams/stream-session-runtime.js +14 -31
  284. package/dist/runtime/workers/index.js +1 -1
  285. package/package.json +3 -3
  286. package/src/contracts/Actors/ZLinkActorClient.ts +2 -1
  287. package/src/contracts/Channels/Calls.ts +2 -1
  288. package/src/contracts/Common/ZLinkEncodedPayload.ts +24 -4
  289. package/src/contracts/Common/ZLinkMessageMetadata.ts +13 -8
  290. package/src/contracts/Common/encoded-payload-storage.ts +6 -3
  291. package/src/contracts/Configuration/Builders.ts +4 -1
  292. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +7 -2
  293. package/src/contracts/Configuration/RegistrationBuilders.ts +6 -2
  294. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  295. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +2 -1
  296. package/src/contracts/Handlers/Attributes.ts +14 -21
  297. package/src/contracts/Handlers/JsonContract.ts +8 -216
  298. package/src/contracts/Locations/Rows.ts +2 -0
  299. package/src/contracts/Spots/Contracts.ts +10 -1
  300. package/src/contracts/Spots/ZLinkSpot.ts +3 -3
  301. package/src/nest-integration.ts +1 -0
  302. package/src/runtime/abort.ts +12 -0
  303. package/src/runtime/actors/actor-authority-publication.ts +3 -2
  304. package/src/runtime/actors/actor-client.ts +100 -85
  305. package/src/runtime/actors/actor-context.ts +49 -9
  306. package/src/runtime/actors/actor-handoff.ts +291 -110
  307. package/src/runtime/actors/actor-join-relocation.ts +3 -0
  308. package/src/runtime/actors/actor-local-native-join.ts +21 -26
  309. package/src/runtime/actors/actor-mailbox.ts +40 -2
  310. package/src/runtime/actors/actor-remote-joiner.ts +6 -1
  311. package/src/runtime/actors/actor-remote-wire.ts +17 -0
  312. package/src/runtime/actors/actor-reply.ts +42 -0
  313. package/src/runtime/actors/actor-routed-join-transport.ts +14 -4
  314. package/src/runtime/actors/actor-routed-json-request.ts +10 -2
  315. package/src/runtime/actors/actor-runtime-contracts.ts +2 -0
  316. package/src/runtime/actors/actor-runtime-state.ts +2 -20
  317. package/src/runtime/actors/actor-source-transfer.ts +1 -34
  318. package/src/runtime/actors/index.ts +60 -32
  319. package/src/runtime/actors/session-disconnected-wire.ts +66 -0
  320. package/src/runtime/actors/spot-actor-dispatch.ts +4 -2
  321. package/src/runtime/admission.ts +69 -21
  322. package/src/runtime/application-jobs/application-ingress-record-owner.ts +41 -25
  323. package/src/runtime/application-jobs/application-job-queue-scope.ts +83 -22
  324. package/src/runtime/application-jobs/contracts.ts +16 -1
  325. package/src/runtime/backend/contracts/index.ts +92 -18
  326. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +5 -3
  327. package/src/runtime/backend/mesh-completion-table.ts +160 -57
  328. package/src/runtime/backend/mesh-dispatch-pump.ts +237 -108
  329. package/src/runtime/backend/node/node-backend-adapter-support.ts +17 -8
  330. package/src/runtime/backend/node/node-dealer-channel-client-transport.ts +12 -2
  331. package/src/runtime/backend/node/node-raw-binding-port.ts +148 -85
  332. package/src/runtime/backend/node/node-raw-mesh-backend.ts +315 -201
  333. package/src/runtime/backend/node/node-socket-backend-adapter.ts +26 -11
  334. package/src/runtime/backend/raw-binding-port.ts +7 -2
  335. package/src/runtime/backend/runtime-message.ts +6 -0
  336. package/src/runtime/backend/runtime-values.ts +1 -0
  337. package/src/runtime/channels/channel-clients.ts +132 -58
  338. package/src/runtime/channels/channel-dispatch-pipeline.ts +198 -114
  339. package/src/runtime/channels/channel-dispatch-services.ts +69 -1
  340. package/src/runtime/channels/channel-dispatchers.ts +136 -90
  341. package/src/runtime/channels/channel-envelope-inspection.ts +2 -16
  342. package/src/runtime/channels/channel-envelope.ts +225 -31
  343. package/src/runtime/channels/channel-outbound-operations.ts +22 -8
  344. package/src/runtime/channels/channel-runtime-lifecycle.ts +13 -13
  345. package/src/runtime/channels/channel-runtime-manager.ts +41 -17
  346. package/src/runtime/channels/channel-transports.ts +171 -112
  347. package/src/runtime/channels/client-server-location-runtime.ts +11 -10
  348. package/src/runtime/channels/dispatch-error-reporter.ts +4 -2
  349. package/src/runtime/channels/fanout-location-runtime.ts +17 -9
  350. package/src/runtime/channels/local-spot-route-transport.ts +3 -1
  351. package/src/runtime/channels/router-socket-spot-route-transport.ts +13 -4
  352. package/src/runtime/channels/source-spot-router.ts +8 -4
  353. package/src/runtime/channels/spot-node-route-transport.ts +8 -4
  354. package/src/runtime/channels/spot-route-bridge-transport.ts +6 -4
  355. package/src/runtime/channels/spot-route-dispatch-strategy.ts +47 -18
  356. package/src/runtime/diagnostics/flow-context.ts +20 -7
  357. package/src/runtime/diagnostics/index.ts +1 -7
  358. package/src/runtime/diagnostics/message-flow.ts +47 -9
  359. package/src/runtime/diagnostics/runtime-metrics.ts +12 -10
  360. package/src/runtime/execution/index.ts +40 -14
  361. package/src/runtime/execution/serial-execution-queue.ts +33 -4
  362. package/src/runtime/execution/state-lane.ts +7 -0
  363. package/src/runtime/foundation/actor-join-recovery-codec.ts +2 -2
  364. package/src/runtime/foundation/durable-service-request.ts +137 -0
  365. package/src/runtime/foundation/operation-identity.ts +5 -1
  366. package/src/runtime/foundation/operation-registry.ts +98 -20
  367. package/src/runtime/foundation/raw-service-mesh-runtime.ts +704 -336
  368. package/src/runtime/foundation/service-liveness-registry.ts +39 -0
  369. package/src/runtime/foundation/service-mailbox.ts +8 -0
  370. package/src/runtime/foundation/service-maintenance-runtime.ts +1 -8
  371. package/src/runtime/foundation/service-relocation-object-owner.ts +55 -36
  372. package/src/runtime/foundation/service-relocation-runtime.ts +25 -4
  373. package/src/runtime/foundation/service-runtime-contracts.ts +19 -2
  374. package/src/runtime/foundation/service-session-binding-ingress-port.ts +2 -1
  375. package/src/runtime/foundation/service-stateful-registry.ts +38 -35
  376. package/src/runtime/foundation/service-stateful-runtime.ts +732 -275
  377. package/src/runtime/foundation/service-stateful-wire-codec.ts +49 -16
  378. package/src/runtime/foundation/service-topology-registry.ts +91 -36
  379. package/src/runtime/foundation/service-wire-binary-primitives.ts +35 -12
  380. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  381. package/src/runtime/foundation/service-wire-m6a-codec.ts +231 -76
  382. package/src/runtime/handlers/handler-instance-scope.ts +67 -16
  383. package/src/runtime/host/actor-packet-relay.ts +113 -94
  384. package/src/runtime/host/actor-placement-coordinator.ts +31 -8
  385. package/src/runtime/host/actor-runtime-options-factory.ts +13 -2
  386. package/src/runtime/host/actor-transfer-runtime.ts +104 -430
  387. package/src/runtime/host/application-job-queue.ts +160 -41
  388. package/src/runtime/host/entry-actor-runtime.ts +4 -0
  389. package/src/runtime/host/index.ts +473 -271
  390. package/src/runtime/host/location-runtime-owner.ts +2 -6
  391. package/src/runtime/host/mesh-router-resolver.ts +13 -5
  392. package/src/runtime/host/remote-bound-session-relay.ts +88 -271
  393. package/src/runtime/host/route-mesh-runtime.ts +12 -6
  394. package/src/runtime/host/runtime-shutdown.ts +15 -4
  395. package/src/runtime/host/service-relocation-control.ts +11 -5
  396. package/src/runtime/host/service-relocation-host-runtime.ts +1092 -759
  397. package/src/runtime/host/spot-address-transport.ts +4 -2
  398. package/src/runtime/host/spot-runtime-options-factory.ts +20 -7
  399. package/src/runtime/host/user-spot-creation-coordinator.ts +41 -100
  400. package/src/runtime/locations/actor-location-claims.ts +52 -30
  401. package/src/runtime/locations/auto-connect-loop.ts +22 -14
  402. package/src/runtime/locations/auto-connect-reconciler.ts +0 -6
  403. package/src/runtime/locations/auto-connect-types.ts +0 -1
  404. package/src/runtime/locations/descriptor-publication.ts +7 -0
  405. package/src/runtime/locations/domain-store-contract.ts +5 -0
  406. package/src/runtime/locations/in-memory-authority-store.ts +85 -23
  407. package/src/runtime/locations/in-memory-location-store.ts +1 -12
  408. package/src/runtime/locations/index.ts +1 -0
  409. package/src/runtime/locations/lease-tracker.ts +2 -9
  410. package/src/runtime/locations/lifecycle.ts +8 -26
  411. package/src/runtime/locations/location-store-repository.ts +628 -152
  412. package/src/runtime/locations/relocation-blob.ts +75 -1
  413. package/src/runtime/locations/request-source-resolver.ts +138 -0
  414. package/src/runtime/locations/resolvers.ts +2 -2
  415. package/src/runtime/locations/runtime.ts +98 -64
  416. package/src/runtime/messaging/framework-json-v1.ts +5 -325
  417. package/src/runtime/messaging/packet-name.ts +5 -25
  418. package/src/runtime/messaging/payload-codec.ts +8 -11
  419. package/src/runtime/messaging/request-result.ts +62 -0
  420. package/src/runtime/messaging/submission-result.ts +5 -1
  421. package/src/runtime/protocol/service_wire_codec.generated.ts +218 -5
  422. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +16 -13
  423. package/src/runtime/spots/formal-remote-actor-admission-registry.ts +46 -25
  424. package/src/runtime/spots/index.ts +389 -283
  425. package/src/runtime/spots/spot-activation-registry.ts +25 -13
  426. package/src/runtime/spots/spot-activation-state.ts +12 -19
  427. package/src/runtime/spots/spot-activation.ts +198 -96
  428. package/src/runtime/spots/spot-actor-admission-coordinator.ts +25 -55
  429. package/src/runtime/spots/spot-actor-membership.ts +0 -15
  430. package/src/runtime/spots/spot-actor-packet-dispatch.ts +56 -11
  431. package/src/runtime/spots/spot-actor-packet-drain.ts +9 -52
  432. package/src/runtime/spots/spot-entry-activation.ts +33 -21
  433. package/src/runtime/spots/spot-handler-registry.ts +56 -12
  434. package/src/runtime/spots/spot-manager-internal-contracts.ts +2 -2
  435. package/src/runtime/spots/spot-manager-public.ts +2 -2
  436. package/src/runtime/spots/spot-node-autoconnect.ts +28 -47
  437. package/src/runtime/spots/spot-node-runtime-manager.ts +197 -67
  438. package/src/runtime/spots/spot-outbound.ts +39 -19
  439. package/src/runtime/spots/spot-remote-codec.ts +9 -2
  440. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +2 -1
  441. package/src/runtime/spots/spot-runtime-ports.ts +1 -1
  442. package/src/runtime/spots/spot-serial-executor.ts +97 -25
  443. package/src/runtime/spots/spot-serial-turn-executor.ts +22 -3
  444. package/src/runtime/spots/spot-subscription-dispatch.ts +1 -4
  445. package/src/runtime/spots/spot-timer.ts +418 -158
  446. package/src/runtime/streams/actor-session-binding-registry.ts +236 -64
  447. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +16 -8
  448. package/src/runtime/streams/bound-actor-relay-sender.ts +23 -9
  449. package/src/runtime/streams/bound-session-service.ts +7 -10
  450. package/src/runtime/streams/index.ts +12 -6
  451. package/src/runtime/streams/managed-stream.ts +4 -2
  452. package/src/runtime/streams/native-fallback-bound-session.ts +14 -103
  453. package/src/runtime/streams/session-actor-coordinator.ts +39 -88
  454. package/src/runtime/streams/stream-binding-runtime-ports.ts +3 -9
  455. package/src/runtime/streams/stream-session-runtime.ts +13 -34
  456. package/src/runtime/workers/index.ts +1 -1
@@ -1,3 +1,4 @@
1
+ import type { ZLinkMeshDispatchAdmission } from '../admission';
1
2
  import type { ApplicationJobOrigin } from '../application-jobs/contracts';
2
3
  import { type ActorRef, type RoutingId, type ZLinkActor, type ZLinkChannelClient, type ZLinkFanoutClient, type ZLinkMeshNodeDescriptor, type ZLinkMessage, type ZLinkMessageSerializer, type ZLinkSpotPublisherClient, ZLinkFrameworkRuntimeState } from '../../contracts';
3
4
  import type { Message } from '../../contracts/Common/Message';
@@ -9,7 +10,7 @@ import type { ZLinkActorHandoffPacket } from '../actors/actor-handoff';
9
10
  import type { ZLinkBackendAdapterFactory, ZLinkBackendContext, ZLinkBackendMeshNode } from '../backend/contracts';
10
11
  import { ZLinkMeshCompletionTable } from '../backend/mesh-completion-table';
11
12
  import type { ZLinkDispatchErrorReporter } from '../channels';
12
- import { type ZLinkFrameworkRegistration } from '../configuration';
13
+ import { type ZLinkFrameworkRegistration, type ZLinkSpotNodeOptions } from '../configuration';
13
14
  import type { ZLinkRuntimeEventPublisher } from '../diagnostics';
14
15
  import type { ZLinkListenerRecords } from '../foundation/listener-records';
15
16
  import { type ZLinkMessageFollowOrigin, type ReadyRecord, type ReceiveRecord } from '../foundation/service-runtime-contracts';
@@ -75,6 +76,7 @@ export declare class ZLinkSpotNodeRuntimeManager {
75
76
  constructor(options: ZLinkSpotNodeRuntimeManagerOptions);
76
77
  createTopicMessage(): import("../backend/runtime-values").ZLinkBackendTopicMessage;
77
78
  configureLocationAutoConnect(runtime: ZLinkLocationRuntime, stores: ZLinkLocationRuntimeStores, options: ZLinkLocationOptionOverrides, events?: ZLinkLocationEventSink): void;
79
+ requestPeerReconcile(meshName: string, peerRid: string): Promise<void>;
78
80
  startLocationAutoConnect(signal?: AbortSignal): Promise<void>;
79
81
  /**
80
82
  * Fences transport connections that were created under an owner token which
@@ -85,6 +87,7 @@ export declare class ZLinkSpotNodeRuntimeManager {
85
87
  start(): Promise<void>;
86
88
  publishMeshNodeState(state: ZLinkFrameworkRuntimeState, signal?: AbortSignal, selectedMeshName?: string): Promise<void>;
87
89
  private publishMeshNodeStateCore;
90
+ private localDescriptorFields;
88
91
  reconcileAndPublishMeshNodeState(state: ZLinkFrameworkRuntimeState, meshName: string, signal?: AbortSignal): Promise<void>;
89
92
  private entrySpotId;
90
93
  get meshNodesByName(): ReadonlyMap<string, ZLinkBackendMeshNode>;
@@ -112,13 +115,21 @@ export declare class ZLinkSpotNodeRuntimeManager {
112
115
  serverChannels(meshName: string): [string, import("../configuration").ZLinkMeshChannelOptions][];
113
116
  dispose(signal?: AbortSignal, deadline?: Date): Promise<void>;
114
117
  private disposeCore;
118
+ /**
119
+ * Node and Channel records go straight to the framework dispatcher in the
120
+ * pump's turn. Only Spot and Actor records addressed to the Entry Spot wait
121
+ * for its activation first.
122
+ */
115
123
  private dispatchMeshRecord;
116
- dispatchEntrySpotRecord(meshName: string, owner: ReadyRecord, record: ReceiveRecord): Promise<boolean>;
124
+ private targetsEntrySpot;
125
+ private dispatchFrameworkRecord;
126
+ dispatchEntrySpotRecord(meshName: string, owner: ReadyRecord, record: ReceiveRecord, admit?: ZLinkMeshDispatchAdmission): Promise<boolean>;
117
127
  private ensureEntryActivation;
118
128
  private initializeEntrySpot;
119
129
  private primaryEntryActivation;
120
130
  dispatchEntryActorPacket(origin: ApplicationJobOrigin, actorId: string, parts: readonly Message[], returnResponse?: boolean, remoteBoundSessionTarget?: ZLinkRemoteBoundSessionTarget, fallbackActorRef?: ActorRef, requestTerminal?: (response: unknown) => Promise<void> | void, messageFollowOrigin?: ZLinkMessageFollowOrigin): Promise<unknown>;
121
131
  dispatchEntryActorJoin(meshName: string, actor: ZLinkActor, handoffBacklog?: readonly ZLinkActorHandoffPacket[]): Promise<void>;
132
+ admitEntryActorPacketPrefix(meshName: string, actorId: string, records: readonly import('../actors/actor-handoff').ZLinkActorHandoffPrefixRecord[]): import('../actors/actor-handoff').ZLinkActorHandoffPrefixAdmission;
122
133
  executeEntryActor<T>(meshName: string, actorId: string, operation: () => Promise<T>): Promise<T>;
123
134
  publish(meshName: string, channelName: string, topic: string, packetName: string | undefined, event: Message, signal?: AbortSignal, metadata?: ReadonlyMap<string, string>): Promise<ZLinkSubmitResult>;
124
135
  private executePublish;
@@ -126,3 +137,9 @@ export declare class ZLinkSpotNodeRuntimeManager {
126
137
  private publishWithFlags;
127
138
  }
128
139
  export declare function createFrameworkEntrySpotId(prefix: string): string;
140
+ /**
141
+ * The one decision for creating a new Actor on this node (Actor model §6.3): the node registered
142
+ * an Entry Spot type that accepts the Actor type and an Actor factory for it. Publication and the
143
+ * target refusal both read it.
144
+ */
145
+ export declare function registrationAcceptsNewActor(registration: ZLinkSpotNodeOptions, stableType: string): boolean;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ZLinkSpotNodeRuntimeManager = void 0;
4
4
  exports.createFrameworkEntrySpotId = createFrameworkEntrySpotId;
5
+ exports.registrationAcceptsNewActor = registrationAcceptsNewActor;
5
6
  const disposal_1 = require("../disposal");
6
7
  const node_crypto_1 = require("node:crypto");
7
8
  const contracts_1 = require("../../contracts");
@@ -68,6 +69,9 @@ class ZLinkSpotNodeRuntimeManager {
68
69
  configureLocationAutoConnect(runtime, stores, options, events) {
69
70
  this.locationAutoConnect = (0, spot_node_autoconnect_1.createSpotNodeLocationAutoConnectContext)(runtime, stores, options, events);
70
71
  }
72
+ async requestPeerReconcile(meshName, peerRid) {
73
+ await Promise.all(this.autoConnectLoops.map((loop) => loop.requestPeerReconcile(meshName, peerRid)));
74
+ }
71
75
  async startLocationAutoConnect(signal) {
72
76
  const location = this.locationAutoConnect;
73
77
  if (location === undefined || this.autoConnectLoops.length > 0) {
@@ -82,6 +86,7 @@ class ZLinkSpotNodeRuntimeManager {
82
86
  const capability = (0, spot_node_autoconnect_1.spotNodeAutoConnectCapability)(spotNodeName, spotNode, node);
83
87
  if (capability === undefined)
84
88
  continue;
89
+ node.setRequestSourceAcceptance?.((nodeRid, nodeGeneration, nodeRidStorageHex, sourceSignal) => location.requestSources.accept(capability.local.meshName, nodeRid, nodeGeneration, nodeRidStorageHex, sourceSignal));
85
90
  const reconciler = new locations_1.ZLinkAutoConnectReconciler({
86
91
  local: capability.local,
87
92
  localRow: capability.localRow,
@@ -152,6 +157,22 @@ class ZLinkSpotNodeRuntimeManager {
152
157
  if (this.options.dispatchErrors !== undefined) {
153
158
  node.setDispatchErrorReporter?.(this.options.dispatchErrors, spotNodeName);
154
159
  }
160
+ // Session-Actor binding §4: the Session owner identity comes from the
161
+ // host's own descriptor or from a peer descriptor that passed the
162
+ // Location runtime §4.1 owner lease check.
163
+ node.setSessionOwnerDescriptors?.({
164
+ local: () => this.locationAutoConnect?.runtime.currentOwnerToken,
165
+ peer: async (peerRid, peerGeneration) => {
166
+ const location = this.locationAutoConnect;
167
+ if (location === undefined)
168
+ return undefined;
169
+ const descriptor = (await location.runtime.listLiveMeshNodes(spotNodeName)).find((candidate) => (0, routing_id_1.routingIdsEqual)(candidate.rid, peerRid) &&
170
+ candidate.lifecycleGeneration === peerGeneration);
171
+ return descriptor === undefined
172
+ ? undefined
173
+ : { ownerId: descriptor.ownerId, leaseGeneration: descriptor.leaseGeneration };
174
+ }
175
+ });
155
176
  node.setMailboxRecordDroppedHandler?.((record) => this.options.dispatchErrors?.report({
156
177
  surface: ZLinkDispatchOptions_1.ZLinkDispatchErrorSurface.RouteMeshChannel,
157
178
  messageKind: ZLinkDispatchOptions_1.ZLinkDispatchMessageKind.Send,
@@ -257,7 +278,7 @@ class ZLinkSpotNodeRuntimeManager {
257
278
  this.meshNodes.delete(spotNodeName);
258
279
  completions.dispose(error);
259
280
  await pump?.dispose();
260
- node.close();
281
+ await node.close();
261
282
  throw error;
262
283
  }
263
284
  }
@@ -283,9 +304,8 @@ class ZLinkSpotNodeRuntimeManager {
283
304
  return;
284
305
  const ownerChanged = this.publishedOwnerToken !== undefined && !sameOwnerToken(this.publishedOwnerToken, owner);
285
306
  if (ownerChanged) {
286
- // A new owner token can refer to an empty or replaced Store. The cached
287
- // descriptor was written under the previous lease and must not force a
288
- // Renew against a row that no longer exists.
307
+ // A descriptor confirmed under the previous lease must not supply
308
+ // cached population data for a new owner token.
289
309
  this.publishedMeshNodeDescriptors.clear();
290
310
  }
291
311
  for (const [meshName, registration] of this.options.registration.spotNodes) {
@@ -301,7 +321,7 @@ class ZLinkSpotNodeRuntimeManager {
301
321
  const capabilities = [
302
322
  ...userSpots.map(([stableType, factory]) => objectCapability('user_spot', stableType, factory)),
303
323
  ...instanceSpots.map(([stableType, factory]) => objectCapability('instance_spot', stableType, factory)),
304
- ...actors.map(([stableType, factory]) => objectCapability('actor', stableType, factory))
324
+ ...actors.map(([stableType, factory]) => objectCapability('actor', stableType, factory, registrationAcceptsNewActor(registration, stableType)))
305
325
  ].sort((left, right) => {
306
326
  const kindOrder = left.objectKind.localeCompare(right.objectKind);
307
327
  return kindOrder !== 0 ? kindOrder : left.stableType.localeCompare(right.stableType);
@@ -316,9 +336,8 @@ class ZLinkSpotNodeRuntimeManager {
316
336
  // The raw MeshNode resolves port zero and applies AdvertiseHost once.
317
337
  // Discovery and RouteMesh hello must publish that same public identity.
318
338
  endpoint: status.localEndpoint,
319
- objectRole: effectiveObjectRole(registration),
339
+ ...this.localDescriptorFields(meshName, registration, state),
320
340
  entrySpotId: this.entrySpotId(meshName, registration),
321
- placementWeight: this.placementWeight(meshName),
322
341
  populationCapacity: {
323
342
  actors: {
324
343
  active: current?.populationCapacity.actors.active ?? 0,
@@ -348,13 +367,6 @@ class ZLinkSpotNodeRuntimeManager {
348
367
  active: 0,
349
368
  limit: registration.activationConcurrencyLimit ?? InternalDefaults_1.DEFAULT_ACTIVATION_CONCURRENCY_LIMIT
350
369
  },
351
- channelWeights: Object.fromEntries(this.serverChannels(meshName).map(([channelName, channel]) => [
352
- channelName,
353
- state === contracts_1.ZLinkFrameworkRuntimeState.Draining
354
- ? 0
355
- : this.effectiveChannelWeight(meshName, channelName, channel.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT)
356
- ])),
357
- applicationVersion: this.options.registration.applicationVersion,
358
370
  maintenanceWave: this.options.registration.maintenanceWave,
359
371
  spotTypes: [
360
372
  ...userSpots.map(([stableType]) => stableType),
@@ -365,11 +377,12 @@ class ZLinkSpotNodeRuntimeManager {
365
377
  state,
366
378
  securityIdentity: 'default'
367
379
  };
368
- const result = await location.runtime.writeMeshNode(descriptor, ownerChanged
369
- ? Locations_1.ZLinkLocationWriteIntent.Renew
370
- : current === undefined
371
- ? Locations_1.ZLinkLocationWriteIntent.NewClaim
372
- : Locations_1.ZLinkLocationWriteIntent.Renew, signal);
380
+ // Revision is issued before submission: an unconfirmed Store write may
381
+ // already have applied, so the next publication must not reuse it.
382
+ this.descriptorRevisionByMesh.set(meshName, descriptor.descriptorRevision);
383
+ const result = await location.runtime.writeMeshNode(descriptor, previousRevision === 0n
384
+ ? Locations_1.ZLinkLocationWriteIntent.NewClaim
385
+ : Locations_1.ZLinkLocationWriteIntent.Renew, signal);
373
386
  if (result.status !== Locations_1.ZLinkLocationWriteStatus.Stored) {
374
387
  throw new configuration_1.ZLinkConfigurationException(`MeshNode '${meshName}' descriptor publication failed: ${result.status}.`);
375
388
  }
@@ -379,10 +392,22 @@ class ZLinkSpotNodeRuntimeManager {
379
392
  leaseGeneration: location.runtime.currentOwnerToken.leaseGeneration,
380
393
  updatedAt: result.updatedAt
381
394
  });
382
- this.descriptorRevisionByMesh.set(meshName, descriptor.descriptorRevision);
383
395
  }
384
396
  this.publishedOwnerToken = owner;
385
397
  }
398
+ localDescriptorFields(meshName, registration, state) {
399
+ return {
400
+ objectRole: effectiveObjectRole(registration),
401
+ placementWeight: this.placementWeight(meshName),
402
+ channelWeights: Object.fromEntries(this.serverChannels(meshName).map(([channelName, channel]) => [
403
+ channelName,
404
+ state === contracts_1.ZLinkFrameworkRuntimeState.Draining
405
+ ? 0
406
+ : this.effectiveChannelWeight(meshName, channelName, channel.weight ?? RegistrationBuilderPolicy_1.ZLINK_DEFAULT_PUBLIC_WEIGHT)
407
+ ])),
408
+ applicationVersion: this.options.registration.applicationVersion
409
+ };
410
+ }
386
411
  async reconcileAndPublishMeshNodeState(state, meshName, signal) {
387
412
  const location = this.locationAutoConnect;
388
413
  const node = this.meshNodes.get(meshName);
@@ -392,12 +417,15 @@ class ZLinkSpotNodeRuntimeManager {
392
417
  const owner = location.runtime.currentOwnerToken;
393
418
  if (owner === undefined)
394
419
  return;
395
- const current = (await location.runtime.listLiveMeshNodes(meshName, signal)).find((descriptor) => String(descriptor.rid) === String(status.routingId) &&
420
+ const current = (await location.runtime.listLiveMeshNodes(meshName, signal)).find((descriptor) => (0, routing_id_1.routingIdsEqual)(descriptor.rid, status.routingId) &&
396
421
  descriptor.lifecycleGeneration === status.lifecycleGeneration &&
397
422
  descriptor.ownerId === owner.ownerId &&
398
423
  descriptor.leaseGeneration === owner.leaseGeneration);
399
424
  if (current !== undefined) {
400
- this.publishedMeshNodeDescriptors.set(meshName, current);
425
+ this.publishedMeshNodeDescriptors.set(meshName, {
426
+ ...current,
427
+ ...this.localDescriptorFields(meshName, this.options.registration.spotNodes.get(meshName), state)
428
+ });
401
429
  this.descriptorRevisionByMesh.set(meshName, maxBigInt(this.descriptorRevisionByMesh.get(meshName) ?? 0n, current.descriptorRevision));
402
430
  this.publishedOwnerToken = owner;
403
431
  }
@@ -583,11 +611,13 @@ class ZLinkSpotNodeRuntimeManager {
583
611
  };
584
612
  await settle(publishers.map(async (publisher) => publisher.close()));
585
613
  await settle(autoConnectLoops.map((loop) => loop.prepareTransportShutdown()));
586
- await settle(entryActivations.reverse().map((activation) => activation.dispose(deadline)));
587
- await settle(meshPumps.reverse().map((pump) => pump.dispose()));
614
+ await settle(entryActivations
615
+ .reverse()
616
+ .map((activation) => (0, abort_1.awaitWithAbort)(activation.dispose(deadline), signal)));
617
+ await settle(meshPumps.reverse().map((pump) => pump.dispose(signal)));
588
618
  await settle(meshNodes.reverse().map(async (node) => {
589
- node.shutdown(DEFAULT_SPOT_NODE_SHUTDOWN_TIMEOUT_MS);
590
- node.close();
619
+ await node.shutdown(DEFAULT_SPOT_NODE_SHUTDOWN_TIMEOUT_MS);
620
+ await node.close();
591
621
  }));
592
622
  for (const completions of meshCompletions) {
593
623
  completions.dispose();
@@ -604,26 +634,37 @@ class ZLinkSpotNodeRuntimeManager {
604
634
  this.meshNodes.clear();
605
635
  this.meshCompletions.clear();
606
636
  }
607
- async dispatchMeshRecord(meshName, owner, record) {
637
+ /**
638
+ * Node and Channel records go straight to the framework dispatcher in the
639
+ * pump's turn. Only Spot and Actor records addressed to the Entry Spot wait
640
+ * for its activation first.
641
+ */
642
+ dispatchMeshRecord(meshName, owner, record) {
643
+ if ((record.kind === service_runtime_contracts_1.ReceiveKind.ActorSend ||
644
+ record.kind === service_runtime_contracts_1.ReceiveKind.ActorRequest ||
645
+ record.kind === service_runtime_contracts_1.ReceiveKind.SpotSend ||
646
+ record.kind === service_runtime_contracts_1.ReceiveKind.SpotRequest ||
647
+ record.kind === service_runtime_contracts_1.ReceiveKind.SpotMulticast) &&
648
+ this.targetsEntrySpot(meshName, owner)) {
649
+ return this.ensureEntryActivation(meshName).then(() => this.dispatchFrameworkRecord(meshName, owner, record));
650
+ }
651
+ return this.dispatchFrameworkRecord(meshName, owner, record);
652
+ }
653
+ targetsEntrySpot(meshName, owner) {
654
+ if (owner.spotId === null)
655
+ return true;
608
656
  const node = this.meshNodes.get(meshName);
609
- const targetsEntrySpot = owner.spotId === null ||
610
- (node !== undefined &&
611
- (0, routing_id_1.routingIdsEqual)(owner.spotId, String(node.status().routingId)));
612
- if (targetsEntrySpot &&
613
- (record.kind === service_runtime_contracts_1.ReceiveKind.ActorSend ||
614
- record.kind === service_runtime_contracts_1.ReceiveKind.ActorRequest ||
615
- record.kind === service_runtime_contracts_1.ReceiveKind.SpotSend ||
616
- record.kind === service_runtime_contracts_1.ReceiveKind.SpotRequest ||
617
- record.kind === service_runtime_contracts_1.ReceiveKind.SpotMulticast)) {
618
- await this.ensureEntryActivation(meshName);
619
- }
657
+ return (node !== undefined &&
658
+ (0, routing_id_1.routingIdsEqual)(owner.spotId, String(node.status().routingId)));
659
+ }
660
+ dispatchFrameworkRecord(meshName, owner, record) {
620
661
  const dispatcher = this.options.meshRecordDispatcher;
621
662
  if (dispatcher === undefined) {
622
- throw new configuration_1.ZLinkConfigurationException(`MeshNode '${meshName}' received a record before its framework dispatcher was registered.`);
663
+ return Promise.reject(new configuration_1.ZLinkConfigurationException(`MeshNode '${meshName}' received a record before its framework dispatcher was registered.`));
623
664
  }
624
- await dispatcher(meshName, owner, record);
665
+ return dispatcher(meshName, owner, record);
625
666
  }
626
- async dispatchEntrySpotRecord(meshName, owner, record) {
667
+ async dispatchEntrySpotRecord(meshName, owner, record, admit) {
627
668
  if (record.kind !== service_runtime_contracts_1.ReceiveKind.SpotSend &&
628
669
  record.kind !== service_runtime_contracts_1.ReceiveKind.SpotRequest &&
629
670
  record.kind !== service_runtime_contracts_1.ReceiveKind.SpotMulticast) {
@@ -638,7 +679,8 @@ class ZLinkSpotNodeRuntimeManager {
638
679
  if (record.topic === null || record.topic.length === 0) {
639
680
  throw new configuration_1.ZLinkConfigurationException('MeshNode Entry Spot multicast record is missing its topic.');
640
681
  }
641
- await activation.dispatchSubscriptionRecord(record.topic, record.parts, record.sourceNodeRid);
682
+ const dispatch = () => activation.dispatchSubscriptionRecord(record.topic, record.parts, record.sourceNodeRid);
683
+ await (admit === undefined ? dispatch() : admit(dispatch));
642
684
  return true;
643
685
  }
644
686
  const envelope = (0, channel_envelope_1.decodeChannelEnvelope)(record.parts, undefined, this.options.dispatchErrors?.flow.flowCreationEnabled() ?? true);
@@ -648,15 +690,20 @@ class ZLinkSpotNodeRuntimeManager {
648
690
  channelName: envelope.header.channelName,
649
691
  contentType: envelope.header.contentType
650
692
  };
651
- if (record.kind === service_runtime_contracts_1.ReceiveKind.SpotSend) {
652
- await activation.dispatchPacketEncoded(envelope.packetName, decodePayload, context, false);
653
- return true;
654
- }
655
693
  try {
656
- const response = await activation.dispatchPacketEncoded(envelope.packetName, decodePayload, context, true);
657
- requireEntrySpotReply(record.reply((0, channel_envelope_1.encodeChannelReplyParts)(envelope.header, response, codecs)));
694
+ const dispatch = async () => {
695
+ if (record.kind === service_runtime_contracts_1.ReceiveKind.SpotSend) {
696
+ await activation.dispatchPacketEncoded(envelope.packetName, decodePayload, context, false);
697
+ return;
698
+ }
699
+ const response = await activation.dispatchPacketEncoded(envelope.packetName, decodePayload, context, true);
700
+ requireEntrySpotReply(record.reply((0, channel_envelope_1.encodeChannelReplyParts)(envelope.header, response, codecs)));
701
+ };
702
+ await (admit === undefined ? dispatch() : admit(dispatch));
658
703
  }
659
704
  catch (error) {
705
+ if (record.kind !== service_runtime_contracts_1.ReceiveKind.SpotRequest)
706
+ throw error;
660
707
  requireEntrySpotReply(record.reply((0, channel_envelope_1.encodeChannelErrorReplyParts)(envelope.header, error)));
661
708
  }
662
709
  return true;
@@ -784,6 +831,13 @@ class ZLinkSpotNodeRuntimeManager {
784
831
  }
785
832
  await activation.commitServiceActorJoin(actor, handoffBacklog);
786
833
  }
834
+ admitEntryActorPacketPrefix(meshName, actorId, records) {
835
+ const activation = this.entryActivations.get(meshName);
836
+ if (activation === undefined) {
837
+ throw new configuration_1.ZLinkConfigurationException(`Entry Spot Actor '${actorId}' has no activation for MeshNode '${meshName}'.`);
838
+ }
839
+ return activation.admitActorPacketPrefix(actorId, records);
840
+ }
787
841
  executeEntryActor(meshName, actorId, operation) {
788
842
  const activation = this.entryActivations.get(meshName);
789
843
  if (activation === undefined) {
@@ -910,16 +964,27 @@ function effectiveObjectRole(registration) {
910
964
  ? contracts_1.ZLinkObjectRole.Server
911
965
  : contracts_1.ZLinkObjectRole.None;
912
966
  }
913
- function objectCapability(objectKind, stableType, factory) {
967
+ function objectCapability(objectKind, stableType, factory, entryAccepted = false) {
914
968
  const policy = factory.relocation?.kind ?? 'disabled';
915
969
  return {
916
970
  objectKind,
917
971
  stableType,
918
972
  policy,
919
973
  hasSnapshotAdapter: policy === 'snapshot',
920
- limit: objectKind === 'actor' ? 0 : (factory.options?.stableTypeLimit ?? 0)
974
+ limit: objectKind === 'actor' ? 0 : (factory.options?.stableTypeLimit ?? 0),
975
+ entryAccepted
921
976
  };
922
977
  }
978
+ /**
979
+ * The one decision for creating a new Actor on this node (Actor model §6.3): the node registered
980
+ * an Entry Spot type that accepts the Actor type and an Actor factory for it. Publication and the
981
+ * target refusal both read it.
982
+ */
983
+ function registrationAcceptsNewActor(registration, stableType) {
984
+ return (registration.entrySpotType !== undefined &&
985
+ registration.entrySpotActorType === stableType &&
986
+ effectiveActorRegistrations(registration).some(([type]) => type === stableType));
987
+ }
923
988
  function aggregatePlacementCapacity(actorLimit, spotLimit) {
924
989
  const unlimited = RegistrationBuilderPolicy_1.ZLINK_MAX_CAPACITY;
925
990
  const actors = actorLimit === 0 ? unlimited : actorLimit;
@@ -35,6 +35,7 @@ export declare class DefaultZLinkSpotOutbound implements ZLinkSpotOutbound {
35
35
  private requireAddressTransport;
36
36
  }
37
37
  export interface ZLinkSpotAddressCallOptions {
38
+ readonly onAdmitted?: () => void;
38
39
  readonly metadata?: ReadonlyMap<string, string>;
39
40
  readonly instanceSpot: boolean;
40
41
  readonly instanceSpotType?: string;
@@ -63,10 +64,12 @@ export interface ZLinkSpotRoutedSendOptions {
63
64
  readonly metadata?: ReadonlyMap<string, string>;
64
65
  }
65
66
  export interface ZLinkSpotRoutedRequestOptions extends ZLinkSpotRoutedSendOptions {
67
+ readonly onAdmitted?: () => void;
66
68
  readonly timeoutMs?: number;
67
69
  readonly signal?: AbortSignal;
68
70
  }
69
71
  export interface ZLinkSpotHandleCallOptions {
72
+ readonly onAdmitted?: () => void;
70
73
  readonly metadata?: ReadonlyMap<string, string>;
71
74
  readonly timeoutMs?: number;
72
75
  readonly signal?: AbortSignal;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultZLinkSpotOutbound = void 0;
4
4
  exports.sendToSpotHandle = sendToSpotHandle;
5
5
  exports.requestToSpotHandle = requestToSpotHandle;
6
+ const request_result_1 = require("../messaging/request-result");
6
7
  const contracts_1 = require("../../contracts");
7
8
  const CoreTypes_1 = require("../../contracts/Common/CoreTypes");
8
9
  const configuration_1 = require("../configuration");
@@ -115,14 +116,13 @@ function createAddressedSpotSendCall(serial, transport, spotId, message, sourceS
115
116
  }
116
117
  function createAddressedSpotRequestCall(serial, transport, spotId, request, sourceSpotProvider) {
117
118
  const options = newAddressCallOptions();
118
- const begin = (waitPolicy, signal) => {
119
- markSubmitted(options);
120
- rejectSameSpotAsyncRequest(serial, spotId, waitPolicy);
119
+ const begin = (signal, onAdmitted) => {
121
120
  return startRequestOnSerial(serial, () => ({
122
121
  pending: transport.requestToSpotAddress(spotId, request, {
123
122
  ...freezeAddressCallOptions(options, sourceSpotProvider?.()),
124
123
  timeoutMs: options.timeoutMs,
125
- signal
124
+ signal,
125
+ onAdmitted
126
126
  })
127
127
  }));
128
128
  };
@@ -153,13 +153,16 @@ function createAddressedSpotRequestCall(serial, transport, spotId, request, sour
153
153
  return this;
154
154
  },
155
155
  submit(signal) {
156
- const pending = begin('async', signal);
157
- return serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending);
156
+ markSubmitted(options);
157
+ rejectSameSpotAsyncRequest(serial, spotId, 'async');
158
+ return (0, request_result_1.createZLinkRequest)((onAdmitted) => begin(signal, onAdmitted), (pending) => (serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending)));
158
159
  },
159
160
  yield(signal) {
160
161
  const turn = (0, execution_1.requireZLinkYieldTurn)();
161
- const pending = begin('yield', signal);
162
- return turn.yieldPromise(pending);
162
+ markSubmitted(options);
163
+ rejectSameSpotAsyncRequest(serial, spotId, 'yield');
164
+ const pending = begin(signal);
165
+ return turn.yieldFrameworkPromise(pending);
163
166
  }
164
167
  };
165
168
  }
@@ -250,7 +253,12 @@ function wrapPublishCall(serial, inner) {
250
253
  };
251
254
  }
252
255
  function wrapRequestCall(serial, inner) {
253
- const begin = (signal) => startRequestOnSerial(serial, () => ({ pending: inner.submit(signal) }));
256
+ const begin = (signal, onAdmitted) => startRequestOnSerial(serial, () => {
257
+ const pending = inner.submit(signal);
258
+ if (onAdmitted !== undefined)
259
+ void pending.admitted.then(onAdmitted, () => undefined);
260
+ return { pending };
261
+ });
254
262
  return {
255
263
  metadata(key, value) {
256
264
  if (typeof key === 'string')
@@ -264,13 +272,12 @@ function wrapRequestCall(serial, inner) {
264
272
  return this;
265
273
  },
266
274
  submit(signal) {
267
- const pending = begin(signal);
268
- return serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending);
275
+ return (0, request_result_1.createZLinkRequest)((onAdmitted) => begin(signal, onAdmitted), (pending) => (serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending)));
269
276
  },
270
277
  yield(signal) {
271
278
  const turn = (0, execution_1.requireZLinkYieldTurn)();
272
279
  const pending = begin(signal);
273
- return turn.yieldPromise(pending);
280
+ return turn.yieldFrameworkPromise(pending);
274
281
  }
275
282
  };
276
283
  }
@@ -320,15 +327,15 @@ function wrapRoutedSpotSendCall(serial, transport, spot, message, spotRouterChan
320
327
  function wrapRoutedSpotRequestCall(serial, transport, spot, request, spotRouterChannelIdForMesh, sourceSpotProvider) {
321
328
  let selectedTimeoutMs;
322
329
  const metadata = new Map();
323
- const begin = (waitPolicy, signal) => {
330
+ const begin = (signal, onAdmitted) => {
324
331
  // A request to the current Spot would wait behind the handler that owns
325
332
  // the same Spot claim. Reject it before resolving a route or submitting
326
333
  // transport work; one-way self-send remains a valid FIFO admission.
327
- rejectSameSpotAsyncRequest(serial, spot.spotId, waitPolicy);
328
334
  return startRequestOnSerial(serial, () => ({
329
335
  pending: requestToSpotHandle(transport, spot, request, {
330
336
  timeoutMs: selectedTimeoutMs,
331
337
  signal,
338
+ onAdmitted,
332
339
  metadata,
333
340
  spotRouterChannelIdForMesh,
334
341
  sourceSpot: sourceSpotProvider?.()
@@ -352,13 +359,14 @@ function wrapRoutedSpotRequestCall(serial, transport, spot, request, spotRouterC
352
359
  return this;
353
360
  },
354
361
  submit(signal) {
355
- const pending = begin('async', signal);
356
- return serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending);
362
+ rejectSameSpotAsyncRequest(serial, spot.spotId, 'async');
363
+ return (0, request_result_1.createZLinkRequest)((onAdmitted) => begin(signal, onAdmitted), (pending) => (serial.isCurrentTurn ? pending : (0, workers_1.deliverOnSerial)(serial, pending)));
357
364
  },
358
365
  yield(signal) {
359
366
  const turn = (0, execution_1.requireZLinkYieldTurn)();
360
- const pending = begin('yield', signal);
361
- return turn.yieldPromise(pending);
367
+ rejectSameSpotAsyncRequest(serial, spot.spotId, 'yield');
368
+ const pending = begin(signal);
369
+ return turn.yieldFrameworkPromise(pending);
362
370
  }
363
371
  };
364
372
  }
@@ -395,6 +403,7 @@ async function requestToSpotHandle(transport, spot, request, options = {}) {
395
403
  packetName,
396
404
  timeoutMs: options.timeoutMs,
397
405
  signal: options.signal,
406
+ onAdmitted: options.onAdmitted,
398
407
  metadata: options.metadata
399
408
  };
400
409
  if (options.sourceSpot !== undefined && transport.requestFromSpotToSpot !== undefined) {
@@ -85,7 +85,11 @@ function decodeHandoffBacklog(value) {
85
85
  BigInt(source.ownerLeaseGeneration) <= 0n ||
86
86
  source.nodeRid.length === 0 ||
87
87
  BigInt(source.nodeGeneration) <= 0n ||
88
- source.replyRouteId !== messageFollowContext.replyRouteId)) ||
88
+ source.replyRouteId !==
89
+ (packet.messageFollowOrigin !== undefined &&
90
+ (0, routing_id_1.routingIdsEqual)((0, routing_id_1.decodeRoutingId)(source.nodeRid, source.nodeRidHex), packet.messageFollowOrigin.sourceNodeRid)
91
+ ? packet.messageFollowOrigin.originalReplyRouteId.toString()
92
+ : messageFollowContext.replyRouteId))) ||
89
93
  (!packet.returnResponse && source !== undefined)) {
90
94
  throw new Error('Remote actor handoff request source fence is invalid.');
91
95
  }
@@ -23,6 +23,7 @@ interface ZLinkRoutedSpotPacketDispatchOptions {
23
23
  }
24
24
  interface ZLinkRoutedSpotPacketContext {
25
25
  readonly channelName: string;
26
+ readonly onAdmitted?: () => void;
26
27
  readonly contentType?: string;
27
28
  readonly workOptions?: ZLinkSerialWorkOptions;
28
29
  readonly admissionTimeoutMs?: number;
@@ -151,7 +151,7 @@ class ZLinkRoutedSpotPacketDispatch {
151
151
  if (activation.serial.isCurrentTurn) {
152
152
  throw (0, framework_errors_internal_1.createInternalFrameworkException)(framework_errors_internal_1.ZLinkFrameworkInternalErrorKind.InvalidOperation, `Spot '${spotId}' cannot await a request to its current serial turn.`);
153
153
  }
154
- await activation.serial.execute(runHandler, context.workOptions, instanceIntent ? runHandler : undefined);
154
+ await activation.serial.execute(runHandler, { ...context.workOptions, onAdmitted: context.onAdmitted }, instanceIntent ? runHandler : undefined);
155
155
  }
156
156
  }
157
157
  catch (error) {
@@ -8,6 +8,7 @@ import type { ZLinkActorResponseOptions } from './spot-actor-packet-dispatch';
8
8
  import type { ZLinkRemoteActorJoinActor, ZLinkRoutedActorTransferProvider } from './spot-remote-codec';
9
9
  import type { ZLinkBackendSpotNode } from '../backend/contracts';
10
10
  export interface ZLinkEntryActorRuntime {
11
+ releaseMembers?(meshName: string): Promise<void>;
11
12
  resolveActor(actorId: string): ZLinkActor | undefined;
12
13
  commitActorTransaction(actor: ZLinkActor, onJoined: () => Promise<void>): Promise<void>;
13
14
  destroyActor(node: ZLinkBackendSpotNode, entryNodeRid: RoutingId, actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
@@ -32,7 +33,6 @@ export interface ZLinkSpotActorTransferRuntime {
32
33
  commitRoutedActor(actor: ZLinkActor, spotId: RoutingId, spot: ZLinkSpot): void;
33
34
  clearRoutedActor(actor: ZLinkActor): void;
34
35
  rollbackRoutedActor(actor: ZLinkActor, signal?: AbortSignal): Promise<void>;
35
- notifyCoreSourceLeave(actor: ZLinkActor, callback: () => Promise<void>): Promise<void>;
36
36
  actorEntryNodeRid(actor: ZLinkActor): RoutingId | undefined;
37
37
  }
38
38
  export interface ZLinkSpotBoundSessionRuntime {
@@ -1,7 +1,10 @@
1
1
  import { ZLinkUserSpotExecutionMode } from '../../contracts';
2
+ import type { ZLinkActorHandoffDispatch, ZLinkActorHandoffPrefixAdmission, ZLinkActorHandoffPrefixRecord } from '../actors/actor-handoff';
2
3
  import type { ZLinkExecutionBarrier } from '../execution';
3
4
  import type { ZLinkSerialSchedulerOptions, ZLinkSerialWorkOptions } from '../execution/serial-execution-queue';
4
5
  import { ZLinkSpotSerialTurnExecutor } from './spot-serial-turn-executor';
6
+ export type ZLinkSpotPreparationCompletion = 'publication' | 'first-terminal';
7
+ export type ZLinkActorPacketTurnDispatch = (serial: ZLinkSpotSerialTurnExecutor, ...args: Parameters<ZLinkActorHandoffDispatch>) => ReturnType<ZLinkActorHandoffDispatch>;
5
8
  /**
6
9
  * Owns every application serial unit that belongs to one Spot activation.
7
10
  *
@@ -19,11 +22,18 @@ export declare class ZLinkSpotSerialExecutor {
19
22
  private executionBarrier;
20
23
  private closing;
21
24
  private closePromise;
25
+ private preparation?;
22
26
  constructor(spotSerial: ZLinkSpotSerialTurnExecutor, executionMode: ZLinkUserSpotExecutionMode, sourceSpotId: unknown, actorOptions?: ZLinkSerialSchedulerOptions | undefined);
23
27
  setExecutionBarrier(barrier: ZLinkExecutionBarrier): void;
28
+ get isPreparing(): boolean;
29
+ beginPreparation(kind?: 'activation' | 'relocation'): void;
30
+ openPreparationAdmission(): void;
31
+ finishPreparation(terminal?: () => Promise<void>): Promise<void>;
24
32
  executeSpot<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
25
33
  executeActor<T>(actorId: string, operation: (serial: ZLinkSpotSerialTurnExecutor) => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
26
34
  executeTimer<T>(timerName: string, operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
35
+ /** Admits held packets through the same Actor FIFO as ordinary ingress. */
36
+ admitActorPacketPrefix(actorId: string, records: readonly ZLinkActorHandoffPrefixRecord[], dispatch: ZLinkActorPacketTurnDispatch): ZLinkActorHandoffPrefixAdmission;
27
37
  isTimerExecuting(timerName: string): boolean;
28
38
  executeLifecycle<T>(operation: () => Promise<T> | T, workOptions?: ZLinkSerialWorkOptions): Promise<T>;
29
39
  terminateActor(actorId: string, terminal: () => Promise<void>): Promise<void>;