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
package/.env.example CHANGED
@@ -446,7 +446,12 @@ CLEAROTRON_CHECKOUT_DIR=
446
446
  # checkout may have moved on since, and a decision made about "whatever HEAD is now" tried to republish
447
447
  # an already-released version. Unset falls back to HEAD, which is correct for the cron and for a hand
448
448
  # run, where nothing has moved. Read by scripts/release-cut-decision.mjs.
449
- # effect: deployment
449
+ #
450
+ # DECLARED `deployment` FIRST, AND THAT WAS THE WRONG HALF OF THE DEFINITION. `deployment` is "where
451
+ # input and output live" — a pool root, an outbox, a database path. A git ref is not a location any
452
+ # input or output lives at; it is which subject the decision is taken about, and it changes only whether
453
+ # the pipeline republishes something it already shipped. Nothing a clearance run produces moves.
454
+ # effect: tuning
450
455
  CLEAROTRON_CUT_REF=
451
456
 
452
457
  # How long publishing waits for a parked version run, in whole milliseconds. Unset uses the built-in
@@ -455,3 +460,79 @@ CLEAROTRON_CUT_REF=
455
460
  # entirely, which is that script not running at all. Read by scripts/release-await-cut.mjs.
456
461
  # effect: tuning
457
462
  CLEAROTRON_RELEASE_WAIT_MS=
463
+
464
+ # ── The local key door's socket ───────────────────────────────
465
+ # Same shape as the two below: read by product code, in neither this file nor the governance table
466
+ # until a private environment-contract ratchet caught it.
467
+
468
+ # WHERE the local key door listens. Unset means there is no key door and a deployment gets exactly the
469
+ # door it had before — this adds a path, it does not widen the existing one.
470
+ #
471
+ # WHY A SOCKET AND NOT A PORT. This interface serves two populations that authenticate differently:
472
+ # people arriving through a tunnel, who prove themselves with a proxy identity, and programs on the same
473
+ # machine holding a scoped access key, which can never produce one. "Only accept a key from loopback"
474
+ # does not separate them — the tunnel daemon runs on the same machine, so a request forwarded from the
475
+ # internet and one from the local portal arrive with the same peer address. A tunnel forwards to a port;
476
+ # it cannot reach a socket, so the transport is the discriminator.
477
+ #
478
+ # The socket is created 0660, owner and group only, and the mode is set after listen because listen
479
+ # creates the file and the umask decides what it starts as. The door refuses to open at all without a
480
+ # grants file, alongside the authentication bypass, or in token mode — that mode makes the NETWORK door
481
+ # take a key too, which is the thing this exists to prevent.
482
+ #
483
+ # Read by mcp-server/key-socket.mjs.
484
+ # effect: deployment
485
+ TRADEMARK_MCP_KEY_SOCKET=
486
+
487
+ # ── Who the completion notice reaches ────────────────────────────────────────────────────────────
488
+ # Both arrived with tracker issue 289 and shipped undeclared: they are read by product code and were in
489
+ # neither this file nor the governance table, which six private environment-contract ratchets caught on
490
+ # the next overlay run. Catalogued here on the same terms as the release names above — they are OUR
491
+ # names, read by code that ships.
492
+
493
+ # WHO the chat notice is addressed to: a JSON object of requester email or handle → number, e.g.
494
+ # {"lisa@tenant.example":"+41...","jordan":"+41..."}. Before this, the notice went to a map keyed by
495
+ # AGENT id, and every user of a deployment shares one agent — so the operator was notified about work
496
+ # other people ordered and the requester was told nothing.
497
+ #
498
+ # UNSET IS AN EMPTY ROSTER, never a demo one. A deployment that configures nothing routes no notice and
499
+ # the delivery record says whose number is missing, by name. The sibling agent map carries invented
500
+ # numbers for offline tests; doing that here would aim a real client's completion notice at a fixture.
501
+ #
502
+ # It holds contact data. Read by driver/stages.mjs (whatsappRouting).
503
+ # effect: deployment
504
+ CLEAROTRON_REQUESTER_WHATSAPP=
505
+
506
+ # The operator's own copy of the same notice, ON unless this is `0`, `false` or `no`. Independent of the
507
+ # roster above: an operator can stop receiving copies of everyone else's runs without touching who the
508
+ # requester notice reaches. Read by driver/stages.mjs (whatsappRouting).
509
+ # effect: deployment
510
+ CLEAROTRON_WHATSAPP_OPERATOR_COPY=
511
+
512
+ # ── The two switches that reveal accounts an install deliberately does not offer ──────────────────
513
+ #
514
+ # NEITHER IS FOR AN OPERATOR. Both are set by the product's own commands, and a row here exists because
515
+ # product code reads them, not because copying this file should set them. Leave both unset. Setting
516
+ # either on a real deployment puts accounts in a picker that a clean install is meant not to have.
517
+ #
518
+ # `1` makes the profile loader return the three test-suite fixture accounts in the roster
519
+ # it resolves. They are marked `testFixture` and are refused otherwise on every install route, because a
520
+ # packaging exclusion protects only the tarball and `git clone && npm install` is a documented way in.
521
+ # Set by scripts/test-run.mjs, once, for every child — most checks that need a fixture do not call the
522
+ # loader directly, so there is no argument to pass. An explicit `includeTestFixtures` argument beats
523
+ # this, distinguished on `undefined`, so a check asking what a customer's install resolves is never
524
+ # handed the suite's answer instead. Read by driver/profiles.mjs.
525
+ # effect: harness
526
+ CLEAROTRON_TEST_FIXTURE_PROFILES=
527
+
528
+ # `1` makes the profile loader return the BUNDLED demo account (demo-brand-owner, marked `demoData`).
529
+ # A fresh install resolves `generic` alone — owner ruling 2026-09-08, so nobody has to clean demo
530
+ # material out of an environment they just made — and the demo brings its own account when it runs.
531
+ # Set by `clearotron demo`, by `clearotron start --demo`, and by scripts/test-run.mjs.
532
+ #
533
+ # The gate is on the LAYER, not the flag: a `demoData` account in a deployment's OWN configured store is
534
+ # that deployment's choice and stays offered whatever this is set to, and the admission wall still
535
+ # refuses a real clearance under it. An explicit `includeDemo` argument beats this, on the same rule.
536
+ # Read by driver/profiles.mjs.
537
+ # effect: harness
538
+ CLEAROTRON_DEMO_PROFILES=
package/.nvmrc CHANGED
@@ -1 +1 @@
1
- 22
1
+ 22.13
package/CONTRIBUTING.md CHANGED
@@ -91,9 +91,9 @@ any writing pass over the documentation, applies to them.
91
91
 
