clearotron 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. package/.env.example +82 -1
  2. package/.nvmrc +1 -1
  3. package/CONTRIBUTING.md +3 -3
  4. package/INSTALL.md +64 -58
  5. package/README.md +11 -16
  6. package/THIRD-PARTY-NOTICES.md +1 -1
  7. package/bin/brandowner.mjs +1 -1
  8. package/bin/clearotron.mjs +26 -4
  9. package/bin/connect.mjs +2 -2
  10. package/bin/example.mjs +31 -11
  11. package/bin/grant.mjs +3 -3
  12. package/bin/key.mjs +1 -1
  13. package/bin/onboard.mjs +252 -136
  14. package/bin/start.mjs +176 -33
  15. package/bin/stop.mjs +65 -3
  16. package/bin/update.mjs +7 -7
  17. package/bin/uspto-sync.mjs +1 -1
  18. package/build-info.json +2 -2
  19. package/demo/full-country-search/run/_driver/framework.json +1 -1
  20. package/demo/global-preliminary-search/run/_driver/framework.json +1 -1
  21. package/demo/knockout-search/run/_driver/framework.json +1 -1
  22. package/demo/multi-country-focus-search/run/_driver/framework.json +1 -1
  23. package/docs/DELIVERY.md +6 -2
  24. package/docs/E2E.md +5 -5
  25. package/docs/PORTAL.md +2 -2
  26. package/docs/README.md +5 -4
  27. package/docs/SECURITY.md +17 -0
  28. package/docs/architecture/01-product-overview.md +2 -2
  29. package/docs/architecture/02-architecture.md +2 -2
  30. package/docs/architecture/04-configuration-reference.md +8 -3
  31. package/docs/architecture/05-config-governance.md +52 -5
  32. package/docs/architecture/05-customer-profiles.md +2 -2
  33. package/docs/architecture/06-operations-runbook.md +13 -1
  34. package/docs/architecture/09-security-and-data.md +1 -1
  35. package/docs/configuration.md +4 -3
  36. package/docs/decisions/0004-documentation-structure.md +1 -1
  37. package/driver/CHANGELOG.md +121 -1
  38. package/driver/README.md +2 -2
  39. package/driver/ask-ledger.mjs +3 -3
  40. package/driver/authority-trees.mjs +1 -1
  41. package/driver/call-capture.mjs +1 -1
  42. package/driver/card-frame.mjs +1 -1
  43. package/driver/case-law-ledger.mjs +1 -1
  44. package/driver/claim-liveness.mjs +1 -1
  45. package/driver/common-law-receipts.mjs +2 -2
  46. package/driver/commonlaw-carry.mjs +1 -1
  47. package/driver/config-inventory.mjs +1 -1
  48. package/driver/config-staleness.mjs +1 -1
  49. package/driver/connotation-search.mjs +12 -12
  50. package/driver/contract-audit.mjs +5 -5
  51. package/driver/contract-dictation-registry.mjs +4 -4
  52. package/driver/contract-dictation.mjs +2 -2
  53. package/driver/contract-e3-backlog.mjs +6 -6
  54. package/driver/contract-vocabulary.mjs +3 -3
  55. package/driver/corrections-feedforward.mjs +1 -1
  56. package/driver/coverage-form-io.mjs +2 -2
  57. package/driver/coverage-form.mjs +4 -4
  58. package/driver/coverage-ledger.mjs +3 -3
  59. package/driver/coverage-union.mjs +1 -1
  60. package/driver/declination-call.mjs +35 -3
  61. package/driver/declination-duty.mjs +1 -1
  62. package/driver/deliver-trigger.sh +3 -3
  63. package/driver/deploy-live-run-guard.mjs +6 -2
  64. package/driver/dev-portal.mjs +3 -3
  65. package/driver/disposition-call.mjs +4 -4
  66. package/driver/disposition-tool.mjs +4 -4
  67. package/driver/disposition-union.mjs +2 -2
  68. package/driver/doc-constants.mjs +1 -1
  69. package/driver/door-gates.mjs +2 -2
  70. package/driver/doubt-selection.mjs +2 -2
  71. package/driver/drainer-identity.mjs +1 -1
  72. package/driver/driver.config.mjs +64 -12
  73. package/driver/e2e-rounds.mjs +2 -2
  74. package/driver/effort-model.mjs +2 -2
  75. package/driver/engine/anthropic-agent.mjs +24 -24
  76. package/driver/engine/auth.mjs +1 -1
  77. package/driver/engine/cli-version.mjs +103 -0
  78. package/driver/engine/common.mjs +1 -1
  79. package/driver/engine/deny-authority-write.mjs +1 -1
  80. package/driver/engine/jx-turn.mjs +1 -1
  81. package/driver/engine/mcp/clarivate-server.mjs +1 -1
  82. package/driver/engine/mcp/corsearch-server.mjs +1 -1
  83. package/driver/engine/mcp/declination-server.mjs +1 -1
  84. package/driver/engine/mcp/dispositions-server.mjs +1 -1
  85. package/driver/engine/mcp/euipo-server.mjs +1 -1
  86. package/driver/engine/mcp/fetch-server.mjs +1 -1
  87. package/driver/engine/mcp/free-tier-server.mjs +2 -2
  88. package/driver/engine/mcp/gather-config.mjs +11 -11
  89. package/driver/engine/mcp/perplexity-server.mjs +1 -1
  90. package/driver/engine/mcp/recording-server.mjs +8 -4
  91. package/driver/engine/mcp/signa-server.mjs +1 -1
  92. package/driver/engine/mcp/uspto-local-server.mjs +1 -1
  93. package/driver/engine/openai-agent.mjs +2 -2
  94. package/driver/engine-build.mjs +2 -2
  95. package/driver/enqueue-schema.mjs +10 -10
  96. package/driver/enqueue.mjs +1 -1
  97. package/driver/envelope-settle.mjs +1 -1
  98. package/driver/evidence-claim-invariant.mjs +2 -2
  99. package/driver/feedback-store.mjs +1 -1
  100. package/driver/findings-model.mjs +60 -10
  101. package/driver/flag-snapshot.mjs +20 -0
  102. package/driver/floor-duty.mjs +1 -1
  103. package/driver/form-neighbourhood.mjs +1 -1
  104. package/driver/framework.mjs +2 -2
  105. package/driver/gateway.mjs +45 -23
  106. package/driver/grounds-grammar.mjs +1 -1
  107. package/driver/hit-list.mjs +1 -1
  108. package/driver/jurisdiction-systems.mjs +1 -1
  109. package/driver/jx-lanes.mjs +1 -1
  110. package/driver/jx-units.mjs +1 -1
  111. package/driver/jx.mjs +3 -3
  112. package/driver/knockout-assess-record.mjs +5 -1
  113. package/driver/narrative-refutation-record.mjs +3 -3
  114. package/driver/numeric-setting.mjs +1 -1
  115. package/driver/owner-use-check.mjs +184 -0
  116. package/driver/package.json +4 -4
  117. package/driver/party-facts.mjs +2 -2
  118. package/driver/phase0.mjs +2 -2
  119. package/driver/pipeline-knockout.mjs +52 -4
  120. package/driver/pipeline.mjs +180 -67
  121. package/driver/placement-diff.mjs +2 -2
  122. package/driver/placement-form.mjs +4 -4
  123. package/driver/placement-union.mjs +1 -1
  124. package/driver/plain-register.mjs +120 -0
  125. package/driver/portal-access.mjs +1 -1
  126. package/driver/portal-acks.mjs +1 -1
  127. package/driver/portal-config-view.mjs +42 -3
  128. package/driver/portal-families.mjs +1 -1
  129. package/driver/portal-local-auth.mjs +1 -1
  130. package/driver/portal-report.mjs +7 -7
  131. package/driver/portal-service.mjs +41 -22
  132. package/driver/portal-upstream.mjs +2 -2
  133. package/driver/predelivery-lint.mjs +149 -11
  134. package/driver/prelim-variants-record.mjs +2 -2
  135. package/driver/profile-page.html +11 -3
  136. package/driver/profile-selection.mjs +1 -1
  137. package/driver/profile-service.mjs +6 -6
  138. package/driver/profiles/README.md +3 -3
  139. package/driver/profiles.mjs +145 -13
  140. package/driver/progress.mjs +6 -6
  141. package/driver/provider-usage.mjs +1 -1
  142. package/driver/publish/demo-marking.mjs +1 -1
  143. package/driver/publish/index.mjs +49 -8
  144. package/driver/publish/knockout.mjs +42 -14
  145. package/driver/publish/parse.mjs +4 -4
  146. package/driver/publish/publish-inputs.mjs +2 -2
  147. package/driver/publish/register-presence.mjs +1 -1
  148. package/driver/publish/render-knockout.mjs +646 -144
  149. package/driver/publish/render.mjs +2 -2
  150. package/driver/publish/report-data.mjs +13 -3
  151. package/driver/queue-watch-probe.mjs +1 -1
  152. package/driver/queue-watch-verdict.mjs +1 -1
  153. package/driver/recall-reconciliation.mjs +1 -1
  154. package/driver/recipe-service.mjs +1 -1
  155. package/driver/record-carry.mjs +5 -5
  156. package/driver/recording-agreement.mjs +3 -3
  157. package/driver/reference-score.mjs +7 -7
  158. package/driver/reference-strip-signatures.mjs +20 -0
  159. package/driver/refusal-bound.mjs +3 -3
  160. package/driver/register-availability.mjs +2 -2
  161. package/driver/register-count.mjs +1 -1
  162. package/driver/register-grant-vocabulary.mjs +2 -2
  163. package/driver/register-plan.mjs +8 -8
  164. package/driver/register-records.mjs +2 -2
  165. package/driver/registry-fidelity.mjs +3 -3
  166. package/driver/remedy-accounting.mjs +1 -1
  167. package/driver/repair-composers.mjs +2 -2
  168. package/driver/repair-digest.mjs +3 -3
  169. package/driver/repairs.mjs +6 -6
  170. package/driver/replay-archive.mjs +2 -0
  171. package/driver/report-card-record.mjs +2 -2
  172. package/driver/result-noun-fields.mjs +10 -3
  173. package/driver/run-economics.mjs +2 -2
  174. package/driver/run-integrity.mjs +1 -1
  175. package/driver/runner.mjs +22 -22
  176. package/driver/scope-rules.mjs +1 -1
  177. package/driver/search-policy.mjs +5 -5
  178. package/driver/skeptic-search.mjs +1 -1
  179. package/driver/skills/blind-frame/SKILL.md +2 -2
  180. package/driver/skills/case-law-citation/SKILL.md +2 -2
  181. package/driver/skills/knockout-assess/SKILL.md +94 -4
  182. package/driver/skills/matter-frame/SKILL.md +6 -6
  183. package/driver/skills/matter-frame/watchlist-reference.md +2 -2
  184. package/driver/skills/prelim-common-law/SKILL.md +1 -1
  185. package/driver/skills/prelim-search/SKILL.md +3 -3
  186. package/driver/skills/prelim-search/report-prose.md +82 -0
  187. package/driver/skills/prelim-search/risk-framework-demo.manifest.json +1 -1
  188. package/driver/skills/prelim-search/risk-framework-triage.manifest.json +1 -1
  189. package/driver/skills/prelim-search/risk-framework.manifest.json +1 -1
  190. package/driver/skills/prelim-search/synthesis-rules.md +1 -1
  191. package/driver/skills/prelim-search/template-formatting.md +1 -1
  192. package/driver/skills/prelim-search/templates/email/generic.md +1 -1
  193. package/driver/skills/prelim-search/worked-examples.md +1 -1
  194. package/driver/skills/prelim-variants/SKILL.md +5 -5
  195. package/driver/stage-context.mjs +1 -1
  196. package/driver/stages-knockout.mjs +55 -4
  197. package/driver/stages.mjs +101 -44
  198. package/driver/stray-artifacts.mjs +2 -2
  199. package/driver/suite-census.json +275 -65
  200. package/driver/synthesis-record.mjs +1 -1
  201. package/driver/systemd/clearotron-client-mcp.service +1 -1
  202. package/driver/systemd/clearotron-portal.service +1 -1
  203. package/driver/systemd/render-units.mjs +1 -1
  204. package/driver/tokens.mjs +1 -1
  205. package/driver/tool-calls.mjs +1 -1
  206. package/driver/turnaround-bands.mjs +1 -1
  207. package/driver/unit-file-drift.mjs +1 -1
  208. package/driver/unit-inventory.mjs +297 -80
  209. package/driver/unit-state-verdict.mjs +20 -12
  210. package/driver/verify-knockout.mjs +10 -2
  211. package/driver/verify.mjs +13 -13
  212. package/driver/whatif-memo-run.mjs +72 -9
  213. package/driver/whatif-memo.mjs +19 -1
  214. package/driver/whatif-queue.mjs +1 -1
  215. package/driver/whatif-worker.mjs +1 -1
  216. package/examples/README.md +2 -2
  217. package/examples/grants.example.json +6 -7
  218. package/mcp-server/CHANGELOG.md +6 -0
  219. package/mcp-server/README.md +3 -3
  220. package/mcp-server/http-server.mjs +44 -1
  221. package/mcp-server/key-socket.mjs +184 -0
  222. package/mcp-server/lib/audit-view.mjs +69 -2
  223. package/mcp-server/lib/brief.mjs +15 -0
  224. package/mcp-server/lib/driver.mjs +7 -1
  225. package/mcp-server/lib/events.mjs +1 -1
  226. package/mcp-server/lib/http-handler.mjs +1 -1
  227. package/mcp-server/lib/knockout.mjs +435 -0
  228. package/mcp-server/lib/ops.mjs +4 -4
  229. package/mcp-server/lib/options.mjs +1 -1
  230. package/mcp-server/lib/plan.mjs +1 -1
  231. package/mcp-server/lib/runs.mjs +1 -1
  232. package/mcp-server/lib/scrub.mjs +2 -2
  233. package/mcp-server/lib/whatif.mjs +5 -5
  234. package/mcp-server/mint-token.mjs +1 -1
  235. package/mcp-server/package.json +2 -2
  236. package/mcp-server/packs/ops/EXAMPLES.md +2 -2
  237. package/mcp-server/server.mjs +77 -12
  238. package/package.json +30 -12
  239. package/portal-ui/dist/assets/{index-Ct3iQtZ2.css → index-1ziUJX1E.css} +43 -2
  240. package/portal-ui/dist/assets/{index-BUGgiYtF.js → index-CEYvXdqH.js} +226 -49
  241. package/portal-ui/dist/index.html +2 -2
  242. package/portal-ui/package.json +1 -1
  243. package/providers/_shared/enumerate.mjs +1 -1
  244. package/providers/_shared/ledger-path.mjs +3 -3
  245. package/providers/_shared/ledger.mjs +1 -1
  246. package/providers/_shared/result-shape.mjs +3 -3
  247. package/providers/_shared/term-shape.mjs +2 -2
  248. package/providers/corsearch/src/core.js +1 -1
  249. package/providers/jx-subclass/BUILDING.md +1 -1
  250. package/providers/oauth-mcp-bridge/CHANGELOG.md +6 -0
  251. package/providers/oauth-mcp-bridge/package.json +1 -1
  252. package/providers/oauth-mcp-bridge/stdin-guard.mjs +2 -2
  253. package/providers/uspto-local/src/index-store.js +2 -2
  254. package/scripts/README.md +1 -1
  255. package/scripts/added-reference-check.mjs +29 -1
  256. package/scripts/authority-boundary-probe.mjs +1 -1
  257. package/scripts/backfill-started-at.mjs +1 -1
  258. package/scripts/citation-line-check.mjs +124 -5
  259. package/scripts/compare.mjs +2 -2
  260. package/scripts/contract-dictation-scan.mjs +2 -2
  261. package/scripts/dead-names.mjs +1 -1
  262. package/scripts/drain-preflight.mjs +5 -5
  263. package/scripts/e2e-unread-terminals.mjs +1 -1
  264. package/scripts/e2e.mjs +8 -8
  265. package/scripts/env-audit.mjs +7 -7
  266. package/scripts/env-classify.mjs +206 -18
  267. package/scripts/freeze-example-run.mjs +3 -3
  268. package/scripts/head-arrived-gated.mjs +1 -1
  269. package/scripts/headless-page.mjs +51 -2
  270. package/scripts/live-surface-check.mjs +129 -19
  271. package/scripts/main-health.mjs +1 -1
  272. package/scripts/merge-presence-check.mjs +3 -3
  273. package/scripts/mint-suite-census.mjs +6 -6
  274. package/scripts/nightly-notice.mjs +1 -3
  275. package/scripts/preinstall-node-check.mjs +24 -0
  276. package/scripts/reconcile-runs.mjs +1 -1
  277. package/scripts/release-await-cut.mjs +6 -4
  278. package/scripts/release-version-pr-checks.mjs +1 -1
  279. package/scripts/release-version.mjs +2 -2
  280. package/scripts/render-check.mjs +66 -7
  281. package/scripts/report-frame-check.mjs +1 -1
  282. package/scripts/report-screenshot.mjs +1 -1
  283. package/scripts/revisit-render-check.mjs +1 -1
  284. package/scripts/score.mjs +4 -4
  285. package/scripts/strip-tracker-citations.mjs +139 -0
  286. package/scripts/test-run.mjs +19 -3
  287. package/scripts/third-party-notices.mjs +3 -3
  288. package/scripts/travelling-predicates.mjs +3 -3
  289. package/scripts/unexecuted-asserts.mjs +2 -2
  290. package/scripts/verify-publishable.mjs +2 -2
  291. package/scripts/write-up-form-census.mjs +1 -1
  292. package/shared/access-audience.mjs +1 -1
  293. package/shared/anon-overlay.mjs +3 -3
  294. package/shared/brand.mjs +13 -13
  295. package/shared/citation-scan.mjs +1 -1
  296. package/shared/client-door.mjs +7 -7
  297. package/shared/customer-store.mjs +1 -1
  298. package/shared/driver-dir.mjs +1 -1
  299. package/shared/env-aliases.mjs +0 -48
  300. package/shared/env-local.mjs +1 -1
  301. package/shared/identifier-scan.mjs +3 -3
  302. package/shared/invocation.mjs +29 -1
  303. package/shared/names-in-force.mjs +4 -0
  304. package/shared/node-floor.mjs +97 -0
  305. package/shared/product-owned-names.mjs +1 -1
  306. package/shared/register-selection.mjs +1 -1
  307. package/shared/scope.mjs +5 -5
  308. package/shared/server-units.mjs +4 -4
  309. package/shared/staff-domain.mjs +154 -0
  310. package/shared/store-in-repo.mjs +25 -4
  311. package/shared/suite-census.mjs +4 -4
  312. package/shared/tty-style.mjs +1 -1
  313. package/shared/uspto-index-size.mjs +1 -1
  314. package/shared/vacuous-pass.mjs +1 -1
  315. package/skills/clearotron-account/SKILL.md +42 -13
  316. package/skills/clearotron-ops/SKILL.md +1 -1
  317. package/driver/recipes/README.md +0 -49
  318. package/driver/skills/prelim-search/risk-framework-aurora.manifest.json +0 -19
  319. package/driver/skills/prelim-search/risk-framework-aurora.md +0 -77
  320. package/driver/skills/prelim-search/risk-framework-zephyr.manifest.json +0 -14
  321. package/driver/skills/prelim-search/risk-framework-zephyr.md +0 -33
  322. package/driver/skills/prelim-search/worked-examples-aurora.md +0 -10
  323. package/driver/skills/prelim-search/worked-examples-zephyr.md +0 -10
  324. package/driver/systemd/prelim-driver.path +0 -69
  325. package/driver/systemd/prelim-driver.service +0 -86
  326. package/driver/systemd/prelim-driver.timer +0 -14
  327. package/driver/systemd/prelim-outbox.path +0 -27
  328. package/driver/systemd/prelim-outbox.service +0 -37
  329. package/driver/systemd/prelim-outbox.timer +0 -21
  330. package/node_modules/exceljs/README_zh.md +0 -2878
  331. package/node_modules/exceljs/dist/LICENSE +0 -22
  332. package/node_modules/exceljs/dist/es5/csv/csv.js +0 -182
  333. package/node_modules/exceljs/dist/es5/csv/csv.js.map +0 -1
  334. package/node_modules/exceljs/dist/es5/csv/line-buffer.js +0 -68
  335. package/node_modules/exceljs/dist/es5/csv/line-buffer.js.map +0 -1
  336. package/node_modules/exceljs/dist/es5/csv/stream-converter.js +0 -110
  337. package/node_modules/exceljs/dist/es5/csv/stream-converter.js.map +0 -1
  338. package/node_modules/exceljs/dist/es5/doc/anchor.js +0 -73
  339. package/node_modules/exceljs/dist/es5/doc/anchor.js.map +0 -1
  340. package/node_modules/exceljs/dist/es5/doc/cell.js +0 -961
  341. package/node_modules/exceljs/dist/es5/doc/cell.js.map +0 -1
  342. package/node_modules/exceljs/dist/es5/doc/column.js +0 -274
  343. package/node_modules/exceljs/dist/es5/doc/column.js.map +0 -1
  344. package/node_modules/exceljs/dist/es5/doc/data-validations.js +0 -18
  345. package/node_modules/exceljs/dist/es5/doc/data-validations.js.map +0 -1
  346. package/node_modules/exceljs/dist/es5/doc/defined-names.js +0 -173
  347. package/node_modules/exceljs/dist/es5/doc/defined-names.js.map +0 -1
  348. package/node_modules/exceljs/dist/es5/doc/enums.js +0 -49
  349. package/node_modules/exceljs/dist/es5/doc/enums.js.map +0 -1
  350. package/node_modules/exceljs/dist/es5/doc/image.js +0 -69
  351. package/node_modules/exceljs/dist/es5/doc/image.js.map +0 -1
  352. package/node_modules/exceljs/dist/es5/doc/modelcontainer.js +0 -16
  353. package/node_modules/exceljs/dist/es5/doc/modelcontainer.js.map +0 -1
  354. package/node_modules/exceljs/dist/es5/doc/note.js +0 -64
  355. package/node_modules/exceljs/dist/es5/doc/note.js.map +0 -1
  356. package/node_modules/exceljs/dist/es5/doc/range.js +0 -229
  357. package/node_modules/exceljs/dist/es5/doc/range.js.map +0 -1
  358. package/node_modules/exceljs/dist/es5/doc/row.js +0 -382
  359. package/node_modules/exceljs/dist/es5/doc/row.js.map +0 -1
  360. package/node_modules/exceljs/dist/es5/doc/table.js +0 -443
  361. package/node_modules/exceljs/dist/es5/doc/table.js.map +0 -1
  362. package/node_modules/exceljs/dist/es5/doc/workbook.js +0 -202
  363. package/node_modules/exceljs/dist/es5/doc/workbook.js.map +0 -1
  364. package/node_modules/exceljs/dist/es5/doc/worksheet.js +0 -900
  365. package/node_modules/exceljs/dist/es5/doc/worksheet.js.map +0 -1
  366. package/node_modules/exceljs/dist/es5/exceljs.bare.js +0 -14
  367. package/node_modules/exceljs/dist/es5/exceljs.bare.js.map +0 -1
  368. package/node_modules/exceljs/dist/es5/exceljs.browser.js +0 -36
  369. package/node_modules/exceljs/dist/es5/exceljs.browser.js.map +0 -1
  370. package/node_modules/exceljs/dist/es5/exceljs.nodejs.js +0 -15
  371. package/node_modules/exceljs/dist/es5/exceljs.nodejs.js.map +0 -1
  372. package/node_modules/exceljs/dist/es5/index.js +0 -15
  373. package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js +0 -90
  374. package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js.map +0 -1
  375. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js +0 -94
  376. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js.map +0 -1
  377. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js +0 -94
  378. package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js.map +0 -1
  379. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js +0 -362
  380. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js.map +0 -1
  381. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js +0 -347
  382. package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js.map +0 -1
  383. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js +0 -392
  384. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js.map +0 -1
  385. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js +0 -652
  386. package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js.map +0 -1
  387. package/node_modules/exceljs/dist/es5/utils/auto-drain.js +0 -18
  388. package/node_modules/exceljs/dist/es5/utils/auto-drain.js.map +0 -1
  389. package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js +0 -15
  390. package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js.map +0 -1
  391. package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js +0 -18
  392. package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js.map +0 -1
  393. package/node_modules/exceljs/dist/es5/utils/cell-matrix.js +0 -149
  394. package/node_modules/exceljs/dist/es5/utils/cell-matrix.js.map +0 -1
  395. package/node_modules/exceljs/dist/es5/utils/col-cache.js +0 -258
  396. package/node_modules/exceljs/dist/es5/utils/col-cache.js.map +0 -1
  397. package/node_modules/exceljs/dist/es5/utils/copy-style.js +0 -43
  398. package/node_modules/exceljs/dist/es5/utils/copy-style.js.map +0 -1
  399. package/node_modules/exceljs/dist/es5/utils/encryptor.js +0 -58
  400. package/node_modules/exceljs/dist/es5/utils/encryptor.js.map +0 -1
  401. package/node_modules/exceljs/dist/es5/utils/iterate-stream.js +0 -46
  402. package/node_modules/exceljs/dist/es5/utils/iterate-stream.js.map +0 -1
  403. package/node_modules/exceljs/dist/es5/utils/parse-sax.js +0 -47
  404. package/node_modules/exceljs/dist/es5/utils/parse-sax.js.map +0 -1
  405. package/node_modules/exceljs/dist/es5/utils/shared-formula.js +0 -42
  406. package/node_modules/exceljs/dist/es5/utils/shared-formula.js.map +0 -1
  407. package/node_modules/exceljs/dist/es5/utils/shared-strings.js +0 -32
  408. package/node_modules/exceljs/dist/es5/utils/shared-strings.js.map +0 -1
  409. package/node_modules/exceljs/dist/es5/utils/stream-base64.js +0 -66
  410. package/node_modules/exceljs/dist/es5/utils/stream-base64.js.map +0 -1
  411. package/node_modules/exceljs/dist/es5/utils/stream-buf.js +0 -343
  412. package/node_modules/exceljs/dist/es5/utils/stream-buf.js.map +0 -1
  413. package/node_modules/exceljs/dist/es5/utils/string-buf.js +0 -73
  414. package/node_modules/exceljs/dist/es5/utils/string-buf.js.map +0 -1
  415. package/node_modules/exceljs/dist/es5/utils/string-builder.js +0 -32
  416. package/node_modules/exceljs/dist/es5/utils/string-builder.js.map +0 -1
  417. package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js +0 -61
  418. package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js.map +0 -1
  419. package/node_modules/exceljs/dist/es5/utils/typed-stack.js +0 -23
  420. package/node_modules/exceljs/dist/es5/utils/typed-stack.js.map +0 -1
  421. package/node_modules/exceljs/dist/es5/utils/under-dash.js +0 -168
  422. package/node_modules/exceljs/dist/es5/utils/under-dash.js.map +0 -1
  423. package/node_modules/exceljs/dist/es5/utils/utils.js +0 -171
  424. package/node_modules/exceljs/dist/es5/utils/utils.js.map +0 -1
  425. package/node_modules/exceljs/dist/es5/utils/xml-stream.js +0 -151
  426. package/node_modules/exceljs/dist/es5/utils/xml-stream.js.map +0 -1
  427. package/node_modules/exceljs/dist/es5/utils/zip-stream.js +0 -79
  428. package/node_modules/exceljs/dist/es5/utils/zip-stream.js.map +0 -1
  429. package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js +0 -230
  430. package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js.map +0 -1
  431. package/node_modules/exceljs/dist/es5/xlsx/rel-type.js +0 -18
  432. package/node_modules/exceljs/dist/es5/xlsx/rel-type.js.map +0 -1
  433. package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js +0 -139
  434. package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js.map +0 -1
  435. package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js +0 -85
  436. package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js.map +0 -1
  437. package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js +0 -32
  438. package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js.map +0 -1
  439. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +0 -24
  440. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +0 -1
  441. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js +0 -27
  442. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +0 -1
  443. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js +0 -51
  444. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +0 -1
  445. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js +0 -234
  446. package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js.map +0 -1
  447. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js +0 -103
  448. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js.map +0 -1
  449. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js +0 -76
  450. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js.map +0 -1
  451. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +0 -35
  452. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +0 -1
  453. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +0 -32
  454. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +0 -1
  455. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +0 -53
  456. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +0 -1
  457. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +0 -97
  458. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +0 -1
  459. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js +0 -107
  460. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +0 -1
  461. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js +0 -92
  462. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +0 -1
  463. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +0 -61
  464. package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +0 -1
  465. package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js +0 -51
  466. package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js.map +0 -1
  467. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +0 -30
  468. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +0 -1
  469. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +0 -27
  470. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +0 -1
  471. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js +0 -93
  472. package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js.map +0 -1
  473. package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js +0 -112
  474. package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js.map +0 -1
  475. package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js +0 -158
  476. package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js.map +0 -1
  477. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js +0 -23
  478. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js.map +0 -1
  479. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js +0 -65
  480. package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js.map +0 -1
  481. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +0 -47
  482. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +0 -1
  483. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +0 -61
  484. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +0 -1
  485. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js +0 -40
  486. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js.map +0 -1
  487. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +0 -35
  488. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +0 -1
  489. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +0 -62
  490. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +0 -1
  491. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js +0 -82
  492. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +0 -1
  493. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js +0 -98
  494. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +0 -1
  495. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +0 -40
  496. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +0 -1
  497. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js +0 -38
  498. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js.map +0 -1
  499. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +0 -38
  500. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +0 -1
  501. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +0 -59
  502. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +0 -1
  503. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +0 -63
  504. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +0 -1
  505. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js +0 -67
  506. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js.map +0 -1
  507. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js +0 -30
  508. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js.map +0 -1
  509. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +0 -62
  510. package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +0 -1
  511. package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js +0 -91
  512. package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js.map +0 -1
  513. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +0 -40
  514. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +0 -1
  515. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js +0 -451
  516. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js.map +0 -1
  517. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +0 -275
  518. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +0 -1
  519. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +0 -25
  520. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +0 -1
  521. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +0 -38
  522. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +0 -1
  523. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +0 -45
  524. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +0 -1
  525. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +0 -77
  526. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +0 -1
  527. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +0 -42
  528. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +0 -1
  529. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +0 -71
  530. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +0 -1
  531. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +0 -22
  532. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +0 -1
  533. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +0 -43
  534. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +0 -1
  535. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +0 -28
  536. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +0 -1
  537. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +0 -88
  538. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +0 -1
  539. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +0 -38
  540. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +0 -1
  541. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +0 -52
  542. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +0 -1
  543. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +0 -43
  544. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +0 -1
  545. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +0 -75
  546. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +0 -1
  547. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +0 -22
  548. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +0 -1
  549. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +0 -66
  550. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +0 -1
  551. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +0 -22
  552. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +0 -1
  553. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js +0 -78
  554. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js.map +0 -1
  555. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js +0 -247
  556. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +0 -1
  557. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js +0 -28
  558. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +0 -1
  559. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js +0 -32
  560. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +0 -1
  561. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +0 -69
  562. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +0 -1
  563. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js +0 -126
  564. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +0 -1
  565. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +0 -50
  566. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +0 -1
  567. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +0 -26
  568. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +0 -1
  569. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js +0 -52
  570. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js.map +0 -1
  571. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +0 -35
  572. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +0 -1
  573. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +0 -24
  574. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +0 -1
  575. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js +0 -46
  576. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +0 -1
  577. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +0 -32
  578. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +0 -1
  579. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js +0 -99
  580. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +0 -1
  581. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js +0 -32
  582. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js.map +0 -1
  583. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js +0 -45
  584. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +0 -1
  585. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +0 -37
  586. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +0 -1
  587. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js +0 -128
  588. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js.map +0 -1
  589. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +0 -51
  590. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +0 -1
  591. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +0 -83
  592. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +0 -1
  593. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +0 -84
  594. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +0 -1
  595. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +0 -190
  596. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +0 -1
  597. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js +0 -32
  598. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +0 -1
  599. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js +0 -513
  600. package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +0 -1
  601. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js +0 -27
  602. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js.map +0 -1
  603. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js +0 -58
  604. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js.map +0 -1
  605. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js +0 -47
  606. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js.map +0 -1
  607. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js +0 -53
  608. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js.map +0 -1
  609. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js +0 -47
  610. package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js.map +0 -1
  611. package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js +0 -61
  612. package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js.map +0 -1
  613. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +0 -98
  614. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +0 -1
  615. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js +0 -92
  616. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +0 -1
  617. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js +0 -99
  618. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +0 -1
  619. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js +0 -114
  620. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +0 -1
  621. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js +0 -39
  622. package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js.map +0 -1
  623. package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js +0 -139
  624. package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js.map +0 -1
  625. package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js +0 -185
  626. package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js.map +0 -1
  627. package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js +0 -66
  628. package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js.map +0 -1
  629. package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js +0 -106
  630. package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js.map +0 -1
  631. package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js +0 -308
  632. package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js.map +0 -1
  633. package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js +0 -175
  634. package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js.map +0 -1
  635. package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js +0 -59
  636. package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js.map +0 -1
  637. package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js +0 -53
  638. package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js.map +0 -1
  639. package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js +0 -118
  640. package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js.map +0 -1
  641. package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js +0 -612
  642. package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js.map +0 -1
  643. package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js +0 -46
  644. package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js.map +0 -1
  645. package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js +0 -75
  646. package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +0 -1
  647. package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js +0 -30
  648. package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +0 -1
  649. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js +0 -89
  650. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js.map +0 -1
  651. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js +0 -28
  652. package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js.map +0 -1
  653. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js +0 -42
  654. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js.map +0 -1
  655. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js +0 -40
  656. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +0 -1
  657. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js +0 -123
  658. package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js.map +0 -1
  659. package/node_modules/exceljs/dist/es5/xlsx/xlsx.js +0 -697
  660. package/node_modules/exceljs/dist/es5/xlsx/xlsx.js.map +0 -1
  661. package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js +0 -5
  662. package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js.map +0 -1
  663. package/node_modules/exceljs/dist/exceljs.bare.js +0 -55253
  664. package/node_modules/exceljs/dist/exceljs.bare.js.map +0 -761
  665. package/node_modules/exceljs/dist/exceljs.bare.min.js +0 -45
  666. package/node_modules/exceljs/dist/exceljs.bare.min.js.map +0 -1
  667. package/node_modules/exceljs/dist/exceljs.js +0 -59900
  668. package/node_modules/exceljs/dist/exceljs.js.map +0 -1083
  669. package/node_modules/exceljs/dist/exceljs.min.js +0 -45
  670. package/node_modules/exceljs/dist/exceljs.min.js.map +0 -1
  671. package/scripts/ai-page-render-check.mjs +0 -532
  672. package/scripts/clearances-render-check.mjs +0 -480
  673. package/scripts/composer-render-check.mjs +0 -1027
  674. package/scripts/deploy-test.sh +0 -309
  675. package/scripts/home-render-check.mjs +0 -526
  676. package/scripts/portal-lifecycle-check.mjs +0 -639
