pi-daddy 0.22.0 → 0.24.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 (385) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +12 -6
  3. package/contracts/daily-view/v1/README.md +114 -0
  4. package/contracts/daily-view/v1/fixtures/view.json +525 -0
  5. package/contracts/daily-view/v1/fixtures/view.txt +75 -0
  6. package/contracts/daily-view/v1/fixtures/work.jsonl +17 -0
  7. package/contracts/daily-view/v1/p03/README.md +26 -0
  8. package/contracts/daily-view/v1/p03/fixtures/retained-executions.json +241 -0
  9. package/contracts/daily-view/v1/p03/projection.schema.json +194 -0
  10. package/contracts/daily-view/v1/p03/provenance.json +21 -0
  11. package/contracts/dashboard-host/v1/README.md +176 -0
  12. package/contracts/debrief/v1/README.md +146 -0
  13. package/contracts/debrief/v1/intervention/README.md +32 -0
  14. package/contracts/debrief/v1/intervention/fixtures/artifact-3ee11136beb864f518252e5024dae9197421fbf97b6e981d3243c782b5c44bd0.txt +1 -0
  15. package/contracts/debrief/v1/intervention/fixtures/artifact-58905d872dd3c54a9705f67b05fa82edbad7af6476ae8993faf1a7b9fadfb905.txt +1 -0
  16. package/contracts/debrief/v1/intervention/fixtures/assessment.json +29 -0
  17. package/contracts/debrief/v1/intervention/fixtures/blind-view.json +20 -0
  18. package/contracts/debrief/v1/intervention/fixtures/choice.json +7 -0
  19. package/contracts/debrief/v1/intervention/fixtures/manifest.json +57 -0
  20. package/contracts/debrief/v1/intervention/fixtures/reveal.json +39 -0
  21. package/contracts/debrief/v1/provenance.json +89 -0
  22. package/contracts/debrief/v1/work-capture/README.md +38 -0
  23. package/contracts/debrief/v1/work-capture/fixtures/batch.json +17 -0
  24. package/contracts/debrief/v1/work-capture/fixtures/cases.json +184 -0
  25. package/contracts/debrief/v1/work-capture/fixtures/review.json +184 -0
  26. package/contracts/debrief/v1/work-capture/review-request.schema.json +41 -0
  27. package/contracts/debrief/v1/work-capture/work-case.schema.json +190 -0
  28. package/contracts/debrief/v2/README.md +71 -0
  29. package/contracts/debrief/v2/input-pin.json +66 -0
  30. package/contracts/debrief/v2/intervention-upstream.md +40 -0
  31. package/contracts/debrief/v2/work-signals-upstream.md +22 -0
  32. package/contracts/dispatch-control/v1/README.md +109 -0
  33. package/contracts/dispatch-control/v1/request.schema.json +19 -0
  34. package/contracts/effect-profile/v1/README.md +124 -0
  35. package/contracts/execution-retention/v1/README.md +109 -0
  36. package/contracts/execution-retention/v2/README.md +148 -0
  37. package/contracts/execution-retention/v2/fixtures/interrupted-native-bytes.json +91 -0
  38. package/contracts/execution-retention/v2/fixtures/missing-native-session.json +91 -0
  39. package/contracts/execution-retention/v2/fixtures/native-file-unknown-branch.json +91 -0
  40. package/contracts/execution-retention/v2/fixtures/native-id-without-bytes.json +91 -0
  41. package/contracts/execution-retention/v2/fixtures/native-live-branch.json +90 -0
  42. package/contracts/execution-retention/v2/fixtures/replaced-native-session.json +92 -0
  43. package/contracts/execution-retention/v2/fixtures/result-82c620cdfeb8ca6b858cf653d7f5e2eedca5315d6244216d60e8b36f03223d6a.bin +1 -0
  44. package/contracts/execution-retention/v2/fixtures/session-2ec1f134bc739984434f7fca689e1c3d1c39fce2dcadae709e9b6faedfcc4ac7.bin +3 -0
  45. package/contracts/execution-retention/v2/fixtures/session-9bdb4bd16a901da31580acf056bda525225259e15ec409e0410480109011772f.bin +3 -0
  46. package/contracts/execution-retention/v2/manifest.schema.json +858 -0
  47. package/contracts/experiment/v1/README.md +164 -0
  48. package/contracts/factory-order/v1/README.md +151 -0
  49. package/contracts/factory-order/v1/adoption-pin.json +8 -0
  50. package/contracts/intent-control/v1/README.md +135 -0
  51. package/contracts/intent-control/v1/request.schema.json +1096 -0
  52. package/contracts/intent-control/v2/README.md +34 -0
  53. package/contracts/intent-control/v2/request.schema.json +1070 -0
  54. package/contracts/ledger/v4/README.md +241 -0
  55. package/contracts/ledger/v4/fixtures/layout-options.json +428 -0
  56. package/contracts/ledger/v4/fixtures/work-acceptance.json +57 -0
  57. package/contracts/ledger/v4/fixtures/work-occurrence.json +44 -0
  58. package/contracts/ledger/v4/fixtures/work-revision.json +26 -0
  59. package/contracts/ledger/v4/fixtures/work-snapshot.json +73 -0
  60. package/contracts/ledger/v4/ledger-event.schema.json +162 -0
  61. package/contracts/ordinary-control/v1/README.md +59 -0
  62. package/contracts/producer-ipc/v1/README.md +137 -0
  63. package/dist/check-runner.d.ts +5 -0
  64. package/dist/check-runner.d.ts.map +1 -1
  65. package/dist/check-runner.js +16 -2
  66. package/dist/check-runner.js.map +1 -1
  67. package/dist/cli.d.ts +3 -1
  68. package/dist/cli.d.ts.map +1 -1
  69. package/dist/cli.js +49 -3
  70. package/dist/cli.js.map +1 -1
  71. package/dist/control-journal.d.ts +20 -0
  72. package/dist/control-journal.d.ts.map +1 -0
  73. package/dist/control-journal.js +73 -0
  74. package/dist/control-journal.js.map +1 -0
  75. package/dist/daily-dashboard-host.d.ts +99 -0
  76. package/dist/daily-dashboard-host.d.ts.map +1 -0
  77. package/dist/daily-dashboard-host.js +71 -0
  78. package/dist/daily-dashboard-host.js.map +1 -0
  79. package/dist/daily-view-input.d.ts +44 -0
  80. package/dist/daily-view-input.d.ts.map +1 -0
  81. package/dist/daily-view-input.js +68 -0
  82. package/dist/daily-view-input.js.map +1 -0
  83. package/dist/daily-view-render.d.ts +4 -0
  84. package/dist/daily-view-render.d.ts.map +1 -0
  85. package/dist/daily-view-render.js +41 -0
  86. package/dist/daily-view-render.js.map +1 -0
  87. package/dist/daily-view.d.ts +74 -0
  88. package/dist/daily-view.d.ts.map +1 -0
  89. package/dist/daily-view.js +170 -0
  90. package/dist/daily-view.js.map +1 -0
  91. package/dist/dashboard-cli.d.ts +26 -1
  92. package/dist/dashboard-cli.d.ts.map +1 -1
  93. package/dist/dashboard-cli.js +128 -3
  94. package/dist/dashboard-cli.js.map +1 -1
  95. package/dist/dashboard-harness.d.ts +22 -0
  96. package/dist/dashboard-harness.d.ts.map +1 -0
  97. package/dist/dashboard-harness.js +89 -0
  98. package/dist/dashboard-harness.js.map +1 -0
  99. package/dist/dashboard-herdr.d.ts.map +1 -1
  100. package/dist/dashboard-herdr.js +7 -2
  101. package/dist/dashboard-herdr.js.map +1 -1
  102. package/dist/dashboard-host-contract.d.ts +116 -0
  103. package/dist/dashboard-host-contract.d.ts.map +1 -0
  104. package/dist/dashboard-host-contract.js +14 -0
  105. package/dist/dashboard-host-contract.js.map +1 -0
  106. package/dist/dashboard-host-transport.d.ts +16 -0
  107. package/dist/dashboard-host-transport.d.ts.map +1 -0
  108. package/dist/dashboard-host-transport.js +124 -0
  109. package/dist/dashboard-host-transport.js.map +1 -0
  110. package/dist/dashboard-host.d.ts +203 -0
  111. package/dist/dashboard-host.d.ts.map +1 -0
  112. package/dist/dashboard-host.js +376 -0
  113. package/dist/dashboard-host.js.map +1 -0
  114. package/dist/dashboard-observation.d.ts +28 -0
  115. package/dist/dashboard-observation.d.ts.map +1 -0
  116. package/dist/dashboard-observation.js +86 -0
  117. package/dist/dashboard-observation.js.map +1 -0
  118. package/dist/debrief-contract.d.ts +65 -0
  119. package/dist/debrief-contract.d.ts.map +1 -0
  120. package/dist/debrief-contract.js +151 -0
  121. package/dist/debrief-contract.js.map +1 -0
  122. package/dist/debrief-fixture.d.ts +16 -0
  123. package/dist/debrief-fixture.d.ts.map +1 -0
  124. package/dist/debrief-fixture.js +41 -0
  125. package/dist/debrief-fixture.js.map +1 -0
  126. package/dist/debrief-host.d.ts +59 -0
  127. package/dist/debrief-host.d.ts.map +1 -0
  128. package/dist/debrief-host.js +49 -0
  129. package/dist/debrief-host.js.map +1 -0
  130. package/dist/debrief-render.d.ts +5 -0
  131. package/dist/debrief-render.d.ts.map +1 -0
  132. package/dist/debrief-render.js +65 -0
  133. package/dist/debrief-render.js.map +1 -0
  134. package/dist/debrief.d.ts +90 -0
  135. package/dist/debrief.d.ts.map +1 -0
  136. package/dist/debrief.js +263 -0
  137. package/dist/debrief.js.map +1 -0
  138. package/dist/delegate-types.d.ts +2 -0
  139. package/dist/delegate-types.d.ts.map +1 -1
  140. package/dist/delegate-types.js.map +1 -1
  141. package/dist/delegate.d.ts.map +1 -1
  142. package/dist/delegate.js +1 -0
  143. package/dist/delegate.js.map +1 -1
  144. package/dist/dispatch-control.d.ts +45 -0
  145. package/dist/dispatch-control.d.ts.map +1 -0
  146. package/dist/dispatch-control.js +76 -0
  147. package/dist/dispatch-control.js.map +1 -0
  148. package/dist/effect-profile-runtime.d.ts +40 -0
  149. package/dist/effect-profile-runtime.d.ts.map +1 -0
  150. package/dist/effect-profile-runtime.js +51 -0
  151. package/dist/effect-profile-runtime.js.map +1 -0
  152. package/dist/effect-profile.d.ts +40 -0
  153. package/dist/effect-profile.d.ts.map +1 -0
  154. package/dist/effect-profile.js +152 -0
  155. package/dist/effect-profile.js.map +1 -0
  156. package/dist/execution-retention.d.ts +90 -0
  157. package/dist/execution-retention.d.ts.map +1 -0
  158. package/dist/execution-retention.js +247 -0
  159. package/dist/execution-retention.js.map +1 -0
  160. package/dist/experiment-contract.d.ts +56 -0
  161. package/dist/experiment-contract.d.ts.map +1 -0
  162. package/dist/experiment-contract.js +80 -0
  163. package/dist/experiment-contract.js.map +1 -0
  164. package/dist/experiment-state.d.ts +22 -0
  165. package/dist/experiment-state.d.ts.map +1 -0
  166. package/dist/experiment-state.js +79 -0
  167. package/dist/experiment-state.js.map +1 -0
  168. package/dist/experiment-store.d.ts +30 -0
  169. package/dist/experiment-store.d.ts.map +1 -0
  170. package/dist/experiment-store.js +147 -0
  171. package/dist/experiment-store.js.map +1 -0
  172. package/dist/experiment.d.ts +65 -0
  173. package/dist/experiment.d.ts.map +1 -0
  174. package/dist/experiment.js +357 -0
  175. package/dist/experiment.js.map +1 -0
  176. package/dist/factory-contract.d.ts +79 -0
  177. package/dist/factory-contract.d.ts.map +1 -0
  178. package/dist/factory-contract.js +89 -0
  179. package/dist/factory-contract.js.map +1 -0
  180. package/dist/factory-migration.d.ts +20 -0
  181. package/dist/factory-migration.d.ts.map +1 -0
  182. package/dist/factory-migration.js +55 -0
  183. package/dist/factory-migration.js.map +1 -0
  184. package/dist/factory-order.d.ts +848 -0
  185. package/dist/factory-order.d.ts.map +1 -0
  186. package/dist/factory-order.js +83 -0
  187. package/dist/factory-order.js.map +1 -0
  188. package/dist/factory-registry.d.ts +121 -0
  189. package/dist/factory-registry.d.ts.map +1 -0
  190. package/dist/factory-registry.js +133 -0
  191. package/dist/factory-registry.js.map +1 -0
  192. package/dist/file-lock.d.ts +8 -2
  193. package/dist/file-lock.d.ts.map +1 -1
  194. package/dist/file-lock.js +78 -19
  195. package/dist/file-lock.js.map +1 -1
  196. package/dist/herdr-poll.d.ts +8 -0
  197. package/dist/herdr-poll.d.ts.map +1 -1
  198. package/dist/herdr-poll.js +23 -0
  199. package/dist/herdr-poll.js.map +1 -1
  200. package/dist/index.d.ts +20 -0
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/index.js +20 -0
  203. package/dist/index.js.map +1 -1
  204. package/dist/intent-application.d.ts +17 -0
  205. package/dist/intent-application.d.ts.map +1 -0
  206. package/dist/intent-application.js +113 -0
  207. package/dist/intent-application.js.map +1 -0
  208. package/dist/intent-control.d.ts +201 -0
  209. package/dist/intent-control.d.ts.map +1 -0
  210. package/dist/intent-control.js +110 -0
  211. package/dist/intent-control.js.map +1 -0
  212. package/dist/intent-scheduling.d.ts +9 -0
  213. package/dist/intent-scheduling.d.ts.map +1 -0
  214. package/dist/intent-scheduling.js +15 -0
  215. package/dist/intent-scheduling.js.map +1 -0
  216. package/dist/ledger-append.d.ts +15 -0
  217. package/dist/ledger-append.d.ts.map +1 -0
  218. package/dist/ledger-append.js +94 -0
  219. package/dist/ledger-append.js.map +1 -0
  220. package/dist/ledger.d.ts +11 -0
  221. package/dist/ledger.d.ts.map +1 -1
  222. package/dist/ledger.js +3 -7
  223. package/dist/ledger.js.map +1 -1
  224. package/dist/native-session-target.d.ts +9 -0
  225. package/dist/native-session-target.d.ts.map +1 -0
  226. package/dist/native-session-target.js +29 -0
  227. package/dist/native-session-target.js.map +1 -0
  228. package/dist/native-session.d.ts +59 -0
  229. package/dist/native-session.d.ts.map +1 -0
  230. package/dist/native-session.js +154 -0
  231. package/dist/native-session.js.map +1 -0
  232. package/dist/order-schedule.d.ts +37 -0
  233. package/dist/order-schedule.d.ts.map +1 -0
  234. package/dist/order-schedule.js +81 -0
  235. package/dist/order-schedule.js.map +1 -0
  236. package/dist/ordinary-children.d.ts +52 -0
  237. package/dist/ordinary-children.d.ts.map +1 -0
  238. package/dist/ordinary-children.js +93 -0
  239. package/dist/ordinary-children.js.map +1 -0
  240. package/dist/producer-ipc-contract.d.ts +29 -0
  241. package/dist/producer-ipc-contract.d.ts.map +1 -0
  242. package/dist/producer-ipc-contract.js +29 -0
  243. package/dist/producer-ipc-contract.js.map +1 -0
  244. package/dist/producer-ipc.d.ts +55 -0
  245. package/dist/producer-ipc.d.ts.map +1 -0
  246. package/dist/producer-ipc.js +143 -0
  247. package/dist/producer-ipc.js.map +1 -0
  248. package/dist/resource-budget.d.ts +334 -0
  249. package/dist/resource-budget.d.ts.map +1 -0
  250. package/dist/resource-budget.js +415 -0
  251. package/dist/resource-budget.js.map +1 -0
  252. package/dist/retention-contract.d.ts +73 -0
  253. package/dist/retention-contract.d.ts.map +1 -0
  254. package/dist/retention-contract.js +104 -0
  255. package/dist/retention-contract.js.map +1 -0
  256. package/dist/retention-json.d.ts +3 -0
  257. package/dist/retention-json.d.ts.map +1 -0
  258. package/dist/retention-json.js +32 -0
  259. package/dist/retention-json.js.map +1 -0
  260. package/dist/run-child.d.ts +4 -0
  261. package/dist/run-child.d.ts.map +1 -1
  262. package/dist/run-child.js +16 -2
  263. package/dist/run-child.js.map +1 -1
  264. package/dist/run-herdr.d.ts +6 -0
  265. package/dist/run-herdr.d.ts.map +1 -1
  266. package/dist/run-herdr.js +19 -6
  267. package/dist/run-herdr.js.map +1 -1
  268. package/dist/vendor/adoption.d.ts +129 -0
  269. package/dist/vendor/adoption.d.ts.map +1 -0
  270. package/dist/vendor/adoption.js +102 -0
  271. package/dist/vendor/adoption.js.map +1 -0
  272. package/dist/work-command.d.ts +30 -0
  273. package/dist/work-command.d.ts.map +1 -0
  274. package/dist/work-command.js +148 -0
  275. package/dist/work-command.js.map +1 -0
  276. package/dist/work-ledger-destination.d.ts +20 -0
  277. package/dist/work-ledger-destination.d.ts.map +1 -0
  278. package/dist/work-ledger-destination.js +131 -0
  279. package/dist/work-ledger-destination.js.map +1 -0
  280. package/dist/work-ledger-json.d.ts +25 -0
  281. package/dist/work-ledger-json.d.ts.map +1 -0
  282. package/dist/work-ledger-json.js +267 -0
  283. package/dist/work-ledger-json.js.map +1 -0
  284. package/dist/work-ledger-occurrences.d.ts +227 -0
  285. package/dist/work-ledger-occurrences.d.ts.map +1 -0
  286. package/dist/work-ledger-occurrences.js +115 -0
  287. package/dist/work-ledger-occurrences.js.map +1 -0
  288. package/dist/work-ledger-projection.d.ts +295 -0
  289. package/dist/work-ledger-projection.d.ts.map +1 -0
  290. package/dist/work-ledger-projection.js +237 -0
  291. package/dist/work-ledger-projection.js.map +1 -0
  292. package/dist/work-ledger-snapshot.d.ts +29 -0
  293. package/dist/work-ledger-snapshot.d.ts.map +1 -0
  294. package/dist/work-ledger-snapshot.js +267 -0
  295. package/dist/work-ledger-snapshot.js.map +1 -0
  296. package/dist/work-ledger-types.d.ts +261 -0
  297. package/dist/work-ledger-types.d.ts.map +1 -0
  298. package/dist/work-ledger-types.js +13 -0
  299. package/dist/work-ledger-types.js.map +1 -0
  300. package/dist/work-ledger-validation.d.ts +14 -0
  301. package/dist/work-ledger-validation.d.ts.map +1 -0
  302. package/dist/work-ledger-validation.js +226 -0
  303. package/dist/work-ledger-validation.js.map +1 -0
  304. package/dist/work-ledger.d.ts +43 -0
  305. package/dist/work-ledger.d.ts.map +1 -0
  306. package/dist/work-ledger.js +225 -0
  307. package/dist/work-ledger.js.map +1 -0
  308. package/extensions/daily-dashboard-session.ts +30 -0
  309. package/extensions/daily-work-session.ts +20 -0
  310. package/extensions/delegate-chain.ts +1 -0
  311. package/extensions/delegation-native.ts +12 -0
  312. package/extensions/delegation.ts +25 -11
  313. package/extensions/execute-child.ts +44 -5
  314. package/extensions/executor-session.ts +9 -0
  315. package/extensions/grants-command.ts +14 -15
  316. package/extensions/grants-connected-command.ts +19 -0
  317. package/extensions/grants.ts +26 -2
  318. package/extensions/ordinary-runtime.ts +14 -0
  319. package/extensions/primary-shadow.ts +11 -0
  320. package/extensions/run-delegation.ts +9 -7
  321. package/extensions/session.ts +10 -20
  322. package/extensions/work-runtime.ts +44 -0
  323. package/package.json +78 -4
  324. package/src/check-runner.ts +20 -2
  325. package/src/cli.ts +41 -4
  326. package/src/control-journal.ts +26 -0
  327. package/src/daily-dashboard-host.ts +49 -0
  328. package/src/daily-view-input.ts +59 -0
  329. package/src/daily-view-render.ts +44 -0
  330. package/src/daily-view.ts +152 -0
  331. package/src/dashboard-cli.ts +108 -4
  332. package/src/dashboard-harness.ts +37 -0
  333. package/src/dashboard-herdr.ts +7 -2
  334. package/src/dashboard-host-contract.ts +45 -0
  335. package/src/dashboard-host-transport.ts +40 -0
  336. package/src/dashboard-host.ts +191 -0
  337. package/src/dashboard-observation.ts +45 -0
  338. package/src/debrief-contract.ts +127 -0
  339. package/src/debrief-fixture.ts +29 -0
  340. package/src/debrief-host.ts +53 -0
  341. package/src/debrief-render.ts +49 -0
  342. package/src/debrief.ts +198 -0
  343. package/src/delegate-types.ts +2 -0
  344. package/src/delegate.ts +1 -0
  345. package/src/dispatch-control.ts +81 -0
  346. package/src/effect-profile-runtime.ts +46 -0
  347. package/src/effect-profile.ts +129 -0
  348. package/src/execution-retention.ts +230 -0
  349. package/src/experiment-contract.ts +66 -0
  350. package/src/experiment-state.ts +44 -0
  351. package/src/experiment-store.ts +98 -0
  352. package/src/experiment.ts +231 -0
  353. package/src/factory-contract.ts +47 -0
  354. package/src/factory-migration.ts +29 -0
  355. package/src/factory-order.ts +56 -0
  356. package/src/factory-registry.ts +60 -0
  357. package/src/file-lock.ts +47 -11
  358. package/src/herdr-poll.ts +18 -0
  359. package/src/index.ts +32 -0
  360. package/src/intent-application.ts +90 -0
  361. package/src/intent-control.ts +107 -0
  362. package/src/intent-scheduling.ts +14 -0
  363. package/src/ledger-append.ts +72 -0
  364. package/src/ledger.ts +3 -9
  365. package/src/native-session-target.ts +23 -0
  366. package/src/native-session.ts +139 -0
  367. package/src/order-schedule.ts +42 -0
  368. package/src/ordinary-children.ts +59 -0
  369. package/src/producer-ipc-contract.ts +26 -0
  370. package/src/producer-ipc.ts +107 -0
  371. package/src/resource-budget.ts +349 -0
  372. package/src/retention-contract.ts +84 -0
  373. package/src/retention-json.ts +20 -0
  374. package/src/run-child.ts +13 -2
  375. package/src/run-herdr.ts +11 -7
  376. package/src/vendor/adoption.ts +109 -0
  377. package/src/work-command.ts +179 -0
  378. package/src/work-ledger-destination.ts +113 -0
  379. package/src/work-ledger-json.ts +228 -0
  380. package/src/work-ledger-occurrences.ts +99 -0
  381. package/src/work-ledger-projection.ts +262 -0
  382. package/src/work-ledger-snapshot.ts +246 -0
  383. package/src/work-ledger-types.ts +229 -0
  384. package/src/work-ledger-validation.ts +174 -0
  385. package/src/work-ledger.ts +186 -0
