clearotron 0.2.0 → 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 (629) hide show
  1. package/.env.example +105 -0
  2. package/CONTRIBUTING.md +3 -3
  3. package/INSTALL.md +57 -52
  4. package/README.md +2 -1
  5. package/bin/brandowner.mjs +1 -1
  6. package/bin/clearotron.mjs +4 -4
  7. package/bin/connect.mjs +2 -2
  8. package/bin/example.mjs +114 -37
  9. package/bin/grant.mjs +3 -3
  10. package/bin/key.mjs +1 -1
  11. package/bin/onboard.mjs +97 -119
  12. package/bin/start.mjs +29 -25
  13. package/bin/stop.mjs +65 -3
  14. package/bin/update.mjs +7 -7
  15. package/bin/uspto-sync.mjs +1 -1
  16. package/build-info.json +2 -2
  17. package/docs/DELIVERY.md +6 -2
  18. package/docs/RELEASES.md +6 -4
  19. package/docs/architecture/01-product-overview.md +2 -2
  20. package/docs/architecture/02-architecture.md +2 -2
  21. package/docs/architecture/04-configuration-reference.md +7 -4
  22. package/docs/architecture/05-config-governance.md +38 -5
  23. package/docs/architecture/06-operations-runbook.md +13 -1
  24. package/docs/architecture/09-security-and-data.md +1 -1
  25. package/docs/decisions/0004-documentation-structure.md +1 -1
  26. package/driver/CHANGELOG.md +95 -1
  27. package/driver/README.md +2 -2
  28. package/driver/ask-ledger.mjs +72 -4
  29. package/driver/authority-trees.mjs +1 -1
  30. package/driver/call-capture.mjs +1 -1
  31. package/driver/card-frame.mjs +1 -1
  32. package/driver/case-law-ledger.mjs +1 -1
  33. package/driver/claim-liveness.mjs +1 -1
  34. package/driver/common-law-receipts.mjs +1 -1
  35. package/driver/commonlaw-carry.mjs +1 -1
  36. package/driver/config-inventory.mjs +1 -1
  37. package/driver/connotation-search.mjs +12 -12
  38. package/driver/contract-audit.mjs +5 -5
  39. package/driver/contract-dictation-registry.mjs +4 -4
  40. package/driver/contract-dictation.mjs +2 -2
  41. package/driver/contract-e3-backlog.mjs +6 -6
  42. package/driver/contract-vocabulary.mjs +3 -3
  43. package/driver/corrections-feedforward.mjs +1 -1
  44. package/driver/coverage-form-io.mjs +2 -2
  45. package/driver/coverage-form.mjs +4 -4
  46. package/driver/coverage-ledger.mjs +3 -3
  47. package/driver/coverage-union.mjs +1 -1
  48. package/driver/declination-call.mjs +35 -3
  49. package/driver/declination-duty.mjs +1 -1
  50. package/driver/deliver-trigger.sh +3 -3
  51. package/driver/deploy-live-run-guard.mjs +6 -2
  52. package/driver/dev-portal.mjs +1 -1
  53. package/driver/disposition-call.mjs +4 -4
  54. package/driver/disposition-tool.mjs +4 -4
  55. package/driver/disposition-union.mjs +2 -2
  56. package/driver/doc-constants.mjs +1 -1
  57. package/driver/door-gates.mjs +2 -2
  58. package/driver/doubt-selection.mjs +2 -2
  59. package/driver/drainer-identity.mjs +1 -1
  60. package/driver/driver.config.mjs +63 -11
  61. package/driver/e2e-rounds.mjs +2 -2
  62. package/driver/effort-model.mjs +2 -2
  63. package/driver/engine/anthropic-agent.mjs +24 -24
  64. package/driver/engine/auth.mjs +1 -1
  65. package/driver/engine/common.mjs +1 -1
  66. package/driver/engine/deny-authority-write.mjs +1 -1
  67. package/driver/engine/jx-turn.mjs +1 -1
  68. package/driver/engine/mcp/clarivate-server.mjs +1 -1
  69. package/driver/engine/mcp/corsearch-server.mjs +1 -1
  70. package/driver/engine/mcp/declination-server.mjs +1 -1
  71. package/driver/engine/mcp/dispositions-server.mjs +1 -1
  72. package/driver/engine/mcp/euipo-server.mjs +1 -1
  73. package/driver/engine/mcp/fetch-server.mjs +1 -1
  74. package/driver/engine/mcp/free-tier-server.mjs +2 -2
  75. package/driver/engine/mcp/gather-config.mjs +11 -11
  76. package/driver/engine/mcp/perplexity-server.mjs +1 -1
  77. package/driver/engine/mcp/recording-server.mjs +8 -4
  78. package/driver/engine/mcp/signa-server.mjs +1 -1
  79. package/driver/engine/mcp/uspto-local-server.mjs +1 -1
  80. package/driver/engine/openai-agent.mjs +2 -2
  81. package/driver/engine-build.mjs +2 -2
  82. package/driver/enqueue-schema.mjs +2 -2
  83. package/driver/enqueue.mjs +1 -1
  84. package/driver/envelope-settle.mjs +1 -1
  85. package/driver/evidence-claim-invariant.mjs +2 -2
  86. package/driver/findings-model.mjs +8 -8
  87. package/driver/floor-duty.mjs +1 -1
  88. package/driver/form-neighbourhood.mjs +1 -1
  89. package/driver/framework.mjs +1 -1
  90. package/driver/gateway.mjs +28 -23
  91. package/driver/grounds-grammar.mjs +1 -1
  92. package/driver/hit-list.mjs +1 -1
  93. package/driver/jurisdiction-systems.mjs +1 -1
  94. package/driver/jx-lanes.mjs +1 -1
  95. package/driver/jx-units.mjs +1 -1
  96. package/driver/jx.mjs +3 -3
  97. package/driver/knockout-assess-record.mjs +5 -1
  98. package/driver/narrative-refutation-record.mjs +3 -3
  99. package/driver/numeric-setting.mjs +1 -1
  100. package/driver/owner-use-check.mjs +184 -0
  101. package/driver/package.json +2 -2
  102. package/driver/phase0.mjs +1 -1
  103. package/driver/pipeline-knockout.mjs +52 -4
  104. package/driver/pipeline.mjs +215 -63
  105. package/driver/placement-diff.mjs +2 -2
  106. package/driver/placement-form.mjs +4 -4
  107. package/driver/placement-union.mjs +1 -1
  108. package/driver/portal-acks.mjs +1 -1
  109. package/driver/portal-config-view.mjs +2 -2
  110. package/driver/portal-local-auth.mjs +1 -1
  111. package/driver/portal-report.mjs +6 -6
  112. package/driver/portal-service.mjs +15 -15
  113. package/driver/predelivery-lint.mjs +29 -11
  114. package/driver/prelim-variants-record.mjs +2 -2
  115. package/driver/profile-page.html +1 -1
  116. package/driver/profile-selection.mjs +1 -1
  117. package/driver/profile-service.mjs +2 -2
  118. package/driver/profiles.mjs +1 -1
  119. package/driver/progress.mjs +6 -6
  120. package/driver/provider-usage.mjs +1 -1
  121. package/driver/publish/demo-marking.mjs +1 -1
  122. package/driver/publish/index.mjs +47 -6
  123. package/driver/publish/knockout.mjs +36 -14
  124. package/driver/publish/parse.mjs +4 -4
  125. package/driver/publish/publish-inputs.mjs +2 -2
  126. package/driver/publish/register-presence.mjs +1 -1
  127. package/driver/publish/render-knockout.mjs +198 -31
  128. package/driver/publish/report-data.mjs +13 -3
  129. package/driver/publish/seed-pool.mjs +24 -9
  130. package/driver/queue-watch-probe.mjs +1 -1
  131. package/driver/queue-watch-verdict.mjs +1 -1
  132. package/driver/recall-reconciliation.mjs +1 -1
  133. package/driver/recipe-service.mjs +1 -1
  134. package/driver/record-carry.mjs +141 -2
  135. package/driver/recording-agreement.mjs +3 -3
  136. package/driver/reference-score.mjs +59 -9
  137. package/driver/reference-strip-signatures.mjs +68 -0
  138. package/driver/refusal-bound.mjs +3 -3
  139. package/driver/register-availability.mjs +2 -2
  140. package/driver/register-count.mjs +1 -1
  141. package/driver/register-digest-record.mjs +31 -1
  142. package/driver/register-grant-vocabulary.mjs +2 -2
  143. package/driver/register-plan.mjs +8 -8
  144. package/driver/register-records.mjs +2 -2
  145. package/driver/registry-fidelity.mjs +3 -3
  146. package/driver/remedy-accounting.mjs +1 -1
  147. package/driver/repair-composers.mjs +2 -2
  148. package/driver/repair-digest.mjs +3 -3
  149. package/driver/repairs.mjs +7 -7
  150. package/driver/replay-archive.mjs +2 -0
  151. package/driver/report-card-record.mjs +2 -2
  152. package/driver/result-noun-fields.mjs +10 -3
  153. package/driver/run-economics.mjs +2 -2
  154. package/driver/run-integrity.mjs +1 -1
  155. package/driver/runner.mjs +22 -22
  156. package/driver/scope-rules.mjs +1 -1
  157. package/driver/search-policy.mjs +3 -3
  158. package/driver/skeptic-search.mjs +1 -1
  159. package/driver/skills/blind-frame/SKILL.md +1 -1
  160. package/driver/skills/case-law-citation/SKILL.md +2 -2
  161. package/driver/skills/knockout-assess/SKILL.md +10 -4
  162. package/driver/skills/prelim-search/SKILL.md +2 -2
  163. package/driver/skills/prelim-search/template-formatting.md +1 -1
  164. package/driver/skills/prelim-search/templates/email/generic.md +1 -1
  165. package/driver/skills/prelim-search/worked-examples.md +1 -1
  166. package/driver/skills/prelim-variants/SKILL.md +2 -2
  167. package/driver/stage-context.mjs +1 -1
  168. package/driver/stages-knockout.mjs +55 -4
  169. package/driver/stages.mjs +97 -40
  170. package/driver/stray-artifacts.mjs +2 -2
  171. package/driver/suite-census.json +188 -44
  172. package/driver/synthesis-record.mjs +1 -1
  173. package/driver/systemd/clearotron-client-mcp.service +1 -1
  174. package/driver/systemd/clearotron-portal.service +1 -1
  175. package/driver/systemd/render-units.mjs +1 -1
  176. package/driver/tokens.mjs +1 -1
  177. package/driver/tool-calls.mjs +1 -1
  178. package/driver/turnaround-bands.mjs +1 -1
  179. package/driver/unit-file-drift.mjs +1 -1
  180. package/driver/unit-inventory.mjs +121 -61
  181. package/driver/unit-state-verdict.mjs +20 -12
  182. package/driver/verify-knockout.mjs +10 -2
  183. package/driver/verify.mjs +14 -14
  184. package/driver/whatif-memo-run.mjs +46 -5
  185. package/driver/whatif-queue.mjs +1 -1
  186. package/driver/whatif-worker.mjs +1 -1
  187. package/mcp-server/CHANGELOG.md +12 -0
  188. package/mcp-server/README.md +3 -3
  189. package/mcp-server/http-server.mjs +44 -1
  190. package/mcp-server/key-socket.mjs +184 -0
  191. package/mcp-server/lib/audit-view.mjs +69 -2
  192. package/mcp-server/lib/brief.mjs +15 -0
  193. package/mcp-server/lib/driver.mjs +7 -1
  194. package/mcp-server/lib/events.mjs +1 -1
  195. package/mcp-server/lib/http-handler.mjs +1 -1
  196. package/mcp-server/lib/knockout.mjs +435 -0
  197. package/mcp-server/lib/ops.mjs +4 -4
  198. package/mcp-server/lib/options.mjs +1 -1
  199. package/mcp-server/lib/plan.mjs +1 -1
  200. package/mcp-server/lib/runs.mjs +1 -1
  201. package/mcp-server/lib/scrub.mjs +1 -1
  202. package/mcp-server/lib/whatif.mjs +12 -3
  203. package/mcp-server/mint-token.mjs +1 -1
  204. package/mcp-server/package.json +2 -2
  205. package/mcp-server/server.mjs +76 -11
  206. package/package.json +3 -3
  207. package/portal-ui/package.json +1 -1
  208. package/providers/_shared/enumerate.mjs +1 -1
  209. package/providers/_shared/ledger-path.mjs +3 -3
  210. package/providers/_shared/ledger.mjs +1 -1
  211. package/providers/_shared/result-shape.mjs +3 -3
  212. package/providers/_shared/term-shape.mjs +1 -1
  213. package/providers/corsearch/src/core.js +1 -1
  214. package/providers/jx-subclass/BUILDING.md +1 -1
  215. package/providers/oauth-mcp-bridge/CHANGELOG.md +12 -0
  216. package/providers/oauth-mcp-bridge/package.json +1 -1
  217. package/providers/oauth-mcp-bridge/stdin-guard.mjs +2 -2
  218. package/scripts/README.md +1 -1
  219. package/scripts/added-reference-check.mjs +29 -1
  220. package/scripts/ai-page-render-check.mjs +2 -1
  221. package/scripts/authority-boundary-probe.mjs +1 -1
  222. package/scripts/backfill-started-at.mjs +1 -1
  223. package/scripts/citation-line-check.mjs +3 -3
  224. package/scripts/clearances-render-check.mjs +4 -3
  225. package/scripts/compare.mjs +2 -2
  226. package/scripts/composer-render-check.mjs +6 -6
  227. package/scripts/contract-dictation-scan.mjs +2 -2
  228. package/scripts/dead-names.mjs +1 -1
  229. package/scripts/drain-preflight.mjs +5 -5
  230. package/scripts/e2e-unread-terminals.mjs +1 -1
  231. package/scripts/e2e.mjs +8 -8
  232. package/scripts/env-audit.mjs +27 -7
  233. package/scripts/env-classify.mjs +139 -15
  234. package/scripts/freeze-example-run.mjs +3 -3
  235. package/scripts/head-arrived-gated.mjs +1 -1
  236. package/scripts/headless-page.mjs +274 -0
  237. package/scripts/home-render-check.mjs +3 -2
  238. package/scripts/live-surface-check.mjs +92 -19
  239. package/scripts/main-health.mjs +1 -1
  240. package/scripts/merge-presence-check.mjs +3 -3
  241. package/scripts/mint-reference-strip-backlog.mjs +41 -0
  242. package/scripts/mint-suite-census.mjs +6 -6
  243. package/scripts/nightly-notice.mjs +1 -1
  244. package/scripts/portal-lifecycle-check.mjs +3 -3
  245. package/scripts/reconcile-runs.mjs +1 -1
  246. package/scripts/release-await-cut.mjs +101 -11
  247. package/scripts/release-version-pr-checks.mjs +26 -2
  248. package/scripts/release-version.mjs +2 -2
  249. package/scripts/render-check.mjs +66 -7
  250. package/scripts/report-frame-check.mjs +12 -0
  251. package/scripts/report-screenshot.mjs +62 -2
  252. package/scripts/revisit-render-check.mjs +3 -2
  253. package/scripts/score.mjs +18 -4
  254. package/scripts/strip-tracker-citations.mjs +116 -0
  255. package/scripts/test-run.mjs +3 -3
  256. package/scripts/third-party-notices.mjs +3 -3
  257. package/scripts/travelling-predicates.mjs +3 -3
  258. package/scripts/unexecuted-asserts.mjs +2 -2
  259. package/scripts/verify-publishable.mjs +2 -2
  260. package/scripts/write-up-form-census.mjs +1 -1
  261. package/shared/access-audience.mjs +215 -0
  262. package/shared/brand.mjs +13 -13
  263. package/shared/citation-scan.mjs +1 -1
  264. package/shared/client-door.mjs +7 -7
  265. package/shared/driver-dir.mjs +1 -1
  266. package/shared/env-aliases.mjs +0 -48
  267. package/shared/env-local.mjs +1 -1
  268. package/shared/identifier-scan.mjs +3 -3
  269. package/shared/invocation.mjs +1 -1
  270. package/shared/names-in-force.mjs +2 -0
  271. package/shared/product-owned-names.mjs +1 -1
  272. package/shared/register-selection.mjs +1 -1
  273. package/shared/scope.mjs +5 -5
  274. package/shared/server-units.mjs +4 -4
  275. package/shared/store-in-repo.mjs +2 -2
  276. package/shared/suite-census.mjs +4 -4
  277. package/shared/tracked-files.mjs +31 -0
  278. package/shared/tty-style.mjs +1 -1
  279. package/shared/uspto-index-size.mjs +1 -1
  280. package/shared/vacuous-pass.mjs +1 -1
  281. package/skills/clearotron-account/SKILL.md +42 -13
  282. package/driver/systemd/prelim-driver.path +0 -69
  283. package/driver/systemd/prelim-driver.service +0 -86
  284. package/driver/systemd/prelim-driver.timer +0 -14
  285. package/driver/systemd/prelim-outbox.path +0 -27
  286. package/driver/systemd/prelim-outbox.service +0 -37
  287. package/driver/systemd/prelim-outbox.timer +0 -21
  288. package/node_modules/exceljs/README_zh.md +0 -2878
  289. package/node_modules/exceljs/dist/LICENSE +0 -22
  290. package/node_modules/exceljs/dist/es5/csv/csv.js +0 -182
  291. package/node_modules/exceljs/dist/es5/csv/csv.js.map +0 -1
  292. package/node_modules/exceljs/dist/es5/csv/line-buffer.js +0 -68
  293. package/node_modules/exceljs/dist/es5/csv/line-buffer.js.map +0 -1
  294. package/node_modules/exceljs/dist/es5/csv/stream-converter.js +0 -110
  295. package/node_modules/exceljs/dist/es5/csv/stream-converter.js.map +0 -1
  296. package/node_modules/exceljs/dist/es5/doc/anchor.js +0 -73
  297. package/node_modules/exceljs/dist/es5/doc/anchor.js.map +0 -1
  298. package/node_modules/exceljs/dist/es5/doc/cell.js +0 -961
  299. package/node_modules/exceljs/dist/es5/doc/cell.js.map +0 -1
  300. package/node_modules/exceljs/dist/es5/doc/column.js +0 -274
  301. package/node_modules/exceljs/dist/es5/doc/column.js.map +0 -1
  302. package/node_modules/exceljs/dist/es5/doc/data-validations.js +0 -18
  303. package/node_modules/exceljs/dist/es5/doc/data-validations.js.map +0 -1
  304. package/node_modules/exceljs/dist/es5/doc/defined-names.js +0 -173
  305. package/node_modules/exceljs/dist/es5/doc/defined-names.js.map +0 -1
  306. package/node_modules/exceljs/dist/es5/doc/enums.js +0 -49
  307. package/node_modules/exceljs/dist/es5/doc/enums.js.map +0 -1
  308. package/node_modules/exceljs/dist/es5/doc/image.js +0 -69
  309. package/node_modules/exceljs/dist/es5/doc/image.js.map +0 -1
  310. package/node_modules/exceljs/dist/es5/doc/modelcontainer.js +0 -16
  311. package/node_modules/exceljs/dist/es5/doc/modelcontainer.js.map +0 -1
  312. package/node_modules/exceljs/dist/es5/doc/note.js +0 -64
  313. package/node_modules/exceljs/dist/es5/doc/note.js.map +0 -1
  314. package/node_modules/exceljs/dist/es5/doc/range.js +0 -229
  315. package/node_modules/exceljs/dist/es5/doc/range.js.map +0 -1
  316. package/node_modules/exceljs/dist/es5/doc/row.js +0 -382
  317. package/node_modules/exceljs/dist/es5/doc/row.js.map +0 -1
  318. package/node_modules/exceljs/dist/es5/doc/table.js +0 -443
  319. package/node_modules/exceljs/dist/es5/doc/table.js.map +0 -1
  320. package/node_modules/exceljs/dist/es5/doc/workbook.js +0 -202
  321. package/node_modules/exceljs/dist/es5/doc/workbook.js.map +0 -1
  322. package/node_modules/exceljs/dist/es5/doc/worksheet.js +0 -900
  323. package/node_modules/exceljs/dist/es5/doc/worksheet.js.map +0 -1
  324. package/node_modules/exceljs/dist/es5/exceljs.bare.js +0 -14
  325. package/node_modules/exceljs/dist/es5/exceljs.bare.js.map +0 -1
  326. package/node_modules/exceljs/dist/es5/exceljs.browser.js +0 -36
  327. package/node_modules/exceljs/dist/es5/exceljs.browser.js.map +0 -1
  328. package/node_modules/exceljs/dist/es5/exceljs.nodejs.js +0 -15
  329. package/node_modules/exceljs/dist/es5/exceljs.nodejs.js.map +0 -1
  330. package/node_modules/exceljs/dist/es5/index.js +0 -15
  331. package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js +0 -90
  332. package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js.map +0 -1
  333. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js +0 -94
  334. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js.map +0 -1
  335. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js +0 -94
  336. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js.map +0 -1
  337. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js +0 -362
  338. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js.map +0 -1
  339. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js +0 -347
  340. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js.map +0 -1
  341. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js +0 -392
  342. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js.map +0 -1
  343. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js +0 -652
  344. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js.map +0 -1
  345. package/node_modules/exceljs/dist/es5/utils/auto-drain.js +0 -18
  346. package/node_modules/exceljs/dist/es5/utils/auto-drain.js.map +0 -1
  347. package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js +0 -15
  348. package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js.map +0 -1
  349. package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js +0 -18
  350. package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js.map +0 -1
  351. package/node_modules/exceljs/dist/es5/utils/cell-matrix.js +0 -149
  352. package/node_modules/exceljs/dist/es5/utils/cell-matrix.js.map +0 -1
  353. package/node_modules/exceljs/dist/es5/utils/col-cache.js +0 -258
  354. package/node_modules/exceljs/dist/es5/utils/col-cache.js.map +0 -1
  355. package/node_modules/exceljs/dist/es5/utils/copy-style.js +0 -43
  356. package/node_modules/exceljs/dist/es5/utils/copy-style.js.map +0 -1
  357. package/node_modules/exceljs/dist/es5/utils/encryptor.js +0 -58
  358. package/node_modules/exceljs/dist/es5/utils/encryptor.js.map +0 -1
  359. package/node_modules/exceljs/dist/es5/utils/iterate-stream.js +0 -46
  360. package/node_modules/exceljs/dist/es5/utils/iterate-stream.js.map +0 -1
  361. package/node_modules/exceljs/dist/es5/utils/parse-sax.js +0 -47
  362. package/node_modules/exceljs/dist/es5/utils/parse-sax.js.map +0 -1
  363. package/node_modules/exceljs/dist/es5/utils/shared-formula.js +0 -42
  364. package/node_modules/exceljs/dist/es5/utils/shared-formula.js.map +0 -1
  365. package/node_modules/exceljs/dist/es5/utils/shared-strings.js +0 -32
  366. package/node_modules/exceljs/dist/es5/utils/shared-strings.js.map +0 -1
  367. package/node_modules/exceljs/dist/es5/utils/stream-base64.js +0 -66
  368. package/node_modules/exceljs/dist/es5/utils/stream-base64.js.map +0 -1
  369. package/node_modules/exceljs/dist/es5/utils/stream-buf.js +0 -343
  370. package/node_modules/exceljs/dist/es5/utils/stream-buf.js.map +0 -1
  371. package/node_modules/exceljs/dist/es5/utils/string-buf.js +0 -73
  372. package/node_modules/exceljs/dist/es5/utils/string-buf.js.map +0 -1
  373. package/node_modules/exceljs/dist/es5/utils/string-builder.js +0 -32
  374. package/node_modules/exceljs/dist/es5/utils/string-builder.js.map +0 -1
  375. package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js +0 -61
  376. package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js.map +0 -1
  377. package/node_modules/exceljs/dist/es5/utils/typed-stack.js +0 -23
  378. package/node_modules/exceljs/dist/es5/utils/typed-stack.js.map +0 -1
  379. package/node_modules/exceljs/dist/es5/utils/under-dash.js +0 -168
  380. package/node_modules/exceljs/dist/es5/utils/under-dash.js.map +0 -1
  381. package/node_modules/exceljs/dist/es5/utils/utils.js +0 -171
  382. package/node_modules/exceljs/dist/es5/utils/utils.js.map +0 -1
  383. package/node_modules/exceljs/dist/es5/utils/xml-stream.js +0 -151
  384. package/node_modules/exceljs/dist/es5/utils/xml-stream.js.map +0 -1
  385. package/node_modules/exceljs/dist/es5/utils/zip-stream.js +0 -79
  386. package/node_modules/exceljs/dist/es5/utils/zip-stream.js.map +0 -1
  387. package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js +0 -230
  388. package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js.map +0 -1
  389. package/node_modules/exceljs/dist/es5/xlsx/rel-type.js +0 -18
  390. package/node_modules/exceljs/dist/es5/xlsx/rel-type.js.map +0 -1
  391. package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js +0 -139
  392. package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js.map +0 -1
  393. package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js +0 -85
  394. package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js.map +0 -1
  395. package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js +0 -32
  396. package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js.map +0 -1
  397. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +0 -24
  398. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +0 -1
  399. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js +0 -27
  400. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +0 -1
  401. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js +0 -51
  402. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +0 -1
  403. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js +0 -234
  404. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js.map +0 -1
  405. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js +0 -103
  406. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js.map +0 -1
  407. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js +0 -76
  408. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js.map +0 -1
  409. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +0 -35
  410. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +0 -1
  411. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +0 -32
  412. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +0 -1
  413. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +0 -53
  414. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +0 -1
  415. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +0 -97
  416. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +0 -1
  417. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js +0 -107
  418. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +0 -1
  419. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js +0 -92
  420. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +0 -1
  421. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +0 -61
  422. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +0 -1
  423. package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js +0 -51
  424. package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js.map +0 -1
  425. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +0 -30
  426. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +0 -1
  427. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +0 -27
  428. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +0 -1
  429. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js +0 -93
  430. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js.map +0 -1
  431. package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js +0 -112
  432. package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js.map +0 -1
  433. package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js +0 -158
  434. package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js.map +0 -1
  435. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js +0 -23
  436. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js.map +0 -1
  437. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js +0 -65
  438. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js.map +0 -1
  439. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +0 -47
  440. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +0 -1
  441. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +0 -61
  442. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +0 -1
  443. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js +0 -40
  444. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js.map +0 -1
  445. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +0 -35
  446. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +0 -1
  447. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +0 -62
  448. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +0 -1
  449. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js +0 -82
  450. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +0 -1
  451. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js +0 -98
  452. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +0 -1
  453. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +0 -40
  454. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +0 -1
  455. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js +0 -38
  456. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js.map +0 -1
  457. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +0 -38
  458. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +0 -1
  459. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +0 -59
  460. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +0 -1
  461. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +0 -63
  462. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +0 -1
  463. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js +0 -67
  464. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js.map +0 -1
  465. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js +0 -30
  466. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js.map +0 -1
  467. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +0 -62
  468. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +0 -1
  469. package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js +0 -91
  470. package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js.map +0 -1
  471. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +0 -40
  472. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +0 -1
  473. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js +0 -451
  474. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js.map +0 -1
  475. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +0 -275
  476. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +0 -1
  477. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +0 -25
  478. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +0 -1
  479. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +0 -38
  480. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +0 -1
  481. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +0 -45
  482. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +0 -1
  483. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +0 -77
  484. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +0 -1
  485. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +0 -42
  486. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +0 -1
  487. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +0 -71
  488. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +0 -1
  489. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +0 -22
  490. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +0 -1
  491. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +0 -43
  492. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +0 -1
  493. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +0 -28
  494. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +0 -1
  495. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +0 -88
  496. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +0 -1
  497. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +0 -38
  498. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +0 -1
  499. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +0 -52
  500. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +0 -1
  501. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +0 -43
  502. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +0 -1
  503. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +0 -75
  504. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +0 -1
  505. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +0 -22
  506. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +0 -1
  507. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +0 -66
  508. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +0 -1
  509. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +0 -22
  510. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +0 -1
  511. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js +0 -78
  512. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js.map +0 -1
  513. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js +0 -247
  514. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +0 -1
  515. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js +0 -28
  516. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +0 -1
  517. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js +0 -32
  518. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +0 -1
  519. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +0 -69
  520. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +0 -1
  521. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js +0 -126
  522. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +0 -1
  523. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +0 -50
  524. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +0 -1
  525. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +0 -26
  526. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +0 -1
  527. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js +0 -52
  528. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js.map +0 -1
  529. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +0 -35
  530. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +0 -1
  531. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +0 -24
  532. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +0 -1
  533. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js +0 -46
  534. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +0 -1
  535. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +0 -32
  536. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +0 -1
  537. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js +0 -99
  538. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +0 -1
  539. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js +0 -32
  540. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js.map +0 -1
  541. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js +0 -45
  542. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +0 -1
  543. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +0 -37
  544. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +0 -1
  545. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js +0 -128
  546. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js.map +0 -1
  547. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +0 -51
  548. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +0 -1
  549. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +0 -83
  550. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +0 -1
  551. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +0 -84
  552. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +0 -1
  553. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +0 -190
  554. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +0 -1
  555. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js +0 -32
  556. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +0 -1
  557. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js +0 -513
  558. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +0 -1
  559. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js +0 -27
  560. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js.map +0 -1
  561. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js +0 -58
  562. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js.map +0 -1
  563. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js +0 -47
  564. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js.map +0 -1
  565. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js +0 -53
  566. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js.map +0 -1
  567. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js +0 -47
  568. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js.map +0 -1
  569. package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js +0 -61
  570. package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js.map +0 -1
  571. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +0 -98
  572. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +0 -1
  573. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js +0 -92
  574. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +0 -1
  575. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js +0 -99
  576. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +0 -1
  577. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js +0 -114
  578. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +0 -1
  579. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js +0 -39
  580. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js.map +0 -1
  581. package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js +0 -139
  582. package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js.map +0 -1
  583. package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js +0 -185
  584. package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js.map +0 -1
  585. package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js +0 -66
  586. package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js.map +0 -1
  587. package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js +0 -106
  588. package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js.map +0 -1
  589. package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js +0 -308
  590. package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js.map +0 -1
  591. package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js +0 -175
  592. package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js.map +0 -1
  593. package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js +0 -59
  594. package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js.map +0 -1
  595. package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js +0 -53
  596. package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js.map +0 -1
  597. package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js +0 -118
  598. package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js.map +0 -1
  599. package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js +0 -612
  600. package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js.map +0 -1
  601. package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js +0 -46
  602. package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js.map +0 -1
  603. package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js +0 -75
  604. package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +0 -1
  605. package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js +0 -30
  606. package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +0 -1
  607. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js +0 -89
  608. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js.map +0 -1
  609. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js +0 -28
  610. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js.map +0 -1
  611. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js +0 -42
  612. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js.map +0 -1
  613. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js +0 -40
  614. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +0 -1
  615. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js +0 -123
  616. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js.map +0 -1
  617. package/node_modules/exceljs/dist/es5/xlsx/xlsx.js +0 -697
  618. package/node_modules/exceljs/dist/es5/xlsx/xlsx.js.map +0 -1
  619. package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js +0 -5
  620. package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js.map +0 -1
  621. package/node_modules/exceljs/dist/exceljs.bare.js +0 -55253
  622. package/node_modules/exceljs/dist/exceljs.bare.js.map +0 -761
  623. package/node_modules/exceljs/dist/exceljs.bare.min.js +0 -45
  624. package/node_modules/exceljs/dist/exceljs.bare.min.js.map +0 -1
  625. package/node_modules/exceljs/dist/exceljs.js +0 -59900
  626. package/node_modules/exceljs/dist/exceljs.js.map +0 -1083
  627. package/node_modules/exceljs/dist/exceljs.min.js +0 -45
  628. package/node_modules/exceljs/dist/exceljs.min.js.map +0 -1
  629. package/scripts/deploy-test.sh +0 -309
