clearotron 0.2.1 → 0.2.3

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 (676) hide show
  1. package/.env.example +82 -1
  2. package/.nvmrc +1 -1
  3. package/CONTRIBUTING.md +3 -3
  4. package/INSTALL.md +64 -58
  5. package/README.md +11 -16
  6. package/THIRD-PARTY-NOTICES.md +1 -1
  7. package/bin/brandowner.mjs +1 -1
  8. package/bin/clearotron.mjs +26 -4
  9. package/bin/connect.mjs +2 -2
  10. package/bin/example.mjs +31 -11
  11. package/bin/grant.mjs +3 -3
  12. package/bin/key.mjs +1 -1
  13. package/bin/onboard.mjs +252 -136
  14. package/bin/start.mjs +176 -33
  15. package/bin/stop.mjs +65 -3
  16. package/bin/update.mjs +7 -7
  17. package/bin/uspto-sync.mjs +1 -1
  18. package/build-info.json +2 -2
  19. package/demo/full-country-search/run/_driver/framework.json +1 -1
  20. package/demo/global-preliminary-search/run/_driver/framework.json +1 -1
  21. package/demo/knockout-search/run/_driver/framework.json +1 -1
  22. package/demo/multi-country-focus-search/run/_driver/framework.json +1 -1
  23. package/docs/DELIVERY.md +6 -2
  24. package/docs/E2E.md +5 -5
  25. package/docs/PORTAL.md +2 -2
  26. package/docs/README.md +5 -4
  27. package/docs/SECURITY.md +17 -0
  28. package/docs/architecture/01-product-overview.md +2 -2
  29. package/docs/architecture/02-architecture.md +2 -2
  30. package/docs/architecture/04-configuration-reference.md +8 -3
  31. package/docs/architecture/05-config-governance.md +52 -5
  32. package/docs/architecture/05-customer-profiles.md +2 -2
  33. package/docs/architecture/06-operations-runbook.md +13 -1
  34. package/docs/architecture/09-security-and-data.md +1 -1
  35. package/docs/configuration.md +4 -3
  36. package/docs/decisions/0004-documentation-structure.md +1 -1
  37. package/driver/CHANGELOG.md +121 -1
  38. package/driver/README.md +2 -2
  39. package/driver/ask-ledger.mjs +3 -3
  40. package/driver/authority-trees.mjs +1 -1
  41. package/driver/call-capture.mjs +1 -1
  42. package/driver/card-frame.mjs +1 -1
  43. package/driver/case-law-ledger.mjs +1 -1
  44. package/driver/claim-liveness.mjs +1 -1
  45. package/driver/common-law-receipts.mjs +2 -2
  46. package/driver/commonlaw-carry.mjs +1 -1
  47. package/driver/config-inventory.mjs +1 -1
  48. package/driver/config-staleness.mjs +1 -1
  49. package/driver/connotation-search.mjs +12 -12
  50. package/driver/contract-audit.mjs +5 -5
  51. package/driver/contract-dictation-registry.mjs +4 -4
  52. package/driver/contract-dictation.mjs +2 -2
  53. package/driver/contract-e3-backlog.mjs +6 -6
  54. package/driver/contract-vocabulary.mjs +3 -3
  55. package/driver/corrections-feedforward.mjs +1 -1
  56. package/driver/coverage-form-io.mjs +2 -2
  57. package/driver/coverage-form.mjs +4 -4
  58. package/driver/coverage-ledger.mjs +3 -3
  59. package/driver/coverage-union.mjs +1 -1
  60. package/driver/declination-call.mjs +35 -3
  61. package/driver/declination-duty.mjs +1 -1
  62. package/driver/deliver-trigger.sh +3 -3
  63. package/driver/deploy-live-run-guard.mjs +6 -2
  64. package/driver/dev-portal.mjs +3 -3
  65. package/driver/disposition-call.mjs +4 -4
  66. package/driver/disposition-tool.mjs +4 -4
  67. package/driver/disposition-union.mjs +2 -2
  68. package/driver/doc-constants.mjs +1 -1
  69. package/driver/door-gates.mjs +2 -2
  70. package/driver/doubt-selection.mjs +2 -2
  71. package/driver/drainer-identity.mjs +1 -1
  72. package/driver/driver.config.mjs +64 -12
  73. package/driver/e2e-rounds.mjs +2 -2
  74. package/driver/effort-model.mjs +2 -2
  75. package/driver/engine/anthropic-agent.mjs +24 -24
  76. package/driver/engine/auth.mjs +1 -1
  77. package/driver/engine/cli-version.mjs +103 -0
  78. package/driver/engine/common.mjs +1 -1
  79. package/driver/engine/deny-authority-write.mjs +1 -1
  80. package/driver/engine/jx-turn.mjs +1 -1
  81. package/driver/engine/mcp/clarivate-server.mjs +1 -1
  82. package/driver/engine/mcp/corsearch-server.mjs +1 -1
  83. package/driver/engine/mcp/declination-server.mjs +1 -1
  84. package/driver/engine/mcp/dispositions-server.mjs +1 -1
  85. package/driver/engine/mcp/euipo-server.mjs +1 -1
  86. package/driver/engine/mcp/fetch-server.mjs +1 -1
  87. package/driver/engine/mcp/free-tier-server.mjs +2 -2
  88. package/driver/engine/mcp/gather-config.mjs +11 -11
  89. package/driver/engine/mcp/perplexity-server.mjs +1 -1
  90. package/driver/engine/mcp/recording-server.mjs +8 -4
  91. package/driver/engine/mcp/signa-server.mjs +1 -1
  92. package/driver/engine/mcp/uspto-local-server.mjs +1 -1
  93. package/driver/engine/openai-agent.mjs +2 -2
  94. package/driver/engine-build.mjs +2 -2
  95. package/driver/enqueue-schema.mjs +10 -10
  96. package/driver/enqueue.mjs +1 -1
  97. package/driver/envelope-settle.mjs +1 -1
  98. package/driver/evidence-claim-invariant.mjs +2 -2
  99. package/driver/feedback-store.mjs +1 -1
  100. package/driver/findings-model.mjs +60 -10
  101. package/driver/flag-snapshot.mjs +20 -0
  102. package/driver/floor-duty.mjs +1 -1
  103. package/driver/form-neighbourhood.mjs +1 -1
  104. package/driver/framework.mjs +2 -2
  105. package/driver/gateway.mjs +45 -23
  106. package/driver/grounds-grammar.mjs +1 -1
  107. package/driver/hit-list.mjs +1 -1
  108. package/driver/jurisdiction-systems.mjs +1 -1
  109. package/driver/jx-lanes.mjs +1 -1
  110. package/driver/jx-units.mjs +1 -1
  111. package/driver/jx.mjs +3 -3
  112. package/driver/knockout-assess-record.mjs +5 -1
  113. package/driver/narrative-refutation-record.mjs +3 -3
  114. package/driver/numeric-setting.mjs +1 -1
  115. package/driver/owner-use-check.mjs +184 -0
  116. package/driver/package.json +4 -4
  117. package/driver/party-facts.mjs +2 -2
  118. package/driver/phase0.mjs +2 -2
  119. package/driver/pipeline-knockout.mjs +52 -4
  120. package/driver/pipeline.mjs +180 -67
  121. package/driver/placement-diff.mjs +2 -2
  122. package/driver/placement-form.mjs +4 -4
  123. package/driver/placement-union.mjs +1 -1
  124. package/driver/plain-register.mjs +120 -0
  125. package/driver/portal-access.mjs +1 -1
  126. package/driver/portal-acks.mjs +1 -1
  127. package/driver/portal-config-view.mjs +42 -3
  128. package/driver/portal-families.mjs +1 -1
  129. package/driver/portal-local-auth.mjs +1 -1
  130. package/driver/portal-report.mjs +7 -7
  131. package/driver/portal-service.mjs +41 -22
  132. package/driver/portal-upstream.mjs +2 -2
  133. package/driver/predelivery-lint.mjs +149 -11
  134. package/driver/prelim-variants-record.mjs +2 -2
  135. package/driver/profile-page.html +11 -3
  136. package/driver/profile-selection.mjs +1 -1
  137. package/driver/profile-service.mjs +6 -6
  138. package/driver/profiles/README.md +3 -3
  139. package/driver/profiles.mjs +145 -13
  140. package/driver/progress.mjs +6 -6
  141. package/driver/provider-usage.mjs +1 -1
  142. package/driver/publish/demo-marking.mjs +1 -1
  143. package/driver/publish/index.mjs +49 -8
  144. package/driver/publish/knockout.mjs +42 -14
  145. package/driver/publish/parse.mjs +4 -4
  146. package/driver/publish/publish-inputs.mjs +2 -2
  147. package/driver/publish/register-presence.mjs +1 -1
  148. package/driver/publish/render-knockout.mjs +646 -144
  149. package/driver/publish/render.mjs +2 -2
  150. package/driver/publish/report-data.mjs +13 -3
  151. package/driver/queue-watch-probe.mjs +1 -1
  152. package/driver/queue-watch-verdict.mjs +1 -1
  153. package/driver/recall-reconciliation.mjs +1 -1
  154. package/driver/recipe-service.mjs +1 -1
  155. package/driver/record-carry.mjs +5 -5
  156. package/driver/recording-agreement.mjs +3 -3
  157. package/driver/reference-score.mjs +7 -7
  158. package/driver/reference-strip-signatures.mjs +20 -0
  159. package/driver/refusal-bound.mjs +3 -3
  160. package/driver/register-availability.mjs +2 -2
  161. package/driver/register-count.mjs +1 -1
  162. package/driver/register-grant-vocabulary.mjs +2 -2
  163. package/driver/register-plan.mjs +8 -8
  164. package/driver/register-records.mjs +2 -2
  165. package/driver/registry-fidelity.mjs +3 -3
  166. package/driver/remedy-accounting.mjs +1 -1
  167. package/driver/repair-composers.mjs +2 -2
  168. package/driver/repair-digest.mjs +3 -3
  169. package/driver/repairs.mjs +6 -6
  170. package/driver/replay-archive.mjs +2 -0
  171. package/driver/report-card-record.mjs +2 -2
  172. package/driver/result-noun-fields.mjs +10 -3
  173. package/driver/run-economics.mjs +2 -2
  174. package/driver/run-integrity.mjs +1 -1
  175. package/driver/runner.mjs +22 -22
  176. package/driver/scope-rules.mjs +1 -1
  177. package/driver/search-policy.mjs +5 -5
  178. package/driver/skeptic-search.mjs +1 -1
  179. package/driver/skills/blind-frame/SKILL.md +2 -2
  180. package/driver/skills/case-law-citation/SKILL.md +2 -2
  181. package/driver/skills/knockout-assess/SKILL.md +94 -4
  182. package/driver/skills/matter-frame/SKILL.md +6 -6
  183. package/driver/skills/matter-frame/watchlist-reference.md +2 -2
  184. package/driver/skills/prelim-common-law/SKILL.md +1 -1
  185. package/driver/skills/prelim-search/SKILL.md +3 -3
  186. package/driver/skills/prelim-search/report-prose.md +82 -0
  187. package/driver/skills/prelim-search/risk-framework-demo.manifest.json +1 -1
  188. package/driver/skills/prelim-search/risk-framework-triage.manifest.json +1 -1
  189. package/driver/skills/prelim-search/risk-framework.manifest.json +1 -1
  190. package/driver/skills/prelim-search/synthesis-rules.md +1 -1
  191. package/driver/skills/prelim-search/template-formatting.md +1 -1
  192. package/driver/skills/prelim-search/templates/email/generic.md +1 -1
  193. package/driver/skills/prelim-search/worked-examples.md +1 -1
  194. package/driver/skills/prelim-variants/SKILL.md +5 -5
  195. package/driver/stage-context.mjs +1 -1
  196. package/driver/stages-knockout.mjs +55 -4
  197. package/driver/stages.mjs +101 -44
  198. package/driver/stray-artifacts.mjs +2 -2
  199. package/driver/suite-census.json +275 -65
  200. package/driver/synthesis-record.mjs +1 -1
  201. package/driver/systemd/clearotron-client-mcp.service +1 -1
  202. package/driver/systemd/clearotron-portal.service +1 -1
  203. package/driver/systemd/render-units.mjs +1 -1
  204. package/driver/tokens.mjs +1 -1
  205. package/driver/tool-calls.mjs +1 -1
  206. package/driver/turnaround-bands.mjs +1 -1
  207. package/driver/unit-file-drift.mjs +1 -1
  208. package/driver/unit-inventory.mjs +297 -80
  209. package/driver/unit-state-verdict.mjs +20 -12
  210. package/driver/verify-knockout.mjs +10 -2
  211. package/driver/verify.mjs +13 -13
  212. package/driver/whatif-memo-run.mjs +72 -9
  213. package/driver/whatif-memo.mjs +19 -1
  214. package/driver/whatif-queue.mjs +1 -1
  215. package/driver/whatif-worker.mjs +1 -1
  216. package/examples/README.md +2 -2
  217. package/examples/grants.example.json +6 -7
  218. package/mcp-server/CHANGELOG.md +6 -0
  219. package/mcp-server/README.md +3 -3
  220. package/mcp-server/http-server.mjs +44 -1
  221. package/mcp-server/key-socket.mjs +184 -0
  222. package/mcp-server/lib/audit-view.mjs +69 -2
  223. package/mcp-server/lib/brief.mjs +15 -0
  224. package/mcp-server/lib/driver.mjs +7 -1
  225. package/mcp-server/lib/events.mjs +1 -1
  226. package/mcp-server/lib/http-handler.mjs +1 -1
  227. package/mcp-server/lib/knockout.mjs +435 -0
  228. package/mcp-server/lib/ops.mjs +4 -4
  229. package/mcp-server/lib/options.mjs +1 -1
  230. package/mcp-server/lib/plan.mjs +1 -1
  231. package/mcp-server/lib/runs.mjs +1 -1
  232. package/mcp-server/lib/scrub.mjs +2 -2
  233. package/mcp-server/lib/whatif.mjs +5 -5
  234. package/mcp-server/mint-token.mjs +1 -1
  235. package/mcp-server/package.json +2 -2
  236. package/mcp-server/packs/ops/EXAMPLES.md +2 -2
  237. package/mcp-server/server.mjs +77 -12
  238. package/package.json +30 -12
  239. package/portal-ui/dist/assets/{index-Ct3iQtZ2.css → index-1ziUJX1E.css} +43 -2
  240. package/portal-ui/dist/assets/{index-BUGgiYtF.js → index-CEYvXdqH.js} +226 -49
  241. package/portal-ui/dist/index.html +2 -2
  242. package/portal-ui/package.json +1 -1
  243. package/providers/_shared/enumerate.mjs +1 -1
  244. package/providers/_shared/ledger-path.mjs +3 -3
  245. package/providers/_shared/ledger.mjs +1 -1
  246. package/providers/_shared/result-shape.mjs +3 -3
  247. package/providers/_shared/term-shape.mjs +2 -2
  248. package/providers/corsearch/src/core.js +1 -1
  249. package/providers/jx-subclass/BUILDING.md +1 -1
  250. package/providers/oauth-mcp-bridge/CHANGELOG.md +6 -0
  251. package/providers/oauth-mcp-bridge/package.json +1 -1
  252. package/providers/oauth-mcp-bridge/stdin-guard.mjs +2 -2
  253. package/providers/uspto-local/src/index-store.js +2 -2
  254. package/scripts/README.md +1 -1
  255. package/scripts/added-reference-check.mjs +29 -1
  256. package/scripts/authority-boundary-probe.mjs +1 -1
  257. package/scripts/backfill-started-at.mjs +1 -1
  258. package/scripts/citation-line-check.mjs +124 -5
  259. package/scripts/compare.mjs +2 -2
  260. package/scripts/contract-dictation-scan.mjs +2 -2
  261. package/scripts/dead-names.mjs +1 -1
  262. package/scripts/drain-preflight.mjs +5 -5
  263. package/scripts/e2e-unread-terminals.mjs +1 -1
  264. package/scripts/e2e.mjs +8 -8
  265. package/scripts/env-audit.mjs +7 -7
  266. package/scripts/env-classify.mjs +206 -18
  267. package/scripts/freeze-example-run.mjs +3 -3
  268. package/scripts/head-arrived-gated.mjs +1 -1
  269. package/scripts/headless-page.mjs +51 -2
  270. package/scripts/live-surface-check.mjs +129 -19
  271. package/scripts/main-health.mjs +1 -1
  272. package/scripts/merge-presence-check.mjs +3 -3
  273. package/scripts/mint-suite-census.mjs +6 -6
  274. package/scripts/nightly-notice.mjs +1 -3
  275. package/scripts/preinstall-node-check.mjs +24 -0
  276. package/scripts/reconcile-runs.mjs +1 -1
  277. package/scripts/release-await-cut.mjs +6 -4
  278. package/scripts/release-version-pr-checks.mjs +1 -1
  279. package/scripts/release-version.mjs +2 -2
  280. package/scripts/render-check.mjs +66 -7
  281. package/scripts/report-frame-check.mjs +1 -1
  282. package/scripts/report-screenshot.mjs +1 -1
  283. package/scripts/revisit-render-check.mjs +1 -1
  284. package/scripts/score.mjs +4 -4
  285. package/scripts/strip-tracker-citations.mjs +139 -0
  286. package/scripts/test-run.mjs +19 -3
  287. package/scripts/third-party-notices.mjs +3 -3
  288. package/scripts/travelling-predicates.mjs +3 -3
  289. package/scripts/unexecuted-asserts.mjs +2 -2
  290. package/scripts/verify-publishable.mjs +2 -2
  291. package/scripts/write-up-form-census.mjs +1 -1
  292. package/shared/access-audience.mjs +1 -1
  293. package/shared/anon-overlay.mjs +3 -3
  294. package/shared/brand.mjs +13 -13
  295. package/shared/citation-scan.mjs +1 -1
  296. package/shared/client-door.mjs +7 -7
  297. package/shared/customer-store.mjs +1 -1
  298. package/shared/driver-dir.mjs +1 -1
  299. package/shared/env-aliases.mjs +0 -48
  300. package/shared/env-local.mjs +1 -1
  301. package/shared/identifier-scan.mjs +3 -3
  302. package/shared/invocation.mjs +29 -1
  303. package/shared/names-in-force.mjs +4 -0
  304. package/shared/node-floor.mjs +97 -0
  305. package/shared/product-owned-names.mjs +1 -1
  306. package/shared/register-selection.mjs +1 -1
  307. package/shared/scope.mjs +5 -5
  308. package/shared/server-units.mjs +4 -4
  309. package/shared/staff-domain.mjs +154 -0
  310. package/shared/store-in-repo.mjs +25 -4
  311. package/shared/suite-census.mjs +4 -4
  312. package/shared/tty-style.mjs +1 -1
  313. package/shared/uspto-index-size.mjs +1 -1
  314. package/shared/vacuous-pass.mjs +1 -1
  315. package/skills/clearotron-account/SKILL.md +42 -13
  316. package/skills/clearotron-ops/SKILL.md +1 -1
  317. package/driver/recipes/README.md +0 -49
  318. package/driver/skills/prelim-search/risk-framework-aurora.manifest.json +0 -19
  319. package/driver/skills/prelim-search/risk-framework-aurora.md +0 -77
  320. package/driver/skills/prelim-search/risk-framework-zephyr.manifest.json +0 -14
  321. package/driver/skills/prelim-search/risk-framework-zephyr.md +0 -33
  322. package/driver/skills/prelim-search/worked-examples-aurora.md +0 -10
  323. package/driver/skills/prelim-search/worked-examples-zephyr.md +0 -10
  324. package/driver/systemd/prelim-driver.path +0 -69
  325. package/driver/systemd/prelim-driver.service +0 -86
  326. package/driver/systemd/prelim-driver.timer +0 -14
  327. package/driver/systemd/prelim-outbox.path +0 -27
  328. package/driver/systemd/prelim-outbox.service +0 -37
  329. package/driver/systemd/prelim-outbox.timer +0 -21
  330. package/node_modules/exceljs/README_zh.md +0 -2878
  331. package/node_modules/exceljs/dist/LICENSE +0 -22
  332. package/node_modules/exceljs/dist/es5/csv/csv.js +0 -182
  333. package/node_modules/exceljs/dist/es5/csv/csv.js.map +0 -1
  334. package/node_modules/exceljs/dist/es5/csv/line-buffer.js +0 -68
  335. package/node_modules/exceljs/dist/es5/csv/line-buffer.js.map +0 -1
  336. package/node_modules/exceljs/dist/es5/csv/stream-converter.js +0 -110
  337. package/node_modules/exceljs/dist/es5/csv/stream-converter.js.map +0 -1
  338. package/node_modules/exceljs/dist/es5/doc/anchor.js +0 -73
  339. package/node_modules/exceljs/dist/es5/doc/anchor.js.map +0 -1
  340. package/node_modules/exceljs/dist/es5/doc/cell.js +0 -961
  341. package/node_modules/exceljs/dist/es5/doc/cell.js.map +0 -1
  342. package/node_modules/exceljs/dist/es5/doc/column.js +0 -274
  343. package/node_modules/exceljs/dist/es5/doc/column.js.map +0 -1
  344. package/node_modules/exceljs/dist/es5/doc/data-validations.js +0 -18
  345. package/node_modules/exceljs/dist/es5/doc/data-validations.js.map +0 -1
  346. package/node_modules/exceljs/dist/es5/doc/defined-names.js +0 -173
  347. package/node_modules/exceljs/dist/es5/doc/defined-names.js.map +0 -1
  348. package/node_modules/exceljs/dist/es5/doc/enums.js +0 -49
  349. package/node_modules/exceljs/dist/es5/doc/enums.js.map +0 -1
  350. package/node_modules/exceljs/dist/es5/doc/image.js +0 -69
  351. package/node_modules/exceljs/dist/es5/doc/image.js.map +0 -1
  352. package/node_modules/exceljs/dist/es5/doc/modelcontainer.js +0 -16
  353. package/node_modules/exceljs/dist/es5/doc/modelcontainer.js.map +0 -1
  354. package/node_modules/exceljs/dist/es5/doc/note.js +0 -64
  355. package/node_modules/exceljs/dist/es5/doc/note.js.map +0 -1
  356. package/node_modules/exceljs/dist/es5/doc/range.js +0 -229
  357. package/node_modules/exceljs/dist/es5/doc/range.js.map +0 -1
  358. package/node_modules/exceljs/dist/es5/doc/row.js +0 -382
  359. package/node_modules/exceljs/dist/es5/doc/row.js.map +0 -1
  360. package/node_modules/exceljs/dist/es5/doc/table.js +0 -443
  361. package/node_modules/exceljs/dist/es5/doc/table.js.map +0 -1
  362. package/node_modules/exceljs/dist/es5/doc/workbook.js +0 -202
  363. package/node_modules/exceljs/dist/es5/doc/workbook.js.map +0 -1
  364. package/node_modules/exceljs/dist/es5/doc/worksheet.js +0 -900
  365. package/node_modules/exceljs/dist/es5/doc/worksheet.js.map +0 -1
  366. package/node_modules/exceljs/dist/es5/exceljs.bare.js +0 -14
  367. package/node_modules/exceljs/dist/es5/exceljs.bare.js.map +0 -1
  368. package/node_modules/exceljs/dist/es5/exceljs.browser.js +0 -36
  369. package/node_modules/exceljs/dist/es5/exceljs.browser.js.map +0 -1
  370. package/node_modules/exceljs/dist/es5/exceljs.nodejs.js +0 -15
  371. package/node_modules/exceljs/dist/es5/exceljs.nodejs.js.map +0 -1
  372. package/node_modules/exceljs/dist/es5/index.js +0 -15
  373. package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js +0 -90
  374. package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js.map +0 -1
  375. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js +0 -94
  376. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js.map +0 -1
  377. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js +0 -94
  378. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js.map +0 -1
  379. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js +0 -362
  380. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js.map +0 -1
  381. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js +0 -347
  382. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js.map +0 -1
  383. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js +0 -392
  384. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js.map +0 -1
  385. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js +0 -652
  386. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js.map +0 -1
  387. package/node_modules/exceljs/dist/es5/utils/auto-drain.js +0 -18
  388. package/node_modules/exceljs/dist/es5/utils/auto-drain.js.map +0 -1
  389. package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js +0 -15
  390. package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js.map +0 -1
  391. package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js +0 -18
  392. package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js.map +0 -1
  393. package/node_modules/exceljs/dist/es5/utils/cell-matrix.js +0 -149
  394. package/node_modules/exceljs/dist/es5/utils/cell-matrix.js.map +0 -1
  395. package/node_modules/exceljs/dist/es5/utils/col-cache.js +0 -258
  396. package/node_modules/exceljs/dist/es5/utils/col-cache.js.map +0 -1
  397. package/node_modules/exceljs/dist/es5/utils/copy-style.js +0 -43
  398. package/node_modules/exceljs/dist/es5/utils/copy-style.js.map +0 -1
  399. package/node_modules/exceljs/dist/es5/utils/encryptor.js +0 -58
  400. package/node_modules/exceljs/dist/es5/utils/encryptor.js.map +0 -1
  401. package/node_modules/exceljs/dist/es5/utils/iterate-stream.js +0 -46
  402. package/node_modules/exceljs/dist/es5/utils/iterate-stream.js.map +0 -1
  403. package/node_modules/exceljs/dist/es5/utils/parse-sax.js +0 -47
  404. package/node_modules/exceljs/dist/es5/utils/parse-sax.js.map +0 -1
  405. package/node_modules/exceljs/dist/es5/utils/shared-formula.js +0 -42
  406. package/node_modules/exceljs/dist/es5/utils/shared-formula.js.map +0 -1
  407. package/node_modules/exceljs/dist/es5/utils/shared-strings.js +0 -32
  408. package/node_modules/exceljs/dist/es5/utils/shared-strings.js.map +0 -1
  409. package/node_modules/exceljs/dist/es5/utils/stream-base64.js +0 -66
  410. package/node_modules/exceljs/dist/es5/utils/stream-base64.js.map +0 -1
  411. package/node_modules/exceljs/dist/es5/utils/stream-buf.js +0 -343
  412. package/node_modules/exceljs/dist/es5/utils/stream-buf.js.map +0 -1
  413. package/node_modules/exceljs/dist/es5/utils/string-buf.js +0 -73
  414. package/node_modules/exceljs/dist/es5/utils/string-buf.js.map +0 -1
  415. package/node_modules/exceljs/dist/es5/utils/string-builder.js +0 -32
  416. package/node_modules/exceljs/dist/es5/utils/string-builder.js.map +0 -1
  417. package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js +0 -61
  418. package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js.map +0 -1
  419. package/node_modules/exceljs/dist/es5/utils/typed-stack.js +0 -23
  420. package/node_modules/exceljs/dist/es5/utils/typed-stack.js.map +0 -1
  421. package/node_modules/exceljs/dist/es5/utils/under-dash.js +0 -168
  422. package/node_modules/exceljs/dist/es5/utils/under-dash.js.map +0 -1
  423. package/node_modules/exceljs/dist/es5/utils/utils.js +0 -171
  424. package/node_modules/exceljs/dist/es5/utils/utils.js.map +0 -1
  425. package/node_modules/exceljs/dist/es5/utils/xml-stream.js +0 -151
  426. package/node_modules/exceljs/dist/es5/utils/xml-stream.js.map +0 -1
  427. package/node_modules/exceljs/dist/es5/utils/zip-stream.js +0 -79
  428. package/node_modules/exceljs/dist/es5/utils/zip-stream.js.map +0 -1
  429. package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js +0 -230
  430. package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js.map +0 -1
  431. package/node_modules/exceljs/dist/es5/xlsx/rel-type.js +0 -18
  432. package/node_modules/exceljs/dist/es5/xlsx/rel-type.js.map +0 -1
  433. package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js +0 -139
  434. package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js.map +0 -1
  435. package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js +0 -85
  436. package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js.map +0 -1
  437. package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js +0 -32
  438. package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js.map +0 -1
  439. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +0 -24
  440. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +0 -1
  441. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js +0 -27
  442. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +0 -1
  443. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js +0 -51
  444. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +0 -1
  445. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js +0 -234
  446. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js.map +0 -1
  447. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js +0 -103
  448. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js.map +0 -1
  449. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js +0 -76
  450. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js.map +0 -1
  451. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +0 -35
  452. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +0 -1
  453. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +0 -32
  454. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +0 -1
  455. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +0 -53
  456. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +0 -1
  457. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +0 -97
  458. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +0 -1
  459. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js +0 -107
  460. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +0 -1
  461. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js +0 -92
  462. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +0 -1
  463. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +0 -61
  464. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +0 -1
  465. package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js +0 -51
  466. package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js.map +0 -1
  467. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +0 -30
  468. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +0 -1
  469. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +0 -27
  470. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +0 -1
  471. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js +0 -93
  472. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js.map +0 -1
  473. package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js +0 -112
  474. package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js.map +0 -1
  475. package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js +0 -158
  476. package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js.map +0 -1
  477. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js +0 -23
  478. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js.map +0 -1
  479. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js +0 -65
  480. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js.map +0 -1
  481. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +0 -47
  482. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +0 -1
  483. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +0 -61
  484. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +0 -1
  485. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js +0 -40
  486. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js.map +0 -1
  487. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +0 -35
  488. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +0 -1
  489. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +0 -62
  490. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +0 -1
  491. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js +0 -82
  492. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +0 -1
  493. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js +0 -98
  494. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +0 -1
  495. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +0 -40
  496. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +0 -1
  497. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js +0 -38
  498. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js.map +0 -1
  499. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +0 -38
  500. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +0 -1
  501. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +0 -59
  502. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +0 -1
  503. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +0 -63
  504. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +0 -1
  505. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js +0 -67
  506. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js.map +0 -1
  507. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js +0 -30
  508. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js.map +0 -1
  509. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +0 -62
  510. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +0 -1
  511. package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js +0 -91
  512. package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js.map +0 -1
  513. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +0 -40
  514. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +0 -1
  515. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js +0 -451
  516. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js.map +0 -1
  517. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +0 -275
  518. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +0 -1
  519. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +0 -25
  520. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +0 -1
  521. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +0 -38
  522. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +0 -1
  523. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +0 -45
  524. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +0 -1
  525. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +0 -77
  526. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +0 -1
  527. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +0 -42
  528. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +0 -1
  529. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +0 -71
  530. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +0 -1
  531. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +0 -22
  532. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +0 -1
  533. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +0 -43
  534. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +0 -1
  535. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +0 -28
  536. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +0 -1
  537. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +0 -88
  538. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +0 -1
  539. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +0 -38
  540. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +0 -1
  541. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +0 -52
  542. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +0 -1
  543. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +0 -43
  544. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +0 -1
  545. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +0 -75
  546. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +0 -1
  547. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +0 -22
  548. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +0 -1
  549. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +0 -66
  550. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +0 -1
  551. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +0 -22
  552. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +0 -1
  553. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js +0 -78
  554. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js.map +0 -1
  555. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js +0 -247
  556. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +0 -1
  557. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js +0 -28
  558. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +0 -1
  559. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js +0 -32
  560. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +0 -1
  561. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +0 -69
  562. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +0 -1
  563. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js +0 -126
  564. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +0 -1
  565. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +0 -50
  566. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +0 -1
  567. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +0 -26
  568. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +0 -1
  569. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js +0 -52
  570. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js.map +0 -1
  571. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +0 -35
  572. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +0 -1
  573. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +0 -24
  574. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +0 -1
  575. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js +0 -46
  576. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +0 -1
  577. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +0 -32
  578. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +0 -1
  579. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js +0 -99
  580. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +0 -1
  581. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js +0 -32
  582. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js.map +0 -1
  583. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js +0 -45
  584. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +0 -1
  585. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +0 -37
  586. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +0 -1
  587. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js +0 -128
  588. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js.map +0 -1
  589. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +0 -51
  590. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +0 -1
  591. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +0 -83
  592. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +0 -1
  593. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +0 -84
  594. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +0 -1
  595. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +0 -190
  596. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +0 -1
  597. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js +0 -32
  598. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +0 -1
  599. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js +0 -513
  600. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +0 -1
  601. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js +0 -27
  602. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js.map +0 -1
  603. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js +0 -58
  604. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js.map +0 -1
  605. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js +0 -47
  606. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js.map +0 -1
  607. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js +0 -53
  608. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js.map +0 -1
  609. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js +0 -47
  610. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js.map +0 -1
  611. package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js +0 -61
  612. package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js.map +0 -1
  613. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +0 -98
  614. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +0 -1
  615. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js +0 -92
  616. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +0 -1
  617. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js +0 -99
  618. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +0 -1
  619. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js +0 -114
  620. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +0 -1
  621. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js +0 -39
  622. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js.map +0 -1
  623. package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js +0 -139
  624. package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js.map +0 -1
  625. package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js +0 -185
  626. package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js.map +0 -1
  627. package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js +0 -66
  628. package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js.map +0 -1
  629. package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js +0 -106
  630. package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js.map +0 -1
  631. package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js +0 -308
  632. package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js.map +0 -1
  633. package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js +0 -175
  634. package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js.map +0 -1
  635. package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js +0 -59
  636. package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js.map +0 -1
  637. package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js +0 -53
  638. package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js.map +0 -1
  639. package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js +0 -118
  640. package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js.map +0 -1
  641. package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js +0 -612
  642. package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js.map +0 -1
  643. package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js +0 -46
  644. package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js.map +0 -1
  645. package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js +0 -75
  646. package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +0 -1
  647. package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js +0 -30
  648. package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +0 -1
  649. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js +0 -89
  650. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js.map +0 -1
  651. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js +0 -28
  652. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js.map +0 -1
  653. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js +0 -42
  654. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js.map +0 -1
  655. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js +0 -40
  656. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +0 -1
  657. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js +0 -123
  658. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js.map +0 -1
  659. package/node_modules/exceljs/dist/es5/xlsx/xlsx.js +0 -697
  660. package/node_modules/exceljs/dist/es5/xlsx/xlsx.js.map +0 -1
  661. package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js +0 -5
  662. package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js.map +0 -1
  663. package/node_modules/exceljs/dist/exceljs.bare.js +0 -55253
  664. package/node_modules/exceljs/dist/exceljs.bare.js.map +0 -761
  665. package/node_modules/exceljs/dist/exceljs.bare.min.js +0 -45
  666. package/node_modules/exceljs/dist/exceljs.bare.min.js.map +0 -1
  667. package/node_modules/exceljs/dist/exceljs.js +0 -59900
  668. package/node_modules/exceljs/dist/exceljs.js.map +0 -1083
  669. package/node_modules/exceljs/dist/exceljs.min.js +0 -45
  670. package/node_modules/exceljs/dist/exceljs.min.js.map +0 -1
  671. package/scripts/ai-page-render-check.mjs +0 -532
  672. package/scripts/clearances-render-check.mjs +0 -480
  673. package/scripts/composer-render-check.mjs +0 -1027
  674. package/scripts/deploy-test.sh +0 -309
  675. package/scripts/home-render-check.mjs +0 -526
  676. package/scripts/portal-lifecycle-check.mjs +0 -639