92
92
  ## The three rules that fail CI
93
93
 
94
- **1. Rebuild `portal-ui/dist` and commit it.** The bundle is committed so a deploy never builds. CI
95
- rebuilds it from source and requires byte equality, so a change under `portal-ui/src` that ships
96
- without its rebuilt bundle fails:
94
+ **1. Rebuild `portal-ui/dist` before you push.** The bundle is not committed CI builds it from
95
+ source and requires byte equality, so a change under `portal-ui/src` that does not build cleanly
96
+ fails:
97
97
 
98
98
  ```bash
99
99
  npm run build:ui
package/INSTALL.md CHANGED
@@ -38,13 +38,16 @@ run is [mcp-server/CONNECT.md](mcp-server/CONNECT.md), and why something is the
38
38
  ```
39
39
 
40
40
  Skip this on any machine that already builds software.
41
- - **Node.js >= 22**, and npm. A hard floor: `package.json` declares it, `.nvmrc` pins it, and the free
42
- US register runs on `node:sqlite`, which ships with FTS5 from Node 22. Node 20 installs and then fails
43
- at the first US search. `nvm use` picks the pin up.
44
- - **macOS, Linux, or Windows via WSL2.** Native Windows is not supported: the engine resolves the
45
- reasoning CLI the POSIX way, so a native-Windows run refuses at preflight even with the CLI on `PATH`.
46
- On Windows, `wsl --install`, then install Node 22 **inside** the Linux distribution and work through
47
- this page from there. `npx clearotron demo` is the exception and runs anywhere Node does. A *hosted*
41
+ - **Node.js >= 22.13**, and npm. A hard floor, and the minor matters: the free US register runs on
42
+ `node:sqlite`, which is not a built-in module before 22.13 measured across releases, 2026-09-08. On
43
+ Node 20, or on 22.0 through 22.12, the install succeeds and the first US search fails with
44
+ `ERR_UNKNOWN_BUILTIN_MODULE`, saying nothing about Node. `package.json` declares the floor, the
45
+ install refuses below it before writing anything, and `nvm use` picks the pin up.
46
+ - **macOS, Linux, or native Windows for the demo; WSL2 for a clearance.** `npx clearotron
47
+ demo` runs anywhere Node does, native Windows included. A real clearance does not: the engine resolves
48
+ the reasoning CLI the POSIX way, so a native-Windows clearance refuses at preflight even with the CLI
49
+ on `PATH`. On Windows, `wsl --install`, then install Node 22.13 or newer **inside** the Linux distribution and work
50
+ through this page from there. A *hosted*
48
51
  deployment needs Linux for one further thing, the systemd outbox trigger —
49
52
  [driver/systemd/README.md](driver/systemd/README.md).
50
53
  - **A reasoning CLI on your `PATH`, signed in.** This is the prerequisite people miss. Every stage runs
@@ -126,6 +129,20 @@ passed, and nothing has driven a live register through it.
126
129
  **Upgrade production to stables only.** What each channel promises and how often one is cut:
127
130
  **[docs/RELEASES.md](docs/RELEASES.md)**.
128
131
 
132
+ **Upgrading an install made before 0.2.2: pin the agent id first.** The default agent id changed from
133
+ `clawdi` to `localagent`, and that id is part of a path — your runs live under
134
+ `<workspaceRoot>/workspace-<agent>/studio/prelim-search/`. If you never set an agent id, the upgraded
135
+ install reads a workspace that does not exist yet, and an empty workspace looks like an account with no
136
+ runs rather than like a misconfiguration. Set **both** names in your environment file before starting
137
+ it, because the register-search servers read their own:
138
+
139
+ ```
140
+ CLEAROTRON_DEFAULT_AGENT=clawdi
141
+ CLEAROTRON_GATHER_AGENT=clawdi
142
+ ```
143
+
144
+ If your environment file already sets them, nothing changes. A first-time install needs neither.
145
+
129
146
  The rest of this section is about the two ways a package reaches you, which is a separate question from
130
147
  which version it is.
131
148
 
