clearotron 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (622) hide show
  1. package/.env.example +54 -1
  2. package/CONTRIBUTING.md +3 -3
  3. package/INSTALL.md +53 -49
  4. package/bin/brandowner.mjs +1 -1
  5. package/bin/clearotron.mjs +4 -4
  6. package/bin/connect.mjs +2 -2
  7. package/bin/example.mjs +27 -11
  8. package/bin/grant.mjs +3 -3
  9. package/bin/key.mjs +1 -1
  10. package/bin/onboard.mjs +58 -118
  11. package/bin/start.mjs +22 -25
  12. package/bin/stop.mjs +65 -3
  13. package/bin/update.mjs +7 -7
  14. package/bin/uspto-sync.mjs +1 -1
  15. package/build-info.json +2 -2
  16. package/docs/DELIVERY.md +6 -2
  17. package/docs/architecture/01-product-overview.md +2 -2
  18. package/docs/architecture/02-architecture.md +2 -2
  19. package/docs/architecture/04-configuration-reference.md +6 -3
  20. package/docs/architecture/05-config-governance.md +38 -5
  21. package/docs/architecture/06-operations-runbook.md +13 -1
  22. package/docs/architecture/09-security-and-data.md +1 -1
  23. package/docs/decisions/0004-documentation-structure.md +1 -1
  24. package/driver/CHANGELOG.md +65 -1
  25. package/driver/README.md +2 -2
  26. package/driver/ask-ledger.mjs +3 -3
  27. package/driver/authority-trees.mjs +1 -1
  28. package/driver/call-capture.mjs +1 -1
  29. package/driver/card-frame.mjs +1 -1
  30. package/driver/case-law-ledger.mjs +1 -1
  31. package/driver/claim-liveness.mjs +1 -1
  32. package/driver/common-law-receipts.mjs +1 -1
  33. package/driver/commonlaw-carry.mjs +1 -1
  34. package/driver/config-inventory.mjs +1 -1
  35. package/driver/connotation-search.mjs +12 -12
  36. package/driver/contract-audit.mjs +5 -5
  37. package/driver/contract-dictation-registry.mjs +4 -4
  38. package/driver/contract-dictation.mjs +2 -2
  39. package/driver/contract-e3-backlog.mjs +6 -6
  40. package/driver/contract-vocabulary.mjs +3 -3
  41. package/driver/corrections-feedforward.mjs +1 -1
  42. package/driver/coverage-form-io.mjs +2 -2
  43. package/driver/coverage-form.mjs +4 -4
  44. package/driver/coverage-ledger.mjs +3 -3
  45. package/driver/coverage-union.mjs +1 -1
  46. package/driver/declination-call.mjs +35 -3
  47. package/driver/declination-duty.mjs +1 -1
  48. package/driver/deliver-trigger.sh +3 -3
  49. package/driver/deploy-live-run-guard.mjs +6 -2
  50. package/driver/dev-portal.mjs +1 -1
  51. package/driver/disposition-call.mjs +4 -4
  52. package/driver/disposition-tool.mjs +4 -4
  53. package/driver/disposition-union.mjs +2 -2
  54. package/driver/doc-constants.mjs +1 -1
  55. package/driver/door-gates.mjs +2 -2
  56. package/driver/doubt-selection.mjs +2 -2
  57. package/driver/drainer-identity.mjs +1 -1
  58. package/driver/driver.config.mjs +63 -11
  59. package/driver/e2e-rounds.mjs +2 -2
  60. package/driver/effort-model.mjs +2 -2
  61. package/driver/engine/anthropic-agent.mjs +24 -24
  62. package/driver/engine/auth.mjs +1 -1
  63. package/driver/engine/common.mjs +1 -1
  64. package/driver/engine/deny-authority-write.mjs +1 -1
  65. package/driver/engine/jx-turn.mjs +1 -1
  66. package/driver/engine/mcp/clarivate-server.mjs +1 -1
  67. package/driver/engine/mcp/corsearch-server.mjs +1 -1
  68. package/driver/engine/mcp/declination-server.mjs +1 -1
  69. package/driver/engine/mcp/dispositions-server.mjs +1 -1
  70. package/driver/engine/mcp/euipo-server.mjs +1 -1
  71. package/driver/engine/mcp/fetch-server.mjs +1 -1
  72. package/driver/engine/mcp/free-tier-server.mjs +2 -2
  73. package/driver/engine/mcp/gather-config.mjs +11 -11
  74. package/driver/engine/mcp/perplexity-server.mjs +1 -1
  75. package/driver/engine/mcp/recording-server.mjs +8 -4
  76. package/driver/engine/mcp/signa-server.mjs +1 -1
  77. package/driver/engine/mcp/uspto-local-server.mjs +1 -1
  78. package/driver/engine/openai-agent.mjs +2 -2
  79. package/driver/engine-build.mjs +2 -2
  80. package/driver/enqueue-schema.mjs +2 -2
  81. package/driver/enqueue.mjs +1 -1
  82. package/driver/envelope-settle.mjs +1 -1
  83. package/driver/evidence-claim-invariant.mjs +2 -2
  84. package/driver/findings-model.mjs +8 -8
  85. package/driver/floor-duty.mjs +1 -1
  86. package/driver/form-neighbourhood.mjs +1 -1
  87. package/driver/framework.mjs +1 -1
  88. package/driver/gateway.mjs +28 -23
  89. package/driver/grounds-grammar.mjs +1 -1
  90. package/driver/hit-list.mjs +1 -1
  91. package/driver/jurisdiction-systems.mjs +1 -1
  92. package/driver/jx-lanes.mjs +1 -1
  93. package/driver/jx-units.mjs +1 -1
  94. package/driver/jx.mjs +3 -3
  95. package/driver/knockout-assess-record.mjs +5 -1
  96. package/driver/narrative-refutation-record.mjs +3 -3
  97. package/driver/numeric-setting.mjs +1 -1
  98. package/driver/owner-use-check.mjs +184 -0
  99. package/driver/package.json +2 -2
  100. package/driver/phase0.mjs +1 -1
  101. package/driver/pipeline-knockout.mjs +52 -4
  102. package/driver/pipeline.mjs +175 -62
  103. package/driver/placement-diff.mjs +2 -2
  104. package/driver/placement-form.mjs +4 -4
  105. package/driver/placement-union.mjs +1 -1
  106. package/driver/portal-acks.mjs +1 -1
  107. package/driver/portal-config-view.mjs +2 -2
  108. package/driver/portal-local-auth.mjs +1 -1
  109. package/driver/portal-report.mjs +6 -6
  110. package/driver/portal-service.mjs +15 -15
  111. package/driver/predelivery-lint.mjs +28 -10
  112. package/driver/prelim-variants-record.mjs +2 -2
  113. package/driver/profile-page.html +1 -1
  114. package/driver/profile-selection.mjs +1 -1
  115. package/driver/profile-service.mjs +2 -2
  116. package/driver/profiles.mjs +1 -1
  117. package/driver/progress.mjs +6 -6
  118. package/driver/provider-usage.mjs +1 -1
  119. package/driver/publish/demo-marking.mjs +1 -1
  120. package/driver/publish/index.mjs +47 -6
  121. package/driver/publish/knockout.mjs +36 -14
  122. package/driver/publish/parse.mjs +4 -4
  123. package/driver/publish/publish-inputs.mjs +2 -2
  124. package/driver/publish/register-presence.mjs +1 -1
  125. package/driver/publish/render-knockout.mjs +198 -31
  126. package/driver/publish/report-data.mjs +13 -3
  127. package/driver/queue-watch-probe.mjs +1 -1
  128. package/driver/queue-watch-verdict.mjs +1 -1
  129. package/driver/recall-reconciliation.mjs +1 -1
  130. package/driver/recipe-service.mjs +1 -1
  131. package/driver/record-carry.mjs +5 -5
  132. package/driver/recording-agreement.mjs +3 -3
  133. package/driver/reference-score.mjs +7 -7
  134. package/driver/refusal-bound.mjs +3 -3
  135. package/driver/register-availability.mjs +2 -2
  136. package/driver/register-count.mjs +1 -1
  137. package/driver/register-grant-vocabulary.mjs +2 -2
  138. package/driver/register-plan.mjs +8 -8
  139. package/driver/register-records.mjs +2 -2
  140. package/driver/registry-fidelity.mjs +3 -3
  141. package/driver/remedy-accounting.mjs +1 -1
  142. package/driver/repair-composers.mjs +2 -2
  143. package/driver/repair-digest.mjs +3 -3
  144. package/driver/repairs.mjs +6 -6
  145. package/driver/replay-archive.mjs +2 -0
  146. package/driver/report-card-record.mjs +2 -2
  147. package/driver/result-noun-fields.mjs +10 -3
  148. package/driver/run-economics.mjs +2 -2
  149. package/driver/run-integrity.mjs +1 -1
  150. package/driver/runner.mjs +22 -22
  151. package/driver/scope-rules.mjs +1 -1
  152. package/driver/search-policy.mjs +3 -3
  153. package/driver/skeptic-search.mjs +1 -1
  154. package/driver/skills/blind-frame/SKILL.md +1 -1
  155. package/driver/skills/case-law-citation/SKILL.md +2 -2
  156. package/driver/skills/knockout-assess/SKILL.md +10 -4
  157. package/driver/skills/prelim-search/SKILL.md +2 -2
  158. package/driver/skills/prelim-search/template-formatting.md +1 -1
  159. package/driver/skills/prelim-search/templates/email/generic.md +1 -1
  160. package/driver/skills/prelim-search/worked-examples.md +1 -1
  161. package/driver/skills/prelim-variants/SKILL.md +2 -2
  162. package/driver/stage-context.mjs +1 -1
  163. package/driver/stages-knockout.mjs +55 -4
  164. package/driver/stages.mjs +97 -40
  165. package/driver/stray-artifacts.mjs +2 -2
  166. package/driver/suite-census.json +146 -32
  167. package/driver/synthesis-record.mjs +1 -1
  168. package/driver/systemd/clearotron-client-mcp.service +1 -1
  169. package/driver/systemd/clearotron-portal.service +1 -1
  170. package/driver/systemd/render-units.mjs +1 -1
  171. package/driver/tokens.mjs +1 -1
  172. package/driver/tool-calls.mjs +1 -1
  173. package/driver/turnaround-bands.mjs +1 -1
  174. package/driver/unit-file-drift.mjs +1 -1
  175. package/driver/unit-inventory.mjs +121 -61
  176. package/driver/unit-state-verdict.mjs +20 -12
  177. package/driver/verify-knockout.mjs +10 -2
  178. package/driver/verify.mjs +12 -12
  179. package/driver/whatif-memo-run.mjs +46 -5
  180. package/driver/whatif-queue.mjs +1 -1
  181. package/driver/whatif-worker.mjs +1 -1
  182. package/mcp-server/CHANGELOG.md +4 -0
  183. package/mcp-server/README.md +3 -3
  184. package/mcp-server/http-server.mjs +44 -1
  185. package/mcp-server/key-socket.mjs +184 -0
  186. package/mcp-server/lib/audit-view.mjs +69 -2
  187. package/mcp-server/lib/brief.mjs +15 -0
  188. package/mcp-server/lib/driver.mjs +7 -1
  189. package/mcp-server/lib/events.mjs +1 -1
  190. package/mcp-server/lib/http-handler.mjs +1 -1
  191. package/mcp-server/lib/knockout.mjs +435 -0
  192. package/mcp-server/lib/ops.mjs +4 -4
  193. package/mcp-server/lib/options.mjs +1 -1
  194. package/mcp-server/lib/plan.mjs +1 -1
  195. package/mcp-server/lib/runs.mjs +1 -1
  196. package/mcp-server/lib/scrub.mjs +1 -1
  197. package/mcp-server/lib/whatif.mjs +3 -3
  198. package/mcp-server/mint-token.mjs +1 -1
  199. package/mcp-server/package.json +2 -2
  200. package/mcp-server/server.mjs +76 -11
  201. package/package.json +3 -3
  202. package/portal-ui/package.json +1 -1
  203. package/providers/_shared/enumerate.mjs +1 -1
  204. package/providers/_shared/ledger-path.mjs +3 -3
  205. package/providers/_shared/ledger.mjs +1 -1
  206. package/providers/_shared/result-shape.mjs +3 -3
  207. package/providers/_shared/term-shape.mjs +1 -1
  208. package/providers/corsearch/src/core.js +1 -1
  209. package/providers/jx-subclass/BUILDING.md +1 -1
  210. package/providers/oauth-mcp-bridge/CHANGELOG.md +4 -0
  211. package/providers/oauth-mcp-bridge/package.json +1 -1
  212. package/providers/oauth-mcp-bridge/stdin-guard.mjs +2 -2
  213. package/scripts/README.md +1 -1
  214. package/scripts/added-reference-check.mjs +29 -1
  215. package/scripts/ai-page-render-check.mjs +1 -1
  216. package/scripts/authority-boundary-probe.mjs +1 -1
  217. package/scripts/backfill-started-at.mjs +1 -1
  218. package/scripts/citation-line-check.mjs +3 -3
  219. package/scripts/clearances-render-check.mjs +3 -3
  220. package/scripts/compare.mjs +2 -2
  221. package/scripts/composer-render-check.mjs +6 -6
  222. package/scripts/contract-dictation-scan.mjs +2 -2
  223. package/scripts/dead-names.mjs +1 -1
  224. package/scripts/drain-preflight.mjs +5 -5
  225. package/scripts/e2e-unread-terminals.mjs +1 -1
  226. package/scripts/e2e.mjs +8 -8
  227. package/scripts/env-audit.mjs +7 -7
  228. package/scripts/env-classify.mjs +139 -15
  229. package/scripts/freeze-example-run.mjs +3 -3
  230. package/scripts/head-arrived-gated.mjs +1 -1
  231. package/scripts/headless-page.mjs +51 -2
  232. package/scripts/home-render-check.mjs +2 -2
  233. package/scripts/live-surface-check.mjs +92 -19
  234. package/scripts/main-health.mjs +1 -1
  235. package/scripts/merge-presence-check.mjs +3 -3
  236. package/scripts/mint-suite-census.mjs +6 -6
  237. package/scripts/nightly-notice.mjs +1 -1
  238. package/scripts/portal-lifecycle-check.mjs +3 -3
  239. package/scripts/reconcile-runs.mjs +1 -1
  240. package/scripts/release-await-cut.mjs +6 -4
  241. package/scripts/release-version-pr-checks.mjs +1 -1
  242. package/scripts/release-version.mjs +2 -2
  243. package/scripts/render-check.mjs +66 -7
  244. package/scripts/report-frame-check.mjs +1 -1
  245. package/scripts/report-screenshot.mjs +1 -1
  246. package/scripts/revisit-render-check.mjs +1 -1
  247. package/scripts/score.mjs +4 -4
  248. package/scripts/strip-tracker-citations.mjs +116 -0
  249. package/scripts/test-run.mjs +3 -3
  250. package/scripts/third-party-notices.mjs +3 -3
  251. package/scripts/travelling-predicates.mjs +3 -3
  252. package/scripts/unexecuted-asserts.mjs +2 -2
  253. package/scripts/verify-publishable.mjs +2 -2
  254. package/scripts/write-up-form-census.mjs +1 -1
  255. package/shared/access-audience.mjs +1 -1
  256. package/shared/brand.mjs +13 -13
  257. package/shared/citation-scan.mjs +1 -1
  258. package/shared/client-door.mjs +7 -7
  259. package/shared/driver-dir.mjs +1 -1
  260. package/shared/env-aliases.mjs +0 -48
  261. package/shared/env-local.mjs +1 -1
  262. package/shared/identifier-scan.mjs +3 -3
  263. package/shared/invocation.mjs +1 -1
  264. package/shared/names-in-force.mjs +2 -0
  265. package/shared/product-owned-names.mjs +1 -1
  266. package/shared/register-selection.mjs +1 -1
  267. package/shared/scope.mjs +5 -5
  268. package/shared/server-units.mjs +4 -4
  269. package/shared/store-in-repo.mjs +2 -2
  270. package/shared/suite-census.mjs +4 -4
  271. package/shared/tty-style.mjs +1 -1
  272. package/shared/uspto-index-size.mjs +1 -1
  273. package/shared/vacuous-pass.mjs +1 -1
  274. package/skills/clearotron-account/SKILL.md +42 -13
  275. package/driver/systemd/prelim-driver.path +0 -69
  276. package/driver/systemd/prelim-driver.service +0 -86
  277. package/driver/systemd/prelim-driver.timer +0 -14
  278. package/driver/systemd/prelim-outbox.path +0 -27
  279. package/driver/systemd/prelim-outbox.service +0 -37
  280. package/driver/systemd/prelim-outbox.timer +0 -21
  281. package/node_modules/exceljs/README_zh.md +0 -2878
  282. package/node_modules/exceljs/dist/LICENSE +0 -22
  283. package/node_modules/exceljs/dist/es5/csv/csv.js +0 -182
  284. package/node_modules/exceljs/dist/es5/csv/csv.js.map +0 -1
  285. package/node_modules/exceljs/dist/es5/csv/line-buffer.js +0 -68
  286. package/node_modules/exceljs/dist/es5/csv/line-buffer.js.map +0 -1
  287. package/node_modules/exceljs/dist/es5/csv/stream-converter.js +0 -110
  288. package/node_modules/exceljs/dist/es5/csv/stream-converter.js.map +0 -1
  289. package/node_modules/exceljs/dist/es5/doc/anchor.js +0 -73
  290. package/node_modules/exceljs/dist/es5/doc/anchor.js.map +0 -1
  291. package/node_modules/exceljs/dist/es5/doc/cell.js +0 -961
  292. package/node_modules/exceljs/dist/es5/doc/cell.js.map +0 -1
  293. package/node_modules/exceljs/dist/es5/doc/column.js +0 -274
  294. package/node_modules/exceljs/dist/es5/doc/column.js.map +0 -1
  295. package/node_modules/exceljs/dist/es5/doc/data-validations.js +0 -18
  296. package/node_modules/exceljs/dist/es5/doc/data-validations.js.map +0 -1
  297. package/node_modules/exceljs/dist/es5/doc/defined-names.js +0 -173
  298. package/node_modules/exceljs/dist/es5/doc/defined-names.js.map +0 -1
  299. package/node_modules/exceljs/dist/es5/doc/enums.js +0 -49
  300. package/node_modules/exceljs/dist/es5/doc/enums.js.map +0 -1
  301. package/node_modules/exceljs/dist/es5/doc/image.js +0 -69
  302. package/node_modules/exceljs/dist/es5/doc/image.js.map +0 -1
  303. package/node_modules/exceljs/dist/es5/doc/modelcontainer.js +0 -16
  304. package/node_modules/exceljs/dist/es5/doc/modelcontainer.js.map +0 -1
  305. package/node_modules/exceljs/dist/es5/doc/note.js +0 -64
  306. package/node_modules/exceljs/dist/es5/doc/note.js.map +0 -1
  307. package/node_modules/exceljs/dist/es5/doc/range.js +0 -229
  308. package/node_modules/exceljs/dist/es5/doc/range.js.map +0 -1
  309. package/node_modules/exceljs/dist/es5/doc/row.js +0 -382
  310. package/node_modules/exceljs/dist/es5/doc/row.js.map +0 -1
  311. package/node_modules/exceljs/dist/es5/doc/table.js +0 -443
  312. package/node_modules/exceljs/dist/es5/doc/table.js.map +0 -1
  313. package/node_modules/exceljs/dist/es5/doc/workbook.js +0 -202
  314. package/node_modules/exceljs/dist/es5/doc/workbook.js.map +0 -1
  315. package/node_modules/exceljs/dist/es5/doc/worksheet.js +0 -900
  316. package/node_modules/exceljs/dist/es5/doc/worksheet.js.map +0 -1
  317. package/node_modules/exceljs/dist/es5/exceljs.bare.js +0 -14
  318. package/node_modules/exceljs/dist/es5/exceljs.bare.js.map +0 -1
  319. package/node_modules/exceljs/dist/es5/exceljs.browser.js +0 -36
  320. package/node_modules/exceljs/dist/es5/exceljs.browser.js.map +0 -1
  321. package/node_modules/exceljs/dist/es5/exceljs.nodejs.js +0 -15
  322. package/node_modules/exceljs/dist/es5/exceljs.nodejs.js.map +0 -1
  323. package/node_modules/exceljs/dist/es5/index.js +0 -15
  324. package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js +0 -90
  325. package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js.map +0 -1
  326. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js +0 -94
  327. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js.map +0 -1
  328. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js +0 -94
  329. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js.map +0 -1
  330. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js +0 -362
  331. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js.map +0 -1
  332. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js +0 -347
  333. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js.map +0 -1
  334. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js +0 -392
  335. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js.map +0 -1
  336. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js +0 -652
  337. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js.map +0 -1
  338. package/node_modules/exceljs/dist/es5/utils/auto-drain.js +0 -18
  339. package/node_modules/exceljs/dist/es5/utils/auto-drain.js.map +0 -1
  340. package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js +0 -15
  341. package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js.map +0 -1
  342. package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js +0 -18
  343. package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js.map +0 -1
  344. package/node_modules/exceljs/dist/es5/utils/cell-matrix.js +0 -149
  345. package/node_modules/exceljs/dist/es5/utils/cell-matrix.js.map +0 -1
  346. package/node_modules/exceljs/dist/es5/utils/col-cache.js +0 -258
  347. package/node_modules/exceljs/dist/es5/utils/col-cache.js.map +0 -1
  348. package/node_modules/exceljs/dist/es5/utils/copy-style.js +0 -43
  349. package/node_modules/exceljs/dist/es5/utils/copy-style.js.map +0 -1
  350. package/node_modules/exceljs/dist/es5/utils/encryptor.js +0 -58
  351. package/node_modules/exceljs/dist/es5/utils/encryptor.js.map +0 -1
  352. package/node_modules/exceljs/dist/es5/utils/iterate-stream.js +0 -46
  353. package/node_modules/exceljs/dist/es5/utils/iterate-stream.js.map +0 -1
  354. package/node_modules/exceljs/dist/es5/utils/parse-sax.js +0 -47
  355. package/node_modules/exceljs/dist/es5/utils/parse-sax.js.map +0 -1
  356. package/node_modules/exceljs/dist/es5/utils/shared-formula.js +0 -42
  357. package/node_modules/exceljs/dist/es5/utils/shared-formula.js.map +0 -1
  358. package/node_modules/exceljs/dist/es5/utils/shared-strings.js +0 -32
  359. package/node_modules/exceljs/dist/es5/utils/shared-strings.js.map +0 -1
  360. package/node_modules/exceljs/dist/es5/utils/stream-base64.js +0 -66
  361. package/node_modules/exceljs/dist/es5/utils/stream-base64.js.map +0 -1
  362. package/node_modules/exceljs/dist/es5/utils/stream-buf.js +0 -343
  363. package/node_modules/exceljs/dist/es5/utils/stream-buf.js.map +0 -1
  364. package/node_modules/exceljs/dist/es5/utils/string-buf.js +0 -73
  365. package/node_modules/exceljs/dist/es5/utils/string-buf.js.map +0 -1
  366. package/node_modules/exceljs/dist/es5/utils/string-builder.js +0 -32
  367. package/node_modules/exceljs/dist/es5/utils/string-builder.js.map +0 -1
  368. package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js +0 -61
  369. package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js.map +0 -1
  370. package/node_modules/exceljs/dist/es5/utils/typed-stack.js +0 -23
  371. package/node_modules/exceljs/dist/es5/utils/typed-stack.js.map +0 -1
  372. package/node_modules/exceljs/dist/es5/utils/under-dash.js +0 -168
  373. package/node_modules/exceljs/dist/es5/utils/under-dash.js.map +0 -1
  374. package/node_modules/exceljs/dist/es5/utils/utils.js +0 -171
  375. package/node_modules/exceljs/dist/es5/utils/utils.js.map +0 -1
  376. package/node_modules/exceljs/dist/es5/utils/xml-stream.js +0 -151
  377. package/node_modules/exceljs/dist/es5/utils/xml-stream.js.map +0 -1
  378. package/node_modules/exceljs/dist/es5/utils/zip-stream.js +0 -79
  379. package/node_modules/exceljs/dist/es5/utils/zip-stream.js.map +0 -1
  380. package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js +0 -230
  381. package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js.map +0 -1
  382. package/node_modules/exceljs/dist/es5/xlsx/rel-type.js +0 -18
  383. package/node_modules/exceljs/dist/es5/xlsx/rel-type.js.map +0 -1
  384. package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js +0 -139
  385. package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js.map +0 -1
  386. package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js +0 -85
  387. package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js.map +0 -1
  388. package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js +0 -32
  389. package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js.map +0 -1
  390. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +0 -24
  391. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +0 -1
  392. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js +0 -27
  393. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +0 -1
  394. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js +0 -51
  395. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +0 -1
  396. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js +0 -234
  397. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js.map +0 -1
  398. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js +0 -103
  399. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js.map +0 -1
  400. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js +0 -76
  401. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js.map +0 -1
  402. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +0 -35
  403. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +0 -1
  404. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +0 -32
  405. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +0 -1
  406. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +0 -53
  407. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +0 -1
  408. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +0 -97
  409. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +0 -1
  410. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js +0 -107
  411. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +0 -1
  412. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js +0 -92
  413. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +0 -1
  414. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +0 -61
  415. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +0 -1
  416. package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js +0 -51
  417. package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js.map +0 -1
  418. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +0 -30
  419. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +0 -1
  420. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +0 -27
  421. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +0 -1
  422. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js +0 -93
  423. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js.map +0 -1
  424. package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js +0 -112
  425. package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js.map +0 -1
  426. package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js +0 -158
  427. package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js.map +0 -1
  428. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js +0 -23
  429. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js.map +0 -1
  430. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js +0 -65
  431. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js.map +0 -1
  432. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +0 -47
  433. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +0 -1
  434. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +0 -61
  435. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +0 -1
  436. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js +0 -40
  437. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js.map +0 -1
  438. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +0 -35
  439. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +0 -1
  440. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +0 -62
  441. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +0 -1
  442. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js +0 -82
  443. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +0 -1
  444. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js +0 -98
  445. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +0 -1
  446. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +0 -40
  447. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +0 -1
  448. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js +0 -38
  449. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js.map +0 -1
  450. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +0 -38
  451. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +0 -1
  452. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +0 -59
  453. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +0 -1
  454. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +0 -63
  455. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +0 -1
  456. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js +0 -67
  457. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js.map +0 -1
  458. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js +0 -30
  459. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js.map +0 -1
  460. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +0 -62
  461. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +0 -1
  462. package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js +0 -91
  463. package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js.map +0 -1
  464. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +0 -40
  465. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +0 -1
  466. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js +0 -451
  467. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js.map +0 -1
  468. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +0 -275
  469. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +0 -1
  470. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +0 -25
  471. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +0 -1
  472. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +0 -38
  473. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +0 -1
  474. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +0 -45
  475. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +0 -1
  476. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +0 -77
  477. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +0 -1
  478. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +0 -42
  479. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +0 -1
  480. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +0 -71
  481. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +0 -1
  482. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +0 -22
  483. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +0 -1
  484. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +0 -43
  485. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +0 -1
  486. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +0 -28
  487. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +0 -1
  488. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +0 -88
  489. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +0 -1
  490. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +0 -38
  491. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +0 -1
  492. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +0 -52
  493. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +0 -1
  494. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +0 -43
  495. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +0 -1
  496. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +0 -75
  497. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +0 -1
  498. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +0 -22
  499. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +0 -1
  500. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +0 -66
  501. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +0 -1
  502. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +0 -22
  503. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +0 -1
  504. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js +0 -78
  505. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js.map +0 -1
  506. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js +0 -247
  507. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +0 -1
  508. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js +0 -28
  509. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +0 -1
  510. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js +0 -32
  511. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +0 -1
  512. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +0 -69
  513. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +0 -1
  514. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js +0 -126
  515. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +0 -1
  516. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +0 -50
  517. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +0 -1
  518. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +0 -26
  519. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +0 -1
  520. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js +0 -52
  521. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js.map +0 -1
  522. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +0 -35
  523. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +0 -1
  524. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +0 -24
  525. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +0 -1
  526. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js +0 -46
  527. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +0 -1
  528. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +0 -32
  529. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +0 -1
  530. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js +0 -99
  531. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +0 -1
  532. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js +0 -32
  533. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js.map +0 -1
  534. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js +0 -45
  535. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +0 -1
  536. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +0 -37
  537. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +0 -1
  538. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js +0 -128
  539. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js.map +0 -1
  540. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +0 -51
  541. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +0 -1
  542. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +0 -83
  543. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +0 -1
  544. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +0 -84
  545. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +0 -1
  546. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +0 -190
  547. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +0 -1
  548. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js +0 -32
  549. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +0 -1
  550. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js +0 -513
  551. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +0 -1
  552. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js +0 -27
  553. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js.map +0 -1
  554. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js +0 -58
  555. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js.map +0 -1
  556. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js +0 -47
  557. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js.map +0 -1
  558. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js +0 -53
  559. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js.map +0 -1
  560. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js +0 -47
  561. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js.map +0 -1
  562. package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js +0 -61
  563. package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js.map +0 -1
  564. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +0 -98
  565. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +0 -1
  566. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js +0 -92
  567. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +0 -1
  568. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js +0 -99
  569. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +0 -1
  570. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js +0 -114
  571. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +0 -1
  572. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js +0 -39
  573. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js.map +0 -1
  574. package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js +0 -139
  575. package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js.map +0 -1
  576. package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js +0 -185
  577. package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js.map +0 -1
  578. package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js +0 -66
  579. package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js.map +0 -1
  580. package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js +0 -106
  581. package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js.map +0 -1
  582. package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js +0 -308
  583. package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js.map +0 -1
  584. package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js +0 -175
  585. package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js.map +0 -1
  586. package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js +0 -59
  587. package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js.map +0 -1
  588. package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js +0 -53
  589. package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js.map +0 -1
  590. package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js +0 -118
  591. package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js.map +0 -1
  592. package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js +0 -612
  593. package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js.map +0 -1
  594. package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js +0 -46
  595. package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js.map +0 -1
  596. package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js +0 -75
  597. package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +0 -1
  598. package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js +0 -30
  599. package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +0 -1
  600. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js +0 -89
  601. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js.map +0 -1
  602. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js +0 -28
  603. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js.map +0 -1
  604. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js +0 -42
  605. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js.map +0 -1
  606. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js +0 -40
  607. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +0 -1
  608. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js +0 -123
  609. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js.map +0 -1
  610. package/node_modules/exceljs/dist/es5/xlsx/xlsx.js +0 -697
  611. package/node_modules/exceljs/dist/es5/xlsx/xlsx.js.map +0 -1
  612. package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js +0 -5
  613. package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js.map +0 -1
  614. package/node_modules/exceljs/dist/exceljs.bare.js +0 -55253
  615. package/node_modules/exceljs/dist/exceljs.bare.js.map +0 -761
  616. package/node_modules/exceljs/dist/exceljs.bare.min.js +0 -45
  617. package/node_modules/exceljs/dist/exceljs.bare.min.js.map +0 -1
  618. package/node_modules/exceljs/dist/exceljs.js +0 -59900
  619. package/node_modules/exceljs/dist/exceljs.js.map +0 -1083
  620. package/node_modules/exceljs/dist/exceljs.min.js +0 -45
  621. package/node_modules/exceljs/dist/exceljs.min.js.map +0 -1
  622. package/scripts/deploy-test.sh +0 -309