@@ -0,0 +1,267 @@
1
+ import { createHash } from "node:crypto";
2
+ import { WorkInputError } from "./work-ledger-types.js";
3
+ export const WORK_EVENT_BYTES = 64 * 1024;
4
+ export const WORK_TEXT_BYTES = 16 * 1024 * 1024;
5
+ export const WORK_RECORDS = 10_000;
6
+ const MAX_DEPTH = 16;
7
+ const MAX_ARRAY = 256;
8
+ const invalid = () => { throw new WorkInputError("WORK_SCHEMA_INVALID"); };
9
+ const limit = () => { throw new WorkInputError("WORK_LIMIT_EXCEEDED"); };
10
+ function unicode(value) {
11
+ // RFC 8785 refuses lone UTF-16 surrogates, including ones decoded from escapes.
12
+ for (let i = 0; i < value.length; i++) {
13
+ const code = value.charCodeAt(i);
14
+ if (code >= 0xd800 && code <= 0xdbff) {
15
+ const next = value.charCodeAt(++i);
16
+ if (!(next >= 0xdc00 && next <= 0xdfff))
17
+ invalid();
18
+ }
19
+ else if (code >= 0xdc00 && code <= 0xdfff)
20
+ invalid();
21
+ }
22
+ return value;
23
+ }
24
+ /** Inspect descriptors rather than serializing: no getters/toJSON or lossy JSON coercion. */
25
+ export function ownWorkFields(value) {
26
+ if (value === null || typeof value !== "object" || Array.isArray(value))
27
+ invalid();
28
+ const prototype = Object.getPrototypeOf(value);
29
+ if (prototype !== Object.prototype && prototype !== null)
30
+ invalid();
31
+ const descriptors = Object.getOwnPropertyDescriptors(value);
32
+ for (const key of Reflect.ownKeys(descriptors)) {
33
+ if (typeof key !== "string")
34
+ return invalid();
35
+ const descriptor = descriptors[key];
36
+ if (!Object.hasOwn(descriptor, "value") || !descriptor.enumerable)
37
+ invalid();
38
+ unicode(key);
39
+ }
40
+ return descriptors;
41
+ }
42
+ /** Detach only the approved JSON value profile, before any serialization or validation use. */
43
+ export function copyWorkJson(value) {
44
+ const ancestors = new Set();
45
+ function copy(v, depth) {
46
+ if (v === null || typeof v === "boolean")
47
+ return v;
48
+ if (typeof v === "string")
49
+ return unicode(v);
50
+ if (typeof v === "number")
51
+ return Number.isSafeInteger(v) ? v : invalid();
52
+ if (typeof v !== "object")
53
+ return invalid();
54
+ if (depth > MAX_DEPTH)
55
+ limit();
56
+ if (ancestors.has(v))
57
+ invalid();
58
+ ancestors.add(v);
59
+ let result;
60
+ if (Array.isArray(v)) {
61
+ if (Object.getPrototypeOf(v) !== Array.prototype)
62
+ invalid();
63
+ if (v.length > MAX_ARRAY)
64
+ limit();
65
+ const fields = Object.getOwnPropertyDescriptors(v);
66
+ if (Reflect.ownKeys(fields).length !== v.length + 1)
67
+ invalid();
68
+ result = [];
69
+ for (let i = 0; i < v.length; i++) {
70
+ const d = fields[String(i)];
71
+ if (!d || !Object.hasOwn(d, "value") || !d.enumerable)
72
+ invalid();
73
+ result.push(copy(d.value, depth + 1));
74
+ }
75
+ }
76
+ else {
77
+ const fields = ownWorkFields(v);
78
+ result = {};
79
+ for (const key of Object.keys(fields)) {
80
+ Object.defineProperty(result, key, { value: copy(fields[key].value, depth + 1), enumerable: true, writable: true, configurable: true });
81
+ }
82
+ }
83
+ ancestors.delete(v);
84
+ return result;
85
+ }
86
+ return copy(value, 1);
87
+ }
88
+ /** Exact decimal arithmetic BEFORE Number conversion, without unbounded exponent allocation. */
89
+ function integerToken(token) {
90
+ const match = /^(-?)(\d+)(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/.exec(token);
91
+ let digits = (match[2] + (match[3] ?? "")).replace(/^0+/, "");
92
+ if (!digits)
93
+ return 0;
94
+ let shift = BigInt(match[4] ?? "0") - BigInt((match[3] ?? "").length);
95
+ const trailing = /0*$/.exec(digits)[0].length;
96
+ digits = digits.slice(0, digits.length - trailing);
97
+ shift += BigInt(trailing);
98
+ if (shift < 0n || BigInt(digits.length) + shift > 16n)
99
+ invalid();
100
+ const exact = BigInt(digits) * (10n ** shift);
101
+ if (exact > BigInt(Number.MAX_SAFE_INTEGER))
102
+ invalid();
103
+ return Number(match[1] === "-" ? -exact : exact);
104
+ }
105
+ function checkMembers(node) {
106
+ if (node.type === "object") {
107
+ const names = new Set();
108
+ for (const [key, child] of node.entries) {
109
+ if (names.has(key))
110
+ throw new WorkInputError("WORK_DUPLICATE_MEMBER");
111
+ names.add(key);
112
+ checkMembers(child);
113
+ }
114
+ }
115
+ else if (node.type === "array")
116
+ node.items.forEach(checkMembers);
117
+ }
118
+ function materialize(node) {
119
+ if (node.type === "number")
120
+ return integerToken(node.token);
121
+ if (node.type === "literal")
122
+ return typeof node.value === "string" ? unicode(node.value) : node.value;
123
+ if (node.type === "array")
124
+ return node.items.map(materialize);
125
+ return Object.fromEntries(node.entries.map(([key, child]) => [unicode(key), materialize(child)]));
126
+ }
127
+ /** Bounded syntax tree: syntax, decoded duplicates, then exact numeric/string profile. */
128
+ export function parseWorkJson(text) {
129
+ if (typeof text !== "string")
130
+ invalid();
131
+ if (Buffer.byteLength(text, "utf8") > WORK_EVENT_BYTES)
132
+ limit();
133
+ let at = 0;
134
+ const syntax = () => { throw new WorkInputError("WORK_JSON_INVALID"); };
135
+ const whitespace = () => { while (at < text.length && /[ \t\r\n]/.test(text[at]))
136
+ at++; };
137
+ function string() {
138
+ const start = at++;
139
+ while (at < text.length) {
140
+ const char = text[at++];
141
+ if (char === '"') {
142
+ // JSON.parse is used ONLY for one lexically delimited string token, never an object.
143
+ return JSON.parse(text.slice(start, at));
144
+ }
145
+ if (char.charCodeAt(0) < 0x20)
146
+ syntax();
147
+ if (char === "\\") {
148
+ const escape = text[at++];
149
+ if (escape === "u") {
150
+ if (!/^[0-9a-fA-F]{4}$/.test(text.slice(at, at + 4)))
151
+ syntax();
152
+ at += 4;
153
+ }
154
+ else if (!escape || !'"\\/bfnrt'.includes(escape))
155
+ syntax();
156
+ }
157
+ }
158
+ return syntax();
159
+ }
160
+ function value(depth) {
161
+ whitespace();
162
+ const char = text[at];
163
+ if (char === '"')
164
+ return { type: "literal", value: string() };
165
+ if (char === "{" || char === "[") {
166
+ if (depth > MAX_DEPTH)
167
+ limit();
168
+ at++;
169
+ whitespace();
170
+ const object = char === "{";
171
+ const end = object ? "}" : "]";
172
+ const entries = [];
173
+ const items = [];
174
+ if (text[at] !== end)
175
+ for (;;) {
176
+ whitespace();
177
+ let key = "";
178
+ if (object) {
179
+ if (text[at] !== '"')
180
+ syntax();
181
+ key = string();
182
+ whitespace();
183
+ if (text[at++] !== ":")
184
+ syntax();
185
+ }
186
+ else if (items.length >= MAX_ARRAY)
187
+ limit();
188
+ const child = value(depth + 1);
189
+ if (object)
190
+ entries.push([key, child]);
191
+ else
192
+ items.push(child);
193
+ whitespace();
194
+ if (text[at] === end)
195
+ break;
196
+ if (text[at++] !== ",")
197
+ syntax();
198
+ }
199
+ at++;
200
+ return object ? { type: "object", entries } : { type: "array", items };
201
+ }
202
+ for (const [token, literal] of [["null", null], ["true", true], ["false", false]]) {
203
+ if (text.startsWith(token, at)) {
204
+ at += token.length;
205
+ return { type: "literal", value: literal };
206
+ }
207
+ }
208
+ const token = /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/.exec(text.slice(at));
209
+ if (!token)
210
+ return syntax();
211
+ at += token[0].length;
212
+ return { type: "number", token: token[0] };
213
+ }
214
+ const result = value(1);
215
+ whitespace();
216
+ if (at !== text.length)
217
+ syntax();
218
+ checkMembers(result);
219
+ return materialize(result);
220
+ }
221
+ function emit(value) {
222
+ if (value === null || typeof value !== "object")
223
+ return JSON.stringify(value);
224
+ if (Array.isArray(value))
225
+ return `[${value.map(emit).join(",")}]`;
226
+ // Emit keys directly: reconstructing a JS object would reorder numeric-looking keys.
227
+ return `{${Object.keys(value).sort().map(key => `${JSON.stringify(key)}:${emit(value[key])}`).join(",")}}`;
228
+ }
229
+ /** RFC 8785 emission restricted to our validated JSON profile; not an archival-byte identity. */
230
+ export function canonicalWorkJson(value) { return emit(copyWorkJson(value)); }
231
+ export function workDigest(value) {
232
+ return createHash("sha256").update(canonicalWorkJson(value), "utf8").digest("hex");
233
+ }
234
+ /** @internal ONLY validated constituents / internally constructed plain results. Output collections
235
+ * are not wire records: they may contain >256 claims, problems, labels, or conflict alternatives.
236
+ * Never use this emitter in place of copyWorkJson/strict ingestion at an input boundary. */
237
+ export function workResultKey(value) { return emit(value); }
238
+ export function sortWorkResults(values) {
239
+ const rows = new Map([...values].map(value => [workResultKey(value), value]));
240
+ return [...rows].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([, value]) => value);
241
+ }
242
+ export function mergeWorkProblems(values) {
243
+ const rows = new Map();
244
+ for (const row of values) {
245
+ const id = workResultKey([row.code, row.reference]), prior = rows.get(id);
246
+ rows.set(id, { ...row, affectedObligations: sortWorkResults([...(prior?.affectedObligations ?? []), ...row.affectedObligations]) });
247
+ }
248
+ return sortWorkResults(rows.values());
249
+ }
250
+ export function mergeWorkConflicts(values) {
251
+ const rows = new Map();
252
+ for (const row of values) {
253
+ const id = workResultKey([row.kind, row.id]), prior = rows.get(id);
254
+ rows.set(id, { ...row, digests: sortWorkResults([...(prior?.digests ?? []), ...row.digests]),
255
+ affectedObligations: sortWorkResults([...(prior?.affectedObligations ?? []), ...row.affectedObligations]) });
256
+ }
257
+ return sortWorkResults(rows.values());
258
+ }
259
+ export function freezeWork(value) {
260
+ if (value !== null && typeof value === "object") {
261
+ for (const child of Object.values(value))
262
+ freezeWork(child);
263
+ Object.freeze(value);
264
+ }
265
+ return value;
266
+ }
267
+ //# sourceMappingURL=work-ledger-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-ledger-json.js","sourceRoot":"","sources":["../src/work-ledger-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ import { type indexWorkLedgerText } from "./work-ledger-projection.ts";
2
+ import type { WorkFrozen, WorkSnapshot, WorkOccurrencePayload } from "./work-ledger-types.ts";
3
+ /** @internal One governed execution identity, many explicit work associations. No acceptance inferred. */
4
+ export declare function foldWorkOccurrences(index: ReturnType<typeof indexWorkLedgerText>, snapshot: WorkFrozen<WorkSnapshot>): {
5
+ runtime: {
6
+ readonly counts: {
7
+ readonly attempts: number;
8
+ readonly variants: number;
9
+ readonly observedCompletedAttempts: number;
10
+ };
11
+ readonly occurrences: readonly {
12
+ readonly event: {
13
+ readonly eventId: string;
14
+ readonly digest: string;
15
+ };
16
+ readonly payload: {
17
+ readonly scope: {
18
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
19
+ readonly id: string;
20
+ readonly revision: number;
21
+ readonly digest: string;
22
+ };
23
+ readonly obligation: {
24
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
25
+ readonly id: string;
26
+ readonly revision: number;
27
+ readonly digest: string;
28
+ };
29
+ readonly executionId: string;
30
+ readonly parentExecutionId: string | null;
31
+ readonly childId: string | null;
32
+ readonly variantId: string | null;
33
+ readonly artifact: {
34
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
35
+ readonly id: string;
36
+ readonly revision: number;
37
+ readonly digest: string;
38
+ } | null;
39
+ readonly provenance: "declared" | "observed";
40
+ readonly state: "unknown" | "starting" | "running" | "completed" | "failed";
41
+ readonly labels: {
42
+ readonly sessionId: string | null;
43
+ readonly branchLeafId: string | null;
44
+ readonly toolCallId: string | null;
45
+ readonly taskId: string | null;
46
+ readonly workspaceId: string | null;
47
+ readonly definitionDigest: string | null;
48
+ readonly configurationDigest: string | null;
49
+ readonly modelId: string | null;
50
+ readonly effortId: string | null;
51
+ };
52
+ };
53
+ }[];
54
+ readonly attempts: readonly {
55
+ readonly executionId: string;
56
+ readonly bindings: readonly {
57
+ readonly scope: {
58
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
59
+ readonly id: string;
60
+ readonly revision: number;
61
+ readonly digest: string;
62
+ };
63
+ readonly obligation: {
64
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
65
+ readonly id: string;
66
+ readonly revision: number;
67
+ readonly digest: string;
68
+ };
69
+ readonly variantIds: readonly string[];
70
+ readonly artifacts: readonly {
71
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
72
+ readonly id: string;
73
+ readonly revision: number;
74
+ readonly digest: string;
75
+ }[];
76
+ }[];
77
+ readonly parentExecutionId: string | null;
78
+ readonly childId: string | null;
79
+ readonly declaredLabels: readonly {
80
+ readonly sessionId: string | null;
81
+ readonly branchLeafId: string | null;
82
+ readonly toolCallId: string | null;
83
+ readonly taskId: string | null;
84
+ readonly workspaceId: string | null;
85
+ readonly definitionDigest: string | null;
86
+ readonly configurationDigest: string | null;
87
+ readonly modelId: string | null;
88
+ readonly effortId: string | null;
89
+ }[];
90
+ readonly observedLabels: readonly {
91
+ readonly sessionId: string | null;
92
+ readonly branchLeafId: string | null;
93
+ readonly toolCallId: string | null;
94
+ readonly taskId: string | null;
95
+ readonly workspaceId: string | null;
96
+ readonly definitionDigest: string | null;
97
+ readonly configurationDigest: string | null;
98
+ readonly modelId: string | null;
99
+ readonly effortId: string | null;
100
+ }[];
101
+ readonly effectiveLabels: {
102
+ readonly sessionId: string | null;
103
+ readonly branchLeafId: string | null;
104
+ readonly toolCallId: string | null;
105
+ readonly taskId: string | null;
106
+ readonly workspaceId: string | null;
107
+ readonly definitionDigest: string | null;
108
+ readonly configurationDigest: string | null;
109
+ readonly modelId: string | null;
110
+ readonly effortId: string | null;
111
+ };
112
+ readonly state: WorkOccurrencePayload["state"] | "conflicted";
113
+ readonly resolution: "resolved" | "unresolved";
114
+ readonly problems: readonly {
115
+ readonly code: import("./work-ledger-types.ts").WorkResolutionCode;
116
+ readonly reference: {
117
+ readonly type: "revision";
118
+ readonly ref: {
119
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
120
+ readonly id: string;
121
+ readonly revision: number;
122
+ readonly digest: string;
123
+ };
124
+ } | {
125
+ readonly type: "event";
126
+ readonly ref: {
127
+ readonly eventId: string;
128
+ readonly digest: string;
129
+ };
130
+ } | {
131
+ readonly type: "snapshot" | "authority" | "artifact-bytes" | "evidence-bytes";
132
+ readonly ref: {
133
+ readonly id: string;
134
+ readonly digest: string;
135
+ };
136
+ } | {
137
+ readonly type: "execution";
138
+ readonly id: string;
139
+ } | null;
140
+ readonly affectedObligations: readonly {
141
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
142
+ readonly id: string;
143
+ readonly revision: number;
144
+ readonly digest: string;
145
+ }[];
146
+ }[];
147
+ }[];
148
+ };
149
+ problems: {
150
+ readonly code: import("./work-ledger-types.ts").WorkResolutionCode;
151
+ readonly reference: {
152
+ readonly type: "revision";
153
+ readonly ref: {
154
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
155
+ readonly id: string;
156
+ readonly revision: number;
157
+ readonly digest: string;
158
+ };
159
+ } | {
160
+ readonly type: "event";
161
+ readonly ref: {
162
+ readonly eventId: string;
163
+ readonly digest: string;
164
+ };
165
+ } | {
166
+ readonly type: "snapshot" | "authority" | "artifact-bytes" | "evidence-bytes";
167
+ readonly ref: {
168
+ readonly id: string;
169
+ readonly digest: string;
170
+ };
171
+ } | {
172
+ readonly type: "execution";
173
+ readonly id: string;
174
+ } | null;
175
+ readonly affectedObligations: readonly {
176
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
177
+ readonly id: string;
178
+ readonly revision: number;
179
+ readonly digest: string;
180
+ }[];
181
+ }[];
182
+ conflicts: {
183
+ readonly kind: "event" | "receipt";
184
+ readonly id: string;
185
+ readonly digests: readonly string[];
186
+ readonly affectedObligations: readonly {
187
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
188
+ readonly id: string;
189
+ readonly revision: number;
190
+ readonly digest: string;
191
+ }[];
192
+ }[];
193
+ eventProblems: Map<string, readonly {
194
+ readonly code: import("./work-ledger-types.ts").WorkResolutionCode;
195
+ readonly reference: {
196
+ readonly type: "revision";
197
+ readonly ref: {
198
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
199
+ readonly id: string;
200
+ readonly revision: number;
201
+ readonly digest: string;
202
+ };
203
+ } | {
204
+ readonly type: "event";
205
+ readonly ref: {
206
+ readonly eventId: string;
207
+ readonly digest: string;
208
+ };
209
+ } | {
210
+ readonly type: "snapshot" | "authority" | "artifact-bytes" | "evidence-bytes";
211
+ readonly ref: {
212
+ readonly id: string;
213
+ readonly digest: string;
214
+ };
215
+ } | {
216
+ readonly type: "execution";
217
+ readonly id: string;
218
+ } | null;
219
+ readonly affectedObligations: readonly {
220
+ readonly kind: import("./work-ledger-types.ts").RevisionKind;
221
+ readonly id: string;
222
+ readonly revision: number;
223
+ readonly digest: string;
224
+ }[];
225
+ }[]>;
226
+ };
227
+ //# sourceMappingURL=work-ledger-occurrences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-ledger-occurrences.d.ts","sourceRoot":"","sources":["../src/work-ledger-occurrences.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,KAAK,EACV,UAAU,EAAE,YAAY,EAAuB,qBAAqB,EAErE,MAAM,wBAAwB,CAAC;AAQhC,0GAA0G;AAC1G,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoFpH"}
@@ -0,0 +1,115 @@
1
+ import { workResultKey as key, sortWorkResults as sorted, mergeWorkProblems } from "./work-ledger-json.js";
2
+ import { workEventConflictSources } from "./work-ledger-projection.js";
3
+ const eventRef = (e) => ({ eventId: e.eventId, digest: e.digest });
4
+ const emptyLabels = () => ({ sessionId: null, branchLeafId: null,
5
+ toolCallId: null, taskId: null, workspaceId: null, definitionDigest: null, configurationDigest: null, modelId: null, effortId: null });
6
+ /** @internal One governed execution identity, many explicit work associations. No acceptance inferred. */
7
+ export function foldWorkOccurrences(index, snapshot) {
8
+ const groups = new Map();
9
+ const effectiveRefs = new Set(index.effectiveEvents.map(e => key({ eventId: e.eventId, digest: e.digest })));
10
+ for (const event of index.candidates)
11
+ if (event.event === "work_occurrence") {
12
+ const group = groups.get(event.payload.executionId) ?? [];
13
+ group.push(event);
14
+ groups.set(event.payload.executionId, group);
15
+ }
16
+ const effective = new Map([...groups].map(([id, group]) => [id, group.filter(e => effectiveRefs.has(key(eventRef(e))))]));
17
+ const selectedObligations = new Set(snapshot.bindings.map(b => key(b.obligation)));
18
+ const selectedJoin = (e) => key(e.payload.scope) === key(snapshot.scope) && selectedObligations.has(key(e.payload.obligation));
19
+ const attempts = [], occurrences = [];
20
+ const allProblems = [], conflicts = [];
21
+ const eventProblems = new Map();
22
+ for (const [executionId, candidates] of groups) {
23
+ const clean = effective.get(executionId);
24
+ const bindings = new Map();
25
+ for (const event of clean.filter(selectedJoin)) {
26
+ const p = event.payload, id = key([p.scope, p.obligation]), prior = bindings.get(id);
27
+ bindings.set(id, { scope: p.scope, obligation: p.obligation,
28
+ variantIds: sorted([...(prior?.variantIds ?? []), ...(p.variantId ? [p.variantId] : [])]),
29
+ artifacts: sorted([...(prior?.artifacts ?? []), ...(p.artifact ? [p.artifact] : [])]),
30
+ });
31
+ }
32
+ const affected = sorted([...bindings.values()].map(b => b.obligation));
33
+ const problems = [];
34
+ const problem = (code, id = executionId) => problems.push({ code, reference: { type: "execution", id }, affectedObligations: affected });
35
+ const badSources = sorted(candidates.flatMap(e => workEventConflictSources(index, e)));
36
+ for (const ref of badSources)
37
+ problems.push({ code: "EVENT_CONFLICT", reference: { type: "event", ref }, affectedObligations: affected });
38
+ if (bindings.size)
39
+ for (const id of sorted(badSources.map(ref => ref.eventId))) {
40
+ conflicts.push({ kind: "event", id, digests: index.conflictingEvents.filter(ref => ref.eventId === id).map(ref => ref.digest), affectedObligations: affected });
41
+ }
42
+ const parents = sorted(clean.map(e => e.payload.parentExecutionId));
43
+ const children = sorted(clean.flatMap(e => e.payload.childId ? [e.payload.childId] : []));
44
+ const identityConflict = parents.length > 1 || children.length > 1;
45
+ if (identityConflict)
46
+ problem("OCCURRENCE_CONFLICT");
47
+ let parentExecutionId = parents.length === 1 ? parents[0] : null;
48
+ let childId = children.length === 1 ? children[0] : null;
49
+ const observed = clean.filter(e => e.payload.provenance === "observed");
50
+ const declaredLabels = sorted(clean.filter(e => e.payload.provenance === "declared").map(e => e.payload.labels));
51
+ const observedLabels = sorted(observed.map(e => e.payload.labels));
52
+ const effectiveLabels = emptyLabels();
53
+ for (const label of Object.keys(effectiveLabels)) {
54
+ const values = sorted(observed.flatMap(e => e.payload.labels[label] === null ? [] : [e.payload.labels[label]]));
55
+ if (values.length > 1)
56
+ problem("OBSERVATION_CONFLICT");
57
+ else
58
+ effectiveLabels[label] = values[0] ?? null;
59
+ }
60
+ const states = new Set(observed.map(e => e.payload.state));
61
+ const terminalConflict = states.has("completed") && states.has("failed");
62
+ if (terminalConflict)
63
+ problem("OBSERVATION_CONFLICT");
64
+ let state = terminalConflict ? "conflicted" : states.has("completed") ? "completed" :
65
+ states.has("failed") ? "failed" : states.has("running") ? "running" : states.has("starting") ? "starting" : "unknown";
66
+ if (identityConflict || badSources.length) {
67
+ state = "conflicted";
68
+ parentExecutionId = null;
69
+ childId = null;
70
+ Object.assign(effectiveLabels, emptyLabels());
71
+ }
72
+ else {
73
+ const seen = new Set([executionId]);
74
+ let parent = parentExecutionId;
75
+ while (parent !== null) {
76
+ if (seen.has(parent)) {
77
+ problem("PARENT_CYCLE", parent);
78
+ break;
79
+ }
80
+ seen.add(parent);
81
+ const bodies = effective.get(parent);
82
+ if (!bodies?.length) {
83
+ problem("PARENT_MISSING", parent);
84
+ break;
85
+ }
86
+ const alternatives = sorted(bodies.map(e => e.payload.parentExecutionId));
87
+ if (alternatives.length !== 1) {
88
+ problem("OCCURRENCE_CONFLICT", parent);
89
+ break;
90
+ }
91
+ parent = alternatives[0];
92
+ }
93
+ if (effectiveLabels.branchLeafId === null)
94
+ problem("BRANCH_UNKNOWN");
95
+ }
96
+ const rowProblems = mergeWorkProblems(problems);
97
+ // Support closure can name an occurrence even when its association is not selected. Keep its
98
+ // global identity diagnostics available internally; only selected joins become public attempts.
99
+ for (const candidate of candidates)
100
+ eventProblems.set(key(eventRef(candidate)), rowProblems);
101
+ if (!bindings.size)
102
+ continue;
103
+ allProblems.push(...rowProblems);
104
+ occurrences.push(...candidates.map(e => ({ event: eventRef(e), payload: e.payload })));
105
+ attempts.push({ executionId, bindings: sorted(bindings.values()), parentExecutionId, childId, declaredLabels,
106
+ observedLabels, effectiveLabels, state, resolution: rowProblems.length ? "unresolved" : "resolved", problems: rowProblems });
107
+ }
108
+ const runtime = { attempts: sorted(attempts), occurrences: sorted(occurrences), counts: {
109
+ attempts: attempts.length,
110
+ variants: new Set(attempts.flatMap(a => a.bindings.flatMap(b => b.variantIds))).size,
111
+ observedCompletedAttempts: attempts.filter(a => a.resolution === "resolved" && a.state === "completed").length,
112
+ } };
113
+ return { runtime, problems: mergeWorkProblems(allProblems), conflicts, eventProblems };
114
+ }
115
+ //# sourceMappingURL=work-ledger-occurrences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-ledger-occurrences.js","sourceRoot":"","sources":["../src/work-ledger-occurrences.ts"],"names":[],"mappings":"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"}