@@ -230,9 +247,9 @@ the line between them. Either way nothing is contacted and nothing is billed —
230
247
  it starts. Neither runs on a packaged install: the test files are not in the package.
231
248
 
232
249
  The engine itself has no build step. The **portal UI does** — `portal-ui/` is React + Vite — but its
233
- built bundle (`portal-ui/dist/`) is **committed to git** and travels in the package, so a clone and a
234
- tarball install are both already runnable and a deploy never builds. You only need to build after
235
- changing something under `portal-ui/src`:
250
+ built bundle (`portal-ui/dist/`) is **not committed to git**: it travels in the published package and
251
+ CI builds it, so a tarball install is already runnable while a clone needs one build first. You also
252
+ need to build after changing something under `portal-ui/src`:
236
253
 
237
254
  ```
238
255
  npm run tokens # regenerate the design tokens from shared/brand.mjs, if colours changed
@@ -276,45 +293,6 @@ Three more things about it are worth knowing before you write one:
276
293
  **Or the environment directly** — your shell, a container spec, a systemd `EnvironmentFile`. This is
277
294
  what production does, and nothing about it changed.
278
295
 
279
- ### An install that used `PRELIM_*` names
280
-
281
- The variables an installer types are `CLEAROTRON_*`, and they are the only spelling. The old names are
282
- not read, not translated and not looked for — a line using one is a line nothing reads.
283
-
284
- **Rebuilding is the supported path**, and it is the only one that is tested: `npx clearotron install`
285
- writes a correct file from scratch, which is the path a new reader walks. If you would rather edit the
286
- file you have, rename every line in one pass and use the table below — a half-renamed file leaves the
287
- un-renamed half unset.
288
-
289
- | Old name | Write instead |
290
- |---|---|
291
- | `PRELIM_ENGINE` | `CLEAROTRON_AI` |
292
- | `PRELIM_ANTHROPIC_AUTH` · `PRELIM_OPENAI_AUTH` | `CLEAROTRON_AI_BILLING` |
293
- | `PRELIM_CLAUDE_BIN` | `CLEAROTRON_CLAUDE_PATH` |
294
- | `PRELIM_CODEX_BIN` | `CLEAROTRON_CODEX_PATH` |
295
- | `PRELIM_REGISTER_PROVIDER` | `CLEAROTRON_DATABASE` |
296
- | `PRELIM_POOL_ROOT` · `PRELIM_POOL_URL` | `CLEAROTRON_REPORTS_DIR` · `CLEAROTRON_REPORTS_URL` |
297
- | `PRELIM_WORKSPACE_ROOT` | `CLEAROTRON_WORK_DIR` |
298
- | `PRELIM_PROFILES_DIR` | `CLEAROTRON_CUSTOMERS_DIR` |
299
- | `PRELIM_SKILLS_DIR` | `CLEAROTRON_INSTRUCTIONS_DIR` |
300
- | `PRELIM_QUEUE_DIR` · `PRELIM_OUTBOX_DIR` | `CLEAROTRON_QUEUE_DIR` · `CLEAROTRON_OUTBOX_DIR` |
301
- | `PRELIM_GRANTS_FILE` | `CLEAROTRON_ACCESS_FILE` |
302
- | `PRELIM_NO_ENV_FILE` | `CLEAROTRON_NO_ENV_FILE` |
303
- | `CF_ACCESS_AUD` · `CLIENT_CF_ACCESS_AUD` | `CLEAROTRON_OIDC_AUDIENCE` · `CLEAROTRON_CLIENT_OIDC_AUDIENCE` |
304
- | `PRELIM_BRAND_NAME` · `PRELIM_BRAND_TAGLINE` · `PRELIM_BRAND_PRODUCT` | `CLEAROTRON_BRAND_*` |
305
- | `PRELIM_LANE_<code>` | `CLEAROTRON_NATIVE_LANGUAGE_<code>` |
306
- | `PRELIM_DELIVERY` | nothing — **retired, see below** |
307
-
308
-
309
- > **A note on the 2026-09-04 rename.** The left column above is HISTORY and keeps the dead spelling on
310
- > purpose — it is the only thing that makes the table usable, and a text sweep that "corrects" it turns
311
- > a migration guide into two identical columns. On 2026-09-04 the owner extended the rename to the whole
312
- > namespace, including the internal variables an installer never types and the two names the August
313
- > sweep had deliberately exempted as engine internals. There is one prefix now, everywhere, with no
314
- > compatibility layer and no alias reading: greenfield, no public installs, our own boxes rebuilt rather
315
- > than migrated. If you are reading this holding a file older than that, the rule is unchanged and
316
- > simpler than the table: rebuild.
317
-
318
296
  Vendor credentials keep their vendor’s name — `SIGNA_API_KEY`, `PERPLEXITY_API_KEY`,
319
297
  `ANTHROPIC_API_KEY` — because those already say who you bought them from.
320
298
 
@@ -483,9 +461,9 @@ matches, the neutral Generic default applies.
483
461
 
484
462
  - **Bundled with the package** (`driver/profiles/`): `generic.json` (the Generic default) and
485
463
  `demo-brand-owner.json`, the account the demo runs as, so you can run and read the machinery
486
- immediately. `driver/profiles/README.md` documents every field. (A clone carries three more
487
- `aurora`, `zephyr`, `petcary` which are fixtures the test suite reads, not accounts to run
488
- clearances for. They are excluded from the published package for exactly that reason.)
464
+ immediately. `driver/profiles/README.md` documents every field. (A clone of the repository carries
465
+ three more, marked `testFixture` in their own files: the test suite reads them, no install offers
466
+ them, and they are excluded from the published package as well.)
489
467
  - **Your real customers live outside the repo.** Point `CLEAROTRON_CUSTOMERS_DIR` at your own private
490
468
  config store and the engine loads *those* accounts instead. **Same engine, different config path** —
491
469
  the code carries no customer identities.
@@ -504,8 +482,8 @@ working examples in `driver/profiles/`:
504
482
  the engine attaches to the profile it loads. One ships beside a bundled demo customer.
505
483
  - **Project overlays** — `projects/<customer-key>/<slug>.json`. A project is one engagement under a
506
484
  customer: a launch screening, a flagship clearance, a regional push. Each may carry its own
507
- `<slug>.context.md` beside it. `projects/aurora/console-ecosystem.json` and
508
- `projects/demo-brand-owner/japan-and-korea-app-launch.json` are the shipped examples.
485
+ `<slug>.context.md` beside it. `projects/demo-brand-owner/japan-and-korea-app-launch.json` is the
486
+ shipped example.
509
487
 
510
488
  ### What a project may and may not change
511
489
 
@@ -560,7 +538,7 @@ Copy or author the customers, context packs and project overlays you want; assum
560
538
  "forwarder": "alex",
561
539
  "forwarderEmail": "alex@example.com",
562
540
  "forwarderDomain": "example.com",
563
- "marks": [{ "ref": "TM-0001", "name": "AURORA SKY", "classes": [9, 42] }],
541
+ "marks": [{ "ref": "TM-0001", "name": "IRONWHISK", "classes": [9, 42] }],
564
542
  "goods": "cloud software for weather analytics",
565
543
  "jurisdictions": ["US"],
566
544
  "product": "knockout-search"
@@ -668,7 +646,7 @@ A run stopped by a **provider rate limit** or parked for **automatic recovery**
668
646
  that is the systemd units in `driver/systemd/`. Everywhere else, run the watcher yourself:
669
647
 
670
648
  ```