package/shared/scope.mjs CHANGED
@@ -39,7 +39,7 @@ export function isRevoked(jti, { denylistPath = process.env.TRADEMARK_MCP_TOKEN_
39
39
  let text;
40
40
  try { text = readFileSync(denylistPath, "utf8"); }
41
41
  catch (e) {
42
- // FAIL CLOSED ( bb8's F14; overwatch ruling, recorded on 1889 for the owner's
42
+ // FAIL CLOSED (found in review; ruled and recorded for the owner's
43
43
  // review with the reversal path, which is this function).
44
44
  //
45
45
  // This returned false — "not revoked" — on any unreadable list, and that is how a revoked key kept
@@ -64,7 +64,7 @@ export function isRevoked(jti, { denylistPath = process.env.TRADEMARK_MCP_TOKEN_
64
64
  *
65
65
  * NOT AN AUTHENTICATOR. This parses without verifying, which is safe for exactly one job: reading the
66
66
  * revocation handle out of our own `mintToken` output so `clearotron connect` can write it down
67
- * (, owner ruling: record key IDs, never secrets). Anything answering "is this token
67
+ * (owner ruling: record key IDs, never secrets). Anything answering "is this token
68
68
  * good" goes through `verifyToken`; a caller handing this function a token from the WIRE is the defect.
69
69
  *
70
70
  * Returns null rather than throwing on a malformed string — the caller is recording, and a record of
@@ -302,7 +302,7 @@ export const USER_ARTIFACTS = new Set(["report"]);
302
302
  // SEALED MODEL IDENTITY, BILLED COUNTS, and THE ENGINE'S JUDGMENT OF ITS OWN OUTPUT. Which model tier
303
303
  // ran a stage and what it cost is the firm's cost structure, not an audit fact — and
304
304
  // `withdrawn_reason` ("confabulated attribution") is an assessment of our own quality that the
305
- // client has no counterpart for, already ruled un-forwardable (, scrub.mjs).
305
+ // client has no counterpart for, already ruled un-forwardable (scrub.mjs).
306
306
  //
307
307
  // That line is cheap to hold because the code had already drawn it: events.mjs says "Model identity is
308
308
  // deliberately NOT projected here: decision_timeline / run_changes are narrative surfaces", trace.mjs and
@@ -713,7 +713,7 @@ export function attributionOf(scope, onBehalfOf = null) {
713
713
  // the delegate does not widen what the token may do.
714
714
  const delegate = typeof onBehalfOf === "string" && onBehalfOf.trim() ? onBehalfOf.trim() : null;
715
715
  if (!delegate) return self;
716
- // COUNTS AND IDENTIFIERS, NOT PROSE ('s scope note): this file is a matter record. A delegate
716
+ // COUNTS AND IDENTIFIERS, NOT PROSE (the scope note): this file is a matter record. A delegate
717
717
  // carrying whitespace, a colon or a newline would forge the compound form or spill a sentence into the
718
718
  // archive, so anything that is not a bare identifier is refused and the verified half stands alone.
719
719
  if (!/^[A-Za-z0-9._%+@-]{1,128}$/.test(delegate)) return self;
@@ -759,7 +759,7 @@ export function authorize(scope, toolName, args = {}) {
759
759
  }
760
760
  // The PREVIEW only, deliberately — the same line the internal branch draws below.
761
761
  //
762
- // #53's defect was that the FREE call every principal makes first died on a message naming an
762
+ // The defect was that the FREE call every principal makes first died on a message naming an
763
763
  // internal doc, so that is the call the stamp exists to rescue. Extending it to start_run would
764
764
  // quietly remove a spend gate: an ops token's sub is often a connector name or "local", buildJob
765
765
  // fills forwarderEmail from `${forwarder}@example.com` when none is given, and the result is a real
@@ -28,7 +28,7 @@
28
28
  // today and zero right ones tomorrow. `orphanReason` cannot discriminate either — all six carry one, and
29
29
  // `clearotron-client-mcp`'s used to say the opposite thing — never install it eagerly, because starting
30
30
  // it was the on-demand consent that opened client-account access. That row was rewritten on 2026-09-03
31
- // when the owner superseded the posture (, settled point 2), which does not rescue the
31
+ // when the owner superseded the posture (settled point 2), which does not rescue the
32
32
  // rejected repair: the reason a skip-on-orphan filter fails is that `runsOn: []` records boxes MEASURED,
33
33
  // and every unit here starts life unmeasured.
34
34
  //
@@ -74,7 +74,7 @@ export const SERVER_INSTALL_SET = Object.freeze([
74
74
  // "On demand is fine" — starting the door WAS the consent that opened client-account access, so an
75
75
  // installer that placed it would have made that consent meaningless.
76
76
  //
77
- // The owner superseded that knowingly (, settled point 2): the door auto-starts
77
+ // The owner superseded that knowingly (settled point 2): the door auto-starts
78
78
  // with the product and THE PER-ACCOUNT KEY IS THE GATE, not whether a process runs. A door with no
79
79
  // key issued refuses everything, which is the same protection with a different mechanism — and a
80
80
  // better one, because it does not depend on a reader finding a verb.
@@ -85,7 +85,7 @@ export const SERVER_INSTALL_SET = Object.freeze([
85
85
  ]);
86
86
 
87
87
  /**
88
- * Installed and enabled ONLY by `clearotron connect`, never by an install path (,
88
+ * Installed and enabled ONLY by `clearotron connect`, never by an install path (
89
89
  * owner ruling 2026-08-31). Named here so a reader of this file learns it exists and learns it is
90
90
  * excluded on purpose — an absence with no reason beside it is the thing this module is against.
91
91
  */
@@ -98,7 +98,7 @@ export const ON_DEMAND_UNITS = Object.freeze([]);
98
98
  /**
99
99
  * Which of the installed units a `--background` REFRESH must restart.
100
100
  *
101
- * — Hera's review of the F15 fix. `enable --now` on an ALREADY-ACTIVE unit is a
101
+ * — A review of that fix. `enable --now` on an ALREADY-ACTIVE unit is a
102
102
  * no-op, so a refresh over an updated checkout leaves the old process running the old files. The restart
103
103
  * loop that exists for exactly that named a hardcoded PAIR — the same pair the health check named, three
104
104
  * lines below it — with the same stale justification: "the oneshot and its triggers pick the new copies
@@ -226,7 +226,7 @@ export function commitWithAuditRow({ audit, gitCommit, files, message, by, row }
226
226
  // portal-service RECIPE_REPO_ROOT || <the profile repo root> → the config store → saves work
227
227
  // recipe-service RECIPE_REPO_ROOT || join(HERE, "..") → the PRODUCT CHECKOUT → FATAL
228
228
  //
229
- // Two ends of one contract measuring different things ('s class). The portal consulted the profile
229
+ // Two ends of one contract measuring different things (the class). The portal consulted the profile
230
230
  // root as a second chance and the recipe-service did not, so one door came up and the other exited 1.
231
231
  //
232
232
  // AND THE DIVERGENT FALLBACK IS THE DANGEROUS ONE, which is why this is not merely tidying. The product
@@ -320,7 +320,7 @@ export function makeStoreCommit({ repoRoot, log = () => {}, what = "store", retr
320
320
  } catch (e) {
321
321
  const detail = detailOf(e);
322
322
  if (isTransientGitFault(detail) && attempt <= retries) { napping(waitMs * attempt); continue; }
323
- // NAMED, not merely reported. 's line held that a failed commit is a permanent sync blocker
323
+ // NAMED, not merely reported. That line held that a failed commit is a permanent sync blocker
324
324
  // and belongs in the journal; it is no longer permanent — the next save completes it — but the
325
325
  // operator still needs to know WHICH fault, because a hook and a full disk want different people.
326
326
  log(`${what} COMMIT FAILED after the write landed — the save is LIVE and the paths are STAGED, `
@@ -15,7 +15,7 @@
15
15
  //
16
16
  // ── `.test(` IS NOT COUNTED, AND THAT IS THE WHOLE CALIBRATION ─────────────────────────────────────
17
17
  //
18
- // 's own thread records the miscount: 177 `RegExp.prototype.test` calls counted as subtests,
18
+ // its own thread records the miscount: 177 `RegExp.prototype.test` calls counted as subtests,
19
19
  // genuine subtests ZERO. So this counts `assert.<something>` and a `test(` at the START of a line, and
20
20
  // nothing else. Two independent checks that it is calibrated: on the tree it was minted from, the
21
21
  // counted test sites match the EXECUTED totals at 415/415 for portal-ui, 382 against 386 for
@@ -105,7 +105,7 @@ export function rootScriptDisagreements(readManifest, declared = CENSUS_ROOT_SCR
105
105
  //
106
106
  // while 581 of 639 driver test files stop being collected. Both sides agreed because both sides
107
107
  // enumerate through the list ABOVE, and nothing in this repository opened a package.json. The census
108
- // was move-proof about the tests and blind to itself being pointed somewhere else, which is 's own
108
+ // was move-proof about the tests and blind to itself being pointed somewhere else, which is its own
109
109
  // doctrine line: an enumerated check is blind to the thing moving; a discovered check is blind to
110
110
  // ITSELF moving.
111
111
  //
@@ -237,7 +237,7 @@ export function lossBetween(prevPerFile, nextPerFile) {
237
237
  }
238
238
 
239
239
  /**
240
- * tracker issue 205 — WHICH BUCKET EACH DIFFERENCE LANDS IN, and which of them refuses a re-stamp.
240
+ * WHICH BUCKET EACH DIFFERENCE LANDS IN, and which of them refuses a re-stamp.
241
241
  *
242
242
  * `lossBetween` above answers what MOVED. This answers what that MEANS, and it is a separate question
243
243
  * with a separate history. A rising skip count is a real difference and it used to refuse: it landed
@@ -343,7 +343,7 @@ export function countTestSites(text) {
343
343
  * The 1-based LINE of every assert site, in source order. One site per `assert.<x>` occurrence, so a
344
344
  * line carrying two of them appears twice — the same arithmetic `countTestSites` reports.
345
345
  *
346
- * 's fifth member needs the LINES, not just the total: a GATED arm — `if (!process.env.X) return;`
346
+ * That fifth member needs the LINES, not just the total: a GATED arm — `if (!process.env.X) return;`
347
347
  * at the top of a test body — leaves every token in place, so a count cannot see it and only "did this
348
348
  * line ever run" can. That question is answered by a coverage pass, and the two sides must ask it of the
349
349
  * SAME sites, so the rule lives here once rather than being re-typed against the same file.
@@ -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
  // tty-style.mjs — weight where the meaning is, and NOTHING when the reader is not a terminal.
4
4
  //
5
- // ── why this exists (, owner ruling 2026-08-31) ────────────────────────────────────
5
+ // ── why this exists (owner ruling 2026-08-31) ────────────────────────────────────
6
6
  //
7
7
  // "new terminals can do things like bold and colours etc — good formatting impresses people because it's
8
8
  // made clear to them someone put the time in." That is a product argument, not a decorative one: setup
@@ -102,7 +102,7 @@ export const USPTO_PEAK_GB = Math.round((USPTO_INDEX_GB + USPTO_PEAK_WAL_GB) * 1
102
102
  //
103
103
  // It was pessimistic by 4x. Charging 1.0 demanded ~43.8 GB for a build whose index came to 10.1 GB, and
104
104
  // INSTALL.md told the reader to provision 60 GB. On the free tier that is the difference between "I can
105
- // try this on the disk I have" and "I cannot", which is the whole of 's Why.
105
+ // try this on the disk I have" and "I cannot", which is the whole of the Why.
106
106
  //
107
107
  // Carried at 0.35 against 0.24 measured — a 46% margin, and the margin is doing real work rather than
108
108
  // decorating a guess:
@@ -158,7 +158,7 @@ export function discoveredLoops(text) {
158
158
 
159
159
  // ── THE EARLY-RETURN HALF ──────────────────────────────────────────────────────────────────
160
160
  //
161
- // 's ruling names two shapes. `discoveredLoops` above is the loop half. This is the other, and
161
+ // That ruling names two shapes. `discoveredLoops` above is the loop half. This is the other, and
162
162
  // the two are not alike enough to share a detector:
163
163
  //
164
164
  // test("the tree is clean", () => {
@@ -165,21 +165,50 @@ question to the issuing firm rather than reconstructing an answer.
165
165
 
166
166
  ## Asking what-if
167
167
 
168
- A what-if re-runs **one step** of a finished search under a changed assumption, in a sandbox. It is the
169
- right tool when the user asks *what if this were different* — and the wrong one when they want a fresh
170
- answer about a different mark, which is a new search.
171
-
172
- - **Plan, read the honesty note aloud, then commit.** `what_if_plan` says in plain words how complete
173
- the answer will be. Re-running an early step does **not** re-run the risk read or the report on top of
174
- it, and a user who is not told that will read a partial output as a new verdict. Say it before you
175
- spend, not after.
176
- - **It costs money and it is not instant.** The experiment queues on the server and runs there. Tell the
177
- user it is running and collect it with `what_if_result` rather than promising an immediate answer.
168
+ A what-if answers *what if this were different* about a search that has already run. There are two, and
169
+ the search's own state decides which one you can have:
170
+
171
+ - a **step re-run**, while the search is still live — one step runs again under a changed assumption, in
172
+ a sandbox;
173
+ - a **memo**, once the search is delivered or archived the evidence already gathered is read again
174
+ under the assumption, and a short document comes back naming the report it belongs to.
175
+
176
+ Either is the wrong tool when the user wants a fresh answer about a different mark. That is a new search.
177
+
178
+ **On a delivered report, offer the memo.** A step re-run is refused there, and that refusal is the one
179
+ that used to end the conversation with *commission a fresh search*. It should not. A user holding a
180
+ report who asks *what if the Korean application were abandoned* is asking the most ordinary question
181
+ there is, and the memo is the answer to it — so check the search's state before you tell anyone the
182
+ question cannot be answered.
183
+
184
+ - **Name the step when you ask for a re-run; do not when you ask for a memo.** `what_if_plan` has to be
185
+ told which step, and asking without one is an error rather than a refusal you can relay. A memo re-runs
186
+ no step: pass the user's assumption as `instructions` and nothing else.
187
+ - **Plan, read the honesty note aloud, then commit.** `what_if_plan` says in plain words how complete the
188
+ answer will be. Re-running an early step does **not** re-run the risk read or the report on top of it,
189
+ and a user who is not told that will read a partial output as a new verdict. Say it before you spend,
190
+ not after.
191
+ - **It is not instant.** Both kinds queue on the server and run there. Tell the user it is running and
192
+ collect it with `what_if_result` rather than promising an immediate answer.
178
193
  - **You do not choose how it runs.** There is no model or tier for you to pick, and asking for one is
179
194
  refused. Express the change in `instructions`, in the user's own terms.
180
- - **The original is untouched, and say so.** A what-if never edits the delivered search or its report.
181
- Present the result as *what this step would have said under that assumption*, never as a correction to
182
- the report the user already holds.
195
+ - **The original is untouched, and say so.** Neither kind edits the delivered search or its report.
196
+ Present the result as *what this would have said under that assumption*, never as a correction to the
197
+ report the user already holds.
198
+
199
+ ### What a memo is, and what it is not
200
+
201
+ Say all three when you offer one, not when you deliver it. A user who learns the bounds afterwards has
202
+ already read it as something it is not.
203
+
204
+ - **It searches nothing.** No register is queried and no new evidence is gathered. It reasons over what
205
+ the search already found, and costs nothing beyond model time.
206
+ - **It cannot confirm the assumption.** It says what would follow *if* the assumption held, and states
207
+ what the smallest piece of work would be that could settle whether it does. It is not a finding that
208
+ the Korean application was abandoned; it is what that would mean if it were.
209
+ - **A stopped search takes neither kind.** A search its owner cancelled has evidence that was never
210
+ finished, and reasoning over a half-gathered record is how a memo comes to say more than the search
211
+ ever knew.
183
212
 
184
213
  ## Before you start a search
185
214
 
@@ -1,69 +0,0 @@
1
- [Unit]
2
- Description=Watch the prelim-search driver queue for new job files
3
- Documentation=https://github.com/CordilleraSarl/Clearotron/blob/main/driver/README.md
4
-
5
- [Path]
6
- # Watch EVERY prelim-capable agent's queue (inotify-backed). When a *.json job lands in any of them, start
7
- # the drain service — which runs the job as the agent whose workspace it sits in. One PathExistsGlob per
8
- # watched queue ("Multiple directives may be combined … to watch multiple paths" — systemd.path(5)).
9
- # Event-driven, sub-second; nothing of ours runs except while a job is being processed. The
10
- # prelim-driver.timer fallback re-drains every ~90s so a queue NOT listed here (e.g. a brand-new agent, or
11
- # a mid-path glob systemd fails to arm) still gets picked up — the watcher is an optimisation over the timer,
12
- # never the sole drain path.
13
- #
14
- # These lines MUST mirror config.queueDirs (driver.config.mjs) — the runner drains those regardless, so any
15
- # queue the runner scans but the watcher misses only pays the ≤90s timer latency (the pre-fix bug: this unit
16
- # watched only the headless dir below, which does not exist in an agent-workspace deployment, so event-driven
17
- # pickup was dead and the queue drained on the timer alone — and wedged entirely whenever the timer was down).
18
- #
19
- # ── tracker issue 774 — THESE GLOBS ARE THIS DEPLOYMENT'S WORKSPACE ROOT, NOT THE CODE DEFAULT ────────────────────
20
- #
21
- # A .path unit CANNOT read an environment variable. There is no `%E`, no EnvironmentFile, no expansion:
22
- # the prefix below is a literal, and it is the one thing in the queue lane that CLEAROTRON_WORK_DIR
23
- # cannot reach. So this file and `CLEAROTRON_WORK_DIR` in %h/.env are two spellings of one fact, and
24
- # nothing at runtime notices when they stop agreeing.
25
- #
26
- # WHAT DISAGREEMENT LOOKS LIKE: the runner drains $CLEAROTRON_WORK_DIR; this watcher arms an inotify on
27
- # a path nothing writes to. Jobs land, the watcher never fires, no unit fails, no log line appears, and
28
- # the only thing still draining is the 90s prelim-driver.timer — so the lane looks alive and every job is
29
- # late. If the timer is also down, the queue simply stops.
30
- #
31
- # tracker issue 774 moved the CODE default for CLEAROTRON_WORK_DIR from `$HOME/.openclaw` to
32
- # `$HOME/trademark/workspace`. These globs did NOT move with it, and that is correct: they must track the
33
- # deployment, and the deployment pins `CLEAROTRON_WORK_DIR=<home>/.openclaw` in its EnvironmentFile
34
- # (the production env example) precisely so its run directories do not move under a live queue. Change one of
35
- # these three lines only together with that variable, on the same box, in the same change.
36
- # driver/test/data-plane-defaults.test.mjs asserts this file and the production env example still agree.
37
- #
38
- # AGENT-WORKSPACE deployment (this VM): one line per prelim-capable agent. We watch each CONCRETE queue dir
39
- # (only the final *.json is a wildcard) so systemd arms an inotify watch directly on the queue directory —
40
- # a mid-path `workspace-*` glob is not reliably armed. Add a line when a new prelim agent is onboarded; until
41
- # then the 90s timer + dynamic config.queueDirs still pick its jobs up.
42
- # ── RESOLVED AT INSTALL (tracker issue 1876 option B) ────────────────────────────────────────
43
- # `@CLEAROTRON_WORK_DIR@` is substituted by render-units.mjs when it writes the resolved copy into
44
- # ~/.config/systemd/user/. That closes the half of the disagreement above that VARIES BY MACHINE: the
45
- # workspace root is now taken from the same value the runner drains, so the two spellings cannot drift
46
- # apart on an install.
47
- #
48
- # THE AGENT SEGMENT IS NOT SUBSTITUTED, AND THAT IS A LIMIT WORTH STATING RATHER THAN HIDING.
49
- # `driver.config.mjs` builds the queue as join(workspaceRoot, workspaceDirName(agent), "studio",
50
- # "prelim-search", "queue") — so the root is configuration and `workspace-clawdi` is a per-deployment
51
- # choice, already documented by the commented alternative below. Substituting it would need a variable
52
- # nothing sets today, and inventing one to make this line look fully resolved would be the more
53
- # dangerous kind of fix: it would read as configured while resolving to whatever the default happened
54
- # to be. One real value substituted beats two that look substituted.
55
- PathExistsGlob=@CLEAROTRON_WORK_DIR@/workspace-clawdi/studio/prelim-search/queue/*.json
56
- # One line per ADDITIONAL prelim-capable agent this deployment onboards, e.g.
57
- #PathExistsGlob=%h/.openclaw/workspace-<agent>/studio/prelim-search/queue/*.json
58
- # Two lines here named individual people at this firm and shipped their identities to every clone
59
- # (tracker issue 1014). They are a deployment's own roster, not the product's. Omitting a line costs LATENCY and
60
- # not correctness: as the note above says, the 90s timer and the dynamic config.queueDirs still
61
- # collect that agent's jobs — the watch only makes them immediate.
62
- # HEADLESS deployment (docs/INTAKE.md): a standalone product with no agent workspaces instead watches the one
63
- # explicit queue named by CLEAROTRON_QUEUE_DIR (default ~/prelim-queue). Uncomment for that mode; harmless to
64
- # leave active in a mixed deployment (never matches when the dir is absent), mirroring the additive queueDirs.
65
- #PathExistsGlob=%h/prelim-queue/*.json
66
- Unit=prelim-driver.service
67
-
68
- [Install]
69
- WantedBy=default.target
@@ -1,86 +0,0 @@
1
- # GENERIC UNIT — safe to sync verbatim on deploy: no deployment-specific values live here; hostnames,
2
- # credentials and paths all come from EnvironmentFile=%h/.env. (Contrast the TEMPLATE units — profile/
3
- # recipe/portal-service, remote/client-mcp — whose live copies hold real CF Access values and must be
4
- # diffed, never overwritten. Both kinds are inventoried in docs/architecture/05-config-governance.md.)
5
- [Unit]
6
- Description=Prelim-search deterministic driver — drain the job queue
7
- Documentation=https://github.com/CordilleraSarl/Clearotron/blob/main/driver/README.md
8
- # No gateway dependency: compute runs on the standalone engine and delivery defaults to handoff
9
- # (outbox packets) — see docs/DELIVERY.md. Nothing here needs OpenClaw.
10
- # Type=oneshot fired by prelim-driver.path: if the runner fails its preflight on every retrigger
11
- # (exit 3 — no longer reachable since tracker issue 1014 deleted the gateway preflight; kept because the
12
- # start-limit interaction below is a property of Type=oneshot, not of that preflight), the default
13
- # start-limit (5 failures in 10s) locks the service out and can drive the .path unit's TriggerLimit
14
- # (200/2s) into a permanently failed state. Never rate-limit starts (Type=oneshot, no Restart= —
15
- # nothing here can loop unbounded); the runner also sleeps before its preflight-fail exit so the
16
- # retrigger cadence stays slow.
17
- StartLimitIntervalSec=0
18
-
19
- [Service]
20
- # oneshot: systemd guarantees a single instance, so two queue events can't start two concurrent drains.
21
- Type=oneshot
22
- EnvironmentFile=%h/.env
23
- # BOTH ROUTES THE DOCUMENTS PERMIT. INSTALL.md §1 requires "a coding CLI on your PATH, signed in" and
24
- # deliberately names no install route, so the reader picks one. The npm-global layout was the only one
25
- # on this line; claude.ai/install.sh -- the route a reader most often takes -- lands the binary in
26
- # ~/.local/bin, which was not here. The engine then failed `spawn claude ENOENT` and every stage burned
27
- # its full retry ladder for zero tokens, a failure that reads as a model problem and is not one.
28
- # CLEAROTRON_CLAUDE_PATH in the EnvironmentFile above is the exact answer for any other location; this
29
- # line is what makes the two documented layouts work without one.
30
- Environment=PATH=%h/.local/bin:%h/.npm-global/bin:/usr/local/bin:/usr/bin:/bin
31
- Environment=OPENCLAW_HOME=%h
32
- # THIS deployment's configuration is the EnvironmentFile above and nothing else. runner.mjs is one of
33
- # the CLI entries that reads <repo>/.env for a laptop first run (shared/env-local.mjs); a checkout has
34
- # no .env today, so this changes nothing — which is the point. It makes "no .env in the checkout" a
35
- # guarantee instead of a coincidence, so a stray file left by a debugging session cannot quietly
36
- # reconfigure the queue drain. Same line on trademark-artifacts-http.service, the other unit that
37
- # starts a wired entry.
38
- Environment=CLEAROTRON_NO_ENV_FILE=1
39
- # Deployment hostnames (CLEAROTRON_REPORTS_URL, CLEAROTRON_MCP_URL, CLEAROTRON_CLIENT_MCP_URL, CLEAROTRON_ACCESS_DOMAIN,
40
- # CLEAROTRON_STAFF_POOL_ROOT) live in the EnvironmentFile above, NOT here — this unit is git-tracked and generic, so a
41
- # hostname baked in becomes every deployment's hostname. They are non-secret; .env is simply the one place
42
- # this deployment's config already lives (docs/architecture/04-configuration-reference.md).
43
- #
44
- # Do NOT reintroduce a placeholder value for any of them. CLEAROTRON_CLIENT_MCP_URL was pinned here to a
45
- # example.com host, which is WORSE than leaving it unset: render.mjs's spec 61 §E fail-closed branch omits
46
- # the client connector when the var is EMPTY, so a placeholder defeated the guard and shipped a dead
47
- # tokenised link in the client export (2026-07-19). Unset ⇒ omitted; wrong ⇒ delivered.
48
- # NO WorkingDirectory=, DELIBERATELY, and this is the line not to re-add defensively.
49
- #
50
- # systemd does not expand environment variables in WorkingDirectory= -- it takes a path and specifiers
51
- # only -- so a config-derived checkout cannot go there. It does expand ${VAR} in ExecStart= ARGUMENTS,
52
- # which is where the path below sits.
53
- #
54
- # Dropping it is safe because nothing here reads the working directory: runner.mjs never calls
55
- # process.cwd(), and driver/driver.config.mjs:24 resolves REPO_ROOT as dirname(DRIVER_DIR) from
56
- # import.meta.url. The code finds itself from where its file is, not from where it was started.
57
- #
58
- # THE HARDCODED NAME THIS REPLACES could not work after a documented install. INSTALL.md §2 says
59
- # `git clone <this-repo> && cd <repo>`, which produces a directory named after the repository -- and
60
- # the name in this unit was the repository this one was cut FROM. WorkingDirectory then failed and the
61
- # unit never started, on a host nobody is watching.
62
- # runner.mjs claims each queued job atomically, runs the pipeline, marks .done/.failed.
63
- ExecStart=/usr/bin/node ${CLEAROTRON_CHECKOUT_DIR}/driver/runner.mjs
64
- # Refresh the portal's flag snapshot after every drain, from THIS unit because it has the engine
65
- # EnvironmentFile. The clause that used to sit here — "the portal deliberately has none (AUD-shadowing
66
- # rule)" — is out of date: the owner's 2026-08-26 "one configuration per server box" ruling gave every
67
- # unit the same `EnvironmentFile=%h/.env` and removed the second source of truth the AUD protection
68
- # defended against. The portal and worker units now refresh it at start too (tracker issue 170); a drain
69
- # is still worth refreshing after, because a run is when the engine's own posture is most recently proven.
70
- # A snapshot that only refreshes when somebody remembers eventually describes a configuration nobody
71
- # is running (flag-snapshot.mjs header). `-` prefix: a snapshot failure must never fail the drain.
72
- ExecStartPost=-/usr/bin/node ${CLEAROTRON_CHECKOUT_DIR}/driver/flag-snapshot.mjs
73
- # Ceiling for a WEDGED runner ONLY — never a deadline for honest work. oneshot means the WHOLE drain
74
- # runs inside "activating", and a multi-job backlog (runs ~1.5h+ each; one observed gather member alone
75
- # ~2h26m) makes honest activations unbounded. The runner bounds its own wall time instead: past its
76
- # admission budget (runner.mjs CLEAROTRON_ADMISSION_BUDGET_MS, default 2h) it claims no NEW jobs, finishes
77
- # what's in flight and exits 0 — leftover queue *.json re-match the .path glob, which retriggers a fresh
78
- # activation with a fresh clock. So a legit activation is bounded by budget (2h) + one run's wall
79
- # (worst observed component ~2h30m), and this ceiling MUST stay above that sum (see
80
- # driver/test/runner.admission-budget.test.mjs) so it only ever fires on a wedged runner (one
81
- # SIGTERM-immune engine child). Was 0 (infinite), which let that wedge hold the unit "activating"
82
- # forever with no backstop.
83
- TimeoutStartSec=6h
84
- Nice=5
85
-
86
- # NOTE: not [Install]ed — it is activated by prelim-driver.path, not enabled standalone.
@@ -1,14 +0,0 @@
1
- [Unit]
2
- Description=Prelim-driver queue-drain fallback — re-scan every agent queue on a fixed cadence
3
- Documentation=https://github.com/CordilleraSarl/Clearotron/blob/main/driver/README.md
4
-
5
- [Timer]
6
- # Safety net behind the event-driven prelim-driver.path. runner.mjs claims jobs atomically, so a periodic
7
- # re-drain is cheap and can NEVER double-run a job the .path already picked up. It guarantees any queue the .path doesn't explicitly watch (e.g. a brand-new agent workspace) still
8
- # drains within ~90s — the self-healing backstop whose absence let a Alex-forwarded job silently never-run.
9
- OnBootSec=2min
10
- OnUnitActiveSec=90s
11
- Unit=prelim-driver.service
12
-
13
- [Install]
14
- WantedBy=timers.target
@@ -1,27 +0,0 @@
1
- [Unit]
2
- Description=Watch the prelim delivery outbox for finished-run markers
3
- Documentation=https://github.com/CordilleraSarl/Clearotron/blob/main/driver/README.md
4
-
5
- [Path]
6
- # Workstream B — instant delivery. When a handoff-mode run finishes, the driver drops <runId>.pending here
7
- # (the marker's first line names the forwarder agent). inotify-backed, sub-second: a marker fires
8
- # prelim-outbox.service, which wakes that agent to run the prelim-deliver skill NOW instead of waiting up to
9
- # 55m for the HEARTBEAT completion-watch (which stays enabled as the backstop). Event-driven; nothing of
10
- # ours runs except while a delivery is being dispatched.
11
- # ── tracker issue 774 — THIS GLOB IS THIS DEPLOYMENT'S OUTBOX, NOT THE CODE DEFAULT ───────────────────────────────
12
- #
13
- # Same hazard as prelim-driver.path, and read that unit's note for the full version. A .path unit cannot
14
- # read an environment variable, so this literal and the driver's `config.outboxDir`
15
- # (CLEAROTRON_OUTBOX_DIR, else <CLEAROTRON_WORK_DIR>/prelim-outbox) are two spellings of one fact with
16
- # nothing checking them against each other. Disagree, and finished runs drop their `.pending` markers
17
- # where this watcher is not looking: no delivery wake, no failure, no log — the 55m completion-watch
18
- # backstop quietly becomes the delivery path.
19
- #
20
- # tracker issue 774 moved the CODE default for the workspace root; this glob did not move, because the deployment
21
- # pins `CLEAROTRON_WORK_DIR` and `CLEAROTRON_OUTBOX_DIR` explicitly (the production env example). Change this line
22
- # only together with those variables, on the same box, in the same change.
23
- PathExistsGlob=%h/.openclaw/prelim-outbox/*.pending
24
- Unit=prelim-outbox.service
25
-
26
- [Install]
27
- WantedBy=default.target
@@ -1,37 +0,0 @@
1
- [Unit]
2
- Description=Prelim delivery — wake the forwarder agent to send finished runs (prelim-deliver)
3
- Documentation=https://github.com/CordilleraSarl/Clearotron/blob/main/driver/README.md
4
- # This unit is the OPENCLAW-ADJACENT reference integration (deliver-trigger.sh wakes an OpenClaw
5
- # agent to send). A headless integrator replaces this pair with their own outbox watcher — the
6
- # contract is docs/DELIVERY.md, not this unit.
7
- After=openclaw-gateway.service
8
- Wants=openclaw-gateway.service
9
-
10
- [Service]
11
- # oneshot: systemd serializes, so two outbox events can't start two concurrent wakes.
12
- Type=oneshot
13
- EnvironmentFile=%h/.env
14
- Environment=PATH=%h/.npm-global/bin:/usr/local/bin:/usr/bin:/bin
15
- Environment=OPENCLAW_HOME=%h
16
- # NO WorkingDirectory=, deliberately -- see prelim-driver.service for the full reasoning. systemd does
17
- # not expand variables in WorkingDirectory=, it does expand ${VAR} in ExecStart= arguments, and nothing
18
- # here reads the working directory: this entry point resolves what it needs from its OWN file location.
19
- # Reads each *.pending marker, wakes the named agent ONCE to run the prelim-deliver skill (which sends every
20
- # sendPending run VERBATIM + marks .sent, idempotent), then clears the markers. The marker is only an
21
- # edge-trigger; status.sendPending + the .sent guard are the source of truth and the 55m HEARTBEAT watch is
22
- # the backstop, so a cleared/lost marker never loses a delivery and never double-sends.
23
- ExecStart=/bin/bash ${CLEAROTRON_CHECKOUT_DIR}/driver/deliver-trigger.sh
24
- # 2026-07-04 incident: TimeoutStartSec=0 (no ceiling) let ONE hung wake wedge the whole lane for 19h —
25
- # 1500 covers the v2+C5 trigger worst case: wake wall 870s + drain-wait 180s + backoff pacing sleep ≤300s.
26
- # the openclaw CLI completed its agent turn (stopReason=stop) but never exited (event loop parked in
27
- # ep_poll; its own --timeout did not enforce process exit), so the oneshot sat "activating" forever and
28
- # every later .pending marker was silently swallowed (marble-spire's delivery + VENZY's failure notice).
29
- # A real ceiling makes the unit SELF-HEALING: on timeout systemd kills the cgroup and fails the unit;
30
- # PathExistsGlob re-fires while markers remain, and the sendPending/.sent guards keep re-wakes idempotent.
31
- # 900s comfortably covers the slowest observed legitimate wake (copper-spire: ~13 min agent turn) — sends
32
- # that complete are never cut mid-flight because the ceiling exceeds the turn wall.
33
- TimeoutStartSec=1500
34
- TimeoutStopSec=30
35
- Nice=5
36
-
37
- # NOTE: not [Install]ed — it is activated by prelim-outbox.path, not enabled standalone.
@@ -1,21 +0,0 @@
1
- [Unit]
2
- Description=Prelim delivery rescan — fixed-cadence backstop behind the outbox watcher
3
- Documentation=https://github.com/CordilleraSarl/Clearotron/blob/main/driver/README.md
4
-
5
- [Timer]
6
- # C5 — deterministic delivery backstop. The instant lane (prelim-outbox.path) is edge-triggered off
7
- # *.pending markers, and its former backstop — the 55m HEARTBEAT completion-watch — does not run
8
- # 22:00–05:00 (activeHours), so a wake that FAILED (turn error, CLI hang, gateway-restart collision)
9
- # could leave a finished run undelivered all night. This timer fires the SAME prelim-outbox.service:
10
- # deliver-trigger.sh's rescan step re-drops a <runId>.pending marker for every run still
11
- # sendPending==true with no .sent, then processes them. Idempotent and paced: sendPending/.sent (and
12
- # the per-channel send receipts) are the source of truth, and the backoff sidecars in
13
- # prelim-outbox/backoff/ keep a persistently failing wake from hot-retrying.
14
- # OnUnitActiveSec is measured from prelim-outbox.service's LAST activation (the .path triggers the same
15
- # unit), so the rescan self-defers while the instant lane is busy — "hourly-ish", never stacked.
16
- OnBootSec=10min
17
- OnUnitActiveSec=50min
18
- Unit=prelim-outbox.service
19
-
20
- [Install]
21
- WantedBy=timers.target