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
@@ -18,7 +18,7 @@
18
18
  // Exits non-zero on the first state that fails to draw, scrolls sideways, or renders a pip count that
19
19
  // contradicts the run it is drawn from.
20
20
 
21
- import { navigateOrRefuse } from './headless-page.mjs' // tracker issue 227 — Page.navigate returns an errorText, and nothing read it
21
+ import { navigateOrRefuse } from './headless-page.mjs' // Page.navigate returns an errorText, and nothing read it
22
22
  import { createServer } from 'node:http'
23
23
  import { reapOnExit } from "../shared/reap-on-exit.mjs"; // — a detached group dies with this script
24
24
  import { readFileSync, existsSync, writeFileSync, mkdtempSync, rmSync } from 'node:fs'
@@ -48,7 +48,7 @@ const ago = (m) => new Date(now - m * 60_000).toISOString()
48
48
  const run = (o) => ({
49
49
  runId: o.runId, account: o.account ?? 'zephyr', title: o.mark, markName: o.mark,
50
50
  projectKey: o.projectKey ?? null, projectName: o.projectName ?? null,
51
- // `product` is meta.searchLevel off the wire, and it holds a PRODUCT ID. The fixtures said `prelim`
51
+ // `product` is meta.searchLevel off the wire, and it holds a PRODUCT ID. The fixtures said `clearotron`
52
52
  // — a RETIRED slug — for every state, so this check could not see that depthLabel had no case for any
53
53
  // current product and the chip rendered EMPTY on every run the build creates. A fixture that speaks a
54
54
  // vocabulary the build no longer produces certifies the bug.
@@ -54,7 +54,7 @@
54
54
  // WRONG — the deployment was fine; the caller was not. With the portal's own ops token the same call
55
55
  // answers `clients: 10`.
56
56
  //
57
- // #98's validation failed because it ran in the wrong ENVIRONMENT. A probe can fail the same way by
57
+ // an earlier validation failed because it ran in the wrong ENVIRONMENT. A probe can fail the same way by
58
58
  // running as the wrong IDENTITY. So this check authenticates the way the portal does, and a missing
59
59
  // token is reported as "not probed" rather than quietly producing a false failure.
60
60
  //
@@ -90,7 +90,9 @@ import { unitsActiveVerdict } from "../driver/unit-state-verdict.mjs";
90
90
  import { deploymentBox } from "../shared/deployment-box.mjs"; // — extracted; one allowlist, two readers
91
91
  import { unitFileDriftVerdict } from "../driver/unit-file-drift.mjs"; //
92
92
  import { placeholdersIn, resolveValues, renderUnit } from "../driver/systemd/render-units.mjs"; //
93
- import { CHECKED_UNITS, unitInventoryVerdict, serviceCommitVerdict, unitWorkingDirectory } from "../driver/unit-inventory.mjs"; // · -bundle ·
93
+ import { CHECKED_UNITS, unitInventoryVerdict, serviceCommitVerdict, unitWorkingDirectory, unitClone } from "../driver/unit-inventory.mjs"; // · -bundle ·
94
+ import { entrypointOf } from "../driver/systemd/install-census.mjs"; // the ONE ExecStart parser — a unit says which module it runs
95
+ import { treeOfRunning } from "../shared/checkout-move.mjs"; // …and the live argv says which tree that module came from
94
96
  import { findUnitFiles, unitFilePath } from "../driver/unit-files.mjs"; //
95
97
  import { managerGroupsVerdict } from "../driver/manager-groups-verdict.mjs"; //
96
98
  import { config } from "../driver/driver.config.mjs"; //
@@ -234,14 +236,20 @@ function serviceClones() {
234
236
  const out = [];
235
237
  let reached = 0, lastErr = null;
236
238
  for (const u of units) {
237
- let wd = null, active = null, type = null, since = null;
239
+ let wd = null, active = null, type = null, since = null, mainPid = null, fragment = null, load = null;
238
240
  try {
239
241
  // — `Type` and `StateChangeTimestamp` ride along on a call that was already being made. Both
240
242
  // are for the MESSAGE, never for the verdict: Type tells a reader whether an `activating` unit is a
241
243
  // oneshot mid-fire or a service mid-restart, and the timestamp lets a human judge a long
242
244
  // `activating` that this check deliberately does not judge (see driver/unit-state-verdict.mjs).
245
+ //
246
+ // `MainPID` and `FragmentPath` ride along for the SECOND way to attribute a unit to a checkout,
247
+ // below. Same call, no extra round trip. Deliberately NOT `ExecStart`: systemd renders it
248
+ // unexpanded — `argv[]=/usr/bin/node ${CLEAROTRON_CHECKOUT_DIR}/driver/runner.mjs` — so the one
249
+ // field that looks like it names the tree is the one field that does not.
243
250
  const shown = execFileSync("systemctl", ["--user", "show", u,
244
- "-p", "WorkingDirectory", "-p", "ActiveState", "-p", "Type", "-p", "StateChangeTimestamp"],
251
+ "-p", "WorkingDirectory", "-p", "ActiveState", "-p", "Type", "-p", "StateChangeTimestamp",
252
+ "-p", "MainPID", "-p", "FragmentPath", "-p", "LoadState"],
245
253
  { encoding: "utf8", env, stdio: ["ignore", "pipe", "pipe"] });
246
254
  // `show` answers for a unit that does not exist too (ActiveState=inactive), so a PARSED answer is
247
255
  // proof the bus was reachable — which is exactly the fact the old catch destroyed.
@@ -252,19 +260,77 @@ function serviceClones() {
252
260
  if (k === "ActiveState") active = v.join("=") || null;
253
261
  if (k === "Type") type = v.join("=") || null;
254
262
  if (k === "StateChangeTimestamp") since = v.join("=") || null;
263
+ if (k === "MainPID") mainPid = v.join("=") || null;
264
+ if (k === "FragmentPath") fragment = v.join("=") || null;
265
+ // `LoadState` is the discriminator the comment above names and nothing acted on: `not-found`
266
+ // means this deployment DECLARES a unit that does not exist on this box — a defect in the
267
+ // declaration, not a unit at rest. Both used to arrive here as `ActiveState=inactive`.
268
+ if (k === "LoadState") load = v.join("=") || null;
255
269
  }
256
270
  } catch (e) { lastErr = String(e?.stderr || e?.message || e).replace(/\s+/g, " ").trim().slice(0, 160); }
257
- // — an inactive unit reporting nothing is NOT a gap in the population; there is genuinely
258
- // nothing to compare, and `unreadable: null` says so. Only the two branches below are gaps.
259
- if (!wd) { out.push({ unit: u, active, type, since, clone: null, head: null, unreadable: null }); continue; }
260
- const parsed = unitWorkingDirectory(wd);
261
- if (!parsed.path) { out.push({ unit: u, active, type, since, clone: null, head: null, unreadable: parsed.why }); continue; }
262
- const top = gitTry(parsed.path, "rev-parse", "--show-toplevel");
263
- if (!top.ok) { out.push({ unit: u, active, type, since, clone: null, head: null, unreadable: `git could not read ${parsed.path}: ${top.err}` }); continue; }
264
- const root = top.out;
265
- const head = gitTry(root, "rev-parse", "HEAD");
266
- out.push({ unit: u, active, type, since, clone: root, head: head.ok ? head.out : null,
267
- unreadable: head.ok ? null : `git could not read HEAD in ${root}: ${head.err}` });
271
+
272
+ // ── ATTRIBUTION ONE: THE DECLARATION ────────────────────────────────────────────────────────────
273
+ let declaredTree = null, declaredWhy = null;
274
+ if (!wd) declaredWhy = "the unit reported no WorkingDirectory";
275
+ else {
276
+ const parsed = unitWorkingDirectory(wd);
277
+ if (!parsed.path) declaredWhy = parsed.why;
278
+ else {
279
+ const top = gitTry(parsed.path, "rev-parse", "--show-toplevel");
280
+ if (top.ok) declaredTree = top.out;
281
+ else declaredWhy = `git could not read ${parsed.path}: ${top.err}`;
282
+ }
283
+ }
284
+
285
+ // ── ATTRIBUTION TWO: WHAT THE PROCESS IS ACTUALLY RUNNING ───────────────────────────────────────
286
+ //
287
+ // The unit file names its entrypoint as `${CLEAROTRON_CHECKOUT_DIR}/<module>`; the LIVE process was
288
+ // started with that expanded, and `/proc/<pid>/cmdline` carries the resolved absolute path. So the
289
+ // unit file says WHICH module to look for and the process says WHERE it came from. Both readers
290
+ // already exist and are tested — this composes them rather than parsing anything new.
291
+ let runningTree = null, runningWhy = null;
292
+ const pid = Number(mainPid);
293
+ if (!pid) runningWhy = "the unit reported no MainPID, so no running process could be read";
294
+ else if (!fragment) runningWhy = `pid ${pid} is running but the unit reported no FragmentPath, so nothing says which module to look for`;
295
+ else {
296
+ let unitText = null;
297
+ try { unitText = readFileSync(fragment, "utf8"); }
298
+ catch (e) { runningWhy = `the unit file ${fragment} could not be read: ${String(e?.message ?? e).slice(0, 80)}`; }
299
+ if (unitText !== null) {
300
+ const { rel, unreadable } = entrypointOf(unitText);
301
+ if (!rel) runningWhy = unreadable;
302
+ else {
303
+ let cmdline = null;
304
+ try { cmdline = readFileSync(`/proc/${pid}/cmdline`, "utf8"); }
305
+ catch (e) { runningWhy = `/proc/${pid}/cmdline could not be read: ${String(e?.message ?? e).slice(0, 80)}`; }
306
+ if (cmdline !== null) {
307
+ const { tree, why } = treeOfRunning(cmdline, rel);
308
+ if (!tree) runningWhy = why;
309
+ else {
310
+ const top = gitTry(tree, "rev-parse", "--show-toplevel");
311
+ if (top.ok) runningTree = top.out;
312
+ else runningWhy = `git could not read ${tree}, which pid ${pid} is running from: ${top.err}`;
313
+ }
314
+ }
315
+ }
316
+ }
317
+ }
318
+
319
+ const chosen = unitClone({ declaredTree, runningTree, declaredWhy, runningWhy });
320
+ // — an inactive unit that reported nothing is NOT a gap in the population; there is genuinely
321
+ // nothing to compare, and `unreadable: null` says so. A unit that IS running and could not be
322
+ // attributed is a gap, and the reason names both halves.
323
+ if (!chosen.clone) {
324
+ const idle = !wd && !pid;
325
+ out.push({ unit: u, active, load, type, since, clone: null, head: null, source: null,
326
+ unreadable: idle ? null : chosen.why });
327
+ continue;
328
+ }
329
+ const head = gitTry(chosen.clone, "rev-parse", "HEAD");
330
+ out.push({ unit: u, active, load, type, since, clone: chosen.clone, source: chosen.source,
331
+ disagreement: chosen.disagreement,
332
+ head: head.ok ? head.out : null,
333
+ unreadable: head.ok ? null : `git could not read HEAD in ${chosen.clone}: ${head.err}` });
268
334
  }
269
335
  const probe = reached > 0
270
336
  ? { ok: true, why: null }
@@ -441,7 +507,12 @@ try {
441
507
  //
442
508
  // The arm above already travels the route the harness uses (`mcpToolCall` on `MCP_URL`, the same
443
509
  // client `scripts/e2e.mjs` enqueues through), so a door that 401s every caller ALREADY fails this
444
- // check and already fails the deploy — `scripts/deploy-test.sh` gates on this script's exit code.
510
+ // check and already fails the deploy — WHEN a deploy runs this script, which at the time of writing
511
+ // nothing does. `scripts/deploy-test.sh` gated on this script's exit code; that script is retired, and
512
+ // what replaced it was measured on the operations side and does NOT invoke this one. Nothing here is
513
+ // wrong: the check is a real instrument and its reasoning holds. It is simply not reached, and a caller
514
+ // is being wired back in. Until it is, read this as what the check is FOR, not as evidence that
515
+ // something enforces it.
445
516
  // That is the issue's first criterion, by its sanctioned second branch, and its third and fourth.
446
517
  //
447
518
  // What neither arm could say is WHY the door has the posture it has. This face reaches the auth-proxy
@@ -592,8 +663,10 @@ const { clones, probe: unitProbe } = serviceClones();
592
663
  const running = clones.filter((c) => c.head);
593
664
  const heads = [...new Set(running.map((c) => c.head))];
594
665
  // — THREE OUTCOMES, NOT TWO. This arm is the one whose entire purpose is to catch a service still
595
- // running an old bundle after a deploy, and deploy-test.sh runs it as the final gate on an instance that
596
- // deploys itself every hour. It had been degrading to `skip` with a reason that ASSERTED the deployment
666
+ // running an old bundle after a deploy. `deploy-test.sh` ran it as the final gate on an instance that
667
+ // deploys itself every hour; that script is retired and its replacement does not invoke this one, so at
668
+ // the time of writing nothing reaches this arm on a deploy — see the note above. It had been degrading to
669
+ // `skip` with a reason that ASSERTED the deployment
597
670
  // was not systemd --user — on a box where it is, and where the units are running.
598
671
  // · could not look → skip, naming the error. Not probed is not passed.
599
672
  // · looked, found none → skip, saying so. A genuinely non-systemd deployment lands here honestly.
@@ -664,7 +737,7 @@ else {
664
737
  // second criterion — an orphaned drainer in a closed login session is a
665
738
  // state health must say out loud, whatever the ruling on the posture.
666
739
  ppidOf: defaultPpidOf,
667
- // tracker issue 206 — THE SAME TWO PROBES THE QUEUE ARM READS, so this arm and that one cannot
740
+ // THE SAME TWO PROBES THE QUEUE ARM READS, so this arm and that one cannot
668
741
  // reach opposite conclusions about one box. They did: the queue arm read the worker unit and said
669
742
  // the timer posture is retired here, while this one read nothing and called an absent drainer a
670
743
  // fault in the same report. A probe that throws answers `enabled: null`, which the rule resolves
@@ -15,7 +15,7 @@
15
15
  // and that a red no fix can clear turns into a tax. The next person either stops, or learns to reason
16
16
  // past a red main, and the second one is how a real regression gets merged over.
17
17
  //
18
- // THIS IS 's DISTINCTION ONE SUBSYSTEM OVER. There it was `systemctl --user` with no bus reported
18
+ // THIS IS the DISTINCTION ONE SUBSYSTEM OVER. There it was `systemctl --user` with no bus reported
19
19
  // as "the unit is not there"; here it is an unallocated runner reported as "the suite failed". Both are
20
20
  // could-not-look rendered as a finding, and both are fixed by refusing to answer rather than answering
21
21
  // wrongly.
@@ -5,7 +5,7 @@
5
5
  //
6
6
  // ── WHY THIS EXISTS ──────────────────────────────────────────────────────────────────────────────
7
7
  //
8
- // merged at 18:45:01Z. The commit carrying 's own acceptance check was authored at
8
+ // merged at 18:45:01Z. The commit carrying its own acceptance check was authored at
9
9
  // 18:53:12Z — eight minutes AFTER the merge — and never reached `main`. The pull request closed
10
10
  // green showing one commit, the branch was deleted, and was labelled ready-for-verification
11
11
  // against a fix whose check did not exist. Nothing in the repository noticed. It surfaced because
@@ -213,8 +213,8 @@ export function presenceOf(sha, git, base = "origin/main") {
213
213
  // ── LANDED-AND-SINCE-REMOVED IS NOT LOST WORK, AND CALLING IT LOST IS THE WHOLE FAILURE ────────
214
214
  //
215
215
  // The first cut of this script reported six MISSING rows and every one of them was a merge that
216
- // landed perfectly and was later retired ON PURPOSE: 's bin/register-ledger-prune.mjs deleted
217
- // by, 's snapshot machinery deleted by, three env-governance.test.mjs rows rewritten
216
+ // landed perfectly and was later retired ON PURPOSE: the bin/register-ledger-prune.mjs deleted
217
+ // by, the snapshot machinery deleted by, three env-governance.test.mjs rows rewritten
218
218
  // by the same. Publishing those as lost work would have been six false accusations drawn
219
219
  // from a real signal — the exact shape this check exists to catch, running in the other direction.
220
220
  //
@@ -150,7 +150,7 @@ function main() {
150
150
  try { prev = JSON.parse(readFileSync(CENSUS, "utf8")); } catch { /* first mint */ }
151
151
 
152
152
  const lost = [];
153
- // tracker issue 205 — THE THIRD BUCKET, ruled by overwatch 2026-09-06.
153
+ // THE THIRD BUCKET, ruled by overwatch 2026-09-06.
154
154
  //
155
155
  // A reasoned skip is neither a pass nor a loss, and this census had no place to put one. Two guards
156
156
  // that are each right about their own failure had come to disagree: `a-bail-on-an-unmeetable-
@@ -166,7 +166,7 @@ function main() {
166
166
  for (const { ws } of CENSUS_WORKSPACES) {
167
167
  const a = prev?.workspaces?.[ws]?.perFile ?? {};
168
168
  const b = next.workspaces[ws].perFile;
169
- // tracker issue 205 — the buckets are decided in shared/suite-census.mjs, where a test can reach
169
+ // the buckets are decided in shared/suite-census.mjs, where a test can reach
170
170
  // them, and BOTH populations below read the same function. The two loops used to spell the decision
171
171
  // out separately and had already drifted on their all-clear line.
172
172
  const { added, gone, shrunk, grew, losses, notes, allClear } = censusBuckets({ prev: a, next: b });
@@ -175,14 +175,14 @@ function main() {
175
175
  ? `${ws} REMOVED ${f} (was ${a[f].tests} tests, ${a[f].asserts} asserts)`
176
176
  : `${ws} SHRANK ${f} ${a[f].tests}\u2192${b[f].tests} tests, ${a[f].asserts}\u2192${b[f].asserts} asserts`);
177
177
  }
178
- // tracker issue 205 — a rising skip count is NOT a loss and does not refuse. It is collected for
178
+ // a rising skip count is NOT a loss and does not refuse. It is collected for
179
179
  // the bucket printed after both loops, where it is neither excused nor counted against the tree.
180
180
  for (const { file: f } of notes) noted.push(`${ws} ${f} ${a[f].skips ?? 0}\u2192${b[f].skips ?? 0} skip(s), `
181
181
  + `${a[f].todos ?? 0}\u2192${b[f].todos ?? 0} todo(s)`);
182
182
  console.log(`\n${ws}: ${Object.keys(next.workspaces[ws].perFile ?? {}).length} file(s)`);
183
183
  for (const f of added) console.log(` + ${f} (${b[f].tests} tests, ${b[f].asserts} asserts)`);
184
184
  // A file leaving the census, or shrinking inside it, is the shape this whole thing exists for.
185
- // Printed loudly and separately, and — since 's loss arm — REFUSED below unless --allow-loss
185
+ // Printed loudly and separately, and — since the loss arm — REFUSED below unless --allow-loss
186
186
  // is passed. This comment used to end "an --apply that scrolls past these is the laundering", which
187
187
  // was an accurate description of what the code then did: it printed both lines and wrote the file.
188
188
  for (const f of gone) console.log(` REMOVED ${f} (was ${a[f].tests} tests, ${a[f].asserts} asserts)`);
@@ -197,7 +197,7 @@ function main() {
197
197
  // a verdict. So growth is now printed as its own shape, and the all-clear says what it actually
198
198
  // checked instead of implying currency it never established.
199
199
  for (const f of grew) console.log(` grew ${f} ${a[f].tests}→${b[f].tests} tests, ${a[f].asserts}→${b[f].asserts} asserts`);
200
- // tracker issue 205 — `allClear` counts skips. Without that a file that gained nothing but skips
200
+ // `allClear` counts skips. Without that a file that gained nothing but skips
201
201
  // printed "(unchanged)" over a tree where an arm had stopped running, which is the exact
202
202
  // reassuring-narrator failure the growth line above was added to repair.
203
203
  if (allClear) console.log(" (unchanged — no file added, removed, grown, shrunk or newly skipped)");
@@ -239,7 +239,7 @@ function main() {
239
239
  else if (!undeclaredGone.length && !shrunk.length && !added.length) console.log(" (nothing LOST — the counts above moved, so the census on disk is stale)");
240
240
  }
241
241
 
242
- // tracker issue 205 — PRINTED WHENEVER IT IS NON-EMPTY, on every mode this script has. `--check`
242
+ // PRINTED WHENEVER IT IS NON-EMPTY, on every mode this script has. `--check`
243
243
  // returns before `--apply`'s refusal and `--apply` returns before `--check`'s comparison, so a bucket
244
244
  // printed inside either one would be invisible from the other — and the mode a lane gate runs is the
245
245
  // one nobody watches.
@@ -43,7 +43,7 @@ export function hoursSince(thenISO, nowISO) {
43
43
  return Math.floor((now - then) / 3_600_000);
44
44
  }
45
45
 
46
- /** The job's name, whichever shape the caller had. A bare string is the pre- form. */
46
+ /** The job's name, whichever shape the caller had. A bare string is the pre-change form. */
47
47
  export function jobName(job) { return typeof job === "string" ? job : String(job?.name ?? "?"); }
48
48
 
49
49
  /**
@@ -221,7 +221,7 @@ const HELPERS = `
221
221
  return false;
222
222
  };
223
223
  const txt = () => document.body.innerText;
224
- // tracker issue 1809 — A MISS THROWS, NAMING WHAT IT MISSED. Same defect as composer-render-check.mjs, in this
224
+ // A MISS THROWS, NAMING WHAT IT MISSED. Same defect as composer-render-check.mjs, in this
225
225
  // file's own copy of the helper: six sites below dereference the result immediately, so a button that
226
226
  // had not painted arrived as "Cannot read properties of undefined (reading 'click')".
227
227
  // maybeByText keeps the undefined return for the one site where absence is the thing being measured.
@@ -315,7 +315,7 @@ ${HELPERS}
315
315
  out.topbarHeading = (document.querySelector('.topbar h1') || {}).innerText || null;
316
316
 
317
317
  await goto('/portal/new');
318
- // tracker issue 1809 — THIS WAIT WAS IDENTITY-DEPENDENT AND SILENTLY DEAD FOR ONE OF THE THREE. "Brand owner" is
318
+ // THIS WAIT WAS IDENTITY-DEPENDENT AND SILENTLY DEAD FOR ONE OF THE THREE. "Brand owner" is
319
319
  // the rail switcher's eyebrow (AppShell.tsx), which a SINGLE-OWNER client never gets — that identity
320
320
  // reads its owner in the Account corner instead. So this timed out on every client run, and because
321
321
  // settle returned false without objecting it degraded into an 8-second sleep. Waits on the context
@@ -395,7 +395,7 @@ ${HELPERS}
395
395
  out.bringBackOnProject = allByText('button', /^Bring back$/).length >= 1;
396
396
  out.projectArchiveOnRow = allByText('button', /^Archive$/).length >= 1;
397
397
  findByText('button', /New project/).click();
398
- // "Project name" since tracker issue 1958's copy pass, which shortened the label from "What is this
398
+ // "Project name" since the copy pass that shortened the label from "What is this
399
399
  // project called?". A driver that opens the real screen is the one thing that notices a rename like
400
400
  // this, and it noticed: the whole lifecycle failed here rather than anywhere near the cause.
401
401
  await mustSettle(() => /Project name/.test(txt()), 8000, 'the project name prompt never appeared');
@@ -50,7 +50,7 @@ const WORKSPACE_ROOT = argValue("--workspace-root") ?? envFrom(process.env, "CLE
50
50
  // The default is the CANONICAL agent alone. It used to name two of this firm's people, which shipped
51
51
  // their identities to every clone and told an installer nothing. Per-agent rosters are a
52
52
  // property of a deployment, so they are passed: --agents a,b,c
53
- const AGENTS = (argValue("--agents") ?? "clawdi").split(",").map((s) => s.trim()).filter(Boolean);
53
+ const AGENTS = (argValue("--agents") ?? "localagent").split(",").map((s) => s.trim()).filter(Boolean);
54
54
  const APPLY = process.argv.includes("--apply");
55
55
  const QUIET_MS = (() => {
56
56
  const raw = argValue("--quiet-hours");
@@ -52,7 +52,8 @@ import { isEntrypoint } from "../shared/is-entrypoint.mjs";
52
52
  import { cutDecision, versionAtHead, tagsHere } from "./release-cut-decision.mjs";
53
53
 
54
54
  /**
55
- * Default bound: fifteen minutes at thirty-second steps. Both are arguments so an arm can drive the loop.
55
+ * Default bound: twenty-five minutes at thirty-second steps. Both are arguments so an arm can drive
56
+ * the loop.
56
57
  *
57
58
  * TWENTY-FIVE, RAISED FROM FIFTEEN (tracker issue 247), because this waits for the version pull
58
59
  * request's OWN CI and that is what it must clear. Measured over the first three cuts, the wait held
@@ -86,9 +87,10 @@ export const MIN_JOB_MARGIN_MS = 5 * 60 * 1000;
86
87
  * The bound, overridable for one caller only: the dry-run rehearsal.
87
88
  *
88
89
  * A rehearsal must exercise this path — a step nobody rehearses is a step that first runs for real on
89
- * the day it matters — but it has nothing to wait FOR, and fifteen minutes of polling to establish that
90
- * is fifteen minutes of a runner held for no answer. `awaitCut` asks before its first sleep, so a bound
91
- * of 0 does exactly one read and returns, which is the whole of what a rehearsal needs to prove.
90
+ * the day it matters — but it has nothing to wait FOR, and twenty-five minutes of polling to establish
91
+ * that is twenty-five minutes of a runner held for no answer. `awaitCut` asks before its first sleep,
92
+ * so a bound of 0 does exactly one read and returns, which is the whole of what a rehearsal needs to
93
+ * prove.
92
94
  *
93
95
  * REFUSES A VALUE IT CANNOT READ rather than falling back to the default. A typo here would silently
94
96
  * restore the full wait on the rehearsal, or — worse in the other direction — a real run would take a
@@ -194,7 +194,7 @@ export function surfacesFor(repo, sha, api = gh) {
194
194
  }
195
195
 
196
196
  /**
197
- * What each verdict costs the run — the half of tracker issue 208 that had the defect, so the half
197
+ * What each verdict costs the run — the half that had the defect, so the half
198
198
  * worth driving rather than reading.
199
199
  *
200
200
  * `0` is not "everything is fine"; it is "nothing here needs to stop the release". A parked run clears
@@ -7,8 +7,8 @@
7
7
  // because it is workspace-aware and this repository has four workspaces. It is, and it does not cover
8
8
  // the case that matters: `changeset version` versions the WORKSPACE packages and leaves the ROOT
9
9
  // package alone, and the root package is `clearotron` — the one thing a user installs and the only
10
- // version they will ever quote back to us. Measured on 3.0.1: a note against `prelim-driver` moved
11
- // prelim-driver 0.1.0 -> 0.1.1 and left `clearotron` at 0.1.0, with a changelog written per workspace
10
+ // version they will ever quote back to us. Measured on 3.0.1: a note against `clearotron-driver` moved
11
+ // clearotron-driver 0.1.0 -> 0.1.1 and left `clearotron` at 0.1.0, with a changelog written per workspace
12
12
  // and none at the root.
13
13
  //
14
14
  // So the four workspaces are a `fixed` group — one version number moves them together — and this script
@@ -37,7 +37,7 @@
37
37
  //
38
38
  // The demo is SPAWNED rather than reimplemented, and that is a safety property, not a shortcut: it
39
39
  // inherits bin/example.mjs's FORBIDDEN containment refusal, so a fixture pool can never resolve inside
40
- // /srv/trademark-archive or this environment's CLEAROTRON_REPORTS_DIR. 's rule is untouched — there is
40
+ // /srv/trademark-archive or this environment's CLEAROTRON_REPORTS_DIR. That rule is untouched — there is
41
41
  // still no default pool; `--fixture-pool` is an explicit request that writes only to a fresh temp dir
42
42
  // and deletes it again unless `--keep`.
43
43
  //
@@ -64,7 +64,7 @@ import { execFileSync, spawn } from "node:child_process";
64
64
  import { createServer } from "node:http";
65
65
  import { basename, extname } from "node:path";
66
66
  import { join, dirname } from "node:path";
67
- import { fileURLToPath } from "node:url";
67
+ import { fileURLToPath, pathToFileURL } from "node:url";
68
68
  import { tmpdir } from "node:os";
69
69
  import { isEntrypoint } from "../shared/is-entrypoint.mjs"; // — one entry-point test, all spellings
70
70
  import { envFrom } from "../shared/env-aliases.mjs"; // — the name a reader is told to set is the one in force
@@ -160,7 +160,7 @@ const PROBE = `<script>
160
160
  // Reports from INSIDE the frame, which is the only place the truth lives: the parent cannot read a
161
161
  // cross-origin document.
162
162
  //
163
- // tracker issue 1155 — MEASURED ON A LAYOUT EVENT, NEVER ON A CLOCK, and the reason is not style.
163
+ // MEASURED ON A LAYOUT EVENT, NEVER ON A CLOCK, and the reason is not style.
164
164
  //
165
165
  // This used to be \`setInterval(…, 400)\`, and it never fired once: the three assertions that depend on
166
166
  // this script reported "no-probe" for the whole life of the check.
@@ -198,7 +198,7 @@ const PROBE = `<script>
198
198
  winInnerH:window.innerHeight,
199
199
  trueContent:Math.ceil(b.getBoundingClientRect().bottom),
200
200
  SCROLLABLE:d.scrollHeight>window.innerHeight,
201
- // tracker issue 485: every assertion in this file was about HEIGHT, and the report was 26px too WIDE.
201
+ // every assertion in this file was about HEIGHT, and the report was 26px too WIDE.
202
202
  hOverflowPx:d.scrollWidth-d.clientWidth,
203
203
  slackPx:window.innerHeight-Math.ceil(b.getBoundingClientRect().bottom)},'*');
204
204
  } catch (e) {
@@ -219,7 +219,7 @@ const PROBE = `<script>
219
219
  /**
220
220
  * A DELIBERATE 26px sideways overflow, injected into the report on `--plant-overflow`.
221
221
  *
222
- * 's acceptance has two halves and this is the one that matters more: nine green assertions prove
222
+ * That acceptance has two halves and this is the one that matters more: nine green assertions prove
223
223
  * nothing unless the same harness still REDDENS on a report that is actually broken. The old check
224
224
  * returned `stale-probe` for the sideways assertion in most runs, so it could not have caught this —
225
225
  * and a run of nine PASSes from an instrument that cannot fail is the exact false authority the whole
@@ -255,7 +255,7 @@ const SHELL = `<!doctype html><html><head><meta charset="utf-8"><title>render-ch
255
255
  <script>
256
256
  var f=document.getElementById('f'),st={heightMsgs:0},lastHeightAt=Date.now();
257
257
  window.addEventListener('message',function(e){var d=e.data;
258
- // tracker issue 1155 — COUNT EVERY MESSAGE BEFORE THE SOURCE FILTER, and keep the count.
258
+ // COUNT EVERY MESSAGE BEFORE THE SOURCE FILTER, and keep the count.
259
259
  //
260
260
  // msgsAll minus probeMsgs minus heightMsgs is an accounting: it separates "nothing arrived from
261
261
  // inside the frame" from "something arrived and this handler discarded it", which a post-filter
@@ -447,12 +447,36 @@ async function measureAtZoom(zoom, deadlineMs = 90_000) {
447
447
  }
448
448
  }
449
449
 
450
+ /**
451
+ * PURE. Did the in-frame probe post, and if not, which of the two causes does the evidence name?
452
+ *
453
+ * SEPARATED SO EVERY BRANCH CAN BE DRIVEN. The whole finding here is a check that reported three failed
454
+ * measurements about values it never read, and an arm that could only reach this through a real browser on
455
+ * a starved runner would be the same shape one level up: untestable except by luck.
456
+ *
457
+ * `heightMsgs` is the discriminator and was already being collected. It counts messages from the report's
458
+ * OWN height bridge, which travels the same postMessage path as the probe — so non-zero means the frame
459
+ * loaded, ran scripts and reached this shell, and a missing probe is then the probe's problem. Zero means
460
+ * nothing arrived from inside at all, and the probe is not the thing to look at.
461
+ */
462
+ export function probeVerdict({ innerScrollbar, hOverflowPx, slackPx, heightMsgs = 0 } = {}) {
463
+ const missing = innerScrollbar === "no-probe" || hOverflowPx === "no-probe" || slackPx === null;
464
+ if (!missing) return { measured: true, cause: null, why: null };
465
+ return heightMsgs > 0
466
+ ? { measured: false, cause: "probe-only",
467
+ why: `${heightMsgs} height post(s) DID arrive, so the frame loaded and its scripts ran and reached `
468
+ + "this shell. The probe alone is missing — look at the probe, not at the report." }
469
+ : { measured: false, cause: "nothing-from-inside",
470
+ why: "No message of any kind arrived from inside the frame. The frame did not load, or its scripts "
471
+ + "did not run. The probe is not the thing to look at." };
472
+ }
473
+
450
474
  async function main() {
451
475
  const { pool: POOL, built } = resolvePool();
452
476
  const runId = pickRun(POOL);
453
477
  mkdirSync(WORK, { recursive: true });
454
478
 
455
- const { readReport } = await import(join(REPO, "driver", "portal-report.mjs"));
479
+ const { readReport } = await import(pathToFileURL(join(REPO, "driver", "portal-report.mjs")).href);
456
480
  const html = readReport(join(POOL, runId), { staff: true, poolRoot: POOL });
457
481
  // chrome.css carries 35KB of typography; without it the layout is not the one users see. What must be
458
482
  // true is that NO external stylesheet link survives into the measured document — either it was inlined,
@@ -473,12 +497,40 @@ async function main() {
473
497
  console.log(" Expect the sideways assertion to FAIL. A clean run here means the instrument is blind.\n");
474
498
  }
475
499
  let failures = 0;
500
+ // A COULD-NOT-LOOK IS NOT A FAILED MEASUREMENT (tracker issue 239). Counted apart from `failures`
501
+ // because the two mean different things to whoever reads the exit code: 1 says the layout is wrong,
502
+ // 2 says nothing was measured. Merging them is how a starved runner sends a reader to look at CSS.
503
+ let unmeasured = 0;
476
504
 
477
505
  for (const zoom of ZOOMS) {
478
506
  const measured = await measureAtZoom(zoom);
479
507
  if (!measured.ok) { console.log(` zoom ${zoom}: FAILED — ${measured.why}`); failures++; continue; }
480
508
  const r = measured.state;
481
509
 
510
+ // ── THE THREE ASSERTIONS BELOW READ THE IN-FRAME PROBE, AND IT MAY NEVER HAVE POSTED ────────────
511
+ //
512
+ // `no-probe` and `null` are not measurements that disagreed with the expectation — they are the
513
+ // expectation never being tested. Rendering them as `FAIL … (got "no-probe")` is a check that could
514
+ // not look, reported as a check that looked and disliked what it saw, and it sends a reader to the
515
+ // report's CSS where there is nothing to find. Measured on a starved runner: three assertions failed
516
+ // on a branch whose diff was comments, a documentation line and a new test file.
517
+ //
518
+ // `heightMsgs` separates the two causes and was already being collected. It counts messages from the
519
+ // report's OWN height bridge, which travels the same postMessage path as the probe: non-zero means
520
+ // the frame loaded, ran scripts and reached the parent, so a missing probe is the probe's problem.
521
+ // Zero means nothing from inside arrived at all, and the probe is not the thing to look at.
522
+ const probe = probeVerdict(r);
523
+ if (!probe.measured) {
524
+ unmeasured++;
525
+ console.log(` zoom ${zoom}: (ready by ${r.readyBy}, heights ${r.heightsQuiet}, `
526
+ + `settled after ${r.settleTries} × 25ms, ${r.heightMsgs} height post(s), ${r.probeMsgs} probe post(s))`);
527
+ console.log(` COULD NOT MEASURE — the in-frame probe never posted, so the report's own scrollbar,`);
528
+ console.log(` its sideways overflow and the frame's slack were not read at zoom ${zoom}.`);
529
+ console.log(` ${probe.why}`);
530
+ console.log(` ── raw state: ${JSON.stringify(r)}`);
531
+ continue;
532
+ }
533
+
482
534
  const checks = [
483
535
  ["no border stealing from the frame's viewport", r.borderSteals === 0, r.borderSteals],
484
536
  ["the report has NO scrollbar of its own", r.innerScrollbar === false, r.innerScrollbar],
@@ -540,6 +592,13 @@ async function main() {
540
592
  + "clean run of this check is not evidence the report is clean.");
541
593
  process.exit(caught ? 0 : 1);
542
594
  }
595
+ if (unmeasured) {
596
+ // EXIT 2, THE HOUSE MEANING FOR COULD-NOT-LOOK. It still stops CI — nothing is waved through — but it
597
+ // does not claim the layout was measured and found wrong.
598
+ console.error(`\nrender-check: nothing was measured at ${unmeasured} zoom level(s) — the in-frame probe `
599
+ + `never posted. This is a failure to LOOK, not a finding about the report.`);
600
+ process.exit(2);
601
+ }
543
602
  console.log(failures ? `\nrender-check: ${failures} FAILED` : "\nrender-check: all checks passed");
544
603
  process.exit(failures ? 1 : 0);
545
604
  }
@@ -22,7 +22,7 @@
22
22
  // Needs `google-chrome` (on the VM). Same mechanism as render-check.mjs: a page computes its verdict
23
23
  // and writes it into <title>, which --dump-dom hands back.
24
24
 
25
- import { chromeErrorPage } from "./headless-page.mjs"; // tracker issue 227 — a dumped DOM can be chrome's own error document
25
+ import { chromeErrorPage } from "./headless-page.mjs"; // a dumped DOM can be chrome's own error document
26
26
  import { execFileSync } from "node:child_process";
27
27
  import { mkdtempSync, writeFileSync, rmSync, readFileSync } from "node:fs";
28
28
  import { tmpdir } from "node:os";
@@ -19,7 +19,7 @@
19
19
  // receives, so it loads the brand webfonts the client's browser loads. Two scripts, two intents; do not
20
20
  // "fix" either to match the other.
21
21
  import { spawn } from "node:child_process";
22
- import { assertPageLoaded, cjkCharsIn, cjkVerdict, fontsCovering } from "./headless-page.mjs"; // tracker issue 227 — did chrome open the report, or its own error page?
22
+ import { assertPageLoaded, cjkCharsIn, cjkVerdict, fontsCovering } from "./headless-page.mjs"; // did chrome open the report, or its own error page?
23
23
  import { mkdtempSync, writeFileSync, existsSync } from "node:fs";
24
24
  import { tmpdir } from "node:os";
25
25
  import { join, dirname, resolve } from "node:path";
@@ -59,7 +59,7 @@
59
59
  // MUST NOT run as a user with a virtual-memory ulimit (`ulimit -v`) — Chrome dumps core under one. Run it
60
60
  // as a user with `ulimit -v unlimited`. The dbus/UPower errors Chrome prints on a headless box are noise.
61
61
 
62
- import { navigateOrRefuse } from './headless-page.mjs' // tracker issue 227 — Page.navigate returns an errorText, and nothing read it
62
+ import { navigateOrRefuse } from './headless-page.mjs' // Page.navigate returns an errorText, and nothing read it
63
63
  import { createServer } from 'node:http'
64
64
  import { readFileSync, existsSync, writeFileSync, mkdtempSync, rmSync } from 'node:fs'
65
65
  import { join, extname, dirname } from 'node:path'
package/scripts/score.mjs CHANGED
@@ -159,7 +159,7 @@ function findingsOf(runDir) {
159
159
  // Its finding rows carry no typed source at all: a `type` ("Active Business", "Famous Brand") that
160
160
  // is free model prose, and a `url`. The class is not missing by accident — the lane's register
161
161
  // component is a two-predicate count of the mark string and structurally cannot reach a register
162
- // family (, ruled and closed). Everything it PUBLISHES comes off the common-law screen.
162
+ // family (ruled and closed). Everything it PUBLISHES comes off the common-law screen.
163
163
  //
164
164
  // So the class is asserted here rather than guessed from `type`, and it is asserted in the
165
165
  // direction that cannot overstate recall: a register gold entry is never satisfied by a knockout
@@ -496,7 +496,7 @@ function print(id, ref, run, s, delta, refPath) {
496
496
  console.log(deliveryLine(run));
497
497
  // — THE INSTRUMENT, BESIDE THE NUMBER. `--json` has carried `scorer_version` since this file
498
498
  // shipped; the human path did not, and the human path is the one whose numbers get pasted into an
499
- // issue. 's body states 6/9 for a run that re-scores 5/2/2 today across two scorer changes
499
+ // issue. That body states 6/9 for a run that re-scores 5/2/2 today across two scorer changes
500
500
  // (`fd9938ce`, `212cdf73`), so every delta quoted from it crosses an unmarked boundary. A number a
501
501
  // reader can carry away must carry the instrument with it.
502
502
  //
@@ -805,11 +805,11 @@ function print(id, ref, run, s, delta, refPath) {
805
805
  // Now: `asked=` and `ran=` side by side, and — per the owner's ruling, flag rather than gate — a
806
806
  // LOUD marker when the ask was not met, carrying the cause on the same line so the reader is not
807
807
  // sent to the artifact to find out which switch was off (the rule for degradedCause, applied
808
- // to the field beside it). An unrecorded verdict prints as unrecorded: a pre- artifact cannot
808
+ // to the field beside it). An unrecorded verdict prints as unrecorded: a pre-change artifact cannot
809
809
  // answer this and must not look like a lane that met its ask.
810
810
  // `(not stated)` and `(not established)` are DIFFERENT cells and the row keeps them apart, in the
811
811
  // vocabulary it already uses one column over: `not stated` = this artifact never answered the
812
- // question (a pre- run), `not established` = it answered and the answer is that its own record
812
+ // question (a pre-change run), `not established` = it answered and the answer is that its own record
813
813
  // cannot settle what ran. Neither is `candidates`, and neither may read as a met ask.
814
814
  //
815
815
  // THE REASON DOES NOT GO IN THE CELL. A row is a row: the first cut interpolated the verdict's whole