671
- npx clearotron drain --watch
649
+ npx clearotron run-queue --watch
672
650
  ```
673
651
 
674
652
  That polls every 90 seconds for queued jobs and for parked runs whose window has elapsed, and it resumes
@@ -777,11 +755,11 @@ Before the worker ran, that promise was untrue in your favour: confirming queued
777
755
  spent until you gave a second command in another terminal.
778
756
 
779
757
  If you want the old separation — order here, drain deliberately over there — start with `--no-worker` and
780
- run the drain yourself:
758
+ run the queue yourself:
781
759
 
782
760
  ```
783
761
  npx clearotron start --no-worker
784
- npx clearotron drain --watch
762
+ npx clearotron run-queue --watch
785
763
  ```
786
764
 
787
765
  A queued job whose worker is not running says so on the portal rather than sitting at "Waiting to start".
@@ -949,6 +927,30 @@ you.
949
927
  `TRADEMARK_MCP_AUTH_MODE=cf-access` so the origin re-validates the proxy's JWT rather than trusting
950
928
  it — the mechanism is generic, whichever proxy is in front.
951
929
 
930
+ **One process, two doors.** A deployment that serves both people arriving through a tunnel and programs
931
+ on the same machine no longer needs to run this service twice. Set `TRADEMARK_MCP_KEY_SOCKET` to a
932
+ socket path and the service listens for a scoped access key there, while its network port continues to
933
+ take the proxy identity and never honours a key. A tunnel forwards to a port and cannot reach a socket,
934
+ so the key path is not addressable from outside the machine; who may present a key is stated by the
935
+ socket's permissions, which the startup lines print beside its path.
936
+
937
+ This replaces a **second unit run for its authentication shape** — a loopback port in key mode beside
938
+ the tunnel-fronted one — and nothing else. It is not the test-instance-beside-a-live-one arrangement
939
+ described in §8: that separation is about data and ports, it is unaffected, and its seven variables are
940
+ still all required. Removing the auth-shape duplicate is a deployment decision and nothing here does it
941
+ for you.
942
+
943
+ **Do not set `TRADEMARK_MCP_AUTH_MODE=token` alongside the socket.** That mode makes the network port
944
+ take a key as well, which is what the socket exists to avoid; the service refuses to start and says so.
945
+
946
+ **Put the socket somewhere only the service's own group can write.** The socket's own permissions decide
947
+ who may *present* a key. Whether the socket can be *replaced* is decided by the directory holding it — a
948
+ process that can remove the file can bind its own listener on the same path, and callers would then
949
+ present their keys to it. That is a different permission from the socket's and it is the one worth
950
+ checking. The service refuses to start if that directory is writable by everyone without the sticky bit,
951
+ and prints the directory's mode beside the socket's on its startup line so the number is readable without
952
+ going to look.
953
+
952
954
  > ⚠ **What does not work is an INTERACTIVE-only sign-in policy on a route an assistant must reach
953
955
  > without a browser.** Such a policy demands a login the vendor's servers cannot complete: they present
954
956
  > a credential and get a login page back, and the connection fails with nothing useful said on either
@@ -1113,6 +1115,10 @@ that fails at boot, which reads as a broken install rather than as a port alread
1113
1115
 
1114
1116
  Set all seven. Nothing else separates them.
1115
1117
 
1118
+ A deployment that once ran the service twice for a different reason — one door needing a key and the
1119
+ other a proxy identity — no longer has to; see *One process, two doors* in §9. That is an
1120
+ authentication arrangement and has nothing to do with this one. The seven above are still all required.
1121
+
1116
1122
  ## 9. What the integrator supplies
1117
1123
 
1118
1124
  The engine is complete as a clearance-and-report producer. A deployment adds:
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  <p align="center">
9
9
  <a href="LICENSE"><img src="https://img.shields.io/badge/licence-AGPL--3.0--only-860F09?style=flat-square" alt="Licence: AGPL-3.0-only"></a>
10
- <a href=".nvmrc"><img src="https://img.shields.io/badge/node-%E2%89%A5%2022-250902?style=flat-square" alt="Node 22+"></a>
10
+ <a href=".nvmrc"><img src="https://img.shields.io/badge/node-%E2%89%A5%2022.13-250902?style=flat-square" alt="Node 22.13+"></a>
11
11
  </p>
12
12
 
13
13
  Give it a mark, its classes and a territory. Clearotron searches the trademark registers and the open
@@ -35,8 +35,9 @@ calls to us.
35
35
  npm install -g clearotron
36
36
  ```