@@ -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,21 +52,45 @@ 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
- * FIFTEEN, and the job's `timeout-minutes` is 30 to contain it a budget smaller than its own longest
58
- * step cancels the job at the moment it was about to publish, and a cancelled run reads as neither a
59
- * success nor a failure to anybody scanning the list.
58
+ * TWENTY-FIVE, RAISED FROM FIFTEEN (tracker issue 247), because this waits for the version pull
59
+ * request's OWN CI and that is what it must clear. Measured over the first three cuts, the wait held
60
+ * 552 s, 622 s and 686 s against a 900 s budget rising every time, and the thing it waits on is the
61
+ * offline suite, which grows on purpose every time anybody adds an arm. The margin was one slow queue.
62
+ *
63
+ * AND THE FAILURE IS SILENT, which is why the margin has to be generous rather than adequate. Running
64
+ * out is a quiet exit 0 by design — an ordinary "nothing merged" must not read as a fault — so the
65
+ * first time this budget is exceeded, the release is simply stranded behind a green tick. There is no
66
+ * red to notice. The cron floor underneath would eventually publish it, which makes the silence worse
67
+ * rather than better: the version ships late, from a different run, with nobody told why.
68
+ *
69
+ * THE JOB'S `timeout-minutes` MUST EXCEED THIS, with room for the checkout and install above it. A
70
+ * budget smaller than its own longest step cancels the job at the moment it was about to publish, and a
71
+ * cancelled run reads as neither a success nor a failure to anybody scanning the list. The comment here
72
+ * used to say the job was capped at 30 while the job actually said 25 — harmless at a 15 minute wait,
73
+ * and exactly the sort of thing that stops being harmless when somebody raises one number and believes
74
+ * a sentence about the other. `MIN_JOB_MARGIN_MS` is what an arm holds the pair to now.
75
+ */
76
+ export const WAIT_MS = 25 * 60 * 1000;
77
+
78
+ /**
79
+ * How far the job's budget must exceed the wait's: enough for the checkout, the install and the pack
80
+ * that surround it. Five minutes, which is generous against the ~90 s those actually take, because the
81
+ * cost of being wrong in this direction is a cancelled publish and the cost of being wrong in the other
82
+ * is a runner held slightly longer.
60
83
  */