@@ -301,7 +301,7 @@ async function loadOutbox(){const r=await(await fetch("/dev/outbox")).json();
301
301
  let REG=null;
302
302
  const esc=(s)=>String(s??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;");
303
303
  async function loadSearches(){
304
- const cust=$("#s_cust").value.trim()||"aurora";
304
+ const cust=$("#s_cust").value.trim()||"demo-brand-owner";
305
305
  try{
306
306
  const all=await(await fetch("/recipes")).json();
307
307
  if(all.error){$("#searches").innerHTML='<span class="err">'+esc(all.error)+'</span>';return;}
@@ -320,7 +320,7 @@ async function loadSearches(){
320
320
  function useProduct(k){const f=$("#f");f.product.value=k;$("#f_recipe").value="";f.mark.focus();}
321
321
  function useRecipe(cust,slug){const f=$("#f");f.product.value="";$("#f_recipe").value=slug;f.profile.value=cust;f.mark.focus();}
322
322
  async function composeSubmit(save){
323
- const cust=$("#s_cust").value.trim()||"aurora";
323
+ const cust=$("#s_cust").value.trim()||"demo-brand-owner";
324
324
  const fd=new FormData($("#sf"));
325
325
  const recipe={label:(fd.get("label")||"").trim(),base:fd.get("base")};
326
326
  if(fd.get("registerProbe")!=null)recipe.components={registerProbe:true};
@@ -373,7 +373,7 @@ export function startPortal({ poolRoot = null, port = 18899, host = "127.0.0.1",
373
373
  if (url.pathname === "/dev/enqueue" && req.method === "POST") {
374
374
  let body;
375
375
  try { body = await readJsonBody(req); } catch (e) { return sendJson(res, 400, { ok: false, error: e.message }); }
376
- // `searchLevel` IS REFUSED, NOT DROPPED. This form offered a "Search level" menu (prelim · Depth 4
376
+ // `searchLevel` IS REFUSED, NOT DROPPED. This form offered a "Search level" menu (clearotron · Depth 4
377
377
  // / knockout · Depth 1) and posted the field to an assembler that stopped reading it, so picking
378
378
  // "knockout" enqueued a job naming no product at all and ran whatever the account default or the
379
379
  // request's own territories named — a silent product substitution at a live door, from a control
@@ -145,7 +145,7 @@ export const CALL_REFUSALS = Object.freeze([
145
145
  "obstacle_absent", // an obstacle was claimed with nothing said about what blocks the proof
146
146
  ]);
147
147
 
148
- // The proof-of-reading arms, and ONLY those. 's obstacle waives this duty and no other, so this set
148
+ // The proof-of-reading arms, and ONLY those. That obstacle waives this duty and no other, so this set
149
149
  // is the exact boundary between "you have not proved you read it" and "you have not judged it" — derived
150
150
  // by prefix from the vocabulary above rather than retyped, so a new evidence arm joins it automatically
151
151
  // and a new judgment arm cannot wander in.
@@ -183,7 +183,7 @@ export const RETIRED_CALL_REFUSALS = Object.freeze([
183
183
  // and it must never appear in the same bucket, because the two demand opposite responses — one says
184
184
  // "change your answer", the other says "stop asking, it is ours".
185
185
  //
186
- // 's leading unproven hypothesis lives here. The accumulator's rows and candidates are REGENERATED
186
+ // That leading unproven hypothesis lives here. The accumulator's rows and candidates are REGENERATED
187
187
  // on every pass, and `seatFields` re-resolves an already-resolved row against whatever the current pass
188
188
  // holds (`disposition-union.mjs:98`, which discards `resolveCandidate`'s `state`). If that second
189
189
  // resolution misses, a row the tool accepted lands with an empty receipt and reads as unruled. This
@@ -442,7 +442,7 @@ export function detectRulingDrift(ledger) {
442
442
  *
443
443
  * ── WHY THE TOTAL IS RETURNED TOO ───────────────────────────────────────────────────────────────────
444
444
  *
445
- * 's warning sits in this exact number: filtering it after a split reported
445
+ * That warning sits in this exact number: filtering it after a split reported
446
446
  * `obligationsNeverAddressed: 0` on the run that died owing 75. So the total comes back as its own field
447
447
  * and the two parts must sum to it. Nothing can go to zero without a companion number rising to meet it.
448
448
  *
@@ -822,7 +822,7 @@ export function validateDispositionCall(rows, recorded, { told = null } = {}) {
822
822
  /**
823
823
  * CAN THIS ROW'S EVIDENCE DEMAND EVER BE SATISFIED?
824
824
  *
825
- * — the agreement guard for the `evidence_owed` seam, and it is 's shape one module over. The
825
+ * — the agreement guard for the `evidence_owed` seam, and it is the shape one module over. The
826
826
  * demand (`quote_required`) is SET at form-build against candidates that carried text; the satisfaction is
827
827
  * enforced by `segmentBinding` against the candidate's snippet AS IT IS NOW. Between the two, candidates
828
828
  * regenerate. When they come back without quotable passages the flag survives and its justification does
@@ -19,7 +19,7 @@
19
19
  // decided, which is the thing already in the record, rather than what we were given.
20
20
  //
21
21
  // THE INDEX IS WRITTEN BY THE RECEIVER, NEVER BY THE CONSUMER. This handler writes both the payload and
22
- // the line naming it, in that order, before it validates anything. 's three snapshot sites all
22
+ // the line naming it, in that order, before it validates anything. That three snapshot sites all
23
23
  // discard their return, so no attempt row names its snapshot and correlation is by mtime — which is
24
24
  // precisely how the union discard had to be diagnosed. A consumer-written index can only ever name the
25
25
  // payloads the consumer got to; a call that dies mid-flight writes no index line, and its absence is
@@ -46,7 +46,7 @@ const CALLS_DIR = "disposition-calls";
46
46
  /**
47
47
  * The obligations sidecar — what the seat was TOLD it owed, written when the block was rendered.
48
48
  *
49
- * 's rule, applied to this filename: the path is derived ONCE and imported, never re-derived at the
49
+ * That rule, applied to this filename: the path is derived ONCE and imported, never re-derived at the
50
50
  * other end. perplexity-server.mjs writes this file and this module reads it; two spellings of one name
51
51
  * is the drift cost weeks, and the reader would fail OPEN — it would simply find no file, fall back
52
52
  * to the live derivation, and renumber the seat's page without anyone being told.
@@ -338,7 +338,7 @@ export function outstandingWithAnchors(canonicalRows, formRows) {
338
338
  * Record one typed call. The tool handler's core.
339
339
  *
340
340
  * `spec` is the DRIVER-WRITTEN grid spec — the same file the grid tool was given. The seat names no path
341
- * of its own: 's rule is that the path is the driver's, taken from the spec it wrote, because two
341
+ * of its own: the rule is that the path is the driver's, taken from the spec it wrote, because two
342
342
  * derivations of one filename is the drift that cost weeks.
343
343
  */
344
344
  export function recordDispositions(spec, received, { now = () => new Date().toISOString() } = {}) {
@@ -415,7 +415,7 @@ export function recordDispositions(spec, received, { now = () => new Date().toIS
415
415
  // accumulator" are two different facts and nothing compared them.
416
416
  //
417
417
  // This compares them, per call, and records any disagreement as OURS. It is deliberately not a throw:
418
- // 's silent-drop hypothesis is unproven, and an instrument that crashes the run it is measuring
418
+ // That silent-drop hypothesis is unproven, and an instrument that crashes the run it is measuring
419
419
  // cannot measure it. If the count is always zero the hypothesis is dead and we will be able to say so
420
420
  // from the artifact — which is the point of building it before the cure.
421
421
  const landed = new Map((Array.isArray(u.form?.rows) ? u.form.rows : [])
@@ -21,7 +21,7 @@
21
21
  // definition of "ruled" and — since the review of this build — no row LOOKUP either. `obligationRows`,
22
22
  // `formRowFinder` and `isRuled` all come from connotation-search.mjs, the same code the GATE
23
23
  // judges with. A union that preserved a ruling the gate would refuse, or dropped one it would accept,
24
- // would make the outstanding count mean two different things in two places, which is 's defect
24
+ // would make the outstanding count mean two different things in two places, which is the defect
25
25
  // exactly: one calculation running twice, silently disagreeing, both copies looking correct. The lookup
26
26
  // had been written out twice — here and in the gate — and both copies carried the same punctuation defect.
27
27
 
@@ -160,7 +160,7 @@ export function unionDispositionForm(prior, submitted, ob, { half = null, genera
160
160
  const findSubmitted = formRowFinder(submitted, form.rows);
161
161
  // — a park is STICKY, for the same reason a ruling is. This module exists because the outstanding
162
162
  // count churned instead of shrinking (see the header): a park that could lift would let the count rise
163
- // again, which is 's defect in new clothes. So the prior form's park is authority, and `parkedIds`
163
+ // again, which is the defect in new clothes. So the prior form's park is authority, and `parkedIds`
164
164
  // only ever ADDS.
165
165
  const newlyParked = new Set((parkedIds ?? []).map((x) => String(x ?? "").trim()).filter(Boolean));
166
166
  let ruled = 0, carried = 0, parked = 0;
@@ -350,7 +350,7 @@ export const DOC_CONSTANTS = [
350
350
  doc: "providers/uspto-local/README.md",
351
351
  pattern: /last successful sync goes past (\d+) hours/,
352
352
  },
353
- // The same figure, twice in the same file — 's shape, and the reason each occurrence is a row.
353
+ // The same figure, twice in the same file — the shape, and the reason each occurrence is a row.
354
354
  {
355
355
  constant: "FRESHNESS_HOURS.sync",
356
356
  source: { file: "providers/uspto-local/src/index-store.js", symbol: "FRESHNESS_HOURS.sync" },
@@ -97,7 +97,7 @@ export function gateResolvedRequest({ job = null, profile = null, resolved = nul
97
97
  // A resolution that could not be taken is not a refusal — see the fail-open note in the header.
98
98
  if (!resolved) return out;
99
99
  // A CLARIFY IS RELAYED VERBATIM. It is already an actionable sentence naming the selector that could
100
- // not be honoured ("product \"prelim\" names no search we offer — one of: … (or omit it for the
100
+ // not be honoured ("product \"clearotron\" names no search we offer — one of: … (or omit it for the
101
101
  // account's default)"), and flattening it into a cause would lose the remedy clause.
102
102
  if (resolved.clarify) { out.errors.push(resolved.clarify); return out; }
103
103
  // deliveryRoute "portal" — DECLARED but not BUILT. It validates shape-wise, has no consumer (the
@@ -133,7 +133,7 @@ export function doorGates(job, opts = {}) {
133
133
  return { ...r, ...gateResolvedRequest({ job, ...r }, opts) };
134
134
  }
135
135
 
136
- // ── WHY tracker issue 216'S REFUSAL IS NOT ALSO A DOOR GATE ─────────────────────────────────────────
136
+ // ── WHY THE CONFIGURED-TO-SEARCH REFUSAL IS NOT ALSO A DOOR GATE ─────────────────────────────────────────
137
137
  //
138
138
  // It was, briefly, and it was removed with a measurement rather than an opinion. Adding "is this box
139
139
  // configured to search at all" here reddened `driver/test/doors-agree.test.mjs` — nineteen arms green
@@ -2,7 +2,7 @@
2
2
  // Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
3
3
  // doubt-selection.mjs — which OPEN doubts the closure seat is asked about, chosen by the DRIVER.
4
4
  //
5
- // 's architecture, one lane over from profile-selection.mjs: "prefer driver selection wherever the
5
+ // That architecture, one lane over from profile-selection.mjs: "prefer driver selection wherever the
6
6
  // key precedes the dispatch." The key is on the doubt before doubt-closure is dispatched, so there is
7
7
  // nothing here for a directive to ask a seat to judge — the driver lists the ids, and a doubt it does
8
8
  // not list is never mentioned.
@@ -68,7 +68,7 @@ export function keptTiersFor(doubtClosure) {
68
68
  * WHICH OF THE THREE SILENCES THIS IS. `keptTiersFor` returns null for `every-doubt` AND for a word it
69
69
  * does not know, deliberately — a typo must not silently drop every keyed doubt. But that makes the two
70
70
  * indistinguishable in the run's event: a misspelt cut records exactly what the shipped cut records, and
71
- * the product row looks graded while the dispatch is not. 's arm catches a bad word on the ROW; this
71
+ * the product row looks graded while the dispatch is not. That arm catches a bad word on the ROW; this
72
72
  * is the runtime face of the same question, on the run that actually happened.
73
73
  *
74
74
  * `hasOwnProperty` rather than a truthiness test on the lookup, because `TIER_CUTS[w]` reaches the
@@ -34,7 +34,7 @@
34
34
  import { readFileSync, writeFileSync, mkdirSync, renameSync } from "node:fs";
35
35
  import { execFileSync } from "node:child_process";
36
36
  import { join, dirname } from "node:path";
37
- import { drainPosture, absentDrainerIsNormal } from "./drain-posture.mjs"; // tracker issue 206 — one rule about the box
37
+ import { drainPosture, absentDrainerIsNormal } from "./drain-posture.mjs"; // one rule about the box
38
38
 
39
39
  export const STAMP_BASENAME = "_drainer-identity.json";
40
40
 
@@ -115,7 +115,7 @@ export const config = {
115
115
  // configured, because a whitespace-only string is TRUTHY in JavaScript — so a variable set to spaces
116
116
  // did not fall through to the default, it BECAME the path. `poolRoot` alone trimmed, so "blank" meant
117
117
  // two different things depending on which accessor you asked, and `queueDirs` resolved a RELATIVE
118
- // queue directory under the process cwd, which is 's own incident shape.
118
+ // queue directory under the process cwd, which is its own incident shape.
119
119
  //
120
120
  // Owner ruling 2026-08-19: a whitespace-only value counts as UNSET, everywhere. `X=` already meant
121
121
  // "not configured" and this is that rule finishing its sentence — not a reversal of it, which
@@ -229,7 +229,7 @@ export const config = {
229
229
  /**
230
230
  * Every skills root handed to the engine's file tools (overlay + base, deduped).
231
231
  *
232
- * NAMED FOR WHAT IT IS, not what we want it to be (, 2026-08-14): it was `skillsReadRoots`, and the
232
+ * NAMED FOR WHAT IT IS, not what we want it to be (2026-08-14): it was `skillsReadRoots`, and the
233
233
  * engine passes it to `--add-dir`, which has no read-only form. The read-only INTENT is real and is
234
234
  * enforced by the deny-hook at driver/engine/deny-authority-write.mjs — not by this name.
235
235
  */
@@ -248,11 +248,11 @@ export const config = {
248
248
  // 2026-07-19: these were joined against DRIVER_DIR, so the driver read framework manifests out of
249
249
  // its BUNDLED driver/skills while CLEAROTRON_INSTRUCTIONS_DIR pointed the agent at the config store. A
250
250
  // customer whose framework lives only in the config store therefore hard-failed at attachFramework
251
- // with `framework_manifest_missing` — the first Aurora Interactive run died there before any stage ran.
251
+ // with `framework_manifest_missing` — a test account's first run died there before any stage ran.
252
252
  get skillsRoot() { return dirname(this.skillsDir); },
253
253
 
254
254
  // ── Per-agent paths ───────────────────────────────────────────────────────
255
- // A prelim job is enqueued into the FORWARDING agent's OWN workspace queue (that agent's `write` tool
255
+ // A clearotron job is enqueued into the FORWARDING agent's OWN workspace queue (that agent's `write` tool
256
256
  // is sandboxed there), and we run the whole pipeline as that same agent so the reply tool
257
257
  // (`clawdi_send_<user>`), the run-dir, and the agent's memory all line up. The queue LOCATION therefore
258
258
  // encodes the agent identity — the driver derives {agentId, studioRoot} from where it claimed the job,
@@ -269,6 +269,13 @@ export const config = {
269
269
  },
270
270
  // Escaped prefix for the reverse regexes below (a custom prefix may carry regex metachars).
271
271
  get workspacePrefixRe() { return this.workspacePrefix.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); },
272
+ // `prelim-search` IS NOT A PRODUCT NAME HERE and does not follow the product rename. It is a
273
+ // directory segment on disk, and every archived run — its slug dirs, its `archive/`, its matter
274
+ // ledger — was written under it. Renaming the segment does not move those runs; it points the
275
+ // reader somewhere empty, and an empty directory reads as "no runs" rather than as an error.
276
+ // The rule the tree already enforces elsewhere: a token that is read back out of an archive keeps
277
+ // its old spelling, or the code refuses its own archive. Thirteen sites compute this segment and
278
+ // all thirteen stay.
272
279
  studioRootForAgent(agentId) {
273
280
  return join(this.workspaceRoot, this.workspaceDirName(agentId), "studio", "prelim-search");
274
281
  },
@@ -283,7 +290,7 @@ export const config = {
283
290
  const m = new RegExp(`(?:^|/)${this.workspacePrefixRe}([^/]+)/studio/prelim-search/queue/?$`).exec(qdir);
284
291
  return m ? m[1] : null;
285
292
  },
286
- // Every agent workspace's prelim queue. The systemd `.path` watches these and the runner drains ALL of
293
+ // Every agent workspace's clearotron queue. The systemd `.path` watches these and the runner drains ALL of
287
294
  // them on each trigger (+ a timer fallback), so a request from ANY forwarder runs. (Pre-fix the watcher
288
295
  // and runner only looked at workspace-clawdi, silently orphaning every Alex/Sam job — the bug this fixes.)
289
296
  //
@@ -485,7 +492,7 @@ export const config = {
485
492
  // jobs AND manual pipeline.mjs invocations alike. WS-C raised the V4-7 stopgap's 1 → 3 (one per agent).
486
493
  // Phase-4: 3 → 6 + per-agent admission LIFTED (pipeline.acquireRunSlot no longer tags by agent). The
487
494
  // 2026-06-12 starvation that forced one-run-at-a-time (parallel runs → every gateway lane busy → 75s
488
- // heartbeat timeouts → a lost mid-run reply) was a GATEWAY phenomenon; prelim COMPUTE now runs off the
495
+ // heartbeat timeouts → a lost mid-run reply) was a GATEWAY phenomenon; clearotron COMPUTE now runs off the
489
496
  // gateway on the standalone claude -p engine, so concurrent runs no longer starve the heartbeat. The TURN
490
497
  // cap below still bounds the (now light) intake/delivery gateway demand. The runner serializes only the
491
498
  // cheap claim+dedup per queue and runs pipelines concurrently up to this cap (same-matter dedup stays
@@ -493,14 +500,22 @@ export const config = {
493
500
  // if the env is unset — keep the two in sync). Set to 2 on 2026-06-18 (was 6): 2 parallel is enough for now,
494
501
  // and bounds Max-5x rate-limit thrash. To change the live cap, set the env on the VM (no code deploy needed).
495
502
  get maxConcurrentRuns() { return Math.max(1, numericSetting("CLEAROTRON_MAX_CONCURRENT_RUNS")); },
503
+ // ON-DISK NAME, NOT A PRODUCT NAME: an install that never set the variable is already using this
504
+ // directory, so renaming the default moves the install to an empty one and nothing migrates. Here
505
+ // the orphaned files are run-slot locks, so a live run's slot goes unseen and the global cap is
506
+ // silently exceeded rather than enforced. Owner ruling, tracker issue 308.
496
507
  get runLockDir() { return this.envValue("CLEAROTRON_RUN_LOCK_DIR") || join(this.workspaceRoot, "prelim-run-locks"); },
497
508
 
498
509
  // Delivery outbox (Workstream B). On a handoff-mode finish the driver drops <runId>.pending here (naming
499
- // the forwarder agent); the systemd-user prelim-outbox.path unit fires an INSTANT prelim-deliver wake off
510
+ // the forwarder agent); the systemd-user prelim-outbox.path unit fires an INSTANT clearotron-deliver wake off
500
511
  // it, so a finished run sends in seconds instead of waiting ≤55m for the HEARTBEAT completion-watch (which
501
512
  // stays as the backstop). Mirrors runLockDir's derivation; env-overridable for dev/prod parity.
502
513
  // Phase 2: the outbox is ALSO the event seam for every other requester-facing event (run-failed,
503
514
  // intake-rejected, duplicate-skipped, late-bind-ack) — self-contained JSON packets via outbox.mjs.
515
+ // ON-DISK NAME, NOT A PRODUCT NAME: an install that never set the variable is already using this
516
+ // directory, so renaming the default moves the install to an empty one and nothing migrates. Here
517
+ // the orphaned files are requester-facing events — delivered, run-failed, intake-rejected — so the
518
+ // visible failure is a requester never told their run finished. Owner ruling, tracker issue 308.
504
519
  get outboxDir() { return this.envValue("CLEAROTRON_OUTBOX_DIR") || join(this.workspaceRoot, "prelim-outbox"); },
505
520
 
506
521
  // ── Delivery/comms (Phase 2, standalone product) ─────────────────────────────────────────────────
@@ -516,8 +531,25 @@ export const config = {
516
531
 
517
532
  // Fallback execution agent when a job's origin agent can't be derived from its queue dir (shouldn't
518
533
  // happen in normal operation). The real per-run agent is the forwarding agent, derived from the queue
519
- // LOCATION (see studioRootForAgent / agentIdFromQueueDir above). `clawdi` carries all the prelim tools.
520
- get defaultAgent() { return process.env.CLEAROTRON_DEFAULT_AGENT || "clawdi"; },
534
+ // LOCATION (see studioRootForAgent / agentIdFromQueueDir above).
535
+ //
536
+ // THE DEFAULT IS PART OF A PATH, so changing it moves where an install looks for its own runs:
537
+ // every run dir is `<workspaceRoot>/workspace-<agent>/studio/prelim-search/…`. An install created
538
+ // before this default changed keeps its runs under the old id and must pin it — both spellings,
539
+ // because the gather servers read their own variable:
540
+ //
541
+ // CLEAROTRON_DEFAULT_AGENT=clawdi
542
+ // CLEAROTRON_GATHER_AGENT=clawdi
543
+ //
544
+ // Unpinned, such an install starts a fresh empty workspace and its existing runs read as absent
545
+ // rather than as an error. Said again where upgrades are described (INSTALL.md, ops runbook).
546
+ //
547
+ // THE ID IS ALSO A KEY, not only a path segment. `AGENT_WHATSAPP` in stages.mjs is keyed by agent
548
+ // id, so the demo roster has to carry this value or the reference deployment resolves no operator
549
+ // number and the hole reads as "no copy configured" rather than as a miss. Both ids are in that
550
+ // roster for the same reason the pin above exists. (The roster stays one line: 32 backlog rows
551
+ // cite line numbers in stages.mjs, so a comment added there repoints all of them.)
552
+ get defaultAgent() { return process.env.CLEAROTRON_DEFAULT_AGENT || "localagent"; },
521
553
 
522
554
  // Per-stage retry budget (fresh session key per retry).
523
555
  get maxRetries() { return numericSetting("CLEAROTRON_MAX_RETRIES"); },
@@ -612,6 +644,26 @@ const MODEL_FAMILY_RE = /(?:^|\/)(?:claude-)?(opus|sonnet|haiku)(?:[-.]|$)/i;
612
644
  // mini one would then read as agreement, which is exactly the corruption this gauge exists to catch.
613
645
  const OPENAI_ID_RE = /^(?:openai\/)?(gpt-[\w.-]+|o\d[\w.-]*)$/i;
614
646
  const DATE_SUFFIX_RE = /-(?:\d{8}|\d{4}-\d{2}-\d{2})$/;
647
+
648
+ /**
649
+ * Is this model id a DATED SNAPSHOT, or an undated alias that a provider may repoint?
650
+ *
651
+ * `modelBasis: "actual"` says the provider answered rather than that we guessed — it does not say the
652
+ * answer names a fixed build. Measured across three archived runs: haiku came back
653
+ * `claude-haiku-4-5-20251001`, opus and sonnet came back `claude-opus-5` and `claude-sonnet-5`. All
654
+ * three were recorded identically as observed, and two of them name something the provider can move
655
+ * underneath us. A snapshot rotation behind either alias between two runs leaves EXACTLY that record and
656
+ * is invisible, which is how an A/B across time ends up eliminating the seat on evidence that could not
657
+ * have shown it either way.
658
+ *
659
+ * Returns "snapshot", "alias", or null when there is no id to judge — null is a could-not-look and is
660
+ * never collapsed into "alias". PURE.
661
+ */
662
+ export function modelSnapshotKind(model) {
663
+ const id = String(model ?? "").trim();
664
+ if (!id) return null;
665
+ return DATE_SUFFIX_RE.test(id) ? "snapshot" : "alias";
666
+ }
615
667
  export function modelFamily(model) {
616
668
  if (!model) return null;
617
669
  const resolved = resolveModel(String(model));
@@ -714,7 +766,7 @@ export const REGISTER_PROVIDER = (() => {
714
766
  // created this constant, so neither branch's tests covered it — it surfaced from reading the two diffs
715
767
  // side by side, not from a red run.
716
768
  //
717
- // SIX values now: 's `free-tier` composes the two free sources into ONE register, so an EU+US
769
+ // SIX values now: the `free-tier` composes the two free sources into ONE register, so an EU+US
718
770
  // clearance needs no paid vendor. It is a TIER, not a fourth free source — precedence runs between
719
771
  // tiers, never within one: a paid vendor configured IS the register alone, and the free sources are not
720
772
  // run beside it (corsearch and clarivate already aggregate both offices, so the second call buys
@@ -1314,7 +1366,7 @@ export const PROVIDERS = {
1314
1366
  // It also gated the wrong thing in practice. The US index is the one piece of this tier an operator
1315
1367
  // cannot get in a minute — it is a 41.5 GB build over two bulk products, behind an account with ID.me
1316
1368
  // identity verification, and it takes hours — so requiring it made the free tier unusable for exactly
1317
- // the person it exists for. 's CODE was merged; the INDEX is what no box had, and that was enough
1369
+ // the person it exists for. That CODE was merged; the INDEX is what no box had, and that was enough
1318
1370
  // to keep and from ever being exercised.
1319
1371
  //
1320
1372
  // The EU pair stays REQUIRED: a free tier with no configured member at all is not degraded, it is
@@ -1419,7 +1471,7 @@ export function providerIdFrom(env) {
1419
1471
  // the CURRENT spelling, through `currentName`, on purpose. Reading only the legacy name answered
1420
1472
  // `null` for a file that names the provider on the one line an operator can see, and `activeProvider`
1421
1473
  // reads that null as "this environment said nothing" and falls back to the ambient value. That is
1422
- // 's defect exactly, wearing the new name.
1474
+ // That defect exactly, wearing the new name.
1423
1475
  for (const name of ["CLEAROTRON_DATABASE"]) {
1424
1476
  const v = String(env?.[name] ?? "").trim().toLowerCase();
1425
1477
  if (v) return v;
@@ -4,7 +4,7 @@
4
4
  //
5
5
  // ── the defect this exists to remove ──────────────────────────────────────────────────────────
6
6
  //
7
- // 's noise floor needs the SAME scenario run twice on one commit. Until this module, `run` wrote
7
+ // That noise floor needs the SAME scenario run twice on one commit. Until this module, `run` wrote
8
8
  // `_e2e-doors-<ID>.json` holding exactly one token and `report` scoped itself to whatever token it found
9
9
  // there — so the second run of a pair OVERWROTE the only record of the first round's token, and the
10
10
  // first half became unreportable. Silently: `report` then described the second run, thirty seconds into
@@ -305,7 +305,7 @@ function runStart(hit) {
305
305
  /**
306
306
  * The rounds visible ON DISK, grouped by round token.
307
307
  *
308
- * `untokened` counts runs whose ref carries no round token — a pre- round, or one submitted by
308
+ * `untokened` counts runs whose ref carries no round token — a pre-change round, or one submitted by
309
309
  * hand. They belong to no nameable round, and saying how many there are is the difference between
310
310
  * "these are all the rounds" and "these are the rounds I could name".
311
311
  */
@@ -223,7 +223,7 @@ export const costBand = (i) => Math.max(1, Math.min(5, Math.ceil(effortUnits(i)
223
223
  * WHAT THIS REPLACED, and why a constant beat a model. The old quote was a base plus one adder per lane:
224
224
  * 1.5h, +0.5 for case law, +0.5 for a native-language lane, +0.5 for a single territory. It missed the
225
225
  * actual wall by +66%, +82% and −22% on three consecutive delivered runs, in BOTH directions, on one
226
- * engine build in one night ('s table). Every wall I could find from either source, eight runs:
226
+ * engine build in one night (the table). Every wall I could find from either source, eight runs:
227
227
  *
228
228
  * quoted 1.5h ×6 → actual 2.23 2.28 2.38 2.40 2.49 2.49
229
229
  * quoted 3.0h ×1 → actual 2.33 (the run with the MOST lanes came in SHORTER than five others)
@@ -246,7 +246,7 @@ export const TURNAROUND_QUOTE = Object.freeze({
246
246
  clearance: Object.freeze({ lowHours: 1.5, highHours: 2.5 }),
247
247
  // — OWNER RULING: a knockout quotes 5-10 MINUTES, a range, not a flat figure.
248
248
  //
249
- // The flat 0.25 came from 's "no compute, just say it, keep it simple", and that ruling is
249
+ // The flat 0.25 came from the "no compute, just say it, keep it simple", and that ruling is
250
250
  // untouched here: this is still one stated figure per pipeline with nothing computed from levers. What
251
251
  // changed is the figure, and the shape of it.
252
252
  //
@@ -102,7 +102,7 @@ const engineMaxBufferChars = () => Math.max(1024, Number(process.env.CLEAROTRON_
102
102
  // `gemini-flash: "sonnet"`, `deepseek-v4-pro: "opus"` and `azure: "sonnet"`, and the fall-through below
103
103
  // mapped ANY unrecognised alias to "sonnet". So `--model gemini` ran sonnet while the telemetry logged
104
104
  // `google/gemini-3.1-pro-preview` (gateway stamps `resolveModel(<requested alias>)`), and every
105
- // attribution downstream of that row — the A/B arm, the token rollup, 's billing classes — was
105
+ // attribution downstream of that row — the A/B arm, the token rollup, the billing classes — was
106
106
  // keyed to a model that never ran. Nothing said so, because a substitution has no error to report.
107
107
  //
108
108
  // The four cross-provider aliases were already dead before this change: the model-failover chain was
@@ -237,7 +237,7 @@ export function absolutizeSkillRefs(message, skillsDir, resolve = null) {
237
237
  //
238
238
  // ANTHROPIC-ONLY, AND MEASURED RATHER THAN ASSUMED. The obvious next step is to apply the same rule to
239
239
  // openai-agent's `--add-dir` (buildCodexArgs pushes the identical root), and it would accomplish nothing:
240
- // that engine spawns with `cwd = resolveSpawnCwd({cwd, runDir})` — the RUN DIR (, deliberately) —
240
+ // that engine spawns with `cwd = resolveSpawnCwd({cwd, runDir})` — the RUN DIR (deliberately) —
241
241
  // under `--sandbox workspace-write`, which makes cwd a writable root on its own. Dropping the flag there
242
242
  // would remove a grant the seat still holds by another door and let this comment claim an isolation the
243
243
  // engine does not have. Codex-side isolation is a cwd question, and a separate decision.
@@ -377,7 +377,7 @@ export function writeBoundarySettings({ skillsRoots = [], profilesDir = null, ru
377
377
  return JSON.stringify({
378
378
  hooks: {
379
379
  PreToolUse: [{
380
- // tracker issue 997 — Bash is in the matcher because seats have it and it walked past this hook entirely.
380
+ // Bash is in the matcher because seats have it and it walked past this hook entirely.
381
381
  // What the Bash arm can and cannot do is stated at its declaration in deny-authority-write.mjs;
382
382
  // it is a detector, and naming it here does not make it a boundary.
383
383
  matcher: "Write|Edit|MultiEdit|NotebookEdit|Bash",
@@ -401,7 +401,7 @@ export function synthesizeEnvelope({ resultEvent, usage, killed }) {
401
401
 
402
402
  export const anthropicAgentEngine = {
403
403
  name: "anthropic-agent",
404
- // tracker issue 954 — WHAT THIS ENGINE GUARANTEES ABOUT SEAT WRITES, said out loud in the run record.
404
+ // WHAT THIS ENGINE GUARANTEES ABOUT SEAT WRITES, said out loud in the run record.
405
405
  // `deny-authority-write.mjs` is a `claude -p` PreToolUse hook, so it refuses a seat's writes into the
406
406
  // doctrine tree, the profile store and `<runDir>/_driver/` at the moment of the write. That is a real
407
407
  // boundary and this engine has it.
@@ -409,7 +409,7 @@ export const anthropicAgentEngine = {
409
409
  async runTurn({ message, model, thinking, timeoutSec, resumeRef, mcpConfig, allowedTools, cwd, skillsDir, skillsGrantRoots, profilesDir, resolveSkill, runDir, seatWrites = null, stallSec, progressFiles } = {}) {
410
410
  if (!message) throw new Error("anthropic-agent.runTurn: message is required");
411
411
  const { args, input, grantNote } = buildClaudeArgs({ message, model, thinking, resumeRef, mcpConfig, allowedTools, cwd, skillsDir, skillsGrantRoots, profilesDir, resolveSkill, runDir, seatWrites });
412
- // tracker issue 1022 — the cross-check speaks. Driver stderr is what an operator reads, and it is where the other
412
+ // the cross-check speaks. Driver stderr is what an operator reads, and it is where the other
413
413
  // drift notices in this engine already land ([ledger], [env-aliases], [queue-watch]).
414
414
  if (grantNote) process.stderr.write(`${grantNote}\n`);
415
415
  const t0 = Date.now();
@@ -435,7 +435,7 @@ export const anthropicAgentEngine = {
435
435
  // inheriting that would load the dev-assistant instructions into every stage (context pollution +
436
436
  // cost). It also avoids the EACCES when the inherited cwd is unreadable by the runner's user.
437
437
  //
438
- // tracker issue 524 — cwd is a granted WRITE root here (file tools are confined to cwd + --add-dir), so it is
438
+ // cwd is a granted WRITE root here (file tools are confined to cwd + --add-dir), so it is
439
439
  // the run dir when there is one. See resolveSpawnCwd in common.mjs for why, and for what it deletes.
440
440
  const spawnCwd = resolveSpawnCwd({ cwd, runDir });
441
441
  // stdin is a PIPE (not "ignore"): the prompt rides stdin, not a `-p` argv element, so it is never
@@ -446,7 +446,7 @@ export const anthropicAgentEngine = {
446
446
  // Detached makes claude its own process-group leader, so the watchdog's kills reach the whole tree.
447
447
  try { child = spawn(claudeBin(), args, { stdio: ["pipe", "pipe", "pipe"], cwd: spawnCwd, env: spawnEnv(), detached: true }); }
448
448
  catch (e) { return resolve(errResult(t0, e, resumeRef)); }
449
- // tracker issue 2076 — THE SECOND SPAWN PATH, and it has to record too. This engine does not go
449
+ // THE SECOND SPAWN PATH, and it has to record too. This engine does not go
450
450
  // through runStreamingChild; wiring one and assuming the other follows is the exact defect shape
451
451
  // 2122 was raised on the same day (the demo banner reached the clearance renderer and not the
452
452
  // knockout one). Best effort, never fatal.
@@ -525,7 +525,7 @@ export const anthropicAgentEngine = {
525
525
  // (A repeat of an already-recorded path is NOT truncation — nothing is lost.)
526
526
  const READS_CAP = 500;
527
527
  let readsTruncated = false;
528
- // ── tracker issue 1111 — THE TWO NUMBERS THAT MAKE A SLOW TURN A DIAGNOSIS RATHER THAN AN INFERENCE ────────
528
+ // ── THE TWO NUMBERS THAT MAKE A SLOW TURN A DIAGNOSIS RATHER THAN AN INFERENCE ────────
529
529
  //
530
530
  // `tokensPerSec` says so itself: "the denominator still contains the turn's own tool waits… it
531
531
  // records the ratio; it does not diagnose it." Establishing that a slow stage was WAITING rather
@@ -543,7 +543,7 @@ export const anthropicAgentEngine = {
543
543
  let toolCalls = 0;
544
544
  let toolWaitMs = 0;
545
545
  let toolAskedAt = null;
546
- // tracker issue 1111 — WHAT THE WAIT IS MADE OF, keyed by the tool(s) that caused it.
546
+ // WHAT THE WAIT IS MADE OF, keyed by the tool(s) that caused it.
547
547
  //
548
548
  // The total alone cannot answer the question it was collected for. "Exclude tool wait from the kill
549
549
  // clock because a turn waiting on a tool is the harness working" is TRUE of `register_execute_plan`
@@ -554,7 +554,7 @@ export const anthropicAgentEngine = {
554
554
  // sorted set joined by "+". Every millisecond is attributed exactly once and the values sum to
555
555
  // `toolWaitMs` — a per-name split would double-count a concurrent ask and quietly break that identity.
556
556
  let toolAskedNames = null;
557
- // tracker issue 1828 — WHICH CHUNK an ask arrived in. Every line in one stdout chunk is parsed in
557
+ // WHICH CHUNK an ask arrived in. Every line in one stdout chunk is parsed in
558
558
  // one synchronous loop, so they all share a single Date.now(). If an ask and its result land in
559
559
  // the SAME chunk, the parent was not running between them and the gap it measures is 0 — for a
560
560
  // wait that really happened. Reproduced deterministically by blocking this process's event loop:
@@ -595,7 +595,7 @@ export const anthropicAgentEngine = {
595
595
  const openAsks = []; // ask records still outstanding, oldest first
596
596
  const askById = new Map(); // tool_use_id → its ask record
597
597
  let periodStart = null; // when the current outstanding-SET period began
598
- let periodChunk = null; // the chunk it began in — tracker issue 1828's unmeasurable flag
598
+ let periodChunk = null; // the chunk it began in — the unmeasurable flag
599
599
  let anonSeq = 0; // ids are on the wire, but never assume: synthesize if absent
600
600
  const periodKey = () =>
601
601
  [...new Set(openAsks.flatMap((r) => r.names))].sort().join("+");
@@ -709,7 +709,7 @@ export const anthropicAgentEngine = {
709
709
  progress();
710
710
  }
711
711
  else if (ev.type === "user") {
712
- // tracker issue 1111 — the result of the ask above. Only counted when an ask is outstanding, so a `user`
712
+ // the result of the ask above. Only counted when an ask is outstanding, so a `user`
713
713
  // event with no preceding tool_use adds nothing rather than charging the turn for a gap it
714
714
  // never spent waiting.
715
715
  // Which ask is this the result OF? The id on the wire answers it. Falling back to the
@@ -776,7 +776,7 @@ export const anthropicAgentEngine = {
776
776
  const watchdog = setInterval(() => {
777
777
  artifactProgress();
778
778
  const now = Date.now();
779
- // tracker issue 1780 — THE STARTUP DEBT. tracker issue 1692 widened the deadline below until the first byte but left this
779
+ // THE STARTUP DEBT. tracker issue 1692 widened the deadline below until the first byte but left this
780
780
  // clock's ORIGIN at spawn, so the startup interval stayed on the meter: the moment the grace let
781
781
  // go, progIdle already WAS the whole boot, and any NOPROG shorter than startup had expired before
782
782
  // the child was observed at all. The kill then landed on the next tick, before the ask could reach
@@ -784,7 +784,7 @@ export const anthropicAgentEngine = {
784
784
  // Releasing a clock is not starting one: the first byte is this clock's origin, not its green light.
785
785
  const progFrom = firstOutputAt === null ? lastProgress : Math.max(lastProgress, firstOutputAt);
786
786
  const idle = now - lastMove, progIdle = now - progFrom;
787
- // ── tracker issue 1692 — STARTUP IS NEITHER SILENCE NOR WORK ──────────────────────────────────────────────
787
+ // ── STARTUP IS NEITHER SILENCE NOR WORK ──────────────────────────────────────────────
788
788
  // Every clock here USED TO start at SPAWN, so until the child's first byte they were all timing
789
789
  // process startup: an idle clock that had not yet seen silence, and an active clock that had not
790
790
  // yet seen work. Past tense deliberately — tracker issue 1780 finished this, and the sentence stayed true of
@@ -800,7 +800,7 @@ export const anthropicAgentEngine = {
800
800
  // kill it NOW, well below the wall, and record it as a STALL — never let the ceiling raise turn
801
801
  // into extended stall burn, and never let this kill read as "the stage needed more time".
802
802
  else if (progIdle >= (started ? NOPROG : Math.max(NOPROG, GRACE))) { stallKill = true; noProgressKill = true; killed = true; killTree(); }
803
- // ── tracker issue 1111 — THE CEILING MEASURES ACTIVE TIME, NOT ELAPSED ────────────────────────────────────
803
+ // ── THE CEILING MEASURES ACTIVE TIME, NOT ELAPSED ────────────────────────────────────
804
804
  //
805
805
  // Owner ruling: "there isnt such thing as a hung model. it always delivers something or fails."
806
806
  // So this ceiling exists for the harness's own failure modes, not to budget the model, and a turn
@@ -824,7 +824,7 @@ export const anthropicAgentEngine = {
824
824
  // quantity: a long turn has three causes — tool latency, a generation stall, and sheer VOLUME
825
825
  // (one healthy stage ran 40.9 minutes at a normal rate producing 186k tokens) — and nothing that
826
826
  // keys on elapsed can tell them apart.
827
- // tracker issue 1692: measured from the FIRST BYTE, never from spawn. Startup is not active time either, and
827
+ // measured from the FIRST BYTE, never from spawn. Startup is not active time either, and
828
828
  // against a tight pin it was the whole budget — a 900ms spawn hit a 500ms ceiling having done
829
829
  // nothing at all, and the turn died carrying `hardWall` with zero tool calls to explain it.
830
830
  else if (started && activeElapsedMs({ wall: now - firstOutputAt, toolWaitMs, toolAskedAt, now }) >= hardMs) {
@@ -840,7 +840,7 @@ export const anthropicAgentEngine = {
840
840
  child.stdout.on("data", (d) => {
841
841
  if (settled || overflow) return;
842
842
  if (firstOutputAt === null) firstOutputAt = Date.now(); // #1692 — the child has spoken; startup is over
843
- chunkSeq += 1; // tracker issue 1828 — see toolAskedChunk
843
+ chunkSeq += 1; // see toolAskedChunk
844
844
  chunkBytes = d.length;
845
845
  chunkGapMs = prevChunkAt === null ? 0 : Date.now() - prevChunkAt;
846
846
  prevChunkAt = Date.now();
@@ -852,7 +852,7 @@ export const anthropicAgentEngine = {
852
852
  });
853
853
  child.stderr.on("data", (d) => {
854
854
  if (settled || overflow) return;
855
- // tracker issue 1813 — STDERR DOES NOT START THE CLOCKS, and this line used to. This engine's protocol is
855
+ // STDERR DOES NOT START THE CLOCKS, and this line used to. This engine's protocol is
856
856
  // stream-json on STDOUT; stderr carries node warnings and CLI notices, which a child can emit
857
857
  // before it has done anything at all. Treating one as "the child has spoken" ended the grace and
858
858
  // — since tracker issue 1780, which made the first byte the progress clock's ORIGIN — started that clock too,
@@ -870,7 +870,7 @@ export const anthropicAgentEngine = {
870
870
  child.on("error", (e) => { if (settled) return; settled = true; clearInterval(watchdog); resolve(errResult(t0, e, resumeRef)); });
871
871
  child.on("close", (code) => settle(code));
872
872
  function settle(code) {
873
- // tracker issue 2076 — the turn is over; the record must not outlive it, and is cleared only if
873
+ // the turn is over; the record must not outlive it, and is cleared only if
874
874
  // it still names THIS child.
875
875
  clearEngineChild(runDir, child?.pid);
876
876
  if (settled) return; settled = true;
@@ -889,7 +889,7 @@ export const anthropicAgentEngine = {
889
889
  // defect from the inside.
890
890
  const endedAt = Date.now();
891
891
  const wall = (endedAt - t0) / 1000;
892
- // tracker issue 1111 — THE TWO CLOCKS MUST TILE THE WALL, in every case including the one that matters.
892
+ // THE TWO CLOCKS MUST TILE THE WALL, in every case including the one that matters.
893
893
  //
894
894
  // A turn killed mid-tool-call has an OPEN ask that `toolWaitMs` has not closed. Reporting the
895
895
  // unclosed accumulator left `activeMs + toolWaitMs` short of the wall by exactly that gap — and
@@ -924,7 +924,7 @@ export const anthropicAgentEngine = {
924
924
  const stderrOut = overflow
925
925
  ? (stderr + `\nanthropic-agent output overflow: stdout/stderr exceeded ${maxBuffer} chars — killed the tree and failed the turn (truncated tail never parsed)`)
926
926
  : noProgressKill
927
- // tracker issue 1780 — THE SPECIMEN RIDES THE FAILURE, because the broken state expires. This kill has
927
+ // THE SPECIMEN RIDES THE FAILURE, because the broken state expires. This kill has
928
928
  // twice reddened `main` from a test whose ANTI-VACUITY check failed — the turn died having
929
929
  // opened no tool ask — and neither the box's ambient load nor a full-suite run reproduces
930
930
  // it on demand. So the discriminating bit is recorded HERE, where the kill happens, rather
@@ -962,11 +962,11 @@ export const anthropicAgentEngine = {
962
962
  // from this list is unreliable and the consumer must downgrade it to "not observed").
963
963
  reads: [...reads], readsTruncated,
964
964
  toolCalls, toolWaitMs: settledToolWaitMs, // #1111 — two integers, no content
965
- // tracker issue 1780 — ms from spawn to the child's FIRST byte, or null when it never spoke. RECORDING
965
+ // ms from spawn to the child's FIRST byte, or null when it never spoke. RECORDING
966
966
  // ONLY: nothing branches on it. A recording field is protected by a test or by nothing, so
967
967
  // engine.anthropic.test.mjs pins it — deleting it must red something.
968
968
  firstByteMs: firstOutputAt === null ? null : Math.round(firstOutputAt - t0),
969
- // tracker issue 1111 — WHICH CLOCK RAN OUT, and WHAT the wait was made of.
969
+ // WHICH CLOCK RAN OUT, and WHAT the wait was made of.
970
970
  //
971
971
  // The hard wall measures ELAPSED, and elapsed includes time the model spent waiting on tools
972
972
  // rather than generating. A wall kill whose elapsed is mostly tool wait is a different event from
@@ -982,7 +982,7 @@ export const anthropicAgentEngine = {
982
982
  // "this record predates the gauge".
983
983
  activeMs: Math.max(0, Math.round(wall * 1000) - settledToolWaitMs),
984
984
  toolWaitByTool: { ...toolWaitByTool },
985
- // tracker issue 1828 — the asks whose wait this process COULD NOT MEASURE, because the ask and
985
+ // the asks whose wait this process COULD NOT MEASURE, because the ask and
986
986
  // its result were delivered in one chunk. An ARRAY is a measurement (possibly `[]`: measured,
987
987
  // nothing unmeasurable), following toolWaitByTool's own rule that absence and "cannot report"
988
988
  // must not look alike. `toolWaitMs` and the per-tool split are untouched.
@@ -20,7 +20,7 @@
20
20
  // spelling list let the OpenAI half decide how an Anthropic run bills. deleted the old names, so
21
21
  // there is one variable, only the selected engine is ever consulted, and the hazard has no route left.
22
22
  //
23
- // And deliberately written OUT at each site rather than through a helper: 's guard in
23
+ // And deliberately written OUT at each site rather than through a helper: the guard in
24
24
  // `env-governance.test.mjs` finds a product read by the literal `env.NAME`, so a helper taking the
25
25
  // name as an argument makes both reads invisible to it — measured, it turned them harness-only and
26
26
  // put both names on the "no longer read by product code" list. The repetition is what keeps them