37
37
 
38
- Node 22 or newer, on macOS, Linux, or Windows via WSL2. That puts `clearotron` on your `PATH`; every
39
- command below works in that short form.
38
+ Node 22.13 or newer, on macOS or Linux. That puts `clearotron` on your `PATH`; every command below
39
+ works in that short form. **On Windows the demo above runs natively; a real clearance needs WSL2** —
40
+ the engine resolves the reasoning CLI the POSIX way and refuses at preflight otherwise.
40
41
 
41
42
  That command gives you the **stable** release — the one that has run a real clearance end to end before it
42
43
  was published. If you want the newest code instead, a beta is published whenever there is something worth
@@ -49,17 +50,6 @@ npm install -g clearotron@beta
49
50
  What each channel promises, and when a stable is cut: [docs/RELEASES.md](docs/RELEASES.md). If you are not
50
51
  sure, the first command is the one you want.
51
52
 
52
- **Or run it from source**, which is what you want if you intend to change it:
53
-
54
- ```bash
55
- git clone https://github.com/CordilleraSarl/Clearotron
56
- cd clearotron
57
- npm install # every workspace
58
- npm run build -w portal-ui # the browser bundle is not committed — build it once
59
- ```
60
-
61
- From a clone the commands are `npx clearotron …`, run from that directory.
62
-
63
53
  ## Quick start
64
54
 
65
55
  Check the install before it does anything. `doctor` only reads — it writes nothing, calls nobody, and
@@ -135,13 +125,18 @@ credential.
135
125
 
136
126
  ## Development
137
127
 
128
+ A clone is the working tree, not a way to install the product — install it from the package above.
129
+
138
130
  ```bash
139
131
  git clone https://github.com/CordilleraSarl/Clearotron
140
132
  cd Clearotron
141
- npm install
142
- npm test # the offline suiteno credentials, no network
133
+ npm install # every workspace
134
+ npm run build -w portal-ui # the browser bundle is not committed build it once
135
+ npm test # the offline suite — no credentials, no network
143
136
  ```
144
137
 
138
+ From a clone the commands are `npx clearotron …`, run from that directory.
139
+
145
140
  `npm test` is the whole verification story for someone with no credentials, and it is the first thing
146
141
  [CONTRIBUTING.md](CONTRIBUTING.md) asks of a contributor.
147
142
 