61
- export const WAIT_MS = 15 * 60 * 1000;
84
+ export const MIN_JOB_MARGIN_MS = 5 * 60 * 1000;
62
85
 
63
86
  /**
64
87
  * The bound, overridable for one caller only: the dry-run rehearsal.
65
88
  *
66
89
  * A rehearsal must exercise this path — a step nobody rehearses is a step that first runs for real on
67
- * the day it matters — but it has nothing to wait FOR, and fifteen minutes of polling to establish that
68
- * is fifteen minutes of a runner held for no answer. `awaitCut` asks before its first sleep, so a bound
69
- * 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.
70
94
  *
71
95
  * REFUSES A VALUE IT CANNOT READ rather than falling back to the default. A typo here would silently
72
96
  * restore the full wait on the rehearsal, or — worse in the other direction — a real run would take a
@@ -111,6 +135,70 @@ export async function awaitCut({ refresh, read, sleep, waitMs = WAIT_MS, stepMs
111
135
 
112
136
  const git = (args) => execFileSync("git", args, { encoding: "utf8" });
113
137
 
138
+ /**
139
+ * One read of `main`: the version it carries, whether that version is tagged, and WHICH COMMIT said so.
140
+ *
141
+ * THE COMMIT IS READ IN THE SAME PASS AS THE VERSION, and that is the whole point of this function
142
+ * existing rather than being three calls at the call site (tracker issue 238). The job below used to
143
+ * check out `main` by name after this loop returned, so a commit landing in between — one that moves no
144
+ * version, an instrument fix with no note — was packed and published under a number whose changelog
145
+ * never described it. Nothing downstream could see it: the tip check compares VERSIONS, and the version
146
+ * had not moved. Naming the commit here is what makes the two ends of the pipeline talk about the same
147
+ * tree.
148
+ *
149
+ * No fetch happens between the two reads, so they cannot straddle one.
150
+ *
151
+ * EVERY READER IS AN ARGUMENT, and that is not decoration. An arm that injected only `run` still asked
152
+ * real git for the version and the tags, so it answered differently on a box where `main` is tagged than
153
+ * on a runner where the checkout has neither `origin/main` nor tags — green here, red there, for reasons
154
+ * that have nothing to do with what it was checking. This file's own suite header warns about exactly
155
+ * that shape, and one of these arms was written into it anyway.
156
+ */
157
+ export function versionBumpCommit({ version, ref = "origin/main", run = git, versionAt = versionAtHead, maxWalk = 100 }) {
158
+ const shas = run(["rev-list", "--first-parent", `-n${maxWalk}`, ref]).trim().split("\n").filter(Boolean);
159
+ let answer = null;
160
+ let sawTheChange = false;
161
+ for (const sha of shas) {
162
+ if (versionAt({ ref: sha }) !== version) { sawTheChange = true; break; }
163
+ // KEEP WALKING PAST THE FIRST MATCH. Every commit landing after the bump and before this read also
164
+ // carries the version — that is precisely the class of commit this exists to leave out — so the
165
+ // answer is the OLDEST consecutive one, not the newest.
166
+ answer = sha;
167
+ }
168
+ // A WALK THAT NEVER SAW THE VERSION CHANGE HAS NOT FOUND THE BUMP; it has run out of road. The oldest
169
+ // commit it happened to reach carries the version by coincidence of the window, and publishing that
170
+ // would ship a tree from before the release. An absence is a finding.
171
+ return sawTheChange ? answer : null;
172
+ }
173
+
174
+ export function readMain({ run = git, versionAt = versionAtHead, tags = tagsHere, decide = cutDecision } = {}) {
175
+ const sha = run(["rev-parse", "origin/main"]).trim();
176
+ // CHECKED BEFORE THE VERSION IS READ, so a checkout with no `origin/main` refuses here rather than
177
+ // going on to answer confidently about a tree it could not name. `git rev-parse` prints the name back
178
+ // when it cannot resolve it, so the failure looks like a value rather than like an error.
179
+ if (!/^[0-9a-f]{40}$/.test(sha)) {
180
+ throw new Error(`release-await-cut: \`git rev-parse origin/main\` answered "${sha.slice(0, 80)}", which is `
181
+ + "not a commit. The publish below checks out what this reports, so a name it cannot resolve must "
182
+ + "refuse here rather than resolve to something else there.");
183
+ }
184
+ const d = decide({ version: versionAt({ ref: "origin/main" }), tags: tags() });
185
+ // NOT THE TIP. `origin/main` is where the branch points in this pass, and a commit that landed after
186
+ // the version bump carries the same version — so the tip check downstream, which compares versions,
187
+ // passes on exactly the commit that made the tarball disagree with its changelog. The answer is the
188
+ // commit that MOVED the version, which is the version pull request's merge.
189
+ //
190
+ // Only asked when there is something to publish. On the ordinary "nothing merged" answer the tip is
191
+ // what a reader wants recorded, and there is no version whose bump could be looked for.
192
+ if (!d.cut) return { ...d, sha, tip: sha };
193
+ const bump = versionBumpCommit({ version: d.version, run, versionAt });
194
+ if (!bump) {
195
+ throw new Error(`release-await-cut: main carries ${d.version} but no commit in the last 100 could be `
196
+ + "found that moved it there. The publish below checks out what this reports, and reporting the "
197
+ + "branch tip instead would publish whatever else has landed since.");
198
+ }
199
+ return { ...d, sha: bump, tip: sha };
200
+ }
201
+
114
202
  function main() {
115
203
  const out = process.env.GITHUB_OUTPUT;
116
204
  const started = Date.now();
@@ -120,7 +208,7 @@ function main() {
120
208
  // tags never arrived answers "no tag" about every version there has ever been. That is the one wrong
121
209
  // answer this pipeline cannot afford, so it is refreshed on every pass rather than once at checkout.
122
210
  refresh: async () => { git(["fetch", "--no-tags", "--prune", "origin", "+refs/heads/main:refs/remotes/origin/main"]); git(["fetch", "--tags", "--force", "origin"]); },
123
- read: () => cutDecision({ version: versionAtHead({ ref: "origin/main" }), tags: tagsHere() }),
211
+ read: () => readMain(),
124
212
  sleep: (ms) => new Promise((r) => setTimeout(r, ms)),
125
213
  now: () => Date.now() - started,
126
214
  }).catch((e) => {
@@ -137,7 +225,7 @@ function main() {
137
225
  + `(${String(e?.message ?? e).slice(0, 200)}). This is a failure to LOOK, not a finding that `
138
226
  + "nothing was cut — nothing downstream may treat it as one.");
139
227
  process.exitCode = 2;
140
- if (out) appendFileSync(out, "cut=false\nversion=\nlooked=false\n");
228
+ if (out) appendFileSync(out, "cut=false\nversion=\nsha=\nlooked=false\n");
141
229
  }).then((r) => {
142
230
  if (!r) return;
143
231
  const secs = Math.round(r.waitedMs / 1000);
@@ -148,7 +236,9 @@ function main() {
148
236
  // `looked` SEPARATES the two negatives above: a loop that ran and found nothing merged, from one
149
237
  // that could not read main at all. The publish job below requires `cut=true`, so neither publishes —
150
238
  // but a reader deciding whether a release went missing needs to know which of the two happened.
151
- if (out) appendFileSync(out, `cut=${r.cut ? "true" : "false"}\nversion=${r.version}\nlooked=true\n`);
239
+ // `sha` IS WRITTEN ON BOTH ANSWERS, not only on a cut. It records which commit this loop's verdict is
240
+ // about, so a run that published nothing can still be read back against the tree it looked at.
241
+ if (out) appendFileSync(out, `cut=${r.cut ? "true" : "false"}\nversion=${r.version}\nsha=${r.sha ?? ""}\nlooked=true\n`);
152
242
  });
153
243
  }
