@zlink-systems/framework 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/contracts/Common/CoreTypes.d.ts +6 -0
  3. package/dist/contracts/Common/CoreTypes.js +7 -0
  4. package/dist/contracts/Common/index.d.ts +1 -1
  5. package/dist/contracts/Common/index.js +0 -1
  6. package/dist/contracts/Configuration/InternalDefaults.d.ts +8 -0
  7. package/dist/contracts/Configuration/InternalDefaults.js +9 -1
  8. package/dist/contracts/Configuration/Registration.d.ts +13 -2
  9. package/dist/contracts/Configuration/Registration.js +58 -36
  10. package/dist/contracts/Configuration/RegistrationBuilderPolicy.d.ts +13 -1
  11. package/dist/contracts/Configuration/RegistrationBuilderPolicy.js +38 -1
  12. package/dist/contracts/Configuration/RegistrationBuilders.d.ts +2 -3
  13. package/dist/contracts/Configuration/RegistrationBuilders.js +27 -32
  14. package/dist/contracts/Configuration/RegistrationTypes.d.ts +1 -0
  15. package/dist/contracts/Configuration/RegistrationValidators.js +15 -12
  16. package/dist/contracts/Configuration/TimerRegistrationValidator.js +3 -2
  17. package/dist/contracts/Dispatch/ZLinkDispatchOptions.d.ts +1 -1
  18. package/dist/contracts/Handlers/JsonContract.js +10 -4
  19. package/dist/contracts/Locations/Authority.d.ts +1 -1
  20. package/dist/contracts/Locations/Authority.js +3 -2
  21. package/dist/contracts/Locations/Options.js +1 -1
  22. package/dist/contracts/Locations/Stores.d.ts +12 -0
  23. package/dist/contracts/Locations/Stores.js +9 -0
  24. package/dist/contracts/Spots/Contracts.d.ts +1 -1
  25. package/dist/internal.d.ts +4 -0
  26. package/dist/internal.js +15 -1
  27. package/dist/nest-integration.d.ts +4 -2
  28. package/dist/nest-integration.js +14 -4
  29. package/dist/runtime/abort.d.ts +1 -0
  30. package/dist/runtime/abort.js +8 -5
  31. package/dist/runtime/activation-admission.d.ts +1 -2
  32. package/dist/runtime/activation-admission.js +2 -6
  33. package/dist/runtime/actors/actor-authority-payload-codec.d.ts +1 -2
  34. package/dist/runtime/actors/actor-authority-payload-codec.js +34 -18
  35. package/dist/runtime/actors/actor-client.d.ts +2 -2
  36. package/dist/runtime/actors/actor-client.js +42 -143
  37. package/dist/runtime/actors/actor-context.d.ts +3 -5
  38. package/dist/runtime/actors/actor-context.js +13 -11
  39. package/dist/runtime/actors/actor-handoff.d.ts +4 -4
  40. package/dist/runtime/actors/actor-handoff.js +8 -8
  41. package/dist/runtime/actors/actor-lifecycle-snapshot.js +2 -1
  42. package/dist/runtime/actors/actor-local-native-join.d.ts +11 -6
  43. package/dist/runtime/actors/actor-local-native-join.js +83 -105
  44. package/dist/runtime/actors/actor-native-lookup.js +2 -8
  45. package/dist/runtime/actors/actor-packet-relay-wire.d.ts +3 -3
  46. package/dist/runtime/actors/actor-packet-relay-wire.js +5 -3
  47. package/dist/runtime/actors/actor-remote-joiner.d.ts +1 -1
  48. package/dist/runtime/actors/actor-remote-joiner.js +5 -9
  49. package/dist/runtime/actors/actor-remote-wire.js +5 -3
  50. package/dist/runtime/actors/actor-request-deadline.d.ts +3 -0
  51. package/dist/runtime/actors/actor-request-deadline.js +31 -0
  52. package/dist/runtime/actors/actor-retry-delay.js +2 -1
  53. package/dist/runtime/actors/actor-runtime-state.d.ts +9 -21
  54. package/dist/runtime/actors/actor-runtime-state.js +70 -187
  55. package/dist/runtime/actors/bound-session-wire.js +2 -7
  56. package/dist/runtime/actors/deferred-join-completion.d.ts +11 -6
  57. package/dist/runtime/actors/deferred-join-completion.js +1 -0
  58. package/dist/runtime/actors/index.d.ts +9 -7
  59. package/dist/runtime/actors/index.js +87 -69
  60. package/dist/runtime/actors/spot-actor-dispatch.d.ts +3 -3
  61. package/dist/runtime/actors/spot-actor-dispatch.js +25 -10
  62. package/dist/runtime/actors/transferred-actor-rollback.d.ts +3 -5
  63. package/dist/runtime/actors/transferred-actor-rollback.js +9 -42
  64. package/dist/runtime/admission.d.ts +2 -0
  65. package/dist/runtime/admission.js +7 -1
  66. package/dist/runtime/application-jobs/application-job-queue-scope.d.ts +1 -1
  67. package/dist/runtime/application-jobs/application-job-queue-scope.js +1 -1
  68. package/dist/runtime/backend/contracts/index.d.ts +6 -23
  69. package/dist/runtime/backend/mesh-actor-session-node-adapter.js +1 -17
  70. package/dist/runtime/backend/mesh-dispatch-pump.d.ts +1 -2
  71. package/dist/runtime/backend/mesh-dispatch-pump.js +95 -107
  72. package/dist/runtime/backend/node/node-backend-adapter-support.d.ts +1 -1
  73. package/dist/runtime/backend/node/node-backend-adapter-support.js +16 -6
  74. package/dist/runtime/backend/node/node-event-loop-poller.d.ts +2 -2
  75. package/dist/runtime/backend/node/node-event-loop-poller.js +6 -7
  76. package/dist/runtime/backend/node/node-monitor-backend-adapter.js +1 -0
  77. package/dist/runtime/backend/node/node-raw-binding-port.js +40 -16
  78. package/dist/runtime/backend/node/node-raw-mesh-backend.d.ts +14 -15
  79. package/dist/runtime/backend/node/node-raw-mesh-backend.js +146 -118
  80. package/dist/runtime/backend/node/node-socket-backend-adapter.js +3 -2
  81. package/dist/runtime/backend/raw-binding-port.d.ts +1 -1
  82. package/dist/runtime/backend/runtime-values.d.ts +4 -1
  83. package/dist/runtime/backend/runtime-values.js +2 -0
  84. package/dist/runtime/channels/channel-clients.d.ts +20 -8
  85. package/dist/runtime/channels/channel-clients.js +68 -52
  86. package/dist/runtime/channels/channel-envelope-inspection.js +2 -1
  87. package/dist/runtime/channels/channel-envelope.js +47 -29
  88. package/dist/runtime/channels/channel-outbound-operations.d.ts +3 -0
  89. package/dist/runtime/channels/channel-outbound-operations.js +9 -10
  90. package/dist/runtime/channels/channel-receive-loops.d.ts +8 -3
  91. package/dist/runtime/channels/channel-receive-loops.js +27 -6
  92. package/dist/runtime/channels/channel-runtime-lifecycle.d.ts +12 -1
  93. package/dist/runtime/channels/channel-runtime-lifecycle.js +48 -28
  94. package/dist/runtime/channels/channel-runtime-manager.js +5 -2
  95. package/dist/runtime/channels/channel-socket-options.js +3 -2
  96. package/dist/runtime/channels/channel-socket-registry.d.ts +14 -29
  97. package/dist/runtime/channels/channel-socket-registry.js +248 -174
  98. package/dist/runtime/channels/channel-transports.d.ts +11 -17
  99. package/dist/runtime/channels/channel-transports.js +68 -47
  100. package/dist/runtime/channels/client-server-location-runtime.d.ts +1 -1
  101. package/dist/runtime/channels/client-server-location-runtime.js +10 -11
  102. package/dist/runtime/channels/client-server-service-wire.d.ts +7 -2
  103. package/dist/runtime/channels/client-server-service-wire.js +32 -11
  104. package/dist/runtime/channels/dispatch-error-reporter.d.ts +1 -2
  105. package/dist/runtime/channels/dispatch-error-reporter.js +2 -1
  106. package/dist/runtime/channels/fanout-location-runtime.d.ts +16 -3
  107. package/dist/runtime/channels/fanout-location-runtime.js +130 -72
  108. package/dist/runtime/channels/spot-direct-envelope.d.ts +1 -0
  109. package/dist/runtime/channels/spot-direct-envelope.js +4 -3
  110. package/dist/runtime/channels/spot-node-route-transport.js +3 -2
  111. package/dist/runtime/diagnostics/diagnostic-text.d.ts +2 -0
  112. package/dist/runtime/diagnostics/diagnostic-text.js +7 -0
  113. package/dist/runtime/diagnostics/dispatch-error-details.d.ts +3 -0
  114. package/dist/runtime/diagnostics/dispatch-error-details.js +30 -2
  115. package/dist/runtime/diagnostics/flow-context.d.ts +6 -0
  116. package/dist/runtime/diagnostics/flow-context.js +16 -2
  117. package/dist/runtime/diagnostics/index.d.ts +4 -2
  118. package/dist/runtime/diagnostics/index.js +14 -4
  119. package/dist/runtime/diagnostics/message-flow.d.ts +1 -1
  120. package/dist/runtime/diagnostics/message-flow.js +10 -19
  121. package/dist/runtime/diagnostics/runtime-metrics.d.ts +94 -31
  122. package/dist/runtime/diagnostics/runtime-metrics.js +168 -105
  123. package/dist/runtime/diagnostics/runtime-observation-queue.js +3 -2
  124. package/dist/runtime/diagnostics/topology-runtime-projections.d.ts +2 -4
  125. package/dist/runtime/diagnostics/topology-runtime-projections.js +135 -154
  126. package/dist/runtime/disposal.d.ts +5 -0
  127. package/dist/runtime/disposal.js +22 -0
  128. package/dist/runtime/execution/index.d.ts +12 -9
  129. package/dist/runtime/execution/index.js +58 -14
  130. package/dist/runtime/execution/serial-execution-queue.d.ts +8 -2
  131. package/dist/runtime/execution/serial-execution-queue.js +54 -15
  132. package/dist/runtime/execution/state-lane.d.ts +8 -1
  133. package/dist/runtime/execution/state-lane.js +118 -3
  134. package/dist/runtime/foundation/actor-join-recovery-codec.d.ts +3 -0
  135. package/dist/runtime/foundation/actor-join-recovery-codec.js +15 -11
  136. package/dist/runtime/foundation/event-loop-resources.d.ts +2 -24
  137. package/dist/runtime/foundation/event-loop-resources.js +6 -119
  138. package/dist/runtime/foundation/operation-identity.d.ts +2 -0
  139. package/dist/runtime/foundation/operation-identity.js +9 -5
  140. package/dist/runtime/foundation/operation-registry.d.ts +5 -7
  141. package/dist/runtime/foundation/operation-registry.js +34 -44
  142. package/dist/runtime/foundation/raw-service-mesh-runtime.d.ts +8 -5
  143. package/dist/runtime/foundation/raw-service-mesh-runtime.js +62 -83
  144. package/dist/runtime/foundation/runtime-state-projections.d.ts +3 -1
  145. package/dist/runtime/foundation/runtime-state-projections.js +8 -0
  146. package/dist/runtime/foundation/service-authority-payload-codec.js +22 -12
  147. package/dist/runtime/foundation/service-discovery-registry.d.ts +4 -0
  148. package/dist/runtime/foundation/service-discovery-registry.js +22 -3
  149. package/dist/runtime/foundation/service-instance-activation-recovery-codec.js +8 -4
  150. package/dist/runtime/foundation/service-liveness-registry.js +2 -1
  151. package/dist/runtime/foundation/service-maintenance-runtime.d.ts +0 -1
  152. package/dist/runtime/foundation/service-maintenance-runtime.js +0 -6
  153. package/dist/runtime/foundation/service-metadata-codec.js +3 -3
  154. package/dist/runtime/foundation/service-relocation-aggregate-committer.d.ts +2 -5
  155. package/dist/runtime/foundation/service-relocation-aggregate-committer.js +1 -48
  156. package/dist/runtime/foundation/service-relocation-object-owner.js +3 -2
  157. package/dist/runtime/foundation/service-relocation-runtime.js +43 -32
  158. package/dist/runtime/foundation/service-runtime-contracts.d.ts +40 -8
  159. package/dist/runtime/foundation/service-runtime-contracts.js +25 -1
  160. package/dist/runtime/foundation/service-session-binding-ingress-port.d.ts +0 -12
  161. package/dist/runtime/foundation/service-stateful-registry.d.ts +2 -0
  162. package/dist/runtime/foundation/service-stateful-registry.js +10 -2
  163. package/dist/runtime/foundation/service-stateful-runtime.d.ts +26 -25
  164. package/dist/runtime/foundation/service-stateful-runtime.js +217 -204
  165. package/dist/runtime/foundation/service-stateful-wire-codec.d.ts +3 -3
  166. package/dist/runtime/foundation/service-stateful-wire-codec.js +89 -55
  167. package/dist/runtime/foundation/service-topology-registry.d.ts +0 -1
  168. package/dist/runtime/foundation/service-topology-registry.js +17 -32
  169. package/dist/runtime/foundation/service-wire-binary-primitives.d.ts +5 -0
  170. package/dist/runtime/foundation/service-wire-binary-primitives.js +6 -0
  171. package/dist/runtime/foundation/service-wire-codec.js +10 -8
  172. package/dist/runtime/foundation/service-wire-constants.generated.d.ts +1 -0
  173. package/dist/runtime/foundation/service-wire-constants.generated.js +2 -1
  174. package/dist/runtime/foundation/service-wire-m6a-codec.d.ts +2 -0
  175. package/dist/runtime/foundation/service-wire-m6a-codec.js +23 -13
  176. package/dist/runtime/framework-errors-internal.d.ts +2 -1
  177. package/dist/runtime/framework-errors-internal.js +343 -122
  178. package/dist/runtime/handlers/handler-instance-scope.d.ts +3 -1
  179. package/dist/runtime/handlers/handler-instance-scope.js +61 -74
  180. package/dist/runtime/host/actor-packet-relay.d.ts +9 -6
  181. package/dist/runtime/host/actor-packet-relay.js +48 -91
  182. package/dist/runtime/host/actor-placement-coordinator.js +7 -5
  183. package/dist/runtime/host/actor-runtime-options-factory.d.ts +2 -0
  184. package/dist/runtime/host/actor-runtime-options-factory.js +17 -4
  185. package/dist/runtime/host/actor-transfer-runtime.d.ts +16 -18
  186. package/dist/runtime/host/actor-transfer-runtime.js +143 -176
  187. package/dist/runtime/host/application-job-queue.js +16 -33
  188. package/dist/runtime/host/bound-session-relay.js +1 -1
  189. package/dist/runtime/host/channel-runtime-options-factory.js +1 -1
  190. package/dist/runtime/host/index.d.ts +14 -13
  191. package/dist/runtime/host/index.js +190 -157
  192. package/dist/runtime/host/instance-activation-authority.d.ts +2 -3
  193. package/dist/runtime/host/instance-activation-authority.js +17 -45
  194. package/dist/runtime/host/location-runtime-owner.d.ts +1 -1
  195. package/dist/runtime/host/location-runtime-owner.js +2 -2
  196. package/dist/runtime/host/remote-actor-join-receiver.d.ts +2 -2
  197. package/dist/runtime/host/remote-actor-join-receiver.js +1 -14
  198. package/dist/runtime/host/remote-actor-packet-target-store.d.ts +3 -2
  199. package/dist/runtime/host/remote-actor-packet-target-store.js +8 -47
  200. package/dist/runtime/host/remote-bound-session-relay.d.ts +2 -3
  201. package/dist/runtime/host/remote-bound-session-relay.js +7 -20
  202. package/dist/runtime/host/route-mesh-runtime.d.ts +13 -11
  203. package/dist/runtime/host/route-mesh-runtime.js +171 -252
  204. package/dist/runtime/host/runtime-shutdown.d.ts +2 -0
  205. package/dist/runtime/host/runtime-shutdown.js +18 -21
  206. package/dist/runtime/host/service-relocation-control.js +6 -1
  207. package/dist/runtime/host/service-relocation-host-runtime.d.ts +21 -30
  208. package/dist/runtime/host/service-relocation-host-runtime.js +508 -416
  209. package/dist/runtime/host/spot-address-transport.d.ts +2 -3
  210. package/dist/runtime/host/spot-address-transport.js +34 -136
  211. package/dist/runtime/host/spot-node-runtime-options-factory.d.ts +1 -1
  212. package/dist/runtime/host/spot-node-runtime-options-factory.js +3 -2
  213. package/dist/runtime/host/spot-runtime-options-factory.d.ts +4 -10
  214. package/dist/runtime/host/spot-runtime-options-factory.js +50 -14
  215. package/dist/runtime/host/user-spot-creation-coordinator.d.ts +3 -3
  216. package/dist/runtime/host/user-spot-creation-coordinator.js +11 -8
  217. package/dist/runtime/locations/aggregate-inventory-store.js +13 -10
  218. package/dist/runtime/locations/authority-key-codec.js +4 -3
  219. package/dist/runtime/locations/auto-connect-reconciler.d.ts +4 -0
  220. package/dist/runtime/locations/auto-connect-reconciler.js +37 -25
  221. package/dist/runtime/locations/creation-operation-id.js +6 -4
  222. package/dist/runtime/locations/domain-store-contract.d.ts +3 -3
  223. package/dist/runtime/locations/in-memory-authority-store.js +31 -15
  224. package/dist/runtime/locations/in-memory-location-store.d.ts +2 -2
  225. package/dist/runtime/locations/in-memory-location-store.js +17 -14
  226. package/dist/runtime/locations/in-memory-provider-location-store.d.ts +1 -0
  227. package/dist/runtime/locations/in-memory-provider-location-store.js +72 -22
  228. package/dist/runtime/locations/key-codec.js +3 -2
  229. package/dist/runtime/locations/lease-tracker.d.ts +3 -5
  230. package/dist/runtime/locations/lease-tracker.js +7 -11
  231. package/dist/runtime/locations/lifecycle.d.ts +4 -9
  232. package/dist/runtime/locations/lifecycle.js +2 -31
  233. package/dist/runtime/locations/location-store-failure.d.ts +2 -0
  234. package/dist/runtime/locations/location-store-failure.js +7 -0
  235. package/dist/runtime/locations/location-store-pages.d.ts +3 -0
  236. package/dist/runtime/locations/location-store-pages.js +13 -0
  237. package/dist/runtime/locations/location-store-repository.d.ts +5 -7
  238. package/dist/runtime/locations/location-store-repository.js +303 -332
  239. package/dist/runtime/locations/relocation-blob.js +18 -5
  240. package/dist/runtime/locations/resolvers.d.ts +5 -5
  241. package/dist/runtime/locations/resolvers.js +37 -28
  242. package/dist/runtime/locations/runtime.d.ts +5 -4
  243. package/dist/runtime/locations/runtime.js +123 -92
  244. package/dist/runtime/locations/spot-location-claims.d.ts +6 -0
  245. package/dist/runtime/locations/spot-location-claims.js +42 -1
  246. package/dist/runtime/messaging/payload-codec.js +26 -20
  247. package/dist/runtime/messaging/submission-result.d.ts +3 -0
  248. package/dist/runtime/messaging/submission-result.js +48 -0
  249. package/dist/runtime/protocol/service_wire_codec.generated.d.ts +1 -0
  250. package/dist/runtime/protocol/service_wire_codec.generated.js +12 -7
  251. package/dist/runtime/spots/formal-remote-actor-transfer-registry.d.ts +4 -1
  252. package/dist/runtime/spots/index.d.ts +14 -20
  253. package/dist/runtime/spots/index.js +302 -176
  254. package/dist/runtime/spots/spot-activation-registry.d.ts +3 -5
  255. package/dist/runtime/spots/spot-activation-registry.js +14 -50
  256. package/dist/runtime/spots/spot-activation-state.d.ts +1 -1
  257. package/dist/runtime/spots/spot-activation-state.js +2 -2
  258. package/dist/runtime/spots/spot-activation.d.ts +3 -4
  259. package/dist/runtime/spots/spot-activation.js +49 -32
  260. package/dist/runtime/spots/spot-actor-admission-coordinator.d.ts +1 -2
  261. package/dist/runtime/spots/spot-actor-admission-coordinator.js +3 -40
  262. package/dist/runtime/spots/spot-actor-join-dispatch.d.ts +10 -18
  263. package/dist/runtime/spots/spot-actor-join-dispatch.js +4 -52
  264. package/dist/runtime/spots/spot-actor-membership.d.ts +4 -6
  265. package/dist/runtime/spots/spot-actor-membership.js +22 -45
  266. package/dist/runtime/spots/spot-actor-packet-dispatch.d.ts +0 -1
  267. package/dist/runtime/spots/spot-actor-packet-dispatch.js +0 -9
  268. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.d.ts +2 -2
  269. package/dist/runtime/spots/spot-actor-packet-relay-dispatch.js +1 -7
  270. package/dist/runtime/spots/spot-context.d.ts +2 -2
  271. package/dist/runtime/spots/spot-entry-activation.d.ts +2 -2
  272. package/dist/runtime/spots/spot-entry-activation.js +9 -20
  273. package/dist/runtime/spots/spot-lifecycle-metrics.js +3 -2
  274. package/dist/runtime/spots/spot-manager-public.d.ts +5 -6
  275. package/dist/runtime/spots/spot-manager-public.js +5 -4
  276. package/dist/runtime/spots/spot-node-autoconnect.js +22 -31
  277. package/dist/runtime/spots/spot-node-runtime-manager.d.ts +19 -18
  278. package/dist/runtime/spots/spot-node-runtime-manager.js +67 -72
  279. package/dist/runtime/spots/spot-outbound.d.ts +4 -3
  280. package/dist/runtime/spots/spot-outbound.js +9 -8
  281. package/dist/runtime/spots/spot-remote-codec.js +5 -3
  282. package/dist/runtime/spots/spot-route-packet-dispatch.d.ts +2 -2
  283. package/dist/runtime/spots/spot-route-packet-dispatch.js +8 -8
  284. package/dist/runtime/spots/spot-route-replies.d.ts +2 -2
  285. package/dist/runtime/spots/spot-route-replies.js +3 -1
  286. package/dist/runtime/spots/spot-routed-actor-admission.d.ts +3 -3
  287. package/dist/runtime/spots/spot-routed-actor-admission.js +3 -12
  288. package/dist/runtime/spots/spot-routed-frame-dispatch.d.ts +1 -2
  289. package/dist/runtime/spots/spot-routed-frame-dispatch.js +0 -1
  290. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.d.ts +4 -0
  291. package/dist/runtime/spots/spot-routed-spot-packet-dispatch.js +65 -15
  292. package/dist/runtime/spots/spot-runtime-ports.d.ts +2 -16
  293. package/dist/runtime/spots/spot-serial-executor.js +2 -2
  294. package/dist/runtime/spots/spot-serial-turn-executor.d.ts +27 -7
  295. package/dist/runtime/spots/spot-serial-turn-executor.js +83 -11
  296. package/dist/runtime/spots/spot-timer.d.ts +3 -2
  297. package/dist/runtime/streams/actor-session-binding-registry.d.ts +16 -29
  298. package/dist/runtime/streams/actor-session-binding-registry.js +142 -212
  299. package/dist/runtime/streams/actor-session-binding-runtime-owner.d.ts +1 -4
  300. package/dist/runtime/streams/bound-actor-relay-sender.d.ts +6 -2
  301. package/dist/runtime/streams/bound-actor-relay-sender.js +57 -33
  302. package/dist/runtime/streams/bound-session-service.d.ts +7 -0
  303. package/dist/runtime/streams/bound-session-service.js +11 -1
  304. package/dist/runtime/streams/index.d.ts +14 -15
  305. package/dist/runtime/streams/index.js +20 -21
  306. package/dist/runtime/streams/managed-stream.d.ts +3 -0
  307. package/dist/runtime/streams/managed-stream.js +17 -8
  308. package/dist/runtime/streams/native-fallback-bound-session.js +1 -3
  309. package/dist/runtime/streams/protocol.d.ts +6 -33
  310. package/dist/runtime/streams/protocol.js +38 -110
  311. package/dist/runtime/streams/session-actor-coordinator.d.ts +2 -3
  312. package/dist/runtime/streams/session-actor-coordinator.js +12 -4
  313. package/dist/runtime/streams/session-calls.d.ts +1 -1
  314. package/dist/runtime/streams/session-calls.js +5 -4
  315. package/dist/runtime/streams/session-context.d.ts +6 -6
  316. package/dist/runtime/streams/session-context.js +22 -4
  317. package/dist/runtime/streams/session-requests.js +2 -1
  318. package/dist/runtime/streams/stream-binding-runtime-ports.d.ts +16 -1
  319. package/dist/runtime/streams/stream-frame-factory.js +2 -2
  320. package/dist/runtime/streams/stream-session-runtime.d.ts +10 -11
  321. package/dist/runtime/streams/stream-session-runtime.js +25 -33
  322. package/dist/runtime/workers/index.d.ts +2 -2
  323. package/dist/runtime/workers/index.js +5 -4
  324. package/package.json +3 -3
  325. package/src/contracts/Common/CoreTypes.ts +7 -0
  326. package/src/contracts/Common/index.ts +1 -1
  327. package/src/contracts/Configuration/InternalDefaults.ts +12 -0
  328. package/src/contracts/Configuration/Registration.ts +92 -48
  329. package/src/contracts/Configuration/RegistrationBuilderPolicy.ts +44 -2
  330. package/src/contracts/Configuration/RegistrationBuilders.ts +77 -68
  331. package/src/contracts/Configuration/RegistrationTypes.ts +1 -0
  332. package/src/contracts/Configuration/RegistrationValidators.ts +19 -13
  333. package/src/contracts/Configuration/TimerRegistrationValidator.ts +4 -2
  334. package/src/contracts/Dispatch/ZLinkDispatchOptions.ts +1 -0
  335. package/src/contracts/Handlers/JsonContract.ts +14 -4
  336. package/src/contracts/Locations/Authority.ts +7 -3
  337. package/src/contracts/Locations/Options.ts +1 -1
  338. package/src/contracts/Locations/Stores.ts +14 -0
  339. package/src/contracts/Spots/Contracts.ts +1 -1
  340. package/src/internal.ts +14 -0
  341. package/src/nest-integration.ts +28 -10
  342. package/src/runtime/abort.ts +6 -5
  343. package/src/runtime/activation-admission.ts +2 -8
  344. package/src/runtime/actors/actor-authority-payload-codec.ts +58 -20
  345. package/src/runtime/actors/actor-client.ts +77 -204
  346. package/src/runtime/actors/actor-context.ts +39 -33
  347. package/src/runtime/actors/actor-handoff.ts +24 -22
  348. package/src/runtime/actors/actor-lifecycle-snapshot.ts +2 -1
  349. package/src/runtime/actors/actor-local-native-join.ts +172 -174
  350. package/src/runtime/actors/actor-native-lookup.ts +2 -9
  351. package/src/runtime/actors/actor-packet-relay-wire.ts +18 -12
  352. package/src/runtime/actors/actor-remote-joiner.ts +9 -11
  353. package/src/runtime/actors/actor-remote-wire.ts +5 -3
  354. package/src/runtime/actors/actor-request-deadline.ts +49 -0
  355. package/src/runtime/actors/actor-retry-delay.ts +2 -1
  356. package/src/runtime/actors/actor-runtime-state.ts +85 -247
  357. package/src/runtime/actors/bound-session-wire.ts +2 -8
  358. package/src/runtime/actors/deferred-join-completion.ts +10 -6
  359. package/src/runtime/actors/index.ts +100 -79
  360. package/src/runtime/actors/spot-actor-dispatch.ts +60 -29
  361. package/src/runtime/actors/transferred-actor-rollback.ts +11 -62
  362. package/src/runtime/admission.ts +8 -1
  363. package/src/runtime/application-jobs/application-job-queue-scope.ts +4 -4
  364. package/src/runtime/backend/contracts/index.ts +13 -29
  365. package/src/runtime/backend/mesh-actor-session-node-adapter.ts +2 -18
  366. package/src/runtime/backend/mesh-dispatch-pump.ts +111 -117
  367. package/src/runtime/backend/node/node-backend-adapter-support.ts +23 -6
  368. package/src/runtime/backend/node/node-event-loop-poller.ts +8 -12
  369. package/src/runtime/backend/node/node-monitor-backend-adapter.ts +1 -0
  370. package/src/runtime/backend/node/node-raw-binding-port.ts +41 -20
  371. package/src/runtime/backend/node/node-raw-mesh-backend.ts +227 -170
  372. package/src/runtime/backend/node/node-socket-backend-adapter.ts +3 -2
  373. package/src/runtime/backend/raw-binding-port.ts +1 -1
  374. package/src/runtime/backend/runtime-values.ts +4 -1
  375. package/src/runtime/channels/channel-clients.ts +132 -85
  376. package/src/runtime/channels/channel-envelope-inspection.ts +2 -1
  377. package/src/runtime/channels/channel-envelope.ts +58 -29
  378. package/src/runtime/channels/channel-outbound-operations.ts +10 -23
  379. package/src/runtime/channels/channel-receive-loops.ts +39 -7
  380. package/src/runtime/channels/channel-runtime-lifecycle.ts +60 -27
  381. package/src/runtime/channels/channel-runtime-manager.ts +6 -2
  382. package/src/runtime/channels/channel-socket-options.ts +8 -2
  383. package/src/runtime/channels/channel-socket-registry.ts +301 -192
  384. package/src/runtime/channels/channel-transports.ts +161 -112
  385. package/src/runtime/channels/client-server-location-runtime.ts +17 -17
  386. package/src/runtime/channels/client-server-service-wire.ts +40 -12
  387. package/src/runtime/channels/dispatch-error-reporter.ts +7 -5
  388. package/src/runtime/channels/fanout-location-runtime.ts +172 -91
  389. package/src/runtime/channels/spot-direct-envelope.ts +1 -1
  390. package/src/runtime/channels/spot-node-route-transport.ts +5 -2
  391. package/src/runtime/diagnostics/diagnostic-text.ts +4 -0
  392. package/src/runtime/diagnostics/dispatch-error-details.ts +36 -1
  393. package/src/runtime/diagnostics/flow-context.ts +16 -2
  394. package/src/runtime/diagnostics/index.ts +27 -17
  395. package/src/runtime/diagnostics/message-flow.ts +15 -25
  396. package/src/runtime/diagnostics/runtime-metrics.ts +181 -113
  397. package/src/runtime/diagnostics/runtime-observation-queue.ts +3 -2
  398. package/src/runtime/diagnostics/topology-runtime-projections.ts +194 -162
  399. package/src/runtime/disposal.ts +19 -0
  400. package/src/runtime/execution/index.ts +60 -20
  401. package/src/runtime/execution/serial-execution-queue.ts +131 -18
  402. package/src/runtime/execution/state-lane.ts +142 -4
  403. package/src/runtime/foundation/actor-join-recovery-codec.ts +13 -8
  404. package/src/runtime/foundation/event-loop-resources.ts +5 -122
  405. package/src/runtime/foundation/operation-identity.ts +11 -5
  406. package/src/runtime/foundation/operation-registry.ts +33 -50
  407. package/src/runtime/foundation/raw-service-mesh-runtime.ts +110 -111
  408. package/src/runtime/foundation/runtime-state-projections.ts +9 -1
  409. package/src/runtime/foundation/service-authority-payload-codec.ts +31 -13
  410. package/src/runtime/foundation/service-discovery-registry.ts +32 -3
  411. package/src/runtime/foundation/service-instance-activation-recovery-codec.ts +12 -4
  412. package/src/runtime/foundation/service-liveness-registry.ts +2 -1
  413. package/src/runtime/foundation/service-maintenance-runtime.ts +0 -10
  414. package/src/runtime/foundation/service-metadata-codec.ts +2 -2
  415. package/src/runtime/foundation/service-relocation-aggregate-committer.ts +3 -66
  416. package/src/runtime/foundation/service-relocation-object-owner.ts +5 -2
  417. package/src/runtime/foundation/service-relocation-runtime.ts +57 -35
  418. package/src/runtime/foundation/service-runtime-contracts.ts +46 -10
  419. package/src/runtime/foundation/service-session-binding-ingress-port.ts +0 -17
  420. package/src/runtime/foundation/service-stateful-registry.ts +14 -2
  421. package/src/runtime/foundation/service-stateful-runtime.ts +322 -276
  422. package/src/runtime/foundation/service-stateful-wire-codec.ts +128 -80
  423. package/src/runtime/foundation/service-topology-registry.ts +23 -32
  424. package/src/runtime/foundation/service-wire-binary-primitives.ts +6 -0
  425. package/src/runtime/foundation/service-wire-codec.ts +15 -8
  426. package/src/runtime/foundation/service-wire-constants.generated.ts +1 -0
  427. package/src/runtime/foundation/service-wire-m6a-codec.ts +29 -15
  428. package/src/runtime/framework-errors-internal.ts +380 -134
  429. package/src/runtime/handlers/handler-instance-scope.ts +68 -95
  430. package/src/runtime/host/actor-packet-relay.ts +57 -147
  431. package/src/runtime/host/actor-placement-coordinator.ts +8 -5
  432. package/src/runtime/host/actor-runtime-options-factory.ts +27 -8
  433. package/src/runtime/host/actor-transfer-runtime.ts +180 -260
  434. package/src/runtime/host/application-job-queue.ts +28 -34
  435. package/src/runtime/host/bound-session-relay.ts +1 -2
  436. package/src/runtime/host/channel-runtime-options-factory.ts +1 -2
  437. package/src/runtime/host/index.ts +327 -296
  438. package/src/runtime/host/instance-activation-authority.ts +89 -109
  439. package/src/runtime/host/location-runtime-owner.ts +4 -2
  440. package/src/runtime/host/remote-actor-join-receiver.ts +3 -31
  441. package/src/runtime/host/remote-actor-packet-target-store.ts +17 -58
  442. package/src/runtime/host/remote-bound-session-relay.ts +8 -41
  443. package/src/runtime/host/route-mesh-runtime.ts +228 -271
  444. package/src/runtime/host/runtime-shutdown.ts +17 -21
  445. package/src/runtime/host/service-relocation-control.ts +14 -1
  446. package/src/runtime/host/service-relocation-host-runtime.ts +699 -561
  447. package/src/runtime/host/spot-address-transport.ts +73 -195
  448. package/src/runtime/host/spot-node-runtime-options-factory.ts +6 -3
  449. package/src/runtime/host/spot-runtime-options-factory.ts +73 -22
  450. package/src/runtime/host/user-spot-creation-coordinator.ts +36 -22
  451. package/src/runtime/locations/aggregate-inventory-store.ts +16 -13
  452. package/src/runtime/locations/authority-key-codec.ts +7 -3
  453. package/src/runtime/locations/auto-connect-reconciler.ts +39 -26
  454. package/src/runtime/locations/creation-operation-id.ts +6 -3
  455. package/src/runtime/locations/domain-store-contract.ts +12 -3
  456. package/src/runtime/locations/in-memory-authority-store.ts +44 -15
  457. package/src/runtime/locations/in-memory-location-store.ts +50 -39
  458. package/src/runtime/locations/in-memory-provider-location-store.ts +100 -25
  459. package/src/runtime/locations/key-codec.ts +3 -2
  460. package/src/runtime/locations/lease-tracker.ts +8 -14
  461. package/src/runtime/locations/lifecycle.ts +13 -43
  462. package/src/runtime/locations/location-store-failure.ts +4 -0
  463. package/src/runtime/locations/location-store-pages.ts +18 -0
  464. package/src/runtime/locations/location-store-repository.ts +450 -478
  465. package/src/runtime/locations/relocation-blob.ts +17 -6
  466. package/src/runtime/locations/resolvers.ts +75 -49
  467. package/src/runtime/locations/runtime.ts +220 -110
  468. package/src/runtime/locations/spot-location-claims.ts +58 -1
  469. package/src/runtime/messaging/payload-codec.ts +35 -24
  470. package/src/runtime/messaging/submission-result.ts +57 -1
  471. package/src/runtime/protocol/service_wire_codec.generated.ts +18 -8
  472. package/src/runtime/protocol/service_wire_pilot_codec.generated.ts +1 -1
  473. package/src/runtime/spots/formal-remote-actor-transfer-registry.ts +4 -1
  474. package/src/runtime/spots/index.ts +433 -229
  475. package/src/runtime/spots/spot-activation-registry.ts +30 -69
  476. package/src/runtime/spots/spot-activation-state.ts +2 -2
  477. package/src/runtime/spots/spot-activation.ts +67 -37
  478. package/src/runtime/spots/spot-actor-admission-coordinator.ts +5 -57
  479. package/src/runtime/spots/spot-actor-join-dispatch.ts +24 -77
  480. package/src/runtime/spots/spot-actor-membership.ts +40 -72
  481. package/src/runtime/spots/spot-actor-packet-dispatch.ts +0 -16
  482. package/src/runtime/spots/spot-actor-packet-relay-dispatch.ts +3 -15
  483. package/src/runtime/spots/spot-context.ts +3 -3
  484. package/src/runtime/spots/spot-entry-activation.ts +13 -30
  485. package/src/runtime/spots/spot-lifecycle-metrics.ts +3 -2
  486. package/src/runtime/spots/spot-manager-public.ts +21 -17
  487. package/src/runtime/spots/spot-node-autoconnect.ts +20 -26
  488. package/src/runtime/spots/spot-node-runtime-manager.ts +136 -125
  489. package/src/runtime/spots/spot-outbound.ts +45 -23
  490. package/src/runtime/spots/spot-remote-codec.ts +7 -3
  491. package/src/runtime/spots/spot-route-packet-dispatch.ts +25 -24
  492. package/src/runtime/spots/spot-route-replies.ts +6 -4
  493. package/src/runtime/spots/spot-routed-actor-admission.ts +13 -26
  494. package/src/runtime/spots/spot-routed-frame-dispatch.ts +2 -3
  495. package/src/runtime/spots/spot-routed-spot-packet-dispatch.ts +95 -22
  496. package/src/runtime/spots/spot-runtime-ports.ts +5 -27
  497. package/src/runtime/spots/spot-serial-executor.ts +2 -2
  498. package/src/runtime/spots/spot-serial-turn-executor.ts +112 -11
  499. package/src/runtime/spots/spot-timer.ts +3 -2
  500. package/src/runtime/streams/actor-session-binding-registry.ts +179 -269
  501. package/src/runtime/streams/actor-session-binding-runtime-owner.ts +0 -8
  502. package/src/runtime/streams/bound-actor-relay-sender.ts +89 -43
  503. package/src/runtime/streams/bound-session-service.ts +21 -1
  504. package/src/runtime/streams/index.ts +76 -64
  505. package/src/runtime/streams/managed-stream.ts +29 -10
  506. package/src/runtime/streams/native-fallback-bound-session.ts +1 -3
  507. package/src/runtime/streams/protocol.ts +34 -88
  508. package/src/runtime/streams/session-actor-coordinator.ts +17 -5
  509. package/src/runtime/streams/session-calls.ts +6 -5
  510. package/src/runtime/streams/session-context.ts +54 -10
  511. package/src/runtime/streams/session-requests.ts +2 -1
  512. package/src/runtime/streams/stream-binding-runtime-ports.ts +22 -1
  513. package/src/runtime/streams/stream-frame-factory.ts +2 -3
  514. package/src/runtime/streams/stream-session-runtime.ts +57 -59
  515. package/src/runtime/workers/index.ts +13 -12
  516. package/dist/runtime/actors/post-commit-actor-location.d.ts +0 -19
  517. package/dist/runtime/actors/post-commit-actor-location.js +0 -72
  518. package/dist/runtime/spots/spot-native-actor-join-admission.d.ts +0 -26
  519. package/dist/runtime/spots/spot-native-actor-join-admission.js +0 -106
  520. package/src/runtime/actors/post-commit-actor-location.ts +0 -121
  521. package/src/runtime/spots/spot-native-actor-join-admission.ts +0 -155