@@ -456,8 +456,8 @@ function meter(name, entry) {
456
456
  // (emitted by the report-card stage, parsed into card.meta.ord) and the driver already orders +
457
457
  // provenance-checks cards by it — so match on THAT exact, injective key. The old fuzzy owner/mark
458
458
  // containment collapsed distinct findings onto one card (`.find()` first-match): two findings sharing
459
- // a mark, or whose mark is a substring of another's ("aura" ⊂ "aurora"), all matched the first card,
460
- // rendering one card's prose under every finding (the PETCARY "02 On-field conflicts" duplication). The
459
+ // a mark, or whose mark is a substring of another's ("nova" ⊂ "novadex"), all matched the first card,
460
+ // rendering one card's prose under every finding (the "02 On-field conflicts" duplication). The
461
461
  // fuzzy match is kept ONLY as a fallback for legacy artifacts whose cards predate the `- ord:` line.
462
462
  function matchCard(finding, cards) {
463
463
  const list = cards || [];
@@ -4,9 +4,19 @@
4
4
  // report-data.json since the one-report collapse; the clearance lane's native-render branch existed in
5
5
  // the portal with NO producer anywhere (B3's "the aspirational path") — this is that producer.
6
6
  //
7
- // Two readers, one file (the knockout doctrine, verbatim): the assistant drafts client-facing mail from
8
- // it, and the portal's native-render path reads it instead of iframing baked HTML. It is the CLIENT CUT
9
- // by construction, not by serve-time stripping:
7
+ // Two readers, one file (the knockout doctrine, as it stood): the assistant drafts client-facing mail
8
+ // from it, and the portal's native-render path reads it instead of iframing baked HTML.
9
+ //
10
+ // THE TWO LANES DIVERGED ON 2026-09-07 AND THIS FILE DID NOT MOVE. The owner ruled (tracker issue 274)
11
+ // that the KNOCKOUT report carries the reviewer's notes, on the ground that one report is read by the
12
+ // person who ran Clearotron and holding material back confuses where data went; render-knockout.mjs
13
+ // projects them under `reviewerNotes`. That ruling was about those notes on that lane. It did not touch
14
+ // what this producer strips — withdrawn findings, verification receipts, `::p::` tails, `[internal]`
15
+ // labels and engine-internal narration are all still cut here, and the guard test still polices them.
16
+ // Do not read the knockout change as licence to relax this list; if the ruling is meant to extend, it
17
+ // extends by being asked, not by inference.
18
+ //
19
+ // It remains the CLIENT CUT by construction, not by serve-time stripping:
10
20
  // • only LIVE findings (a withdrawn finding renders nowhere — it does not exist here either);
11
21
  // • no verification receipts (use_check / own_rights / bears_on — those are the reviewer's evidence
12
22
  // trail and live in the audit workbook), no withdrawn_reason, no quarantine records;
@@ -87,7 +87,7 @@ const statExists = (p) => {
87
87
  * drains continuously under `--watch`, so there is no arrival to trigger and no schedule to wait for.
88
88
  * This module could not see that posture at all, which is why a box in it produced a permanent
89
89
  * "the .path unit could not be read" — honest, correct, and indistinguishable from an open finding
90
- * forever ('s third criterion, in the consumer that actually printed the line).
90
+ * forever (the third criterion, in the consumer that actually printed the line).
91
91
  *
92
92
  * ENABLED, NOT MERELY PRESENT, for the same reason the timer is read that way: an installed unit nobody
93
93
  * enabled drains nothing, and answering "present" would license the strongest sentence this module has
@@ -46,7 +46,7 @@
46
46
  // precisely so they cannot come to different conclusions about the same box; they were still reaching
47
47
  // two different conclusions about the same *consequence*. This closes that.
48
48
 
49
- import { drainPosture, CONTINUOUS } from "./drain-posture.mjs"; // tracker issue 206 — one rule about the box
49
+ import { drainPosture, CONTINUOUS } from "./drain-posture.mjs"; // one rule about the box
50
50
 
51
51
  /**
52
52
  * @param {object} a
@@ -62,7 +62,7 @@ export const RECALL_TOP_SLICE = 10;
62
62
  * MOVED to coverage-ledger.mjs and re-exported here, so every existing import site is unchanged. It had
63
63
  * to move because coverage-form.mjs must carry the same token into the `seat_row_contract` it writes
64
64
  * INTO the file the seat edits, and that module is pure by contract while this one is not (it reaches
65
- * registry-fidelity.mjs, which reads the filesystem). A second copy of the literal is 's defect.
65
+ * registry-fidelity.mjs, which reads the filesystem). A second copy of the literal is the defect.
66
66
  *
67
67
  * `crowdRulingCount` moved for the SAME reason and rides the same re-export: the typed coverage
68
68
  * call now refuses an uncounted crowd row at call time, and it is pure, so the parser had to sit in the
@@ -168,7 +168,7 @@ export function makeRecipeService({
168
168
  // the "reported outcome diverges from disk truth" class).
169
169
  if (!v.ok) return { status: 400, json: { error: "validation_failed", errors: v.errors } };
170
170
  const { files } = writeRecipe({ recipesDir, customer, slug, recipe: effective });
171
- const message = `chore(prelim): ${existing ? (effective.archived && !existing.archived ? "archive" : "update") : "create"} saved search ${customer}/${slug} (via config UI, by ${by})`;
171
+ const message = `chore(clearotron): ${existing ? (effective.archived && !existing.archived ? "archive" : "update") : "create"} saved search ${customer}/${slug} (via config UI, by ${by})`;
172
172
  // — the row rides IN the commit, so it no longer names a sha. shared/store-in-repo.mjs says why.
173
173
  const { commit, commitError } = commitWithAuditRow({ audit, gitCommit, files, message, by,
174
174
  row: { event: existing ? "recipe-update" : "recipe-create", key: `${customer}/${slug}`, by,
@@ -103,7 +103,7 @@ export const TRACE_SCOPE = {
103
103
  uninstrumented: [
104
104
  { path: "common-law", reason: "common-law-grid.json → findings is not joined here; a candidate lost on that path emits NO row and this trace can say nothing about it either way" },
105
105
  { path: "case-law", reason: "case-law findings are not traced to a record at all" },
106
- { path: "serp/nativeread", reason: "the #372 slices ARE built and write _driver/jx/zh-grid.json; nothing on them reaches this trace because it traces the register path only. Their carry is #402's, on the common-law tracer, because zh-grid.json carries the common-law cells[]+gaps[] shape and not a register band" },
106
+ { path: "serp/nativeread", reason: "reason: and write _driver/jx/zh-grid.json; nothing on them reaches this trace because it traces the register path only. Their carry is the common-law tracer's, because zh-grid.json carries the common-law cells[]+gaps[] shape and not a register band" },
107
107
  { path: "crowd remainder", reason: "count-only slices have no record bodies — enumerated per slice in untraceable_slices[], never per record" },
108
108
  ],
109
109
  };
@@ -125,7 +125,7 @@ export const TRACE_SCOPE = {
125
125
  // the only direction that also hides the 2 unreasoned drops the common-law trace DID find.
126
126
  //
127
127
  // So the declaration is derived from which sibling tracers actually produced a computable artifact on
128
- // THIS run, exactly as 's dictated set is read from the paths factory and 's obligations are one
128
+ // THIS run, exactly as the dictated set is read from the paths factory and the obligations are one
129
129
  // calculation. A hand-kept list whose staleness is invisible is not a contract; it is a comment.
130
130
  //
131
131
  // UNCHANGED IN THE CONSERVATIVE DIRECTION: a path only moves to `instrumented` on positive evidence that
@@ -840,7 +840,7 @@ export function silentlyLostFindings({ reconciliation = null, carryRows = null,
840
840
  * It also anticipated this gap in writing: "nine divergences from a digest finding-ending, every one of
841
841
  * them `step-stated`". Nine of the shape nothing checked.
842
842
  *
843
- * MEASURED ON R2 `russet-kestrel`, delivered 2026-09-06. The sibling ran and reported
843
+ * MEASURED ON A DELIVERED R2 RUN, 2026-09-06. The sibling ran and reported
844
844
  * `{checked:5, matched:5, lost:0}` — correctly. On that same delivery two marks from the lawyer's final
845
845
  * list, `OSLER DELPHI` and `DELFITY`, one rated HIGH, are absent from `findings.json`. They were dropped
846
846
  * WITH a reason, so they sat outside the sibling's population by design:
@@ -880,12 +880,12 @@ export function statedDivergenceFindings({ reconciliation = null, carryRows = nu
880
880
  //
881
881
  // The first cut of this function gated on the reconciliation's finding-ended positions, mirroring the
882
882
  // sibling. That inherited the sibling's BLIND SPOT along with its shape, and the check was inert on
883
- // the very delivery it was written for. Replayed against R2 `russet-kestrel`:
883
+ // the very delivery it was written for. Replayed against that delivery:
884
884
  //
885
885
  // silentlyLostFindings checked=5 matched=5 lost=0
886
886
  // statedDivergenceFindings checked=5 matched=5 diverged=0 ← should have named two marks
887
887
  //
888
- // The reconciliation names five finding-ended positions and they are five OTHER marks — DELPHIS
888
+ // The reconciliation names five finding-ended positions and they are five OTHER marks — VELTRIN
889
889
  // bioenergetische Kosmetik, DELPHIC HSE, DELPHI, DELPHIN & EMERENCE, DELPHI DIAGNOSTICS. The two that
890
890
  // were lost sit in the CARRY rows and the reconciliation never mentions them:
891
891
  //
@@ -25,7 +25,7 @@
25
25
  // owns. Measured consequence, not a hypothesis: on 2e203b75 a blind-frame seat obeyed the prose and
26
26
  // hand-wrote a 17182B model with no call capture beside it, on a box whose grant already carried
27
27
  // the tool. The dictation deletes are; this direction is what keeps them deleted.
28
- // (c) ORDERED BUT NOT GRANTED. 's seed direction. E12 owns it for skill docs; here it reaches the
28
+ // (c) ORDERED BUT NOT GRANTED. That seed direction. E12 owns it for skill docs; here it reaches the
29
29
  // dispatch and the repair ladder too.
30
30
  //
31
31
  // ── PURE, AND THAT IS WHAT MAKES THE PLANTS CHEAP ────────────────────────────────────────────────────
@@ -182,7 +182,7 @@ export function bareGrant(granted) {
182
182
  * be silent on whichever repair path it did not happen to hold.
183
183
  * @param {Array<{surface:string, kind:string, text:string}>} a.union
184
184
  * @param {string[]} a.toolUniverse every tool name that exists anywhere, for direction (c)
185
- * @param {Array<{stage:string, tool:string}>} [a.backlog] 's named, excused members — ONE list, read
185
+ * @param {Array<{stage:string, tool:string}>} [a.backlog] the named, excused members — ONE list, read
186
186
  * from contract-dictation-registry.mjs. A second excuse list here would be authoring number eight, which
187
187
  * is the failure that registry's own header exists to forbid.
188
188
  * @param {Set<string>} [a.providerConditionalSurfaces] surfaces that are provider-conditional BY
@@ -284,7 +284,7 @@ export function agreementFindings({ stage, granted, artifacts, union, toolUniver
284
284
  const excused = new Set(backlog.filter((b) => b.stage === stage).map((b) => b.tool));
285
285
  for (const tool of [...toolUniverse].sort()) {
286
286
  if (held.has(tool)) continue;
287
- if (excused.has(tool)) continue; // named on 's backlog; the list can only shrink
287
+ if (excused.has(tool)) continue; // named on the backlog; the list can only shrink
288
288
  for (const m of union) {
289
289
  if (!namesTool(m.text, tool)) continue;
290
290
  // ── — A PROVIDER CANNOT SERVE IT, AND THIS ORDER SAYS SO ──────────────────
@@ -235,7 +235,7 @@ export function matchesReference(ref, candidate, { sameOwner = false } = {}) {
235
235
  return null;
236
236
  }
237
237
 
238
- // 3 — ALIAS. splits this in two, on the same precedent as rules 1 and 4 (, "the scorer calls
238
+ // 3 — ALIAS. splits this in two, on the same precedent as rules 1 and 4 ("the scorer calls
239
239
  // a different owner's longer mark a hit"). This rule was the one cross-owner escape left open.
240
240
  //
241
241
  // FULL IDENTITY — one name on each side and they are the same name — is NOT a relaxation and stays
@@ -674,7 +674,7 @@ export function scoreRecall({ reference, findings = [], retrieved = [], scopeCla
674
674
  // proprietor with more than one mark. A large filer can perfectly well have one mark the run withheld
675
675
  // and a DIFFERENT mark, not in the reference, that it surfaced. Both rows are true.
676
676
  //
677
- // It fired on R2 russet-kestrel: `Novartis AG: reference "DELFITY" is withheld, surfaced "DELPHINA"
677
+ // It fired on a delivered R2 run: `<large filer>: reference "DELFITY" is withheld, surfaced "DELPHINA"
678
678
  // is noise`. Different marks, different records, one proprietor that files a great many. And because
679
679
  // score.mjs prints a collision as "do not read the recall numbers above", ONE such proprietor
680
680
  // suppressed the whole run's recall measurement — a real 88% → 63% movement went unquoted on the
@@ -749,7 +749,7 @@ export function scoreRecall({ reference, findings = [], retrieved = [], scopeCla
749
749
  * AND THE DIRECTION IS THE DANGEROUS ONE. A `withheld` that over-counted would be investigated the first
750
750
  * round it appeared. This one reads clean.
751
751
  *
752
- * This does NOT compute carry-through — that needs the run's screened set and is 's acceptance 1.
752
+ * This does NOT compute carry-through — that needs the run's screened set and is the acceptance 1.
753
753
  * What it does is stop a bare `0` from reading as "nothing was dropped", by naming on the line how many
754
754
  * retrieved marks the number could not have spoken to. The file already refuses a bare `0` for the
755
755
  * no-`_driver/` case, in as many words; this is the same refusal for the case that reads clean.
@@ -1638,7 +1638,7 @@ export function ownersMatch(a, b) {
1638
1638
  * derives the same sentence from the delivery-time record instead: slice 1 from its per-lane map
1639
1639
  * (`slices.candidates.lanes[lane]`), slices 2–3 from their own `lane` field. PER LANE, never the
1640
1640
  * run-level join: the SERP grid is zh-only, so `lane ja: executes=candidates+serp-grid` would be a
1641
- * claim about the ja lane that no record supports ('s fix, kept exact here).
1641
+ * claim about the ja lane that no record supports (the fix, kept exact here).
1642
1642
  *
1643
1643
  * THREE ANSWERS, AND THE THIRD IS THE ONE THAT MATTERS:
1644
1644
  * "candidates+serp-grid" the named slices ran for this lane
@@ -1710,7 +1710,7 @@ export function readJxLanes(doc) {
1710
1710
  // — DERIVED from fold.slices, with the declaration as a LEGACY fallback only. Two artifact
1711
1711
  // generations reach this line and they are read in this order deliberately:
1712
1712
  // fold.slices present → derive. The record of what ran wins, always.
1713
- // pre- artifact → its frozen `lanes.<lane>.executes` string, the only thing that run
1713
+ // pre-change artifact → its frozen `lanes.<lane>.executes` string, the only thing that run
1714
1714
  // ever recorded (a run minted between and carries BOTH, and
1715
1715
  // the derived value is the accurate one — hence the order).
1716
1716
  // neither → null ⇒ the scorer prints "(not stated)". Not "none": no statement
@@ -1755,7 +1755,7 @@ export function readJxLanes(doc) {
1755
1755
  why: lanes.length ? null : "_driver/jx-lanes.json is present and declares no lane — the file was written and no jurisdiction lane was built, which is not the same as the file being absent",
1756
1756
  lanes,
1757
1757
  // — the RUN-level statement, three-valued on itself in the same discipline as the rest of this
1758
- // function: present, or absent with a reason. A pre- artifact and a fold that never ran are both
1758
+ // function: present, or absent with a reason. A pre-change artifact and a fold that never ran are both
1759
1759
  // "the run did not state it", and neither is a pass.
1760
1760
  statement: typeof doc.fold?.executes === "string" ? doc.fold.executes : null,
1761
1761
  slices: doc.fold?.slices ?? null,
@@ -1778,7 +1778,7 @@ export function readJxLanes(doc) {
1778
1778
  * present, no units `present:true, units:[]` — its own fact, its own sentence.
1779
1779
  * present, with units each unit's own `degraded` / cause / attempts, nothing inferred.
1780
1780
  *
1781
- * `degraded` is TYPEOF-tested, never coerced. A pre- units.json carries the cause STRING in that
1781
+ * `degraded` is TYPEOF-tested, never coerced. A pre-change units.json carries the cause STRING in that
1782
1782
  * field; `Boolean(r.degraded)` would report an old artifact as having stated something it never stated.
1783
1783
  *
1784
1784
  * PURE.
@@ -30,6 +30,26 @@ export const SIGNATURES = [
30
30
  // the strip's residue always leaves whitespace after the hyphen.
31
31
  re: /\bpre-\s+[a-z]/,
32
32
  },
33
+ {
34
+ name: "a parenthesis opening on a comma",
35
+ // THE THIRD RESIDUE, and the floor could not see it for two years because the first two are
36
+ // WORD-level — a bare possessive, a dangling `pre-` — and this one is PUNCTUATION. It looks like
37
+ // ordinary code to a reader scanning for broken English, which is exactly why a census built from
38
+ // the shapes somebody had noticed reads like a census of the whole problem.
39
+ //
40
+ // Where the removed reference was the entire content of a parenthesis, nothing is left but `(,)`.
41
+ // Where it opened one, the sentence now begins on a comma: `(, 2026-08-21)`. Two ran off the end of
42
+ // their line.
43
+ //
44
+ // THE LOOKAHEAD IS THE WHOLE PRECISION AND IT IS DERIVED, NOT GUESSED. `(,` also occurs in code —
45
+ // inside a character class (`[(,=:…]`, `[;{\s(,]`) and in an alternation (`(,|$)`) — where those two
46
+ // characters are syntax rather than damage. Every code instance is followed by a regex metacharacter
47
+ // and no residue instance is, so the exclusion is `|`, `]` and `=` rather than a list of files that
48
+ // would go stale. Measured against the tree as it stood before the repair: 123 matches, which is the
49
+ // residue count the finding reported, and 0 after it. A signature that reproduces the number it was
50
+ // derived from is one that is reading the same thing.
51
+ re: /\(\s*,(?![|\]=])/,
52
+ },
33
53
  ];
34
54
 
35
55
  // THE RULE'S OWN DEFINITION IS THE ONLY EXEMPTION, and it is named rather than pattern-matched.
@@ -2,7 +2,7 @@
2
2
  // Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
3
3
  // ── ONE REFUSAL BOUND FOR EVERY TRANSPORT THAT LOOPS PER-ITEM OBLIGATIONS ─────────────────────────────
4
4
  //
5
- // 's Part 2. is the incident: one row of a meaning sweep was refused 217 times across three
5
+ // That Part 2. is the incident: one row of a meaning sweep was refused 217 times across three
6
6
  // attempts, exhausted the stage's recoveries, and killed a production run that had already ruled 72 of
7
7
  // its 73 obligations. Nothing delivered. The cure at that stage was a per-row bound and a park; this
8
8
  // module is that cure written once, so the other members of the class do not each grow their own.
@@ -33,7 +33,7 @@
33
33
  // 1,256 rows before this was built: present and distinct in every one.
34
34
 
35
35
  /**
36
- * THE BOUND. Thirty, inherited from 's disposition park, where the number was argued from a real
36
+ * THE BOUND. Thirty, inherited from the disposition park, where the number was argued from a real
37
37
  * ledger rather than chosen: twelve is refuted (two rows that were CONVERGING sat at 17), and 30 is still
38
38
  * a sevenfold cut from the 217 that killed the run. That argument is about the SHAPE of a live-lock, not
39
39
  * about meaning obligations, so it carries to the other members unchanged.
@@ -56,7 +56,7 @@ function* refusals(verdicts) {
56
56
  /**
57
57
  * How many times each item has been refused so far. PURE — the park's own evidence.
58
58
  *
59
- * COUNTED PER ITEM ACROSS CALLS, which is the unit 's banner records an earlier investigation dying
59
+ * COUNTED PER ITEM ACROSS CALLS, which is the unit the banner records an earlier investigation dying
60
60
  * on when it joined per-item-final-state instead. A row refused on eight calls and ruled on the ninth
61
61
  * counts eight; a row refused eight times in ONE call also counts eight, because eight refusals is eight
62
62
  * refusals however they were batched.
@@ -17,7 +17,7 @@
17
17
  // The first cut narrowed the contract's covered list to the configured members and handed that
18
18
  // downstream. It is wrong twice over:
19
19
  //
20
- // · 's admission gate reads `offices.covered` to decide which territories a client may ORDER.
20
+ // · the admission gate reads `offices.covered` to decide which territories a client may ORDER.
21
21
  // Narrowing it to EU would refuse a US-only matter AT THE DOOR, on a provider that covers the US.
22
22
  // is the report of that shape of refusal and its acceptance is that a US-only scenario is
23
23
  // admitted rather than vetoed. A door that refuses is not a disclosure.
@@ -130,7 +130,7 @@ export function unavailableByOffice(unavailable) {
130
130
  * against the full declared coverage and hand them straight to the provider adapter. On a composite
131
131
  * that is a fan-out to EVERY member, so the unconfigured one is asked, refuses, and the composite
132
132
  * correctly declines to return a partial sum — killing a lane whose other half works perfectly. That
133
- * is 's observed refusal, and 's acceptance ("free-tier starts and ships a disclosed US
133
+ * is the observed refusal, and the acceptance ("free-tier starts and ships a disclosed US
134
134
  * deferral") was never met on these two lanes.
135
135
  *
136
136
  * @param regions what resolveRegions produced, against the FULL coverage. `[]` is meaningful.
@@ -533,7 +533,7 @@ export function countLine(entry) {
533
533
  //
534
534
  // On the rendered line rather than only in `scope.deferredJurisdictions`, which has been written by
535
535
  // both Depth 2 lanes since they were built and which `git grep` finds no reader for. A field nobody
536
- // sees is not a disclosure — that is 's defect exactly, where `deferred_coverage` rode the plan
536
+ // sees is not a disclosure — that is the defect exactly, where `deferred_coverage` rode the plan
537
537
  // and the run shipped an EU-only clean with no row saying the US register was never searched.
538
538
  const deferred = entry.deferredScope ?? [];
539
539
  const oneDeferred = deferred.length === 1;
@@ -7,7 +7,7 @@
7
7
  // `unit.md` is provider-INDEPENDENT doctrine, and it named three provider-DEPENDENT tools flat:
8
8
  // "Your register key also carries register_record_fetch, register_image_fetch and register_batch_screen."
9
9
  // On a signa deployment two thirds of that sentence is false and the seat is told it holds tools its
10
- // grant does not carry; the same shape is 's subject across six
10
+ // grant does not carry; the same shape is the subject across six
11
11
  // providers. A dispatch that asserts a capability the active provider lacks is the defect, whatever the
12
12
  // seat then does with it.
13
13
  //
@@ -39,7 +39,7 @@ export const HELD_BUT_NOT_CALLED = Object.freeze([
39
39
  * ✕ NULL IS NOT AN EMPTY SENTENCE, and the difference is the defect this exists to fix. Ask
40
40
  * `providerUnavailableRegisterTools` on an unresolved provider and it answers with an empty withheld
41
41
  * set — deliberately, as a reporting helper that must never throw. Composed into this sentence, an empty
42
- * withheld set reads as "your grant carries all of them": 's defect, restored
42
+ * withheld set reads as "your grant carries all of them": the defect, restored
43
43
  * silently, on exactly the `--experiment` single-stage path a diagnosis reaches for. So resolution is
44
44
  * asked for HERE, and an unresolved provider omits the sentence rather than composing a false one.
45
45
  */
@@ -74,7 +74,7 @@ export const PLAN_PREDICATES = ["exact", "default", "wildcard", "phonetic", "own
74
74
  // ratified mark or its dominant element, i.e. run input. Until now the only marking was a `+form` suffix
75
75
  // inside a qid string, and the wildcard fringe carried none at all — so nothing downstream could tell a
76
76
  // generated term from an imagined one without re-deriving the band. OPTIONAL on the entry: a frozen
77
- // pre- plan carries none and resumes byte-identical, and replay verdicts over archived runs never flip.
77
+ // pre-change plan carries none and resumes byte-identical, and replay verdicts over archived runs never flip.
78
78
  /**
79
79
  * THE ROMANISATION THE PLAN ALREADY HOLDS FOR A TERM — (cause 2).
80
80
  *
@@ -470,7 +470,7 @@ const slug = (s) => latinFold(s) || "q";
470
470
  // So a non-Latin term's identity carried nothing about WHICH TERM IT IS. It was its position in the
471
471
  // compile order — and the counter is per-plan, not per-script, so adding a Devanagari term renumbers
472
472
  // the Cyrillic ones. Fourth site of a Latin normaliser standing where an identity should be, after
473
- // 's fold key, 's script-exact arm and 's term-substance check.
473
+ // That fold key, the script-exact arm and the term-substance check.
474
474
  //
475
475
  // ── WHAT IT COSTS, MEASURED ON THE SHIPPED extendRegisterPlan RATHER THAN REASONED ────────────
476
476
  //
@@ -1277,7 +1277,7 @@ export function entryQuestionKey(entry, plan) {
1277
1277
  * straight out of model-authored common-law markdown, and it is where R2b's two heading
1278
1278
  * rows entered a plan that had already been declared clean.
1279
1279
  *
1280
- * — AND IT SCREENS FOR THE QUESTION, not just the qid. Same argument as 's term screen and
1280
+ * — AND IT SCREENS FOR THE QUESTION, not just the qid. Same argument as the term screen and
1281
1281
  * the same funnel: an entry whose resolved question is already in the plan is refused here, because
1282
1282
  * this is the one place that holds both the plan and the incoming row. See entryQuestionKey above
1283
1283
  * for what "the same question" means and why `regions` is the field that hides it.
@@ -1498,7 +1498,7 @@ export function parseRegisterPlan(raw) {
1498
1498
  // owner is a defect, never a silent no-op filter.
1499
1499
  if (e.owner != null && (typeof e.owner !== "string" || !e.owner.trim()))
1500
1500
  throw new Error(`register_plan_owner_invalid:${short(e.qid)} (owner must be a non-empty string when present)`);
1501
- //: optional (a frozen pre- plan has none), closed when present — an off-enum value would
1501
+ //: optional (a frozen pre-change plan has none), closed when present — an off-enum value would
1502
1502
  // make the floor/model marking unreadable exactly where it is load-bearing.
1503
1503
  //: optional (a frozen pre-2050 plan has none), and closed to the single value `true` when
1504
1504
  // present — a falsy or string-shaped stamp would make the depth fold's designation unreadable
@@ -1532,7 +1532,7 @@ export function parseRegisterPlan(raw) {
1532
1532
  * { executed: [{qid, state, records, total_hits}], missing: [qid], skipped: [{qid, guard}],
1533
1533
  * unplanned: [{qid|query}] }
1534
1534
  * `records` and `total_hits` are each a number or null, and BOTH KEYS ARE ALWAYS WRITTEN.
1535
- * That is load-bearing, not tidiness: `planJoinFrom` tells a pre- receipt from a count the
1535
+ * That is load-bearing, not tidiness: `planJoinFrom` tells a pre-change receipt from a count the
1536
1536
  * provider could not take by whether the keys are PRESENT, because `null` and absent are the same
1537
1537
  * value once read. Omit a key here and every new receipt silently reads as legacy — the arm named
1538
1538
  * "the discriminator's PREMISE" fails if this stops holding.
@@ -1628,7 +1628,7 @@ export function joinPlanToBands(plan, bandBlocksByAxis) {
1628
1628
  //
1629
1629
  // 1. THE PROVIDER MUST HAVE ANSWERED. Deferral is earned by a band block stamped `error:true` with the
1630
1630
  // provider's own reason on it. A qid with NO block ran nothing and recorded nothing — an absence,
1631
- // not a finding — and still throws. That is 's condition, untouched: a genuinely-unrun,
1631
+ // not a finding — and still throws. That is the condition, untouched: a genuinely-unrun,
1632
1632
  // undisclosed slice fails the run.
1633
1633
  // 2. THE LADDER MUST BE SPENT, WHERE THE LADDER CAN DO ANYTHING. Only a qid the run has ALREADY
1634
1634
  // recorded as missing (or already deferred this way) converts. On its first fan-in a hard-errored
@@ -1847,7 +1847,7 @@ export function deriveCoverageSkeleton(plan, join) {
1847
1847
  * predicate, no clean-claim precondition — had already fired and returned first. Main's own doc block
1848
1848
  * called that pair a deliberate superset/subset. So the fold removes a token the validator could not
1849
1849
  * reach, not a check. THE FOLD IS PROVED BY THE REPLAY CORPUS, not by that argument: the corpus flips
1850
- * only where the SUPERSET stops firing, and it comes back to 's 9 with the superset alone restored.
1850
+ * only where the SUPERSET stops firing, and it comes back to the 9 with the superset alone restored.
1851
1851
  * (The argument alone has a hole — this function keys its skeleton map on raw `s.axis` and the superset
1852
1852
  * trims, so an untrimmed skeleton axis would separate them. Degenerate, and no preserved run carries it.)
1853
1853
  *
@@ -2066,7 +2066,7 @@ function undisclosedDeferredQids(skeletonAxis, text) {
2066
2066
  * WHY THIS AND NOT A LOUDER HINT. The doctrine already reached the stage as advice on the first dispatch
2067
2067
  * (deferredSlicesRequiredRows, formerly the A8 "hint") and the stage claimed clean anyway, then complied
2068
2068
  * the moment the identical fact came back as a validator failure — R1 681s→202s, R2 515s→77s, every
2069
- * prelim run that reaches the digest. A fact that is obeyed as a failure and ignored as an input is not
2069
+ * clearotron run that reaches the digest. A fact that is obeyed as a failure and ignored as an input is not
2070
2070
  * being said too quietly; it is being offered rather than required. So it is required here.
2071
2071
  *
2072
2072
  * DELIBERATELY A SUPERSET of the deferred branch below, and the older gate is kept rather than folded
@@ -330,7 +330,7 @@ export function recordsForMark(doc, name) {
330
330
  * WHAT REPLACES A FOREIGN URL, and why it is not an origin swap: `null`, so the surfaces fall through to
331
331
  * `recordId` — the `/mark/<cc>/<number>` path that IS the canonical record identity this system stores.
332
332
  * The reader gets the record number in plain text beside the office label, which is word for word the
333
- * remedy 's refusal message prescribes. Composing the run provider's origin onto the path instead
333
+ * remedy the refusal message prescribes. Composing the run provider's origin onto the path instead
334
334
  * would invent a URL nobody fetched, and on `free-tier` there are two offices and no single origin to
335
335
  * swap to.
336
336
  *
@@ -394,7 +394,7 @@ export function recordsLine(entry) {
394
394
  + `appears here.`
395
395
  : "";
396
396
  // — the ordered territories this register never covered. Appended to whichever sentence comes
397
- // back, and needed most in the EMPTY-LIST branch below for the same reason 's note is: "the
397
+ // back, and needed most in the EMPTY-LIST branch below for the same reason the note is: "the
398
398
  // register returned none under the name or any close variation of it" is a clean negative, and over a
399
399
  // matter that ordered Japan on a register with no Japanese coverage it is a false one.
400
400
  const outside = entry.deferredScope ?? [];
@@ -328,7 +328,7 @@ export function assembleRunRecords(runDir, runPrefix,
328
328
  writeFileSync(driverDir(runDir, "receipts.json"), JSON.stringify({ schema_version: 1, receipts: rows }, null, 2) + "\n");
329
329
  }
330
330
  } catch { /* best-effort — the records map above remains the gate substrate */ }
331
- // 's legacy-name notice is REPLACED, not deleted. That one told an operator which of four
331
+ // That legacy-name notice is REPLACED, not deleted. That one told an operator which of four
332
332
  // global candidates was being read; nothing reads any of them for a new run any more, so the sentence
333
333
  // had become false. What an operator still needs is the fact underneath it: a box upgraded across this
334
334
  // change is carrying a large global record log that is now written by nothing and read by nothing —
@@ -338,7 +338,7 @@ export function assembleRunRecords(runDir, runPrefix,
338
338
  //
339
339
  // AND THE CALL LEDGER'S OWN NOTICE MOVES HERE RATHER THAN DYING WITH IT. `ledgerDeprecationNotice` had
340
340
  // exactly one product caller — the record line above — so deleting that line would have left NOTHING
341
- // announcing the ledger that is still global, still live and still on production's pre- filename.
341
+ // announcing the ledger that is still global, still live and still on production's pre-change filename.
342
342
  // Gated on the path ACTUALLY WALKED: the notice re-resolves from the environment, so on a call that
343
343
  // passed an explicit `callLogPath` it would describe a file this assembly never opened, and a
344
344
  // diagnostic that names something other than what happened is worse than no diagnostic.
@@ -951,7 +951,7 @@ const recClasses = (rec) => {
951
951
  * WHICH owner name a delivery artifact SHOWS. ONE definition, deliberately, because the renderer
952
952
  * and bindFindingsToRecords each resolve the owner independently — publish/render.mjs does its own
953
953
  * record lookup and preferred the record outright, so binding the finding alone changed no heading and
954
- * no lint surface. A second copy of the same decision is how 's provider default survived two fixes.
954
+ * no lint surface. A second copy of the same decision is how the provider default survived two fixes.
955
955
  *
956
956
  * The record decides, not a guess about what "looks romanised": a record carrying BOTH a Latin name and
957
957
  * a native-script one is itself saying the Latin field is a transliteration, and only then does a
@@ -227,7 +227,7 @@ export function accountRemedyTerms({ terms = [], blocksByQid = new Map(), execut
227
227
  }
228
228
 
229
229
  /**
230
- * THE CLOSURE READ ('s second criterion). `domClosed` may be true only over the ACCOUNTED set: a
230
+ * THE CLOSURE READ (the second criterion). `domClosed` may be true only over the ACCOUNTED set: a
231
231
  * dominant-element directive must be verified-closed AND every remedy term that directive restated must
232
232
  * be `found` or `searched-empty`. One unaccounted term and the dominant-element gap is not closed —
233
233
  * because it demonstrably is not: something the remedy named either never ran or ran into a shape the
@@ -199,7 +199,7 @@ export const REPAIR_COMPOSERS = [
199
199
  // before/after run-pairs read identically, because a clearance narrative's job IS to state what
200
200
  // was searched and what came back — the legitimate sentence and the defective one have the same
201
201
  // shape and differ only in truth. The typed half of this class IS enforced structurally, on the
202
- // corrective pair, by `evidenceClaimViolations` (, pipeline.mjs ~10973) — but it reads
202
+ // corrective pair, by `evidenceClaimViolations` (pipeline.mjs ~10973) — but it reads
203
203
  // `findings.json` meters, and a narrative sentence with no findings-side counterpart is invisible
204
204
  // to it. That prose gap is conversion-era work, not an instruction. This is the instruction.
205
205
  `A REPAIR MAY NARROW A CLAIM AND MAY NEVER BROADEN ONE. If a flagged statement is wrong because it claims too much, the correction states LESS: strike the claim, or replace it with the smaller claim the evidence actually carries. Never restate the same claim in different words, and never replace a specific sentence with a general one. NARROWING IS NOT HEDGING and the rule above still holds — claiming less is a correction; keeping the claim and wrapping it in "may", "appears to" or "broadly" is the hedge that is forbidden.`,
@@ -233,7 +233,7 @@ export const REPAIR_COMPOSERS = [
233
233
  review,
234
234
  );
235
235
  },
236
- // TWO SAMPLES BECAUSE THE COMPOSER HAS TWO SHAPES, and 's saving is the whole point of the
236
+ // TWO SAMPLES BECAUSE THE COMPOSER HAS TWO SHAPES, and the saving is the whole point of the
237
237
  // second: a declared scope narrows the pass, an undeclared one leaves it byte-identical to what it
238
238
  // was before that existed. A guard walking only one of them walks half the surface.
239
239
  samples: [
@@ -139,7 +139,7 @@ export function aggregateFailureRecurrence({ enumerate = enumerateRuns, now = Da
139
139
  // different orders), so it never enters bySig — but a count that nobody prints is a diagnostic
140
140
  // computed and dropped, which is the class this issue belongs to.
141
141
  const refusals = { count: 0, runIds: [], stages: [] };
142
- // — counted and NAMED, never dropped: 's shape immediately above, for the same reason. A park
142
+ // — counted and NAMED, never dropped: the shape immediately above, for the same reason. A park
143
143
  // whose class was "unknown" over a reason a validator had already structured is a gap in the
144
144
  // classifier, not an unknowable failure, and the digest is where an operator would ever see it. It is
145
145
  // reported BESIDE the groups rather than inside them: it is a fact about how a failure was classified,
@@ -219,7 +219,7 @@ export function renderFailureRecurrence(agg) {
219
219
  ].filter(Boolean).join("\n")
220
220
  : null;
221
221
  if (!agg.groups.length) {
222
- return `No prelim failures or auto-recovery parks in the last ${agg.days} days.${refusalLine ? `\n${refusalLine}` : ""}${gapLine ? `\n${gapLine}` : ""}`;
222
+ return `No clearotron failures or auto-recovery parks in the last ${agg.days} days.${refusalLine ? `\n${refusalLine}` : ""}${gapLine ? `\n${gapLine}` : ""}`;
223
223
  }
224
224
  const head = (g) =>
225
225
  `${n(g.runIds.length, "run")} ${g.sig} [${g.failClass ?? "?"}] ` +
@@ -247,7 +247,7 @@ export function renderFailureRecurrence(agg) {
247
247
  }
248
248
 
249
249
  // CLI: `node repair-digest.mjs [--days N]` — the ops-digest generator (scripts/ops-digest-daily.sh)
250
- // invokes this and pastes the output into its "Prelim Failure Recurrence" section.
250
+ // invokes this and pastes the output into its "Clearotron Failure Recurrence" section.
251
251
  if (isEntrypoint(import.meta.url)) {
252
252
  const ix = process.argv.indexOf("--days");
253
253
  const days = ix >= 0 ? Math.max(1, Number(process.argv[ix + 1]) || 7) : 7;
@@ -59,7 +59,7 @@ export const REFUSAL_TERMINAL_KIND = "designed-refusal";
59
59
  // rejection carried one, and the errno tokens below matched it; but undici reports a codeless fault as
60
60
  // a bare `TypeError: fetch failed` (no cause.code), and that line — transport noise by construction —
61
61
  // carried no token either regex knew, so it classified DETERMINISTIC at fan-in: loud-terminal, but it
62
- // defeated 's weather lane for exactly the unreachable-provider case the lane exists for.
62
+ // defeated the weather lane for exactly the unreachable-provider case the lane exists for.
63
63
  export const TRANSIENT_RE = /\btimeout\b|\blane_wedge\b|\bembedded_fallback\b|\bnonzero_exit|\bunparseable_json\b|\bstatus_(timeout|overloaded|error|aborted|rate_limited)\b|\brate_limited\b|\boverloaded\b|\beconnreset\b|\betimedout\b|\benotfound\b|\beai_again\b|socket hang\s?up|\bhttp\s?5\d\d\b|\btransport failure\b/i;
64
64
 
65
65
  // STRUCTURAL REFUSAL: the provider ANSWERED, and its answer is a verdict on the REQUEST. The remedy is
@@ -140,7 +140,7 @@ export const DETERMINISTIC_RE = /\bhttp\s?4(0[0349]|1[04])\b|uri too long|own no
140
140
  //
141
141
  // The axis outcome survives as evidence in exactly one case: THE AXIS LANDED NOTHING. Zero qid-stamped
142
142
  // blocks means the executor never wrote, so its transport failure really is this slice's story and
143
- // 's weather lane keeps working for the dead-provider case it exists for. Once the axis HAS landed
143
+ // That weather lane keeps working for the dead-provider case it exists for. Once the axis HAS landed
144
144
  // qid-stamped blocks the executor demonstrably ran and wrote, and this qid's absence is an identity or
145
145
  // coverage hole that no repair outcome from its axis speaks to.
146
146
  //
@@ -309,7 +309,7 @@ const overflowOf = (tail) => { const m = OVERFLOW_RE.exec(tail.trim()); return m
309
309
  // The leading CAUSE CENSUS is the exact count stamped at the throw site, so the total is the sum of its
310
310
  // numbers — no comma-splitting, and therefore immune to the over-count a query containing a comma used to
311
311
  // cause. LEGACY SHAPES still parse and must: this text path exists for the run-level catch, which sees
312
- // prose only, and a resumed or archived run can still carry a pre- token
312
+ // prose only, and a resumed or archived run can still carry a pre-change token
313
313
  // (`connotation_undisposed:<census>;…`, `<q1,q2,…>[ (+N more)]`). A stale token that stopped counting
314
314
  // would read as a MISSING quantity, which is what a converged run looks like.
315
315
  // The validator's exact count still rides as `quantity` at the throw site and always wins.
@@ -329,7 +329,7 @@ function undisposedCount(tail) {
329
329
  // was cut short of its payload — ABSENT, not converged.
330
330
  return named ? named + overflow : null;
331
331
  }
332
- // A pre- archived token: `connotation_recurrent_uncited:<one result, ≤80 chars>[ (+N more)]` — ONE
332
+ // A pre-change archived token: `connotation_recurrent_uncited:<one result, ≤80 chars>[ (+N more)]` — ONE
333
333
  // named result plus the overflow. Never split on commas: that payload is a copied result title, not a
334
334
  // joined list. Nothing emits this shape any more; it is kept so a resumed run's own history still counts.
335
335
  function recurrentCount(tail) {
@@ -621,7 +621,7 @@ export function capParkSchedule({ resetsAt = null, attempts = 0, now = Date.now(
621
621
  /**
622
622
  * capWaitFrom — what a run actually spent WAITING on a provider's cap, read off the park history.
623
623
  *
624
- * tracker issue 103's fourth ask: a run that still dies on a cap has to SAY it was a cap, and say how
624
+ * The ask: a run that still dies on a cap has to SAY it was a cap, and say how
625
625
  * long it held out. The park history is the only record that survives a park/resume cycle, so it is the
626
626
  * only place that answer can come from at the terminal.
627
627
  *
@@ -695,7 +695,7 @@ export function humanWait(min) {
695
695
  // failure's `quantity` and the last recorded quantity for the SAME signature in the park history. It
696
696
  // changes no branch below and no caller reads it as an input: the point of the issue is that the
697
697
  // comparison can SEE 25 → 9 → 9 as different from 29 → 11 → 0, where today both hash identically.
698
- // What the machinery DOES with that difference is 's decision, not this function's.
698
+ // What the machinery DOES with that difference is the decision, not this function's.
699
699
  export function decideRecovery({ failClass, sig, reason = "", history = [], priorAttempts = 0, recoveryMax = 3, nonRecoverable = false, hasRunDir = true, runCeiling = null, weatherAttempts = 0, defectAttempts = null, weatherCeiling = null, quantity = null }) {
700
700
  const hist = Array.isArray(history) ? history : [];
701
701
  const sigAttempts = hist.filter((h) => h?.sig === sig).length;
@@ -217,6 +217,8 @@ export function diffSnapshots(prev, curr) {
217
217
 
218
218
  function main() {
219
219
  const args = new Set(process.argv.slice(2));
220
+ // ON-DISK NAME, NOT A PRODUCT NAME: an install that never set the variable already has this file, so
221
+ // renaming the default points the reader at one that does not exist. Owner ruling, tracker issue 308.
220
222
  const snapshotPath = process.env.CLEAROTRON_REPLAY_SNAPSHOT || join(homedir(), ".prelim-replay-snapshot.json");
221
223
  const roots = process.env.CLEAROTRON_REPLAY_ROOTS
222
224
  ? process.env.CLEAROTRON_REPLAY_ROOTS.split(":").filter(Boolean)
@@ -64,7 +64,7 @@ const BODY_FLOOR_CHARS = 60;
64
64
  * READ FROM THE RUN, not from the payload. The card's `- Source:` bullet is declared
65
65
  * `mechanical:code-rendered` and the record already carries `source.resolved_link`, so the seat is not
66
66
  * asked for a URL it would have to compose from a host table it is not even given — the transcription
67
- * class in its purest form, and 's link-to-nowhere in a document a client reads.
67
+ * class in its purest form, and the link-to-nowhere in a document a client reads.
68
68
  */
69
69
  export function findingForOrdinal(runDir, ordinal) {
70
70
  return findingsDocFor(runDir, ordinal).finding;
@@ -187,7 +187,7 @@ export function renderReportCard(model, finding, { registerLabel = "" } = {}) {
187
187
  // ── THE RISK READ IS A STRUCTURE, NOT A DICTATED HABIT ( D3) ─────────────────────────────────
188
188
  //
189
189
  // render.mjs suppresses the typed `legal_position` / `practical_position` pair on any card whose prose
190
- // already carries a "Risk assessment"-led bullet (, ONE ACCOUNT PER FACT). That gate reads a lead
190
+ // already carries a "Risk assessment"-led bullet (ONE ACCOUNT PER FACT). That gate reads a lead
191
191
  // this stage's dispatch calls OPTIONAL and this acceptance never checked — the card contract's §L
192
192
  // requirement was a HABIT, in exactly the sense the card index was one before the driver bound it.
193
193
  //