@@ -6193,7 +6193,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
6193
6193
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
6194
6194
  ```
6195
6195
 
6196
- ## undici@8.10.2
6196
+ ## undici@7.29.1
6197
6197
 
6198
6198
  - **Licence declared:** `MIT`
6199
6199
  - **Repository:** https://github.com/nodejs/undici
@@ -288,7 +288,7 @@ export async function add(argv, {
288
288
  } = {}) {
289
289
  const args = parseArgs(argv);
290
290
  if (!args.key) throw new Refusal(`this command needs a brand owner key.${USAGE}`);
291
- // A REFUSAL, NOT A STACK (, acceptance: "refuses malformed input BY NAME — key
291
+ // A REFUSAL, NOT A STACK (acceptance: "refuses malformed input BY NAME — key
292
292
  // pattern"). `assertProfileKey` throws a plain Error, and main() deliberately lets a non-Refusal keep
293
293
  // its stack because an unexpected throw here is a defect worth debugging. A key an operator typed is
294
294
  // not that: it is the first thing this command validates and the most likely thing to get wrong, and
@@ -22,6 +22,7 @@ import { dirname, join } from "node:path";
22
22
  import { fileURLToPath } from "node:url";
23
23
  import { constants as SIG } from "node:os";
24
24
  import { isEntrypoint } from "../shared/is-entrypoint.mjs";
25
+ import { nodeFloorVerdict, nodeFloorRefusal } from "../shared/node-floor.mjs"; // — one floor, read from package.json
25
26
  import { invocationPrefix } from "../shared/invocation.mjs"; // — print a command the reader can type
26
27
 
27
28
  export const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
@@ -52,7 +53,7 @@ export const VERBS = {
52
53
  connect: ["bin/connect.mjs"],
53
54
  disconnect: ["bin/disconnect.mjs"],
54
55
  run: ["driver/pipeline.mjs"],
55
- drain: ["driver/runner.mjs"],
56
+ "run-queue": ["driver/runner.mjs"],
56
57
  cancel: ["bin/cancel.mjs"],
57
58
  grant: ["bin/grant.mjs"],
58
59
  key: ["bin/key.mjs"],
@@ -73,7 +74,7 @@ export const SUMMARY = {
73
74
  connect: "connect the assistant you already use — pick it by name and get the one thing it needs",
74
75
  disconnect: "close what connect opened and revoke the key it issued — the enrolment stays",
75
76
  run: "run one clearance from a job file",
76
- drain: "do the queued work. THIS SPENDS: hours of model time and real register calls",
77
+ "run-queue": "do the queued work. THIS SPENDS: hours of model time and real register calls",
77
78
  cancel: "stop one run by name. The rest of the product keeps running, and nothing resumes it",
78
79
  grant: "enrol a client, or list who may see what",
79
80
  key: "issue the key a person's own assistant presents — after you have enrolled them with `grant`",
@@ -133,9 +134,30 @@ const [verb, ...rest] = process.argv.slice(2);
133
134
  process.exit(2);
134
135
  }
135
136
 
137
+ // — THE RUNTIME FLOOR, REFUSED HERE, AND THE ONE THING THIS DISPATCHER LOOKS AT.
138
+ //
139
+ // This file's header says it implements nothing and does not inspect what it forwards, and that rule
140
+ // is right: a second, weaker copy of a check that already exists is worse than no copy. This is not
141
+ // that. It is not about the verb — it is about whether ANY verb can run, which is prior to dispatch
142
+ // and cannot live inside a child that will not start.
143
+ //
144
+ // It exists because the checks we had were in `doctor` and `setup`, which are things you run AFTER
145
+ // `npm install` succeeds. A reader whose runtime is too old meets a failure inside a command instead,
146
+ // and on one report it was an engine door exiting 1 with its message lost. `npx clearotron demo` and
147
+ // `clearotron start` never reached the sentence written for them.
148
+ //
149
+ // `--version` and `--help` above are DELIBERATELY on the near side of this. They are the two things a
150
+ // person runs while writing a bug report, and refusing them would take away the answer to the first
151
+ // question we ask.
152
+ const floor = nodeFloorVerdict();
153
+ if (!floor.ok) {
154
+ console.error(`clearotron: ${nodeFloorRefusal(floor)}`);
155
+ process.exit(1);
156
+ }
157
+
136
158
  // — EVERY VERB ANSWERS --help, INCLUDING THE TWO WHOSE CHILDREN REFUSE IT.
137
159
  //
138
- // `run` and `drain` dispatch to driver/pipeline.mjs and driver/runner.mjs, orchestrator entry points
160
+ // `run` and `run-queue` dispatch to driver/pipeline.mjs and driver/runner.mjs, orchestrator entry points
139
161
  // with strict argument parsers and no help path: `--help` came back as `error: unknown flag --help`,
140
162
  // exit non-zero. Their parsers are RIGHT to refuse what they do not understand -- that is what makes
141
163
  // them fail safe, and showed what the permissive alternative costs (`update --help` performed
@@ -149,7 +171,7 @@ const [verb, ...rest] = process.argv.slice(2);
149
171
  console.log(`\n ${invocationPrefix()}clearotron ${verb} — ${SUMMARY[verb]}\n`);
150
172
  console.log(` Options after the verb are passed through to ${VERBS[verb][0]}, which has no --help of`);
151
173
  console.log(` its own. Run it with no arguments to see what it requires.\n`);
152
- if (verb === "run" || verb === "drain") {
174
+ if (verb === "run" || verb === "run-queue") {
153
175
  console.log(` THIS SPENDS: hours of model time and real register calls. See INSTALL.md §5 and §6.\n`);
154
176
  }
155
177
  process.exit(0);
package/bin/connect.mjs CHANGED
@@ -58,7 +58,7 @@ import { checkoutMove, movePosture, describeMove, describeConflict } from "../sh
58
58
  import { unitEnvironment, unitValue, couldNotDetermine } from "../driver/unit-environment.mjs";
59
59
  import { isEntrypoint } from "../shared/is-entrypoint.mjs";
60
60
  import { looksLikeBusFailure, systemdSaid, userBusEnv, CAPTURE_STDERR,
61
- systemdFailure as sharedSystemdFailure } from "../shared/systemd-failure.mjs"; // tracker issue 203 — `start` needed the same three answers
61
+ systemdFailure as sharedSystemdFailure } from "../shared/systemd-failure.mjs"; // `start` needed the same three answers
62
62
 
63
63
  const REPO = join(dirname(fileURLToPath(import.meta.url)), "..");
64
64
  // `userBusEnv` and `busRemedy` MOVED TO shared/systemd-failure.mjs, unchanged, because
@@ -372,7 +372,7 @@ export function unitIsHealthy(name, { show = showUnit, pause = settle } = {}) {
372
372
  if (error) {
373
373
  // ── A BUS THAT COULD NOT BE REACHED IS NOT A DOOR THAT IS DOWN (tracker issue 130) ────────────
374
374
  //
375
- // Returning false here is what made the operator worse off than before tracker issue 121's fix.
375
+ // Returning false here is what made the operator worse off than before that fix.
376
376
  // The caller renders false as "the door is not open, so no key was issued" — a confident, wrong,
377
377
  // client-facing sentence about a door that is `active`, with the real cause discarded. And it is
378
378
  // reachable on the ordinary path: a box whose door is already installed and running never calls
package/bin/example.mjs CHANGED
@@ -41,7 +41,7 @@ import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, realpathSync,
41
41
  import { homedir, tmpdir } from "node:os";
42
42
  import { invoke } from "../shared/invocation.mjs"; // — the printed command is resolved once, for the reader who is actually standing there
43
43
  import { basename, dirname, join, resolve, sep } from "node:path";
44
- import { fileURLToPath } from "node:url";
44
+ import { fileURLToPath, pathToFileURL } from "node:url";
45
45
  import { spawn } from "node:child_process";
46
46
  import { BRAND } from "../shared/brand.mjs"; // — the installer's own name, from the tenant seam
47
47
  import { envFrom } from "../shared/env-aliases.mjs"; // — resolves EITHER spelling; names the retired one because that is the live-writable half
@@ -68,7 +68,11 @@ if (has("--help") || has("-h")) {
68
68
  const shipped = demoChildren(join(REPO, "demo"));
69
69
  if (shipped.length) {
70
70
  console.log(`\n --product takes one of:`);
71
- for (const id of shipped) console.log(` ${id}${id === shipped[0] ? " (the default, when --product is not given)" : ""}`);
71
+ // NO "DEFAULT" MARKER (tracker issue 277). This printed "(the default, when --product is not given)"
72
+ // beside the first id, and kept printing it after the default became ALL of them — so `--help` taught
73
+ // a reader the exact belief the change removed, in the command it was reported against.
74
+ for (const id of shipped) console.log(` ${id}`);
75
+ console.log(`\n With no --product, every one of them is published.`);
72
76
  console.log("");
73
77
  } else {
74
78
  // An absence is a finding: a tree with no demo says so rather than printing an empty list.
@@ -91,13 +95,17 @@ const die = (...lines) => { console.error(`\n${lines.join("\n")}\n`); process.ex
91
95
  // already walked a container — every child holding a meta.json and a run/ — and `bin/start.mjs` seeds the
92
96
  // portal's archive from it. A bare run directory here would have left that call finding nothing and the
93
97
  // installed portal serving an empty archive, silently. Same directory, both readers, no second mechanism.
98
+ // THE PLAYER IS THE DEMO, so it asks for the demo account the same way `start --demo` does. Without
99
+ // this the roster it resolves is a fresh install's — `generic` alone — and the account whose reports
100
+ // it is about would not be there to name.
101
+ process.env.CLEAROTRON_DEMO_PROFILES ??= "1";
94
102
  const DEMO_ROOT = join(REPO, "demo");
95
103
  // The rule lives in `driver/demo-container.mjs` — ONE definition, because it used to be three and they
96
104
  // disagreed. That file records what a knockout demo carries instead of a report.md, and why this line
97
105
  // once let `demo/knockout-search` ship and stay unopenable..
98
106
 
99
- // --run-dir takes a directory outright. --product names a child. Neither given: the first child, and the
100
- // name is PRINTED below rather than assumed, because "the demo" is about to mean one of several.
107
+ // --run-dir takes a directory outright. --product names a child. Neither given: EVERY child, and the
108
+ // names are PRINTED below rather than assumed, because "the demo" means several.
101
109
  const wanted = flag("--product");
102
110
  const children = demoChildren(DEMO_ROOT);
103
111
 
@@ -180,7 +188,7 @@ const demoBase = resolve(flag("--base") ?? join(homedir(), "trademark-demo"));
180
188
  if (flag("--pool") && !has("--once")) die(
181
189
  "demo: --pool is for --once, which publishes and exits.",
182
190
  "",
183
- "The demo serves the portal's own archive, which lives inside its base directory, so a pool chosen",
191
+ "The demo serves the portal's own archive, which lives inside its base directory, so a reports folder chosen",
184
192
  "somewhere else would be published to and never served. Move the whole demo instead:",
185
193
  ` ${invoke("demo")} --base <dir>`,
186
194
  );
@@ -217,10 +225,10 @@ console.log(`\n ${BRAND.name} ${BRAND.product.toLowerCase()} — demo\n`);
217
225
  console.log(samples.length === 1
218
226
  ? ` sample: ${samples[0].dir}`
219
227
  : ` samples: ${samples.length} — ${samples.map((x) => x.name).join(", ")}`);
220
- console.log(` pool: ${poolRoot}\n`);
228
+ console.log(` reports folder: ${poolRoot}\n`);
221
229
 
222
230
  mkdirSync(poolRoot, { recursive: true });
223
- const { republishRun } = await import(join(REPO, "driver", "publish", "report-registry.mjs"));
231
+ const { republishRun } = await import(pathToFileURL(join(REPO, "driver", "publish", "report-registry.mjs")).href);
224
232
 
225
233
  // ── ONE FAILURE MUST NOT COST THE OTHERS, AND MUST NOT BE A QUIET COUNT (tracker issue 277) ─────────
226
234
  //
@@ -274,7 +282,7 @@ console.log(" re-rendered from its artifacts. It is an example, not advice.\n")
274
282
  // times.
275
283
  const spineOf = (pub) =>
276
284
  Number.isFinite(pub.counts?.findings)
277
- ? `${pub.counts.findings} finding(s) recorded in the run's audit spine; the report shows
285
+ ? `${pub.counts.findings} finding(s) recorded in the run's audit trail; the report shows
278
286
  the ones it retains`