@@ -1,4 +1,4 @@
1
- import { SpanStatusCode, trace as openTelemetryTrace, type Attributes } from '@opentelemetry/api';
1
+ import { trace as openTelemetryTrace, SpanStatusCode, type Attributes } from '@opentelemetry/api';
2
2
  import { logs as openTelemetryLogs, SeverityNumber } from '@opentelemetry/api-logs';
3
3
  import {
4
4
  MESSAGE_FLOW_MODE_RANK,
@@ -10,11 +10,14 @@ import {
10
10
  ZLinkDispatchErrorSurface,
11
11
  ZLinkDispatchMessageKind,
12
12
  ZLinkRuntimeMessageFlowOutcome as ZLinkMessageFlowOutcome,
13
- type ZLinkRuntimeMessageFlowResult,
14
- type ZLinkRuntimeMessageFlowEvent
13
+ type ZLinkRuntimeMessageFlowEvent,
14
+ type ZLinkRuntimeMessageFlowResult
15
15
  } from '../../contracts/Dispatch/ZLinkDispatchOptions';
16
+ import { ERROR_MESSAGE_MAX_LENGTH } from './dispatch-error-details';
16
17
  import type { ZLinkDispatchErrorSink } from './dispatch-error-port';
17
- import { currentFlowContext } from './flow-context';
18
+ import { currentFlowContext, FLOW_ORIGIN_VALUES } from './flow-context';
19
+ const MESSAGE_FLOW_EVENT_ID = 'zlink.message_flow';
20
+ const DISPATCH_ERROR_EVENT_ID = 'zlink.dispatch_error';
18
21
 
19
22
  export interface ZLinkMessageFlowModeCell {
20
23
  mode: ZLinkMessageFlowLogMode;
@@ -34,11 +37,11 @@ export const DEFAULT_ZLINK_DIAGNOSTICS: ZLinkDiagnosticsOptions = {
34
37
 
35
38
  const telemetryLogger = openTelemetryLogs.getLogger('@zlink-systems/framework');
36
39
  const telemetryTracer = openTelemetryTrace.getTracer('@zlink-systems/framework');
37
- const ERROR_MESSAGE_MAX_LENGTH = 512;
40
+
38
41
  let diagnosticsGeneration = 0n;
39
42
 
40
43
  interface ZLinkTelemetryRecord {
41
- readonly eventId: 'zlink.message_flow' | 'zlink.dispatch_error';
44
+ readonly eventId: typeof MESSAGE_FLOW_EVENT_ID | typeof DISPATCH_ERROR_EVENT_ID;
42
45
  readonly timestamp: Date;
43
46
  readonly phase?: string;
44
47
  readonly outcome: ZLinkRuntimeMessageFlowResult;
@@ -300,12 +303,12 @@ export class ZLinkMessageFlowTracer {
300
303
  private publishToLogger(record: ZLinkTelemetryRecord): void {
301
304
  try {
302
305
  const severityNumber =
303
- record.eventId === 'zlink.dispatch_error' ? SeverityNumber.ERROR : SeverityNumber.INFO;
306
+ record.eventId === DISPATCH_ERROR_EVENT_ID ? SeverityNumber.ERROR : SeverityNumber.INFO;
304
307
  telemetryLogger.emit({
305
308
  eventName: record.eventId,
306
309
  timestamp: record.timestamp,
307
310
  severityNumber,
308
- severityText: record.eventId === 'zlink.dispatch_error' ? 'ERROR' : 'INFO',
311
+ severityText: record.eventId === DISPATCH_ERROR_EVENT_ID ? 'ERROR' : 'INFO',
309
312
  body: structuredLogBody(record),
310
313
  attributes: structuredLogAttributes(record)
311
314
  });
@@ -319,7 +322,7 @@ export class ZLinkMessageFlowTracer {
319
322
  const span = telemetryTracer.startSpan(record.eventId, {
320
323
  attributes: traceAttributes(record)
321
324
  });
322
- if (record.eventId === 'zlink.dispatch_error') {
325
+ if (record.eventId === DISPATCH_ERROR_EVENT_ID) {
323
326
  span.setStatus({ code: SpanStatusCode.ERROR, message: record.reason });
324
327
  }
325
328
  span.end();
@@ -338,18 +341,6 @@ export class ZLinkMessageFlowTracer {
338
341
  }
339
342
  }
340
343
 
341
- /**
342
- * Spec 27 §3 defines the flow_origin value set as lowercase
343
- * (`inbound|timer|application|lifecycle`); every language emits these exact
344
- * strings so records remain comparable across runtimes (spec 26 §3.1).
345
- */
346
- const FLOW_ORIGIN_TELEMETRY_VALUES: Record<ZLinkFlowOrigin, string> = {
347
- Inbound: 'inbound',
348
- Timer: 'timer',
349
- Application: 'application',
350
- Lifecycle: 'lifecycle'
351
- };
352
-
353
344
  function toTelemetryRecord(
354
345
  flow: ZLinkRuntimeMessageFlowEvent,
355
346
  messageSizeBytes: number | undefined,
@@ -358,8 +349,8 @@ function toTelemetryRecord(
358
349
  return {
359
350
  eventId:
360
351
  flow.outcome === ZLinkMessageFlowOutcome.Error
361
- ? 'zlink.dispatch_error'
362
- : 'zlink.message_flow',
352
+ ? DISPATCH_ERROR_EVENT_ID
353
+ : MESSAGE_FLOW_EVENT_ID,
363
354
  timestamp: new Date(),
364
355
  phase: messageFlowPhase(flow.outcome),
365
356
  outcome: flow.result ?? messageFlowOutcome(flow.outcome),
@@ -377,8 +368,7 @@ function toTelemetryRecord(
377
368
  targetRid: flow.targetRid,
378
369
  serverRid: flow.serverRid,
379
370
  flowId: flow.flowId,
380
- flowOrigin:
381
- flow.flowOrigin === undefined ? undefined : FLOW_ORIGIN_TELEMETRY_VALUES[flow.flowOrigin],
371
+ flowOrigin: flow.flowOrigin === undefined ? undefined : FLOW_ORIGIN_VALUES[flow.flowOrigin],
382
372
  spotId: flow.spotId,
383
373
  instanceSpotType: flow.instanceSpotType,
384
374
  activationState: flow.activationState,
@@ -1,11 +1,14 @@
1
- import type {
2
- ZLinkHostCapacityStatus,
3
- ZLinkMeter,
4
- ZLinkMeterProvider,
5
- ZLinkMetricAttributes
6
- } from '../../contracts';
7
- import { ZLinkMeters } from '../../contracts';
8
1
  import { metrics as openTelemetryMetrics } from '@opentelemetry/api';
2
+ import {
3
+ type ZLinkHostCapacityStatus,
4
+ type ZLinkMeter,
5
+ type ZLinkMeterProvider,
6
+ type ZLinkMetricAttributes,
7
+ ZLinkMeters
8
+ } from '../../contracts';
9
+
10
+ export const MILLISECONDS_PER_SECOND = 1000;
11
+ export const NANOSECONDS_PER_SECOND = 1e9;
9
12
 
10
13
  type CounterInstrument = ReturnType<ZLinkMeter['createCounter']>;
11
14
  type UpDownInstrument = ReturnType<ZLinkMeter['createUpDownCounter']>;
@@ -80,78 +83,143 @@ export interface ZLinkRelocationMetricOperation extends ZLinkRuntimeMetricOperat
80
83
  recordBytes(bytes: number): void;
81
84
  }
82
85
 
86
+ export const METRIC_NAMES = Object.freeze({
87
+ StreamConnectionsOpened: 'zlink.stream.connections.opened',
88
+ StreamConnectionsClosed: 'zlink.stream.connections.closed',
89
+ MeshNodeChannelSelectionFailures: 'zlink.mesh_node.channel.selection_failures',
90
+ MeshNodeRequestTimeouts: 'zlink.mesh_node.request.timeouts',
91
+ MeshNodeMessagesDropped: 'zlink.mesh_node.messages.dropped',
92
+ RelocationStarted: 'zlink.relocation.started',
93
+ RelocationCompleted: 'zlink.relocation.completed',
94
+ RelocationCutoverTimeout: 'zlink.relocation.cutover_timeout',
95
+ InstanceSpotActivations: 'zlink.instance_spot.activations',
96
+ InstanceSpotClaimConflicts: 'zlink.instance_spot.claim.conflicts',
97
+ InstanceSpotTakeovers: 'zlink.instance_spot.takeovers',
98
+ LocationStoreErrors: 'zlink.location.store.errors',
99
+ LocationOwnerLeaseRenewFailures: 'zlink.location.owner_lease.renew.failures',
100
+ ObservabilityEventsOverflow: 'zlink.observability.events.overflow',
101
+ HostRelocationBlocked: 'zlink.host.relocation.blocked',
102
+ HostShutdownForced: 'zlink.host.shutdown.forced',
103
+ StreamConnectionsActive: 'zlink.stream.connections.active',
104
+ SpotCount: 'zlink.spot.count',
105
+ ActorCount: 'zlink.actor.count',
106
+ MeshNodeRequestsInflight: 'zlink.mesh_node.requests.inflight',
107
+ MeshNodeRequestDuration: 'zlink.mesh_node.request.duration',
108
+ RelocationDuration: 'zlink.relocation.duration',
109
+ RelocationBytes: 'zlink.relocation.bytes',
110
+ RelocationInterruption: 'zlink.relocation.interruption',
111
+ RelocationTargetResume: 'zlink.relocation.target_resume',
112
+ RelocationRouteConvergence: 'zlink.relocation.route_convergence',
113
+ InstanceSpotActivationDuration: 'zlink.instance_spot.activation.duration',
114
+ LocationOwnerLeaseRenewLateness: 'zlink.location.owner_lease.renew.lateness',
115
+ HostRelocationDuration: 'zlink.host.relocation.duration',
116
+ HostShutdownDuration: 'zlink.host.shutdown.duration',
117
+ MeshNodePeersConfigured: 'zlink.mesh_node.peers.configured',
118
+ MeshNodePeersConnected: 'zlink.mesh_node.peers.connected',
119
+ MeshNodePeersReady: 'zlink.mesh_node.peers.ready',
120
+ MeshNodeChannelsReadyMembers: 'zlink.mesh_node.channels.ready_members',
121
+ ObjectCapacityActive: 'zlink.object.capacity.active',
122
+ ObjectCapacityReserved: 'zlink.object.capacity.reserved',
123
+ ObjectCapacityLimit: 'zlink.object.capacity.limit',
124
+ SpotTypeCapacityActive: 'zlink.spot.type.capacity.active',
125
+ SpotTypeCapacityReserved: 'zlink.spot.type.capacity.reserved',
126
+ SpotTypeCapacityLimit: 'zlink.spot.type.capacity.limit',
127
+ ObjectActivationActive: 'zlink.object.activation.active',
128
+ ObjectActivationLimit: 'zlink.object.activation.limit',
129
+ InstanceSpotPendingMessages: 'zlink.instance_spot.pending.messages',
130
+ InstanceSpotPendingBytes: 'zlink.instance_spot.pending.bytes',
131
+ HostState: 'zlink.host.state',
132
+ HostCoreHwmEffectiveBudget: 'zlink.host.core_hwm.effective_budget',
133
+ HostCoreHwmApplied: 'zlink.host.core_hwm.applied',
134
+ HostCoreHwmAccounted: 'zlink.host.core_hwm.accounted',
135
+ HostCoreHwmCompletionAccounted: 'zlink.host.core_hwm.completion_accounted',
136
+ HostCoreHwmBlockedRatio: 'zlink.host.core_hwm.blocked_ratio',
137
+ HostApplicationJobQueueLimit: 'zlink.host.application_job_queue.limit',
138
+ HostApplicationJobQueueJobs: 'zlink.host.application_job_queue.jobs',
139
+ HostApplicationJobQueueCapacityWaiters: 'zlink.host.application_job_queue.capacity_waiters',
140
+ HostApplicationJobQueuePressureState: 'zlink.host.application_job_queue.pressure_state',
141
+ HostApplicationJobQueuePauseDuration: 'zlink.host.application_job_queue.pause_duration',
142
+ HostApplicationJobQueueCapacityWaits: 'zlink.host.application_job_queue.capacity_waits',
143
+ HostApplicationJobQueueCapacityWaitDuration:
144
+ 'zlink.host.application_job_queue.capacity_wait_duration',
145
+ HostApplicationJobQueuePressureTransitions:
146
+ 'zlink.host.application_job_queue.pressure_transitions',
147
+ HostApplicationJobQueueFlowStateConfigFailures:
148
+ 'zlink.host.application_job_queue.flow_state_config_failures'
149
+ } as const);
150
+
83
151
  const COUNTERS = Object.freeze({
84
- 'zlink.stream.connections.opened': '{connection}',
85
- 'zlink.stream.connections.closed': '{connection}',
86
- 'zlink.mesh_node.channel.selection_failures': '{failure}',
87
- 'zlink.mesh_node.request.timeouts': '{request}',
88
- 'zlink.mesh_node.messages.dropped': '{message}',
89
- 'zlink.relocation.started': '{relocation}',
90
- 'zlink.relocation.completed': '{relocation}',
91
- 'zlink.relocation.cutover_timeout': '{fallback}',
92
- 'zlink.instance_spot.activations': '{activation}',
93
- 'zlink.instance_spot.claim.conflicts': '{claim}',
94
- 'zlink.instance_spot.takeovers': '{takeover}',
95
- 'zlink.location.store.errors': '{error}',
96
- 'zlink.location.owner_lease.renew.failures': '{failure}',
97
- 'zlink.observability.events.overflow': '{event}',
98
- 'zlink.host.relocation.blocked': '{operation}',
99
- 'zlink.host.shutdown.forced': '{operation}'
152
+ [METRIC_NAMES.StreamConnectionsOpened]: '{connection}',
153
+ [METRIC_NAMES.StreamConnectionsClosed]: '{connection}',
154
+ [METRIC_NAMES.MeshNodeChannelSelectionFailures]: '{failure}',
155
+ [METRIC_NAMES.MeshNodeRequestTimeouts]: '{request}',
156
+ [METRIC_NAMES.MeshNodeMessagesDropped]: '{message}',
157
+ [METRIC_NAMES.RelocationStarted]: '{relocation}',
158
+ [METRIC_NAMES.RelocationCompleted]: '{relocation}',
159
+ [METRIC_NAMES.RelocationCutoverTimeout]: '{fallback}',
160
+ [METRIC_NAMES.InstanceSpotActivations]: '{activation}',
161
+ [METRIC_NAMES.InstanceSpotClaimConflicts]: '{claim}',
162
+ [METRIC_NAMES.InstanceSpotTakeovers]: '{takeover}',
163
+ [METRIC_NAMES.LocationStoreErrors]: '{error}',
164
+ [METRIC_NAMES.LocationOwnerLeaseRenewFailures]: '{failure}',
165
+ [METRIC_NAMES.ObservabilityEventsOverflow]: '{event}',
166
+ [METRIC_NAMES.HostRelocationBlocked]: '{operation}',
167
+ [METRIC_NAMES.HostShutdownForced]: '{operation}'
100
168
  } as const);
101
169
 
102
170
  const UP_DOWN_COUNTERS = Object.freeze({
103
- 'zlink.stream.connections.active': '{connection}',
104
- 'zlink.spot.count': '{spot}',
105
- 'zlink.actor.count': '{actor}',
106
- 'zlink.mesh_node.requests.inflight': '{request}'
171
+ [METRIC_NAMES.StreamConnectionsActive]: '{connection}',
172
+ [METRIC_NAMES.SpotCount]: '{spot}',
173
+ [METRIC_NAMES.ActorCount]: '{actor}',
174
+ [METRIC_NAMES.MeshNodeRequestsInflight]: '{request}'
107
175
  } as const);
108
176
 
109
177
  const HISTOGRAMS = Object.freeze({
110
- 'zlink.mesh_node.request.duration': 's',
111
- 'zlink.relocation.duration': 's',
112
- 'zlink.relocation.bytes': 'By',
113
- 'zlink.relocation.interruption': 's',
114
- 'zlink.relocation.target_resume': 's',
115
- 'zlink.relocation.route_convergence': 's',
116
- 'zlink.instance_spot.activation.duration': 's',
117
- 'zlink.location.owner_lease.renew.lateness': 's',
118
- 'zlink.host.relocation.duration': 's',
119
- 'zlink.host.shutdown.duration': 's'
178
+ [METRIC_NAMES.MeshNodeRequestDuration]: 's',
179
+ [METRIC_NAMES.RelocationDuration]: 's',
180
+ [METRIC_NAMES.RelocationBytes]: 'By',
181
+ [METRIC_NAMES.RelocationInterruption]: 's',
182
+ [METRIC_NAMES.RelocationTargetResume]: 's',
183
+ [METRIC_NAMES.RelocationRouteConvergence]: 's',
184
+ [METRIC_NAMES.InstanceSpotActivationDuration]: 's',
185
+ [METRIC_NAMES.LocationOwnerLeaseRenewLateness]: 's',
186
+ [METRIC_NAMES.HostRelocationDuration]: 's',
187
+ [METRIC_NAMES.HostShutdownDuration]: 's'
120
188
  } as const);
121
189
 
122
190
  const OBSERVABLE_GAUGES = Object.freeze({
123
- 'zlink.mesh_node.peers.configured': '{peer}',
124
- 'zlink.mesh_node.peers.connected': '{peer}',
125
- 'zlink.mesh_node.peers.ready': '{peer}',
126
- 'zlink.mesh_node.channels.ready_members': '{member}',
127
- 'zlink.object.capacity.active': '{object}',
128
- 'zlink.object.capacity.reserved': '{object}',
129
- 'zlink.object.capacity.limit': '{object}',
130
- 'zlink.spot.type.capacity.active': '{spot}',
131
- 'zlink.spot.type.capacity.reserved': '{spot}',
132
- 'zlink.spot.type.capacity.limit': '{spot}',
133
- 'zlink.object.activation.active': '{activation}',
134
- 'zlink.object.activation.limit': '{activation}',
135
- 'zlink.instance_spot.pending.messages': '{message}',
136
- 'zlink.instance_spot.pending.bytes': 'By',
137
- 'zlink.host.state': '{runtime}',
138
- 'zlink.host.core_hwm.effective_budget': 'By',
139
- 'zlink.host.core_hwm.applied': 'By',
140
- 'zlink.host.core_hwm.accounted': 'By',
141
- 'zlink.host.core_hwm.completion_accounted': 'By',
142
- 'zlink.host.core_hwm.blocked_ratio': '{ppm}',
143
- 'zlink.host.application_job_queue.limit': '{job}',
144
- 'zlink.host.application_job_queue.jobs': '{job}',
145
- 'zlink.host.application_job_queue.capacity_waiters': '{waiter}',
146
- 'zlink.host.application_job_queue.pressure_state': '{state}',
147
- 'zlink.host.application_job_queue.pause_duration': 's'
191
+ [METRIC_NAMES.MeshNodePeersConfigured]: '{peer}',
192
+ [METRIC_NAMES.MeshNodePeersConnected]: '{peer}',
193
+ [METRIC_NAMES.MeshNodePeersReady]: '{peer}',
194
+ [METRIC_NAMES.MeshNodeChannelsReadyMembers]: '{member}',
195
+ [METRIC_NAMES.ObjectCapacityActive]: '{object}',
196
+ [METRIC_NAMES.ObjectCapacityReserved]: '{object}',
197
+ [METRIC_NAMES.ObjectCapacityLimit]: '{object}',
198
+ [METRIC_NAMES.SpotTypeCapacityActive]: '{spot}',
199
+ [METRIC_NAMES.SpotTypeCapacityReserved]: '{spot}',
200
+ [METRIC_NAMES.SpotTypeCapacityLimit]: '{spot}',
201
+ [METRIC_NAMES.ObjectActivationActive]: '{activation}',
202
+ [METRIC_NAMES.ObjectActivationLimit]: '{activation}',
203
+ [METRIC_NAMES.InstanceSpotPendingMessages]: '{message}',
204
+ [METRIC_NAMES.InstanceSpotPendingBytes]: 'By',
205
+ [METRIC_NAMES.HostState]: '{runtime}',
206
+ [METRIC_NAMES.HostCoreHwmEffectiveBudget]: 'By',
207
+ [METRIC_NAMES.HostCoreHwmApplied]: 'By',
208
+ [METRIC_NAMES.HostCoreHwmAccounted]: 'By',
209
+ [METRIC_NAMES.HostCoreHwmCompletionAccounted]: 'By',
210
+ [METRIC_NAMES.HostCoreHwmBlockedRatio]: '{ppm}',
211
+ [METRIC_NAMES.HostApplicationJobQueueLimit]: '{job}',
212
+ [METRIC_NAMES.HostApplicationJobQueueJobs]: '{job}',
213
+ [METRIC_NAMES.HostApplicationJobQueueCapacityWaiters]: '{waiter}',
214
+ [METRIC_NAMES.HostApplicationJobQueuePressureState]: '{state}',
215
+ [METRIC_NAMES.HostApplicationJobQueuePauseDuration]: 's'
148
216
  } as const);
149
217
 
150
218
  const OBSERVABLE_COUNTERS = Object.freeze({
151
- 'zlink.host.application_job_queue.capacity_waits': '{wait}',
152
- 'zlink.host.application_job_queue.capacity_wait_duration': 's',
153
- 'zlink.host.application_job_queue.pressure_transitions': '{transition}',
154
- 'zlink.host.application_job_queue.flow_state_config_failures': '{failure}'
219
+ [METRIC_NAMES.HostApplicationJobQueueCapacityWaits]: '{wait}',
220
+ [METRIC_NAMES.HostApplicationJobQueueCapacityWaitDuration]: 's',
221
+ [METRIC_NAMES.HostApplicationJobQueuePressureTransitions]: '{transition}',
222
+ [METRIC_NAMES.HostApplicationJobQueueFlowStateConfigFailures]: '{failure}'
155
223
  } as const);
156
224
 
157
225
  type CounterName = keyof typeof COUNTERS;
@@ -191,10 +259,10 @@ class MetricRegistry {
191
259
 
192
260
  private observe(name: string, result: ZLinkObservableResult): void {
193
261
  if (
194
- name === 'zlink.host.application_job_queue.pressure_state' ||
195
- name === 'zlink.host.application_job_queue.pressure_transitions' ||
196
- name === 'zlink.host.application_job_queue.pause_duration' ||
197
- name === 'zlink.host.application_job_queue.flow_state_config_failures'
262
+ name === METRIC_NAMES.HostApplicationJobQueuePressureState ||
263
+ name === METRIC_NAMES.HostApplicationJobQueuePressureTransitions ||
264
+ name === METRIC_NAMES.HostApplicationJobQueuePauseDuration ||
265
+ name === METRIC_NAMES.HostApplicationJobQueueFlowStateConfigFailures
198
266
  ) {
199
267
  for (const provider of this.applicationJobQueuePressures) {
200
268
  try {
@@ -218,7 +286,7 @@ class MetricRegistry {
218
286
  }
219
287
  return;
220
288
  }
221
- if (name === 'zlink.host.state') {
289
+ if (name === METRIC_NAMES.HostState) {
222
290
  for (const provider of this.hostStates) {
223
291
  try {
224
292
  result.observe(1, { state: provider() });
@@ -245,15 +313,15 @@ class MetricRegistry {
245
313
  snapshot: ZLinkApplicationJobQueuePressureMetricSnapshot,
246
314
  result: ZLinkObservableResult
247
315
  ): void {
248
- if (name === 'zlink.host.application_job_queue.pressure_state') {
316
+ if (name === METRIC_NAMES.HostApplicationJobQueuePressureState) {
249
317
  result.observe(1, { state: snapshot.pressureState });
250
- } else if (name === 'zlink.host.application_job_queue.pressure_transitions') {
318
+ } else if (name === METRIC_NAMES.HostApplicationJobQueuePressureTransitions) {
251
319
  result.observe(metricNumber(snapshot.runningTransitionCount), { state: 'running' });
252
320
  result.observe(metricNumber(snapshot.pausedTransitionCount), { state: 'paused' });
253
- } else if (name === 'zlink.host.application_job_queue.pause_duration') {
321
+ } else if (name === METRIC_NAMES.HostApplicationJobQueuePauseDuration) {
254
322
  result.observe(nonNegative(snapshot.currentPauseDurationSeconds), { state: 'current' });
255
323
  result.observe(nonNegative(snapshot.cumulativePauseDurationSeconds), { state: 'cumulative' });
256
- } else if (name === 'zlink.host.application_job_queue.flow_state_config_failures') {
324
+ } else if (name === METRIC_NAMES.HostApplicationJobQueueFlowStateConfigFailures) {
257
325
  result.observe(metricNumber(snapshot.flowStateConfigFailureCount));
258
326
  }
259
327
  }
@@ -265,30 +333,30 @@ class MetricRegistry {
265
333
  ): void {
266
334
  const core = snapshot.coreHwm;
267
335
  const jobs = snapshot.applicationJobQueue;
268
- if (name === 'zlink.host.core_hwm.effective_budget') {
336
+ if (name === METRIC_NAMES.HostCoreHwmEffectiveBudget) {
269
337
  result.observe(metricNumber(core.effectiveBudgetBytes));
270
- } else if (name === 'zlink.host.core_hwm.applied') {
338
+ } else if (name === METRIC_NAMES.HostCoreHwmApplied) {
271
339
  result.observe(metricNumber(core.totalAppliedHwmBytes));
272
- } else if (name === 'zlink.host.core_hwm.accounted') {
340
+ } else if (name === METRIC_NAMES.HostCoreHwmAccounted) {
273
341
  result.observe(metricNumber(core.currentAccountedBytes), { state: 'current' });
274
342
  result.observe(metricNumber(core.peakAccountedBytes), { state: 'peak' });
275
- } else if (name === 'zlink.host.core_hwm.completion_accounted') {
343
+ } else if (name === METRIC_NAMES.HostCoreHwmCompletionAccounted) {
276
344
  result.observe(metricNumber(core.completionCurrentAccountedBytes), { state: 'current' });
277
345
  result.observe(metricNumber(core.completionPeakAccountedBytes), { state: 'peak' });
278
- } else if (name === 'zlink.host.core_hwm.blocked_ratio') {
346
+ } else if (name === METRIC_NAMES.HostCoreHwmBlockedRatio) {
279
347
  result.observe(metricNumber(core.blockedRatioPpm));
280
- } else if (name === 'zlink.host.application_job_queue.limit') {
348
+ } else if (name === METRIC_NAMES.HostApplicationJobQueueLimit) {
281
349
  result.observe(metricNumber(jobs.effectiveMaxQueuedApplicationJobs));
282
- } else if (name === 'zlink.host.application_job_queue.jobs') {
350
+ } else if (name === METRIC_NAMES.HostApplicationJobQueueJobs) {
283
351
  result.observe(metricNumber(jobs.reservedSupplyPermits), { state: 'reserved' });
284
352
  result.observe(metricNumber(jobs.queuedApplicationJobs), { state: 'queued' });
285
353
  result.observe(metricNumber(jobs.permitsInUse), { state: 'in_use' });
286
354
  result.observe(metricNumber(jobs.peakPermitsInUse), { state: 'peak' });
287
- } else if (name === 'zlink.host.application_job_queue.capacity_waiters') {
355
+ } else if (name === METRIC_NAMES.HostApplicationJobQueueCapacityWaiters) {
288
356
  result.observe(metricNumber(jobs.capacityWaiters));
289
- } else if (name === 'zlink.host.application_job_queue.capacity_waits') {
357
+ } else if (name === METRIC_NAMES.HostApplicationJobQueueCapacityWaits) {
290
358
  result.observe(metricNumber(jobs.capacityWaitCount));
291
- } else if (name === 'zlink.host.application_job_queue.capacity_wait_duration') {
359
+ } else if (name === METRIC_NAMES.HostApplicationJobQueueCapacityWaitDuration) {
292
360
  result.observe(nonNegative(jobs.capacityWaitDurationSeconds));
293
361
  }
294
362
  }
@@ -300,13 +368,13 @@ class MetricRegistry {
300
368
  ): void {
301
369
  const mesh = { mesh_name: snapshot.meshName };
302
370
  const peer = { ...mesh, source: snapshot.source };
303
- if (name === 'zlink.mesh_node.peers.configured')
371
+ if (name === METRIC_NAMES.MeshNodePeersConfigured)
304
372
  result.observe(nonNegative(snapshot.configuredPeers), peer);
305
- else if (name === 'zlink.mesh_node.peers.connected')
373
+ else if (name === METRIC_NAMES.MeshNodePeersConnected)
306
374
  result.observe(nonNegative(snapshot.connectedPeers), peer);
307
- else if (name === 'zlink.mesh_node.peers.ready')
375
+ else if (name === METRIC_NAMES.MeshNodePeersReady)
308
376
  result.observe(nonNegative(snapshot.readyPeers), peer);
309
- else if (name === 'zlink.mesh_node.channels.ready_members') {
377
+ else if (name === METRIC_NAMES.MeshNodeChannelsReadyMembers) {
310
378
  for (const channel of snapshot.channels) {
311
379
  result.observe(nonNegative(channel.readyMembers), {
312
380
  ...mesh,
@@ -332,18 +400,18 @@ class MetricRegistry {
332
400
  stable_type: capacity.stableType
333
401
  });
334
402
  }
335
- } else if (name === 'zlink.object.activation.active') {
403
+ } else if (name === METRIC_NAMES.ObjectActivationActive) {
336
404
  result.observe(nonNegative(snapshot.activation.active), mesh);
337
- } else if (name === 'zlink.object.activation.limit') {
405
+ } else if (name === METRIC_NAMES.ObjectActivationLimit) {
338
406
  result.observe(nonNegative(snapshot.activation.limit), mesh);
339
- } else if (name === 'zlink.instance_spot.pending.messages') {
407
+ } else if (name === METRIC_NAMES.InstanceSpotPendingMessages) {
340
408
  for (const instance of snapshot.instanceSpots) {
341
409
  result.observe(nonNegative(instance.pendingMessages), {
342
410
  ...mesh,
343
411
  instance_spot_type: instance.instanceSpotType
344
412
  });
345
413
  }
346
- } else if (name === 'zlink.instance_spot.pending.bytes') {
414
+ } else if (name === METRIC_NAMES.InstanceSpotPendingBytes) {
347
415
  for (const instance of snapshot.instanceSpots) {
348
416
  result.observe(nonNegative(instance.pendingBytes), {
349
417
  ...mesh,
@@ -429,11 +497,11 @@ export class ZLinkRuntimeMetrics {
429
497
  }
430
498
 
431
499
  recordLocationStoreError(operation: string): void {
432
- this.count('zlink.location.store.errors', 1, { operation });
500
+ this.count(METRIC_NAMES.LocationStoreErrors, 1, { operation });
433
501
  }
434
502
 
435
503
  recordOwnerLeaseRenewFailure(scopeKind: 'mesh' | 'channel', scopeName: string): void {
436
- this.count('zlink.location.owner_lease.renew.failures', 1, {
504
+ this.count(METRIC_NAMES.LocationOwnerLeaseRenewFailures, 1, {
437
505
  scope_kind: scopeKind,
438
506
  scope_name: scopeName
439
507
  });
@@ -444,14 +512,14 @@ export class ZLinkRuntimeMetrics {
444
512
  scopeKind: 'mesh' | 'channel',
445
513
  scopeName: string
446
514
  ): void {
447
- this.duration('zlink.location.owner_lease.renew.lateness', seconds, {
515
+ this.duration(METRIC_NAMES.LocationOwnerLeaseRenewLateness, seconds, {
448
516
  scope_kind: scopeKind,
449
517
  scope_name: scopeName
450
518
  });
451
519
  }
452
520
 
453
521
  recordChannelSelectionFailure(meshName: string, channelName: string, reason: string): void {
454
- this.count('zlink.mesh_node.channel.selection_failures', 1, {
522
+ this.count(METRIC_NAMES.MeshNodeChannelSelectionFailures, 1, {
455
523
  mesh_name: meshName,
456
524
  channel_name: channelName,
457
525
  reason
@@ -464,7 +532,7 @@ export class ZLinkRuntimeMetrics {
464
532
  messageKind: string,
465
533
  reason: string
466
534
  ): void {
467
- this.count('zlink.mesh_node.messages.dropped', 1, {
535
+ this.count(METRIC_NAMES.MeshNodeMessagesDropped, 1, {
468
536
  mesh_name: meshName,
469
537
  surface,
470
538
  message_kind: messageKind,
@@ -487,10 +555,10 @@ export class ZLinkRuntimeMetrics {
487
555
  instance_spot_type: instanceSpotType,
488
556
  outcome
489
557
  };
490
- this.count('zlink.instance_spot.activations', 1, attributes);
558
+ this.count(METRIC_NAMES.InstanceSpotActivations, 1, attributes);
491
559
  this.duration(
492
- 'zlink.instance_spot.activation.duration',
493
- Number(process.hrtime.bigint() - started) / 1e9,
560
+ METRIC_NAMES.InstanceSpotActivationDuration,
561
+ Number(process.hrtime.bigint() - started) / NANOSECONDS_PER_SECOND,
494
562
  attributes
495
563
  );
496
564
  }
@@ -505,20 +573,20 @@ export class ZLinkRuntimeMetrics {
505
573
  const started = process.hrtime.bigint();
506
574
  const startAttributes = { mesh_name: meshName, object_kind: objectKind, policy };
507
575
  let completed = false;
508
- this.count('zlink.relocation.started', 1, startAttributes);
576
+ this.count(METRIC_NAMES.RelocationStarted, 1, startAttributes);
509
577
  return {
510
578
  recordBytes: (bytes: number): void => {
511
579
  if (completed || bytes < 0) return;
512
- this.histogram('zlink.relocation.bytes', bytes, 'By', startAttributes);
580
+ this.histogram(METRIC_NAMES.RelocationBytes, bytes, 'By', startAttributes);
513
581
  },
514
582
  complete: (outcome: string): void => {
515
583
  if (completed) return;
516
584
  completed = true;
517
585
  const terminal = { ...startAttributes, outcome };
518
- this.count('zlink.relocation.completed', 1, terminal);
586
+ this.count(METRIC_NAMES.RelocationCompleted, 1, terminal);
519
587
  this.duration(
520
- 'zlink.relocation.duration',
521
- Number(process.hrtime.bigint() - started) / 1e9,
588
+ METRIC_NAMES.RelocationDuration,
589
+ Number(process.hrtime.bigint() - started) / NANOSECONDS_PER_SECOND,
522
590
  terminal
523
591
  );
524
592
  }
@@ -530,7 +598,7 @@ export class ZLinkRuntimeMetrics {
530
598
  instanceSpotType: string,
531
599
  reason: string
532
600
  ): void {
533
- this.count('zlink.instance_spot.claim.conflicts', 1, {
601
+ this.count(METRIC_NAMES.InstanceSpotClaimConflicts, 1, {
534
602
  mesh_name: meshName,
535
603
  instance_spot_type: instanceSpotType,
536
604
  reason
@@ -538,7 +606,7 @@ export class ZLinkRuntimeMetrics {
538
606
  }
539
607
 
540
608
  recordInstanceSpotTakeover(meshName: string, instanceSpotType: string, outcome: string): void {
541
- this.count('zlink.instance_spot.takeovers', 1, {
609
+ this.count(METRIC_NAMES.InstanceSpotTakeovers, 1, {
542
610
  mesh_name: meshName,
543
611
  instance_spot_type: instanceSpotType,
544
612
  outcome
@@ -559,21 +627,21 @@ export class ZLinkRequestMetricOperation {
559
627
  private readonly meshName: string,
560
628
  private readonly surface: 'node' | 'channel' | 'spot' | 'instance_spot' | 'actor'
561
629
  ) {
562
- metrics.change('zlink.mesh_node.requests.inflight', 1, this.baseAttributes());
630
+ metrics.change(METRIC_NAMES.MeshNodeRequestsInflight, 1, this.baseAttributes());
563
631
  }
564
632
 
565
633
  complete(outcome: string): void {
566
634
  if (this.completed) return;
567
635
  this.completed = true;
568
636
  const attributes = this.baseAttributes();
569
- this.metrics.change('zlink.mesh_node.requests.inflight', -1, attributes);
637
+ this.metrics.change(METRIC_NAMES.MeshNodeRequestsInflight, -1, attributes);
570
638
  this.metrics.duration(
571
- 'zlink.mesh_node.request.duration',
572
- Number(process.hrtime.bigint() - this.started) / 1e9,
639
+ METRIC_NAMES.MeshNodeRequestDuration,
640
+ Number(process.hrtime.bigint() - this.started) / NANOSECONDS_PER_SECOND,
573
641
  { ...attributes, outcome }
574
642
  );
575
643
  if (outcome === 'timed_out') {
576
- this.metrics.count('zlink.mesh_node.request.timeouts', 1, attributes);
644
+ this.metrics.count(METRIC_NAMES.MeshNodeRequestTimeouts, 1, attributes);
577
645
  }
578
646
  }
579
647
 
@@ -1,3 +1,4 @@
1
+ import { shouldCompactBackingArray } from '../admission';
1
2
  import type { ZLinkObservationLoss, ZLinkObservedStatus } from '../../contracts';
2
3
 
3
4
  export const ZLINK_DEFAULT_TERMINAL_OBSERVATION_CAPACITY = 64;
@@ -291,7 +292,7 @@ export class RuntimeEventQueue<T>
291
292
  if (this.terminalCount === 0) {
292
293
  this.terminalFifo.length = 0;
293
294
  this.terminalHead = 0;
294
- } else if (this.terminalHead >= 1024 && this.terminalHead * 2 >= this.terminalFifo.length) {
295
+ } else if (shouldCompactBackingArray(this.terminalHead, this.terminalFifo.length)) {
295
296
  this.terminalFifo.splice(0, this.terminalHead);
296
297
  this.terminalHead = 0;
297
298
  }
@@ -333,7 +334,7 @@ export class RuntimeEventQueue<T>
333
334
  if (this.waitersCount === 0) {
334
335
  this.waiters.length = 0;
335
336
  this.waitersHead = 0;
336
- } else if (this.waitersHead >= 1024 && this.waitersHead * 2 >= this.waiters.length) {
337
+ } else if (shouldCompactBackingArray(this.waitersHead, this.waiters.length)) {
337
338
  this.waiters.splice(0, this.waitersHead);
338
339
  this.waitersHead = 0;
339
340
  }