154
244
 
@@ -131,7 +131,31 @@ export function checksVerdict({ checkRuns = [], workflowRuns = [], policy = null
131
131
  * incident, and this is the difference between a false red on the version job — cheap, loud, retried by
132
132
  * the next push — and a red that means what it says.
133
133
  */
134
- export async function waitForChecks({ read, sleep, attempts = 32, everyMs = 15000 } = {}) {
134
+ /**
135
+ * This file's own window: 32 attempts at 15 s, or eight minutes.
136
+ *
137
+ * NAMED SO AN ARM CAN COUPLE THE JOB'S BUDGET TO IT (tracker issue 247). The `version` job's
138
+ * `timeout-minutes` has to contain THIS wait, and the arm that claimed to check that compared the job
139
+ * against `release-await-cut.mjs`'s constant instead — a different wait, in a different job, which this
140
+ * job never runs. It held by luck and would have failed the moment that unrelated number was raised.
141
+ */
142
+ export const CHECK_ATTEMPTS = 32;
143
+ export const CHECK_EVERY_MS = 15_000;
144
+ export const CHECKS_WINDOW_MS = CHECK_ATTEMPTS * CHECK_EVERY_MS;
145
+
146
+ /**
147
+ * What the `version` job spends around this wait: checkout, install, the changesets action that cuts the
148
+ * pull request, and the cut/awaited steps either side of it.
149
+ *
150
+ * This margin belongs to THIS file for the same reason the window does. `release-await-cut.mjs` exports a
151
+ * margin of its own with the same name-shape and a different subject — the checkout and install around the
152
+ * `awaited` job's wait. Coupling the version job's budget to that one repeats the very defect this issue
153
+ * closes, one size smaller: raising the other job's margin would move this job's requirement, about a job
154
+ * whose behaviour had not changed. Two jobs, two waits, two margins, and no number shared between them.
155
+ */
156
+ export const CHECKS_JOB_MARGIN_MS = 4 * 60 * 1000;
157
+
158
+ export async function waitForChecks({ read, sleep, attempts = CHECK_ATTEMPTS, everyMs = CHECK_EVERY_MS } = {}) {
135
159
  if (typeof read !== "function") throw new Error("release-version-pr-checks: waitForChecks needs a read()");
136
160
  let seen = null;
137
161
  for (let i = 1; i <= attempts; i++) {
@@ -170,7 +194,7 @@ export function surfacesFor(repo, sha, api = gh) {
170
194
  }
171
195
 
172
196
  /**
173
- * 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
174
198
  * worth driving rather than reading.
175
199
  *
176
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,6 +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"; // a dumped DOM can be chrome's own error document
25
26
  import { execFileSync } from "node:child_process";
26
27
  import { mkdtempSync, writeFileSync, rmSync, readFileSync } from "node:fs";
27
28
  import { tmpdir } from "node:os";
@@ -63,6 +64,17 @@ function main() {
63
64
  "--virtual-time-budget=8000", "--dump-dom", `file://${join(work, "verify.html")}`,
64
65
  ], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 120000 });
65
66
 
67
+ // ── IS THIS OUR PAGE, OR CHROME'S ERROR PAGE? (tracker issue 227) ───────────────────────────────
68
+ //
69
+ // `--dump-dom` prints whatever chrome ended up showing, and a file it could not read produces the
70
+ // interstitial — which has a `<title>` of its own. This was saved from reporting a pass only by the
71
+ // marker below being specific: the title has to parse as JSON with a `kept` array. That is luck, not
72
+ // a check, and the next person to loosen the parse removes it. Said out loud instead.
73
+ if (chromeErrorPage(out)) {
74
+ console.log(`FAILED — chrome could not open the page and dumped its own error document instead. `
75
+ + `Nothing below is about the report.`);
76
+ process.exit(1);
77
+ }
66
78
  const m = /<title>(.*?)<\/title>/s.exec(out);
67
79
  if (!m || m[1] === "pending") { console.log("FAILED — the page never reported"); process.exit(1); }
68
80
  const kept = JSON.parse(m[1]).kept;
@@ -19,6 +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"; // did chrome open the report, or its own error page?
22
23
  import { mkdtempSync, writeFileSync, existsSync } from "node:fs";
23
24
  import { tmpdir } from "node:os";
24
25
  import { join, dirname, resolve } from "node:path";
@@ -29,6 +30,9 @@ const OUT = resolve(process.argv[3] ?? join(ROOT, "docs", "assets", "example-rep
29
30
  const WIDTH = 1280, HEIGHT = 1040;
30
31
  // The frame starts here rather than at the top of the document — see the scroll block below.
31
32
  const ANCHOR = process.argv.includes("--anchor") ? process.argv[process.argv.indexOf("--anchor") + 1] : "h1";
33
+ // WHAT ONLY A REPORT CARRIES. `h1` is the ANCHOR — where to start the frame — and it is on every HTML
34
+ // page including Chrome's error interstitial, so it cannot also be the proof that this IS a report.
35
+ const MARKER = process.argv.includes("--marker") ? process.argv[process.argv.indexOf("--marker") + 1] : "[data-run-id]";
32
36
 
33
37
  const src = process.argv[2];
34
38
  if (!src) { console.error("usage: node scripts/report-screenshot.mjs <report.html> [out.png]"); process.exit(2); }
@@ -69,6 +73,34 @@ const sessionId = sess.sessionId;
69
73
  const cmd = (method, params = {}) => new Promise((r) => { const n = ++id; pending.set(n, r); ws.send(JSON.stringify({ id: n, sessionId, method, params })); });
70
74
 
71
75
  await cmd("Page.enable");
76
+
77
+ // ── IS THIS THE REPORT, OR CHROME'S OWN ERROR PAGE? (tracker issue 227) ──────────────────────────────
78
+ //
79
+ // Chrome is launched with the file URL as an ARGUMENT, so there is no navigation response to check and
80
+ // nothing here ever asked. When the file could not be read, Chrome showed `ERR_ACCESS_DENIED` — a page
81
+ // with an `<h1>` — the anchor below resolved against it, the clip was taken, and this exited 0 having
82
+ // written 38 KB of grey error page over the README's example frame. The successful run and the failed
83
+ // one differed in the log by an anchor offset and a font count, neither of which was asserted on.
84
+ //
85
+ // `existsSync` above does not cover it: a file that EXISTS and cannot be READ passes that check and
86
+ // fails in Chrome. So does a file that is readable and is not a report.
87
+ //
88
+ // THE MARKER IS THE RUN ID, not a tag. `h1` is what the error page has; `[data-run-id]` is what only a
89
+ // rendered report has, and naming it in the log is what makes the success line say what it certified
90
+ // rather than "an h1 was found".
91
+ const evaluate = async (expression) => {
92
+ const r = await cmd("Runtime.evaluate", { expression, returnByValue: true });
93
+ return r?.result?.result?.value;
94
+ };
95
+ const loaded = await assertPageLoaded(evaluate, {
96
+ expected: `file://${page}`,
97
+ marker: `document.querySelector(${JSON.stringify(MARKER)})`,
98
+ markerName: `a report element (${MARKER})`,
99
+ what: "report-screenshot",
100
+ });
101
+ if (!loaded.ok) { chrome.kill(); process.exit(1); }
102
+ const runId = await evaluate(`(document.querySelector(${JSON.stringify(MARKER)})?.getAttribute("data-run-id") ?? "")`);
103
+
72
104
  // The fonts are the point of allowing the network at all, so wait for them rather than for a fixed
73
105
  // sleep: a timer long enough on this box is a timer too short on a slower one, and the failure is a
74
106
  // screenshot in the wrong typeface that nobody notices until it is in the README.
@@ -91,11 +123,39 @@ if (typeof top !== "number") {
91
123
  console.error(`report-screenshot: no element matched ${JSON.stringify(ANCHOR)} — nothing to anchor the frame to.`);
92
124
  chrome.kill(); process.exit(1);
93
125
  }
126
+ // ── CAN THIS BOX DRAW WHAT THE PAGE SAYS? (tracker issue 227) ───────────────────────────────────────
127
+ //
128
+ // The default demo product's report carries the mark's native-script renderings — ベンクリ, ベンコリ,
129
+ // ヴェンコリ — and they are load-bearing: the verdict sentence reads "A live Japanese class 9
130
+ // registration reading ベンクリ covers measuring and testing instruments". With no CJK-capable font
131
+ // those render as empty boxes, twice in the captured frame, and nothing said so.
132
+ //
133
+ // The wait for `document.fonts.ready` above was written against exactly this class — "the failure is a
134
+ // screenshot in the wrong typeface that nobody notices until it is in the README" — and solved the
135
+ // TYPEFACE half. This is the WRITING-SYSTEM half, in the same script.
136
+ //
137
+ // REFUSES rather than warns. This writes an image that goes into the README by hand; a warning on a
138
+ // terminal nobody is reading when the file is already written is the shape that produced the defect
139
+ // above it. `--allow-tofu` is there for a reader who genuinely wants the frame anyway and has been told
140
+ // what is in it.
141
+ const pageText = await evaluate("document.body ? document.body.innerText : ''");
142
+ const cjkChars = cjkCharsIn(pageText);
143
+ const glyphs = cjkVerdict({ cjkChars, covering: fontsCovering("ja"),
144
+ sample: (String(pageText).match(/[\u3040-\u30ff\u4e00-\u9fff]{2,8}/u) ?? [])[0] ?? "" });
145
+ if (!glyphs.ok && !process.argv.includes("--allow-tofu")) {
146
+ console.error(`report-screenshot: ${glyphs.why}`);
147
+ console.error(" Pass --allow-tofu to capture it anyway, knowing the frame is missing those glyphs.");
148
+ chrome.kill(); process.exit(1);
149
+ }
150
+ if (!glyphs.ok) console.error(`report-screenshot: WARNING — ${glyphs.why} Capturing anyway (--allow-tofu).`);
151
+
94
152
  const y = Math.max(top - 56, 0); // a little air above the title, so the page does not read as cropped
95
153
  const shot = await cmd("Page.captureScreenshot", { format: "png", captureBeyondViewport: true,
96
154
  clip: { x: 0, y, width: WIDTH, height: HEIGHT, scale: 1 } });
97
155
  if (!shot?.result?.data) { console.error(`report-screenshot: chrome returned no image. ${JSON.stringify(shot).slice(0, 300)}`); chrome.kill(); process.exit(1); }
98
156
  writeFileSync(OUT, Buffer.from(shot.result.data, "base64"));
99
- const loaded = await cmd("Runtime.evaluate", { expression: "document.fonts.size + ':' + [...document.fonts].filter(f=>f.status==='loaded').length", returnByValue: true });
157
+ const fonts = await cmd("Runtime.evaluate", { expression: "document.fonts.size + ':' + [...document.fonts].filter(f=>f.status==='loaded').length", returnByValue: true });
100
158
  chrome.kill();
101
- console.log(`report-screenshot: wrote ${OUT} (${WIDTH}x${HEIGHT}, anchor ${JSON.stringify(ANCHOR)} at y=${Math.round(y)}, fonts ${loaded?.result?.result?.value ?? "?"})`);
159
+ // NAMES WHAT IT CERTIFIED. "an h1 was found" is true of the error page this used to photograph; the
160
+ // run id is read out of the document and is the thing a reader can check against the report they meant.
161
+ console.log(`report-screenshot: wrote ${OUT} of run ${runId || "(no run id in the page)"} (${WIDTH}x${HEIGHT}, anchor ${JSON.stringify(ANCHOR)} at y=${Math.round(y)}, fonts ${fonts?.result?.result?.value ?? "?"}, ${glyphs.kind})`);
@@ -59,6 +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' // Page.navigate returns an errorText, and nothing read it
62
63
  import { createServer } from 'node:http'
63
64
  import { readFileSync, existsSync, writeFileSync, mkdtempSync, rmSync } from 'node:fs'
64
65
  import { join, extname, dirname } from 'node:path'
@@ -284,7 +285,7 @@ const record = {}
284
285
 
285
286
  // The shell, once. Everything after this is client-side.
286
287
  epoch = 'boot'
287
- await cmd('Page.navigate', { url: `${origin}/portal/home` })
288
+ await navigateOrRefuse(cmd, `${origin}/portal/home`, { what: 'revisit-render-check' })
288
289
  if (!(await settle())) say(false, 'the shell never went quiet within 12s — it is still requesting')
289
290
  const bootPath = await where()
290
291
  say(bootPath === '/portal/home', `the shell loaded on /portal/home (got ${bootPath})`)
@@ -375,7 +376,7 @@ await twice('clearances', () => clickNav('Clearances'), '/portal/clearances')
375
376
  // URL and the SECOND is the Back button, which is the revisit a reader actually performs and the one that
376
377
  // runs AppShell's popstate listener rather than its click funnel.
377
378
  epoch = 'result:1'
378
- await cmd('Page.navigate', { url: `${origin}/portal/result/${RUN_ID}` })
379
+ await navigateOrRefuse(cmd, `${origin}/portal/result/${RUN_ID}`, { what: 'revisit-render-check' })
379
380
  const rq1 = await settle()
380
381
  const rp1 = await where()
381
382
  const rt1 = await screenText()
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
  //
@@ -646,6 +646,20 @@ function print(id, ref, run, s, delta, refPath) {
646
646
  for (const c of B.collisions)
647
647
  console.log(` · ${c.owner}: reference "${c.entry}" is ${c.bucket}, surfaced "${c.noise}" is noise`);
648
648
  }
649
+ // ── SAME PROPRIETOR, DIFFERENT MARKS — REPORTED, NEVER SUPPRESSING (tracker issue 249) ───────────
650
+ //
651
+ // These used to print under the line above, which tells the reader not to read the recall numbers.
652
+ // One large filer anywhere in a matter therefore suppressed a whole run's measurement, and did: R2's
653
+ // real 88% → 63% recall movement went unquoted on the regression issue because `Novartis AG` held one
654
+ // withheld reference mark and one surfaced non-reference mark. Those two rows are both true.
655
+ //
656
+ // Kept visible because a reader may still want the pairing, and deliberately WITHOUT a verdict: this
657
+ // is an observation about the matter, not a fault in the scorer.
658
+ if (B.ownerEchoes?.length) {
659
+ console.log(`\n same-proprietor rows (${B.ownerEchoes.length}) — NOT a collision, and the recall numbers above stand:`);
660
+ for (const c of B.ownerEchoes)
661
+ console.log(` · ${c.owner}: reference "${c.entry}" is ${c.bucket}, surfaced "${c.noise}" is noise (different marks)`);
662
+ }
649
663
 
650
664
  for (const [name, label] of [["withheld", "WITHHELD — in this run's own records, absent from its findings"],
651
665
  ["lost", "LOST — never retrieved"],
@@ -791,11 +805,11 @@ function print(id, ref, run, s, delta, refPath) {
791
805
  // Now: `asked=` and `ran=` side by side, and — per the owner's ruling, flag rather than gate — a
792
806
  // LOUD marker when the ask was not met, carrying the cause on the same line so the reader is not
793
807
  // sent to the artifact to find out which switch was off (the rule for degradedCause, applied
794
- // 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
795
809
  // answer this and must not look like a lane that met its ask.
796
810
  // `(not stated)` and `(not established)` are DIFFERENT cells and the row keeps them apart, in the
797
811
  // vocabulary it already uses one column over: `not stated` = this artifact never answered the
798
- // 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
799
813
  // cannot settle what ran. Neither is `candidates`, and neither may read as a met ask.
800
814
  //
801
815
  // THE REASON DOES NOT GO IN THE CELL. A row is a row: the first cut interpolated the verdict's whole