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
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env node
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ // Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
4
+ //
5
+ // Removes the internal citation OPENER from comments and prose in the tree (tracker issue 309).
6
+ //
7
+ // The form is `tracker issue NNN — ` standing at the head of a sentence, where the citation is not part
8
+ // of what the sentence says but a label in front of it. Stripping the opener leaves the sentence intact:
9
+ //
10
+ // // tracker issue 1149 — the walk must start at the repository root
11
+ // // the walk must start at the repository root
12
+ //
13
+ // assert.ok(x, "Refs tracker issue 2075 — an absent file is a finding")
14
+ // assert.ok(x, "an absent file is a finding")
15
+ //
16
+ // WHY THE PATTERN LOOKS OVER-SPECIFIED. Three parts of it are load-bearing and each was measured, not
17
+ // reasoned:
18
+ //
19
+ // · THE CAPTURE GROUP. The match begins at the line opener — a comment leader, a quote, a bracket —
20
+ // and the replacement is `$1`, which puts that opener back. Without the group the sweep deletes the
21
+ // opening quote of every test name it touches, and a broken string literal is a syntax error in the
22
+ // lucky cases and a changed assertion in the unlucky ones.
23
+ // · `\s+` AFTER THE SEPARATOR, never `\s*`. `tracker issue 1149-12` is an ITEM suffix, not a citation
24
+ // followed by prose: there is no space after its hyphen. `\s*` eats the item number.
25
+ // · THE `i` FLAG. `Refs tracker issue NNN` is capitalised at the head of a commit-style line and is a
26
+ // fifth of the corpus.
27
+ //
28
+ // WHAT IT WILL NOT TOUCH, and both exclusions are BY NAME rather than by pattern, because a pattern that
29
+ // could recognise them could also stop recognising them:
30
+ //
31
+ // · THE FILES THAT USE A CITATION AS TEST DATA. Three tests feed a citation to the guard that refuses
32
+ // citations and assert what comes back. A sweep that rewrites their fixtures edits the corpus the
33
+ // guard is checked against, and the guard then passes on something it has stopped checking. That is
34
+ // a green tick bought by deleting the question.
35
+ // · THE FROZEN RENDERER. `driver/publish/render.mjs` is pinned at a content hash. Changing it reds its
36
+ // freeze check, and the repair of a sentence is not worth spending a freeze on; touching it needs an
37
+ // entry in the break ledger, which is a decision and not a sweep.
38
+ //
39
+ // USAGE
40
+ //
41
+ // node scripts/strip-tracker-citations.mjs # report only: per-class counts + hand-off list
42
+ // node scripts/strip-tracker-citations.mjs --apply # rewrite the mechanical cases
43
+ //
44
+ // The report is the default because the hand-off list is the point: the lines this cannot do are the
45
+ // ones a person has to read, and a sweep that rewrote first would bury them.
46
+ //
47
+ // THIS COUNTS EVERY LINE CARRYING THE FORM, including lines another stripper would also catch. That is
48
+ // deliberate and it is why this number will not match the reference-strip backlog's. A sweep STRIPS; a
49
+ // backlog SELECTS. Overlapping strippers cost nothing and a missed line ships a citation into a public
50
+ // tree, so the population here is the whole corpus rather than the residue left after other rules have
51
+ // taken their share. Reconciling the two numbers is a category error: they answer different questions.
52
+ //
53
+ // A NOTE ON THE OTHER RESIDUE, because the names invite the confusion. `driver/reference-strip-
54
+ // signatures.mjs` counts a DIFFERENT thing — sentences the earlier strip left unfinished, `'s` with
55
+ // nothing to possess and a dangling `pre- `. That is damage: a defect whether or not anyone rules on
56
+ // citations, with a floor that should fall to zero as sentences are repaired. This file's subject is
57
+ // intact text that a ruling removes, whose population goes to zero the day the sweep runs and then
58
+ // wants a guard against reintroduction rather than a backlog. Different residue, different repair.
59
+ import { readFileSync, writeFileSync } from "node:fs";
60
+ import { execFileSync } from "node:child_process";
61
+ import { join, dirname } from "node:path";
62
+ import { fileURLToPath } from "node:url";
63
+
64
+ const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
65
+ const APPLY = process.argv.includes("--apply");
66
+
67
+ // The mechanical case: a citation standing in front of a sentence, with the opener captured so it
68
+ // survives the replacement.
69
+ export const OPENER = /((?:^|["'`(\[]|\/\/|\/\*|#|\*|·|──)\s*)(?:refs\s+)?tracker issues?\s+\d+\s*[—:–-]\s+/i;
70
+
71
+ // Any remaining citation, mechanical or not. The difference between this count and the opener count is
72
+ // the hand-off: a citation inside a sentence cannot be removed without rewriting the sentence around it.
73
+ export const ANY_CITATION = /\btracker issues?\s+\d+/i;
74
+
75
+ export const EXCLUDED = [
76
+ // Citations used as literal test DATA — the corpus the citation guard is checked against.
77
+ "driver/test/a-bare-reference-added-in-a-diff-is-refused.test.mjs",
78
+ "driver/test/prompt-payload-names-no-tracker-issue.test.mjs",
79
+ "driver/test/euipo-environment-doctrine.test.mjs",
80
+ // Pinned at a content hash; a prose repair is not worth spending a freeze on.
81
+ "driver/publish/render.mjs",
82
+ ];
83
+
84
+ export const isScannable = (f) =>
85
+ /\.(mjs|md|yml|ts|js|json)$/.test(f) && !f.startsWith("portal-ui/dist/") && !EXCLUDED.includes(f);
86
+
87
+ /** Per-file classification. PURE, and `read` is injected so an arm can drive it over a synthetic tree. */
88
+ export function surveyOf(files, read) {
89
+ const stripped = {}, handoff = [];
90
+ let strippedTotal = 0, remainingTotal = 0;
91
+ for (const f of files.filter(isScannable)) {
92
+ let text;
93
+ try { text = read(f); } catch { continue; }
94
+ let n = 0;
95
+ const out = text.split("\n").map((line, i) => {
96
+ if (OPENER.test(line)) { n++; return line.replace(OPENER, "$1"); }
97
+ if (ANY_CITATION.test(line)) handoff.push({ file: f, line: i + 1, text: line.trim() });
98
+ return line;
99
+ });
100
+ if (n) { stripped[f] = n; strippedTotal += n; }
101
+ remainingTotal += out.filter((l) => ANY_CITATION.test(l)).length;
102
+ if (APPLY && n) writeFileSync(join(ROOT, f), out.join("\n"));
103
+ }
104
+ return { strippedTotal, remainingTotal, stripped, handoff };
105
+ }
106
+
107
+ if (import.meta.url === `file://${process.argv[1]}`) {
108
+ const tracked = execFileSync("git", ["-C", ROOT, "ls-files"], { encoding: "utf8", maxBuffer: 1 << 28 })
109
+ .split("\n").filter(Boolean);
110
+ const s = surveyOf(tracked, (f) => readFileSync(join(ROOT, f), "utf8"));
111
+ console.log(`${APPLY ? "stripped" : "would strip"} ${s.strippedTotal} opener(s) across ${Object.keys(s.stripped).length} file(s)`);
112
+ console.log(`${s.handoff.length} citation(s) are NOT openers and need a reader — the hand-off list:`);
113
+ for (const h of s.handoff) console.log(` ${h.file}:${h.line} ${h.text.slice(0, 110)}`);
114
+ console.log(`\n${s.remainingTotal} citation(s) would remain after this sweep.`);
115
+ console.log(`excluded by name: ${EXCLUDED.join(", ")}`);
116
+ }
@@ -25,7 +25,7 @@
25
25
  //
26
26
  // The second obvious fix is a posttest sweeper matching fixture prefixes with an mtime floor. But agents
27
27
  // run these suites CONCURRENTLY — that is how the box filled in the first place — so "delete everything
28
- // matching prelim-mock-* older than N" can delete another run's live fixtures. Prefix matching cannot
28
+ // matching clearotron-mock-* older than N" can delete another run's live fixtures. Prefix matching cannot
29
29
  // distinguish my fixtures from yours.
30
30
  //
31
31
  // A third option needs neither. os.tmpdir() honours TMPDIR, and every leaking call site is already
@@ -65,7 +65,7 @@ import { snapshotRepo, repoWrites, explainRepoWrites } from "./repo-writes.mjs";
65
65
  // CLEAROTRON_DATABASE=clarivate node scripts/test-run.mjs node -e '<print>'
66
66
  // -> CLEAROTRON_DATABASE = "corsearch"
67
67
  //
68
- // The operator named a vendor and the suite ran as a different one, in silence. That is 's own
68
+ // The operator named a vendor and the suite ran as a different one, in silence. That is its own
69
69
  // sentence — "a default is the one wrong value that never announces itself" — reached through the
70
70
  // compatibility window rather than through a code default.
71
71
  //
@@ -286,7 +286,7 @@ if (missingDeps.length) {
286
286
  process.exit(1);
287
287
  }
288
288
 
289
- // ── THE SUITE CANNOT READ THE OPERATOR'S CONFIGURATION, IN OR OUT (,) ──────────────────
289
+ // ── THE SUITE CANNOT READ THE OPERATOR'S CONFIGURATION, IN OR OUT () ──────────────────
290
290
  //
291
291
  // TWO DIRECTIONS, ONE SEAT. The guard below refuses when a data-plane ROOT escapes; these two stop the
292
292
  // suite reading the operator's configuration and stop it writing into their data plane. Same wrapper,
@@ -171,7 +171,7 @@ function resolveInstalled(root, name, path) {
171
171
  }
172
172
 
173
173
  /**
174
- * tracker issue 146 — WHY `npm ls` IS COMPLAINING, WHEN THE ANSWER IS NOT IN THE CODE AT ALL.
174
+ * WHY `npm ls` IS COMPLAINING, WHEN THE ANSWER IS NOT IN THE CODE AT ALL.
175
175
  *
176
176
  * Adding a `git worktree` and symlinking `node_modules` from another one — the obvious way to skip a
177
177
  * five-minute install — makes six licence arms fail in a way that reads exactly like a code defect, on
@@ -257,7 +257,7 @@ export function collect(root = ROOT, tree = npmTree(root), { linkTarget = defaul
257
257
  + "this file has not been looked at:\n " + undeclared.slice(0, 12).join("\n ")
258
258
  + (undeclared.length > 12 ? `\n …and ${undeclared.length - 12} more` : "")
259
259
  + "\n\nFix the tree, or declare it in DECLARED_LS_PROBLEMS with the reason it is allowed."
260
- // tracker issue 146 — appended, never substituted: a real problem keeps the sentence above.
260
+ // appended, never substituted: a real problem keeps the sentence above.
261
261
  + (foreignTreeNote(root, undeclared, { linkTarget }) ?? ""));
262
262
  }
263
263
  // ── ONE PACKAGE, SEVERAL NODES, AND ONLY ONE OF THEM CARRIES THE CHILDREN ──────────────────────
@@ -382,7 +382,7 @@ if (isEntrypoint(import.meta.url)) {
382
382
  if (!check) { writeFileSync(OUTPUT, next); console.log(`third-party-notices: wrote ${OUTPUT}`); process.exit(0); }
383
383
  const now = existsSync(OUTPUT) ? readFileSync(OUTPUT, "utf8") : null;
384
384
  if (now === next) { console.log("third-party-notices: THIRD-PARTY-NOTICES.md matches the installed production tree."); process.exit(0); }
385
- // ── Refs tracker issue 2073 — THE REFUSAL SAYS HOW TO FIX IT, INCLUDING THE HALF THAT IS FORGOTTEN ──
385
+ // ── THE REFUSAL SAYS HOW TO FIX IT, INCLUDING THE HALF THAT IS FORGOTTEN ──
386
386
  //
387
387
  // "regenerate with: <script>" was true and insufficient. What reds CI is a PRODUCTION-DEPENDENCY BUMP
388
388
  // whose regenerated notices file was not COMMITTED WITH IT, and the committing half is the half that
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-only
2
2
  // Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
3
3
  //
4
- // travelling-predicates.mjs — 's candidate population, DISCOVERED rather than recalled.
4
+ // travelling-predicates.mjs — the candidate population, DISCOVERED rather than recalled.
5
5
  //
6
6
  // hunts a class: a contract whose two ends measure different things — a demand computed against
7
7
  // one unit or snapshot, satisfaction enforced against another, with no guard asserting the two agree.
@@ -42,7 +42,7 @@
42
42
  // looked like an assignment, and filed `const push = (row) => { if (!asks.some(…)) … }` as "stored"
43
43
  // because the line starts with `const`. That is a proxy validating a proxy. This parses.
44
44
  //
45
- // ── THE SECOND QUESTION: WHERE DOES IT COME TO REST? ('s adjudication set) ──────────────────────
45
+ // ── THE SECOND QUESTION: WHERE DOES IT COME TO REST? (the adjudication set) ──────────────────────
46
46
  //
47
47
  // "Travelling" is a candidate ceiling and this file has said so since it was written. Ninety-nine
48
48
  // candidates is not a population anybody adjudicates one essay at a time, and reading them as ninety-nine
@@ -59,7 +59,7 @@
59
59
  //
60
60
  // structure written into something that OUTLIVES the expression that computed it — an object field,
61
61
  // an assignment, or a local that lands in a returned object. THIS is the class's shape:
62
- // 's `quote_required` was a flag on a form, judged later against candidates that had
62
+ // That `quote_required` was a flag on a form, judged later against candidates that had
63
63
  // been rebuilt. A boolean at rest can be met by data that has moved.
64
64
  //
65
65
  // The three are exhaustive and mechanical, so the sweep's own numbers say how much reading is owed and
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  // SPDX-License-Identifier: AGPL-3.0-only
3
3
  // Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
4
- // unexecuted-asserts.mjs — 's fifth member: an arm that RAN and asserted nothing.
4
+ // unexecuted-asserts.mjs — the fifth member: an arm that RAN and asserted nothing.
5
5
  //
6
6
  // node scripts/unexecuted-asserts.mjs <lcov> # DRY RUN — prints what would change
7
7
  // node scripts/unexecuted-asserts.mjs <lcov> --apply # writes it
@@ -199,7 +199,7 @@ if (isEntrypoint(import.meta.url)) {
199
199
  // THE REMEDY IS THE WHOLE COMMAND, not a placeholder. Whoever this fires on has probably never heard
200
200
  // of CT_COVERAGE_DIR — it is set in ci.yml and nowhere a contributor reads — so `<lcov>` sends them to
201
201
  // the workflow file to find out what to substitute. A guard whose remedy has to be looked up is a
202
- // guard people delete ('s own rule, applied to its own error message).
202
+ // guard people delete (its own rule, applied to its own error message).
203
203
  console.error(`\nCHECK FAILED — ${grew.length} file(s) grew an assert site that never ran.\n\n`
204
204
  + "READ EACH ONE FIRST. An arm that stopped asserting is the defect this exists to find (#1010);\n"
205
205
  + "a new honest branch — a platform check, an else nobody takes here — is re-stamped deliberately:\n\n"
@@ -49,7 +49,7 @@ const staging = mkdtempSync(join(tmpdir(), "clearotron-verify-"));
49
49
  // ── CAN THIS RUN ON THE TREE IT IS POINTED AT — tracker issue 196 ───────────────────────────────────
50
50
  //
51
51
  // THIS SCRIPT WAS INVOKED BY NOTHING for as long as it has existed on the public tree: no workflow, no
52
- // npm script, every other mention of its name a comment. That is tracker issue 189's shape — an
52
+ // npm script, every other mention of its name a comment. That is the shape — an
53
53
  // instrument that exists, has stopped being reachable, and whose silence is indistinguishable from a
54
54
  // pass. Five uninstallable releases shipped past it.
55
55
  //
@@ -82,7 +82,7 @@ if (!existsSync(CUT_TABLE)) {
82
82
  console.error(" dependency, in CI and again at publish. That covers the manifest. It does not type the verbs");
83
83
  console.error(" and it does not check the substitution.\n");
84
84
  console.error(" To make this runnable, the pack's reconcile step needs either the cut table or a decision that");
85
- console.error(" it does not need it. That decision is tracker issue 196's stated out-of-scope and is nobody's yet.");
85
+ console.error(" it does not need it. That decision is stated out of scope and is nobody's yet.");
86
86
  process.exit(2);
87
87
  }
88
88
 
@@ -34,7 +34,7 @@
34
34
  // 1. UNRESOLVED DEPTH. `depthFor` falls back to full-country depth stamped `default-ungraded` when it
35
35
  // cannot resolve a policy, and `writeUpForm` maps every ungraded rung to `full`. A census built on a
36
36
  // policy object that does not resolve therefore reports "every product authors every card, the ladder
37
- // saves nothing" — quotable, and false. 's own ladder shipped dead for exactly this reason. So
37
+ // saves nothing" — quotable, and false. its own ladder shipped dead for exactly this reason. So
38
38
  // the depth row is asserted resolved before a single finding is counted.
39
39
  // 2. NO BAND SHAPE. The floor tier joins from `band-shape.json`; absent, every finding reads as holding
40
40
  // no floor and the graded products UNDER-count their full cards — erasing the one class the owner
@@ -273,7 +273,7 @@ export async function probeAudience({ url, fetchImpl = fetch, timeoutMs = 5000,
273
273
  const t = ac ? setTimeout(() => ac.abort(new Error(`no answer within ${timeoutMs}ms`)), timeoutMs) : null;
274
274
  try {
275
275
  const res = await fetchImpl(url, { redirect: "manual", signal: signalFor ?? ac.signal });
276
- // TWO MORE HEADERS, AND THEY ARE THE WHOLE OF tracker issue 251. Without them every non-redirecting
276
+ // TWO MORE HEADERS, AND THEY ARE THE WHOLE OF THIS CHECK. Without them every non-redirecting
277
277
  // answer collapses to "no redirect", and three different doors read as one. `www-authenticate` is
278
278
  // how an Access-fronted API path announces itself; `cf-ray` is how a 5xx says the EDGE answered and
279
279
  // the origin behind it did not. Both are on the response already — nothing extra is fetched.
package/shared/brand.mjs CHANGED
@@ -26,7 +26,7 @@ const HERE = dirname(fileURLToPath(import.meta.url));
26
26
  // index header, nav brand, Excel metadata, connector instructions). Env-overridable per deployment —
27
27
  // branding is tenant config, not code. Read once at import (deployment-static, like the systemd env).
28
28
  //
29
- // CASING: THE VALUE IS PROSE, SO IT IS CAPITALISED (, superseding ruling 2026-08-20). The rule is
29
+ // CASING: THE VALUE IS PROSE, SO IT IS CAPITALISED (superseding ruling 2026-08-20). The rule is
30
30
  // Clearotron in prose and UI, `clearotron` in config values, commands, binary names and identifiers.
31
31
  // This DEFAULT is prose in every place it lands — report and portal <title>, the pool index header,
32
32
  // Excel `creator`, the connector steps, "You reached X" — so it takes the capital. The VARIABLE that
@@ -95,7 +95,7 @@ export const BRAND = {
95
95
  *
96
96
  * ABSENT IS NOT FALSE. The plain confidentiality line claims nothing and is what any legal deliverable
97
97
  * carries; collapsing absent into false is precisely the coercion that shipped House-default clearances
98
- * with no marking at all. That is 's property and it is untouched.
98
+ * with no marking at all. That is the property and it is untouched.
99
99
  *
100
100
  * `true` USED TO SELECT A LONGER LINE — the plain marking plus a legal characterisation of the document
101
101
  * — and the owner dropped that wording on 2026-08-20. It renders as the default here rather than being
@@ -154,7 +154,7 @@ export const PALETTE = {
154
154
 
155
155
  // — THE DARK COUNTERPART. Until this landed, every dark value in the product was a literal typed
156
156
  // into whichever block needed it, and the two server-rendered door pages (sign-in, refusal) had guessed
157
- // their own set — a THIRD ground, tracker issue 17150f, against the brand pack's #0f0e0c.
157
+ // their own set — a THIRD ground, #17150f, against the brand pack's #0f0e0c.
158
158
  //
159
159
  // The two entries the brand pack fixes are marked; the rest have no pack entry and are the values the
160
160
  // warm surfaces already shipped, kept as-is. `cream` has no dark twin by name because a dark ground is
@@ -164,7 +164,7 @@ export const PALETTE_DARK = {
164
164
  ground: '#0f0e0c', // brand pack §01 "Dark BG" — near-black. Supersedes the doors' #17150f
165
165
  ink: '#f0e8d8', // brand pack §01 "Parchment" — dark text / mark. Supersedes #ece5d8
166
166
  // The three locked crimsons, lifted for the dark ground. `crimson` itself is NOT here: it is a FILL
167
- // (badges, the accent) and keeps tracker issue 860F09 in both schemes. Crimson as TEXT is what needs lifting, and
167
+ // (badges, the accent) and keeps #860F09 in both schemes. Crimson as TEXT is what needs lifting, and
168
168
  // that is `crimsonText` — the value the warm and report dark blocks already applied to links.
169
169
  crimsonDeep: '#6a0a13',
170
170
  crimsonMid: '#c47f7a',
@@ -350,7 +350,7 @@ export const REPORT_ROOT =
350
350
 
351
351
  // Risk ramp — the designer's ramp from the portal redesign. It is a BAND family
352
352
  // of its own: --high is deliberately NOT --accent any more (the shipped --high was byte-identical to
353
- // tracker issue 860F09, so a High risk dot read as a Start button and needed a ring workaround). --accent /
353
+ // #860F09, so a High risk dot read as a Start button and needed a ring workaround). --accent /
354
354
  // --crimson / --maroon above are untouched. The gauge's stop order is clear→low→med→high→severe.
355
355
  `--clear:#5F8A64; --low:#8A9440; --med:#C8871B; --high:#B23A2E; --severe:#7C1E15;` +
356
356
  // Soft/text pairs: re-derived from the five bases by the rule in shared/tools/derive-band-pairs.mjs (same
@@ -374,12 +374,12 @@ export const REPORT_ROOT =
374
374
  // • *_EXPLICIT variants — the `[data-theme="dark"]` block ONLY, no `@media` —
375
375
  // CUSTOMER-facing surfaces (the per-customer index): first view is ALWAYS light; dark only by
376
376
  // the visitor's explicit toggle. The @media string must never appear in client output (tests pin this).
377
- // Crimson discipline: `--crimson`/`--h-red` KEEP tracker issue 860F09 in dark — they are FILLS (badges, the accent)
378
- // where white-on-crimson stays high-contrast. `--high` used to be in that list because it WAS tracker issue 860F09;
377
+ // Crimson discipline: `--crimson`/`--h-red` KEEP #860F09 in dark — they are FILLS (badges, the accent)
378
+ // where white-on-crimson stays high-contrast. `--high` used to be in that list because it WAS #860F09;
379
379
  // since the 2026-07-19 ramp recolor it is a band token (#B23A2E) and lightens with the rest of the band
380
380
  // family. Crimson TEXT uses (links, summaries, the wordmark)
381
381
  // are recolored to a lightened #e0736b by SCOPED rules inside the dark block only — zero light-side edits.
382
- // Every dark hex avoids the BLUE_SKIN regex /#3b4fd6|tracker issue 11132a|#f5f6f9|#1a1a2e/i (note #1b1714 ≠ #1a1a2e).
382
+ // Every dark hex avoids the BLUE_SKIN regex /#3b4fd6|#11132a|#f5f6f9|#1a1a2e/i (note #1b1714 ≠ #1a1a2e).
383
383
  //
384
384
  // Inside the @media branch, override RULES are prefixed `html:not([data-theme="light"])` (not `:root:not`)
385
385
  // on purpose: `:root` would add a full class-level of specificity and out-rank sibling base rules like
@@ -427,7 +427,7 @@ const WARM_DARK_RULES = [
427
427
  ];
428
428
 
429
429
  // Report dark tokens (token-for-token against REPORT_ROOT; --font/--mono unchanged). --crimson keeps
430
- // tracker issue 860F09 (it is the accent FILL). The risk BANDS are their own family since the 2026-07-19 recolor and
430
+ // #860F09 (it is the accent FILL). The risk BANDS are their own family since the 2026-07-19 recolor and
431
431
  // are free to lighten: each is its light base at +11 lightness (severe +10), saturation ×.92 — the same
432
432
  // relationship the previous dark ramp used. That relationship is what makes the last stop visible on the
433
433
  // dark ramp, and it does so better than before: dark --severe reads 2.70:1 on the page (was 1.74) and
@@ -478,10 +478,10 @@ export const REPORT_ROOT_DARK_EXPLICIT = darkBlock(REPORT_DARK_TOKENS, REPORT_DA
478
478
  //
479
479
  // WHY IT IS A FAMILY AND NOT A PAGE'S BUSINESS. Both doors are server-rendered by driver/portal-service
480
480
  // and each carried its own copy of this block — including a hand-picked dark set that had drifted from
481
- // the pack (tracker issue 17150f ground, #ece5d8 text) and error colours with no home at all. Two copies of a palette
481
+ // the pack (#17150f ground, #ece5d8 text) and error colours with no home at all. Two copies of a palette
482
482
  // is how the light palettes drifted before PALETTE existed.
483
483
  //
484
- // THE GATING IS `[data-theme]` ONLY (, correcting what shipped). The portal's doctrine is
484
+ // THE GATING IS `[data-theme]` ONLY (correcting what shipped). The portal's doctrine is
485
485
  // that a CLIENT surface never follows the OS colour preference: first view is always light, and dark
486
486
  // arrives only from a choice the visitor made themselves. kept the media query on the argument
487
487
  // that these pages have no toggle, so removing it would leave a first-time visitor no route to dark —
@@ -574,7 +574,7 @@ header.rep .theme-toggle{float:right;margin-left:12px}
574
574
  // emitted page — including reports published by deployments with no connection to that firm (
575
575
  // measured it on the demo pool index, twice on one page). Stripping the label was the fix then;
576
576
  // removing the watermark removes the surface.
577
- // THE SWISS FLAG IS GONE, and it is 's ruling rather than a new one. The portal's lockup
577
+ // THE SWISS FLAG IS GONE, and it is the ruling rather than a new one. The portal's lockup
578
578
  // dropped it when the product was renamed — portal-ui/src/components/Logo.tsx states the reason and
579
579
  // portal-ui/test/lockup.test.ts pins its ABSENCE so a well-meaning restore fails there:
580
580
  //
@@ -639,7 +639,7 @@ export const CHROME_CSS = `
639
639
  .lockup .lk-tag{margin-top:5px;font-size:7.5px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--muted)}
640
640
  .has-glow{position:relative;isolation:isolate}
641
641
  .has-glow::before{content:"";position:absolute;top:0;left:0;width:min(92vw,1100px);aspect-ratio:1.5;background:radial-gradient(farthest-side at 0% 0%,var(--web-glow),transparent 72%);pointer-events:none;z-index:-1}
642
- /* tracker issue 1431 — the .watermark rule and its ::after are GONE. They masked the parent company's ridge behind
642
+ /* the .watermark rule and its ::after are GONE. They masked the parent company's ridge behind
643
643
  every report and the pool index; the owner's call is removal, not a bracket version of the same
644
644
  thing. The three body elements that carried the class drop it too, and --wm-alpha goes with them:
645
645
  a token nothing reads is a knob somebody re-wires.
@@ -47,7 +47,7 @@ export function scanCitations(files, readFn, { paths, excluded, declaredFor, sou
47
47
  // Measured at the bound written here: 6 hits, all real. Widen it further only with the same
48
48
  // measurement in hand.
49
49
  const base = path.endsWith("/") ? null : path.slice(path.lastIndexOf("/") + 1);
50
- // AND A DIRECTORY IS CITED BY ITS OWN NAME TOO (, measured 2026-08-24). Three shipping
50
+ // AND A DIRECTORY IS CITED BY ITS OWN NAME TOO (measured 2026-08-24). Three shipping
51
51
  // files named `fixtures/owner-screen-2026-07-29` — a path relative to the file, not to the repo
52
52
  // root — so `includes(path)` walked straight past every one of them and the reader got a
53
53
  // directory that is not there. The FILES-ONLY bound above was measured against basenames like
@@ -48,7 +48,7 @@ export const CLIENT_DOOR_UNIT = "clearotron-client-mcp.service";
48
48
  /**
49
49
  * Where revoked key ids live, and the one place that decides it.
50
50
  *
51
- * — bb8's F14. This literal was written out in four places (connect, start
51
+ * — found in review. This literal was written out in four places (connect, start
52
52
  * twice, disconnect). `connect` armed the variable AND created the file, with a comment saying exactly
53
53
  * why: a named-but-absent file was the same landmine one step later, because `isRevoked` then failed
54
54
  * OPEN on an unreadable list. It fails CLOSED now, which makes creating the file more load-bearing
@@ -63,7 +63,7 @@ export const defaultDenylistPath = (home) => join(home, ".config", "clearotron",
63
63
  /**
64
64
  * The denylist path a door should be given — the operator's, if they set one.
65
65
  *
66
- *, bb8's sharpening of F14. `defaultDenylistPath` answers "where does it live
66
+ *, a later review's sharpening of it. `defaultDenylistPath` answers "where does it live
67
67
  * when nobody said"; this answers "where does it live", which is the question every caller actually had.
68
68
  * The client door was composed with the default UNCONDITIONALLY while every other child inherited
69
69
  * TRADEMARK_MCP_TOKEN_DENYLIST, so on a box where an operator had placed the list themselves:
@@ -173,7 +173,7 @@ export function clientDoorState({ env = {}, unitDir, exists, active = null, list
173
173
  // synonym for false: a caller that cannot reach systemd must not be able to report a door as down
174
174
  // any more than it can report one as up. Same discipline as the queue-watch arm's unprobed half.
175
175
  return {
176
- // — bb8's F11: what is ANSWERING, which the unit file cannot say.
176
+ // — found in review: what is ANSWERING, which the unit file cannot say.
177
177
  // — THE PAIR, NOT ITS BOOLEAN. `active` collapses ActiveState and SubState,
178
178
  // so a crash loop (`activating/auto-restart`) and a unit that was never started (`inactive/dead`)
179
179
  // reduce to the same `false` and printed the same sentence — one is a fault to read the journal for,
@@ -228,7 +228,7 @@ export function describeDoorState(door, {
228
228
  text: `the client door is HALF configured — ${missing}. Something began setting it up and stopped: `
229
229
  + `finish with \`${connectCmd}\`, or close it with \`${closeCmd}\`.` };
230
230
  }
231
- // A DOOR THAT ANSWERS IS SET UP, WHATEVER THE UNITS SAY ( bb8's F11).
231
+ // A DOOR THAT ANSWERS IS SET UP, WHATEVER THE UNITS SAY (found in review).
232
232
  //
233
233
  // `standing` is unit-file + fence, and a FOREGROUND `clearotron start` has neither: it runs the door
234
234
  // as its own child. Measured — the door listening on its port while this sentence said "the client
@@ -263,7 +263,7 @@ export function describeDoorState(door, {
263
263
  + "so this says the door is set up, not that it answers" };
264
264
  }
265
265
  if (door.active === false) {
266
- // NAME THE STATE, AND NEVER ASSERT AN EMPTY PORT WITHOUT LOOKING (, Hera).
266
+ // NAME THE STATE, AND NEVER ASSERT AN EMPTY PORT WITHOUT LOOKING.
267
267
  //
268
268
  // This said "nothing is listening on the client door" from `active === false` alone, while a probe
269
269
  // of that very port had already been taken and passed in — and read nowhere on this branch. With a
@@ -477,7 +477,7 @@ export function enablePlan({ env = {}, address, identity, accessFile = null, por
477
477
  }
478
478
  }
479
479
 
480
- // ── THE PORT IS CHECKED, NOT ASSUMED (, and measured 2026-08-31) ──────────────────────────
480
+ // ── THE PORT IS CHECKED, NOT ASSUMED (and measured 2026-08-31) ──────────────────────────
481
481
  //
482
482
  // A default port is a guess about which instance you are. Driving this verb on a shared box found
483
483
  // 18811 ALREADY HELD by another user's client face: the unit was installed, started, and crash-looped,
@@ -987,7 +987,7 @@ export function applyDisablePlan(plan, io) {
987
987
  return { done };
988
988
  }
989
989
 
990
- // ── IS THE PUBLISHED ADDRESS REAL? (, acceptance 2) ────────────────────────────────
990
+ // ── IS THE PUBLISHED ADDRESS REAL? (acceptance 2) ────────────────────────────────
991
991
  //
992
992
  // The criterion is deliberate about which question this answers: "doctor reports the door's
993
993
  // REACHABILITY, not its configuration — the address is set AND answers from outside the box. An address
@@ -43,7 +43,7 @@
43
43
  // IT DOES NOT SET A MODE, and this change alters no behaviour on disk. Pinning 0o750 here in the same
44
44
  // commit would be a semantic change riding inside a seam, and the seam is the part that has to be
45
45
  // reviewable by reading nineteen call sites and agreeing they still mean what they meant. The mode is
46
- // 's business, and when it is taken it is one line in this file.
46
+ // That business, and when it is taken it is one line in this file.
47
47
  //
48
48
  // IT WOULD NOT RESTRAIN THE SEAT IF IT DID. The agent runs as the same account that owns these
49
49
  // directories, so owner bits apply whatever the group bits say. A tighter mode removes GROUP write,
@@ -85,48 +85,6 @@ export function envFrom(env, name) {
85
85
  return v === "" ? undefined : v;
86
86
  }
87
87
 
88
- /** The prefix every retired spelling carries. The rename moved the stem and nothing else. */
89
- export const RETIRED_PREFIX = "PRELIM_";
90
-
91
- /**
92
- * Every retired-spelling line SET in `env`, each with the name in force where there is one.
93
- *
94
- * ── THE DETECTION NEEDS NO TABLE, AND THAT IS DELIBERATE ────────────────────────────────────────
95
- *
96
- * No product code reads a `PRELIM_*` name — nothing on this tree does, and an arm holds it that way
97
- * (driver/test/retired-env-spellings.test.mjs). So a `PRELIM_*` line that is SET is dead, full stop,
98
- * and this cannot go stale against a list somebody forgot to update. A table-driven detection would
99
- * have exactly the failure mode the issue was filed about: silence for the name nobody wrote down.
100
- *
101
- * The table decides only the SECOND half of the sentence — which name to use instead — because that
102
- * is the half that can be wrong. `NAMES_IN_FORCE` is derived from the build's own readers
103
- * (scripts/mint-names-in-force.mjs), so a replacement is named only when something actually reads it.
104
- * Where no `CLEAROTRON_` partner exists the setting did not move, it went, and `replacement` is null.
105
- * Sending an operator to a variable nothing reads would replace one silent failure with another.
106
- *
107
- * EMPTY IS UNSET, as everywhere else here: an `X=` line in an EnvironmentFile means "not configured",
108
- * so it is not reported. An operator who blanked a line has already stopped setting it.
109
- */
110
- export function retiredSpellingsIn(env = process.env) {
111
- const inForce = new Set(NAMES_IN_FORCE);
112
- const found = [];
113
- for (const name of Object.keys(env ?? {})) {
114
- if (!name.startsWith(RETIRED_PREFIX) || !has(env, name)) continue;
115
- const candidate = `CLEAROTRON_${name.slice(RETIRED_PREFIX.length)}`;
116
- found.push({ name, replacement: inForce.has(candidate) ? candidate : null });
117
- }
118
- return found.sort((a, b) => a.name.localeCompare(b.name));
119
- }
120
-
121
- /** The one sentence a retired spelling is worth, used by every surface that reports one. */
122
- export function retiredSpellingLine({ name, replacement }) {
123
- return replacement
124
- ? `${name} is a RETIRED spelling and nothing reads it — the name in force is ${replacement}. `
125
- + `Rename the line in your environment file; its value is being ignored until you do.`
126
- : `${name} is a RETIRED spelling and nothing reads it — this setting no longer exists under any `
127
- + `name. Delete the line from your environment file.`;
128
- }
129
-
130
88
  /**
131
89
  * Say so when a DELETED setting is still set. Nothing is applied and nothing is translated.
132
90
  *
@@ -141,12 +99,6 @@ export function warnRetiredEnv({ env = process.env, note = defaultNote } = {}) {
141
99
  + `environment file.\n`);
142
100
  said.push(name);
143
101
  }
144
- // The retired SPELLINGS, on the same footing and through the same emitter — so every service that
145
- // already announces its posture at boot announces this too, rather than one service happening to.
146
- for (const row of retiredSpellingsIn(env)) {
147
- note(`[env] ${retiredSpellingLine(row)}\n`);
148
- said.push(row.name);
149
- }
150
102
  return said;
151
103
  }
152
104
 
@@ -203,7 +203,7 @@ export const NO_DOTFILE = Object.freeze([
203
203
  // derived guard caught it in the same commit that created it, which is the eleventh arriving loudly.
204
204
  "scripts/post-deploy-validate.mjs",
205
205
  // step 4 / — THE DERIVED SCAN COULD NOT SEE THESE TWO, and the reason is worth keeping.
206
- // 's scan walked every shebang entry looking for a module-top `process.env` capture of a renamed
206
+ // That scan walked every shebang entry looking for a module-top `process.env` capture of a renamed
207
207
  // name. These capture INSIDE a function, so the scan passed over them — and they were stranding an
208
208
  // operator all the same: both read a retired spelling and reached no translation, so a box configured
209
209
  // with the name in force handed them nothing and the read fell through to a default. `compare` printed
@@ -288,7 +288,7 @@ const COMMENT_LINE = /^\s*(\/\/|#|\*|<!--)/;
288
288
  // address, and a reader sent looking for one would be looking in the wrong place.
289
289
  // `contact` joins on the owner's ruling of 2026-08-24: the launch documents collapsed to ONE public
290
290
  // mailbox, and counsel's pack (ADDITIONAL-TERMS.md, NOTICES.md, TRADEMARKS.md) prints it. Added here in
291
- // the same PR that introduced it, per 's rule above — a ruled mailbox joins this list, it never gets
291
+ // the same PR that introduced it, per the rule above — a ruled mailbox joins this list, it never gets
292
292
  // a domain exemption. `interested` and `security` stay: they are no longer printed by any shipping
293
293
  // document, but removing a localpart from an allowlist is how a future document that uses one again
294
294
  // fails for a reason nobody expects.
@@ -390,7 +390,7 @@ export function scanOperatorIdentity(files, readFn, { withheld = () => false } =
390
390
  // ──: THE RETIRED PLATFORM ───────────────────────────────────────────────────────────────────
391
391
  //
392
392
  // The sixth pattern, and the narrowest: one token, matched case-insensitively, anywhere in a tracked
393
- // file. It is here rather than in a one-off script because 's last scope line asks for exactly
393
+ // file. It is here rather than in a one-off script because the last scope line asks for exactly
394
394
  // this — "extend the battery so this class cannot return" — and because the class it guards is the
395
395
  // one the other five provably could not see. An integrator platform's name is not a person, not a
396
396
  // home path, not a classification stamp, not an audience, and not a vendor standing where a category
@@ -439,7 +439,7 @@ export const namesRetiredPlatform = (text) => RETIRED_PLATFORM.test(String(text
439
439
  // reasonably concludes they need a Cloudflare account.
440
440
  //
441
441
  // WHY A QUALIFIER RATHER THAN A BAN. The vendor name must keep appearing — a runbook worked through
442
- // one real proxy end to end is worth more to an installer than an abstract one, and 's rewrite
442
+ // one real proxy end to end is worth more to an installer than an abstract one, and the rewrite
443
443
  // deliberately kept it. What must not happen is the name standing where the CATEGORY belongs. So the
444
444
  // rule is: name the vendor as much as you like, provided the line (or the one either side of it) says
445
445
  // it is an example, a reference, or what THIS deployment happens to use.
@@ -263,7 +263,7 @@ export const bareInvocation = (verb) => `clearotron ${verb}`;
263
263
  /**
264
264
  * Refuse a prompt when there is nobody to answer it.
265
265
  *
266
- * — bb8's F14 item 5. `install` has said this since it was written; `connect`
266
+ * — found in review. `install` has said this since it was written; `connect`
267
267
  * and `disconnect` prompt through readline and did not, so piped or redirected they read EOF and took
268
268
  * it as an answer. `install`'s exit code and wording are the model, and this is that model shared
269
269
  * rather than copied a third time.
@@ -141,6 +141,7 @@ export const NAMES_IN_FORCE = Object.freeze([
141
141
  "CLEAROTRON_REPLAY_SNAPSHOT",
142
142
  "CLEAROTRON_REPORTS_DIR",
143
143
  "CLEAROTRON_REPORTS_URL",
144
+ "CLEAROTRON_REQUESTER_WHATSAPP",
144
145
  "CLEAROTRON_REQUIRE_EXPLICIT_PORTS",
145
146
  "CLEAROTRON_RETRY_BACKOFF_MS",
146
147
  "CLEAROTRON_RUN_DIR",
@@ -168,6 +169,7 @@ export const NAMES_IN_FORCE = Object.freeze([
168
169
  "CLEAROTRON_WARM_RETRY",
169
170
  "CLEAROTRON_WATCH_",
170
171
  "CLEAROTRON_WHATIF_MAX_CONCURRENT",
172
+ "CLEAROTRON_WHATSAPP_OPERATOR_COPY",
171
173
  "CLEAROTRON_WORKSPACE_PREFIX",
172
174
  "CLEAROTRON_WORK_DIR",
173
175
  "CLEAROTRON_X",
@@ -24,7 +24,7 @@
24
24
  // Add it here and nowhere else, and only if this product genuinely owns it. A prefix added to let one
25
25
  // awkward name through re-opens the gap for every future gather — the cost is not local.
26
26
  export const PRODUCT_NAME_PREFIXES = Object.freeze([
27
- "PRELIM", "CLEAROTRON", "PORTAL", "TRADEMARK_MCP", "CLIENT_MCP", "CLIENT_ACCESS",
27
+ "CLEAROTRON", "CLEAROTRON", "PORTAL", "TRADEMARK_MCP", "CLIENT_MCP", "CLIENT_ACCESS",
28
28
  "CLIENT_CF", "PROFILE", "RECIPE", "MCP_A",
29
29
  ]);
30
30
 
@@ -31,7 +31,7 @@
31
31
  // `driver/run-requirements.mjs` derives from those two fields and never restates them.
32
32
  //
33
33
  // The vendor sign-up steps travel WITH the table rather than staying behind in the wizard: they are
34
- // facts about the register, the wizard is one reader of them, and tracker issue 100 asks for the same
34
+ // facts about the register, the wizard is one reader of them, and the same steps are asked for on the same
35
35
  // steps on surfaces the wizard does not own.
36
36
 
37
37
  // The USPTO sizing figures are MEASURED and live in their own module; the warnings below quote them