279
287
  : Number.isFinite(pub.receipts?.findings)
280
288
  ? `${pub.receipts.findings} finding(s) with citations traced to this run's own held
@@ -367,9 +375,21 @@ child.on("error", (e) => die(`demo: could not start the portal: ${String(e?.mess
367
375
  // Its exit code is the demo's. A supervisor that swallowed a child's refusal would report a demo that
368
376
  // is up when nothing is listening.
369
377
  child.on("exit", (code, signal) => process.exit(signal ? 1 : (code ?? 0)));
370
- // Ctrl-C reaches the child through the shared terminal; this process waits for it to finish tearing
371
- // down rather than exiting first and orphaning it.
372
- process.on("SIGINT", () => {});
378
+ // ── SIGINT IS FORWARDED, FOR THE SAME REASON SIGTERM IS ─────────────────────────────────────────
379
+ //
380
+ // This was a no-op, on the reasoning that a terminal delivers SIGINT to the whole foreground process
381
+ // group so `start.mjs` gets its own copy. That is true of a terminal and it is the only case it is true
382
+ // of. MEASURED on this tree: with the demo running on three ports, a SIGINT delivered to THIS PID ALONE
383
+ // left all three still bound and both processes alive, because the no-op tore nothing down and the
384
+ // services sit in their own process group where a group signal aimed at the terminal never reaches
385
+ // them. A SIGINT sent to the group tears everything down correctly; only the pid-alone case leaked.
386
+ //
387
+ // That is the same defect, and the same shape, as the SIGTERM case recorded below — which was found by
388
+ // somebody killing the one pid a reader can see. This half was left as a no-op then.
389
+ //
390
+ // Forwarding is safe when the terminal ALSO delivered its own copy: `start.mjs`'s shutdown is
391
+ // re-entrant (`if (stopping) return`), so the second signal is ignored rather than racing the first.
392
+ process.on("SIGINT", () => { try { child.kill("SIGINT"); } catch { /* already gone */ } });
373
393
  // ── AND SIGTERM, WHICH DOES NOT REACH THE CHILD ─────────────────────────────────────────────────
374
394
  //
375
395
  // SIGINT is delivered to the whole foreground process group by the terminal, so the no-op above is
package/bin/grant.mjs CHANGED
@@ -46,7 +46,7 @@
46
46
  //
47
47
  // It is also why FILE below reads the CLEAROTRON_* spelling. An operator sets CLEAROTRON_ACCESS_FILE;
48
48
  // `applyEnvAliases` translates it. Reading the operator's spelling directly would work — and would put
49
- // the first direct CLEAROTRON_* product read in the tree, which 's arm catches, because the
49
+ // the first direct CLEAROTRON_* product read in the tree, which the arm catches, because the
50
50
  // declaration ratchet is keyed on the CLEAROTRON_* prefix and goes blind the moment that premise stops
51
51
  // holding. One reader, one spelling.
52
52
  import "../shared/env-local.mjs";
@@ -59,7 +59,7 @@ import { makePrincipal } from "../driver/portal-access.mjs";
59
59
  import { envFrom } from "../shared/env-aliases.mjs"; // — resolves EITHER spelling; names the retired one because that is the live-writable half
60
60
  import { defaultGrantsPath } from "./start.mjs"; // — one owner for the roster's path
61
61
 
62
- // — bb8's F13. This read the variable and nothing else, so it refused with
62
+ // — found in review. This read the variable and nothing else, so it refused with
63
63
  // "Set CLEAROTRON_ACCESS_FILE" — a name NOTHING writes. `start` injects it into the environment of the
64
64
  // services it supervises and never persists it, so the door found the roster and this command, run in
65
65
  // the operator's own shell, could not. Enrolling a client had no working path at all.
@@ -184,7 +184,7 @@ if (cmd === "add") {
184
184
  // The route exists — it is the file — and `grant --help` documents it. What was missing is that the
185
185
  // refusal which STOPS you did not carry it, so the shape of the object is printed here, against this
186
186
  // install's own path, rather than left to a reader to find in another command's help.
187
- // — bb8's F13. THE FIRST TENANT IS CREATED HERE. Before this, enrolling anyone
187
+ // — found in review. THE FIRST TENANT IS CREATED HERE. Before this, enrolling anyone
188
188
  // on a fresh install ran out of road: the file is {"tenants":{}}, `brandowner` does not write tenants,
189
189
  // and this command refused because none existed. 2176's F38 fix printed the JSON shape into the
190
190
  // refusal, which is better than a bare stop and still asks a person to hand-edit the file the product
package/bin/key.mjs CHANGED
@@ -84,7 +84,7 @@ try {
84
84
 
85
85
  for (const line of minted.notes) console.error(line);
86
86
 
87
- // — bb8's F13. A KEY FOR AN IDENTITY ON NO LIST IS A KEY THAT 403s. This command
87
+ // — found in review. A KEY FOR AN IDENTITY ON NO LIST IS A KEY THAT 403s. This command
88
88
  // minted rc 0 for any address, printed the token once — it cannot be shown again — and the operator
89
89
  // handed it to a client whose first request was refused, with nothing on either side saying why.
90
90
  //