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
@@ -12,7 +12,7 @@
12
12
  // property of the WRITING SITE, not of the name — a field called `outcome` carrying an outcome is fine,
13
13
  // and a field called `settled` carrying a dispatch return is the defect. Only reading the writer tells
14
14
  // them apart, so the population is SPLIT and classified rather than filtered down to the offenders.
15
- // Both halves are kept, for 's reason: a filtered population produces no number, and nobody can see
15
+ // Both halves are kept, for the reason: a filtered population produces no number, and nobody can see
16
16
  // what was hidden.
17
17
  //
18
18
  // ── THE TWO HALVES ──────────────────────────────────────────────────────────────────────────────────
@@ -48,7 +48,7 @@
48
48
  // `outcome` for existing readers beside `dispatch` and `verdict`).
49
49
  // "out-of-scope" — never reaches `_driver/*.json` or `run.jsonl`; `atWriteSite` is 0.
50
50
 
51
- /** The result nouns this sweep is about — 's list, verbatim. */
51
+ /** The result nouns this sweep is about — the list, verbatim. */
52
52
  export const RESULT_NOUNS = Object.freeze(["outcome", "executed", "permanent", "settled", "closed", "recovered", "verified"]);
53
53
 
54
54
  export const RESULT_NOUN_FIELDS = Object.freeze([
@@ -66,7 +66,7 @@ export const RESULT_NOUN_FIELDS = Object.freeze([
66
66
  { file: "driver/pipeline.mjs", noun: "executed", sites: 4, atWriteSite: 3, verdict: "result",
67
67
  why: "lengths of the executed set as the join computed it" },
68
68
  { file: "driver/pipeline.mjs", noun: "outcome", sites: 11, atWriteSite: 6, verdict: "result",
69
- why: "the one member that reported an invocation — taint-rerun's `r.ok ? \"ok\" : …`, which travels on a StageFailure packet — now carries a `cleared` sibling read from the taint, #1529's remedy 10/5 -> 11/6 at tracker issue 1886: the profile-store receipt's `outcome: pr.outcome`. Classified by READING ITS WRITING SITE, which is profiles.mjs and not this file: the value is one of three literals chosen by a situation the resolver decided (`overlay` and `bundled-fallback` are `pass`, `env-arrived-late` is `blocked`), never a call's return read as a verdict. `bundled-fallback` being `pass` is the point of the whole receipt — a legitimate install that nobody was told about is what this row says out loud." },
69
+ why: "the one member that reported an invocation — taint-rerun's `r.ok ? \"ok\" : …`, which travels on a StageFailure packet — now carries a `cleared` sibling read from the taint, the remedy 10/5 -> 11/6 at the profile-store receipt's `outcome: pr.outcome`. Classified by READING ITS WRITING SITE, which is profiles.mjs and not this file: the value is one of three literals chosen by a situation the resolver decided (`overlay` and `bundled-fallback` are `pass`, `env-arrived-late` is `blocked`), never a call's return read as a verdict. `bundled-fallback` being `pass` is the point of the whole receipt — a legitimate install that nobody was told about is what this row says out loud." },
70
70
  { file: "driver/pipeline.mjs", noun: "permanent", sites: 1, atWriteSite: 1, verdict: "result",
71
71
  why: "`permanent.length` — a count of the classified set" },
72
72
  { file: "driver/pipeline.mjs", noun: "recovered", sites: 3, atWriteSite: 3, verdict: "result",
@@ -95,6 +95,13 @@ export const RESULT_NOUN_FIELDS = Object.freeze([
95
95
  { file: "driver/skills-store-provenance.mjs", noun: "outcome", sites: 6, atWriteSite: 0, verdict: "out-of-scope" },
96
96
  { file: "driver/status-snapshot.mjs", noun: "outcome", sites: 1, atWriteSite: 0, verdict: "out-of-scope" },
97
97
  { file: "mcp-server/lib/events.mjs", noun: "recovered", sites: 1, atWriteSite: 0, verdict: "out-of-scope" },
98
+ // Read at the writing site, as this table requires. All three sites are in `knockoutSearches`, a
99
+ // READ-ONLY projection that composes the rows `list_searches` answers with: it opens no artifact and
100
+ // writes nothing, so nothing here can reach `_driver/*.json` or `run.jsonl`. Each value is a literal
101
+ // chosen from the run's own stored record — "found" or "no-hit" from whether the mark has findings,
102
+ // and "recorded" for a register term whose stored row says it did NOT answer. None is a call's return
103
+ // read back as a verdict, which is the defect this table exists to find.
104
+ { file: "mcp-server/lib/knockout.mjs", noun: "outcome", sites: 3, atWriteSite: 0, verdict: "out-of-scope" },
98
105
  { file: "mcp-server/lib/ops.mjs", noun: "settled", sites: 1, atWriteSite: 0, verdict: "out-of-scope" },
99
106
  { file: "mcp-server/server.mjs", noun: "outcome", sites: 1, atWriteSite: 0, verdict: "out-of-scope" },
100
107
  { file: "scripts/backfill-started-at.mjs", noun: "outcome", sites: 5, atWriteSite: 0, verdict: "out-of-scope" },
@@ -87,7 +87,7 @@
87
87
  // `modelUsed`. So the rows can now answer "what ran", per record, wherever the wire reported.
88
88
  //
89
89
  // What has NOT changed is this module: `byBilling` / `byStage` / `dispatches` still key on `modelUsed`,
90
- // i.e. on what was asked for. Switching them to prefer `modelActual` is 's call, not a side effect
90
+ // i.e. on what was asked for. Switching them to prefer `modelActual` is the call, not a side effect
91
91
  //, and it cannot be a blanket flip — codex reports no model, and a killed turn may have none,
92
92
  // so a per-record basis is the only honest shape. `tokens.mjs` keys its rollup on the requested alias
93
93
  // for the same reason and is likewise untouched.
@@ -241,7 +241,7 @@ export const vendorOf = (engine) => ENGINE_VENDORS[String(engine ?? "")] ?? null
241
241
  //
242
242
  // CODE-SIDE IS NOT A VENDOR. `code:execute-plan` rides nearly every run (the driver executes the frozen
243
243
  // plan itself), stamps `authMode: "not-provider-billed"`, and costs no provider tokens. Counting it would
244
- // make every run in the product read as multi-vendor — the same defect as 's `web` channel, where a
244
+ // make every run in the product read as multi-vendor — the same defect as the `web` channel, where a
245
245
  // member the driver always adds made every run look unplanned. Provider-billed rows only, and the count
246
246
  // of what was set aside is reported so the exclusion is visible rather than assumed.
247
247
  //
@@ -42,7 +42,7 @@ import { DISPATCH_SUFFIX } from "./dispatch-record.mjs"; // — the dispa
42
42
  *
43
43
  * ONE PREDICATE, so the snapshot and any future arming decision cannot disagree about the set. Named
44
44
  * files are the driver-derived joins and receipts judgment reads; the dispatch records are what was
45
- * actually asked, including 's `.prev-<sha>` supersede chain.
45
+ * actually asked, including the `.prev-<sha>` supersede chain.
46
46
  *
47
47
  * ──: EVERY `.jsonl` IS OUT, BY PATTERN, AND A NEW SINK IS OUT THE MOMENT IT IS CREATED ────────
48
48
  *
package/driver/runner.mjs CHANGED
@@ -23,13 +23,13 @@ import "./engine/mcp/http-dispatcher.mjs"; // side effect: raise undici header
23
23
  import { readdirSync, renameSync, existsSync, mkdirSync, readFileSync, writeFileSync, appendFileSync, rmSync, statSync } from "node:fs";
24
24
  import { join, dirname, basename } from "node:path";
25
25
  import { driverDir, ensureDriverDir } from "../shared/driver-dir.mjs"; // — one definition of where `_driver/` is
26
- // The queue's filename vocabulary, in ONE place — 's rule, extended by to the prose-sidecar and
26
+ // The queue's filename vocabulary, in ONE place — the rule, extended by to the prose-sidecar and
27
27
  // claim-sidecar names, because a harness check retyped four of them from memory and false-alarmed on the
28
28
  // other nine. Behaviour here is unchanged: the same object and the same three suffixes, sourced.
29
29
  import { isLiveQueueMarker, PROSE_PARTS, CLAIM_SIDECAR_SUFFIXES, TERMINAL_QUEUE_SUFFIXES } from "./queue-markers.mjs";
30
30
  import { matterLedgerPath } from "./usage-ledger.mjs"; // ONE ledger-path calculation, shared with the portal pre-check
31
- import { orderTimeRefusal } from "./run-requirements.mjs"; // tracker issue 216 — one authority for what a run needs, and when it is asked for
32
- import { unitEnvPath } from "../shared/env-local.mjs"; // tracker issue 216 — the file the units read, named by its one author
31
+ import { orderTimeRefusal } from "./run-requirements.mjs"; // one authority for what a run needs, and when it is asked for
32
+ import { unitEnvPath } from "../shared/env-local.mjs"; // the file the units read, named by its one author
33
33
  import { fileURLToPath } from "node:url";
34
34
  import { config, preflightDeploymentUrls } from "./driver.config.mjs";
35
35
  import { deriveSlug, todayISO, mintFreshCodename } from "./phase0.mjs";
@@ -136,7 +136,7 @@ function matterSignature(job, { product = null } = {}) {
136
136
  const base = `${forwarder}|${mark}|${classes}|${customer}|${ref}`;
137
137
  // Product dimension. ONE product adds nothing to the string, and it has to be one or every legacy
138
138
  // ledger row would stop colliding with its own re-send: the pre-spine signature had no suffix at all,
139
- // and the level that ran then was `prelim`. That level's SUCCESSOR is the Global preliminary search —
139
+ // and the level that ran then was `clearotron`. That level's SUCCESSOR is the Global preliminary search —
140
140
  // the clearance a request with nothing named resolves to — so it is the one that stays silent, and
141
141
  // `sigLevel`'s default reads a suffixless row as it. The key name stays `level:` for the same reason:
142
142
  // it is a string already written into every ledger on disk.
@@ -342,7 +342,7 @@ async function intakeNotify(agentId, base, job, v) {
342
342
  const what = v?.classify === "clarify"
343
343
  ? `needs clarification before it can run: ${v.errors.join("; ")}`
344
344
  : `was rejected at intake: ${(v?.errors ?? ["unparseable job file"]).join("; ")}`;
345
- const text = `⚠️ Prelim request "${mark}" ${what}. Nothing has been searched or delivered. ` +
345
+ const text = `⚠️ Clearotron request "${mark}" ${what}. Nothing has been searched or delivered. ` +
346
346
  `Job parked as ${base}.failed in the ${agentId} queue.`;
347
347
  const p = writeOutboxPacket(`intake-${base}.failed`, {
348
348
  kind: "intake-rejected", classify: v?.classify ?? "reject", base, agent: agentId,
@@ -381,7 +381,7 @@ function cleanupClaimSidecars(procPath) {
381
381
  * Returns true when this call moved the marker, false when it was already gone. Any other error still
382
382
  * throws: a permissions failure or a full disk is not a sibling.
383
383
  */
384
- export function retireMarker(procPath, destPath, what = "") { // exported for 's honesty test
384
+ export function retireMarker(procPath, destPath, what = "") { // exported for the honesty test
385
385
  try { renameSync(procPath, destPath); return true; }
386
386
  catch (e) {
387
387
  if (e?.code !== "ENOENT") throw e;
@@ -389,7 +389,7 @@ export function retireMarker(procPath, destPath, what = "") { // exported for
389
389
  // <dest> is on disk. On this branch the rename did NOT happen, so <dest> was never created by this
390
390
  // call, and the parenthetical named the outcome the caller intended rather than the one an operator
391
391
  // would find. It is the single line an operator reads to discover where a job went, and it was
392
- // pointing at a file that is not there. The reproduction (, PR) ends with the queue dir
392
+ // pointing at a file that is not there. The reproduction (PR) ends with the queue dir
393
393
  // holding `job-race.processing` and `job-race.processing.pid` and NO `.json` at all, under a log
394
394
  // line that said the orphan had been returned to the queue.
395
395
  note(`[runner] ${basename(procPath)} was already retired by another runner — this call did NOT create ${basename(destPath)} (it wanted: ${what || "retire the marker"}); the marker is in whatever state that runner left it`);
@@ -433,13 +433,13 @@ export function retireMarker(procPath, destPath, what = "") { // exported for
433
433
  * marker; the argument holds only because no `<base>.json` exists while we hold the lock (both enqueue
434
434
  * doors refuse an id whose `.json` or `.processing` is already present, and this call is the one about
435
435
  * to create it). The residual — a fresh enqueue of the SAME id landing between the two renames — is the
436
- * window 's claim lock and `takeoverClaim` already carry, unchanged here. At a call site where a
436
+ * window the claim lock and `takeoverClaim` already carry, unchanged here. At a call site where a
437
437
  * `<base>.json` CAN coexist with the marker, that argument does not transfer.
438
438
  *
439
439
  * Returns true when this call moved the marker to `destPath`. False means the claim was not ours to
440
440
  * retire — and that nothing on disk was touched.
441
441
  */
442
- export function retireClaimAndSweep(procPath, destPath, what = "", { token = claimToken() } = {}) { // exported for 's race test
442
+ export function retireClaimAndSweep(procPath, destPath, what = "", { token = claimToken() } = {}) { // exported for the race test
443
443
  const lockPath = `${procPath}.claimed-${token}`;
444
444
  try { renameSync(procPath, lockPath); }
445
445
  catch (e) {
@@ -482,7 +482,7 @@ export function retireClaimAndSweep(procPath, destPath, what = "", { token = cla
482
482
  * RE-ASSEMBLED from. It is the one deletion that outlives every marker state: the winner's job — a
483
483
  * resume, or a hand-back to `.json` — then cannot be assembled at all.
484
484
  * - `<base>.done.result` / `<base>.failed.result` asserts a terminal that is not on disk. That is
485
- * 's defect exactly (a line naming the outcome the caller WANTED, not the one an operator would
485
+ * That defect exactly (a line naming the outcome the caller WANTED, not the one an operator would
486
486
  * find), one call below the fix for it.
487
487
  * - `dropMatter` marks the matter ledger row `failed`, and `findDuplicateMatter` skips failed rows —
488
488
  * so it re-opens the dedup gate for a matter the winner may be mid-resume, and the ~$40 duplicate
@@ -578,7 +578,7 @@ async function failAtIntake(procPath, qdir, base, agentId, job, v, reasons) {
578
578
  // outcome string for the .reason file.
579
579
  async function duplicateNotify(agentId, base, job, prior = null, sig = null) {
580
580
  const mark = job?.markName ?? job?.name ?? job?.marks?.[0]?.name ?? base;
581
- // ── tracker issue 136 — A REFUSAL DELIVERED AS SILENCE IS INDISTINGUISHABLE FROM A LOST JOB ────────
581
+ // ── A REFUSAL DELIVERED AS SILENCE IS INDISTINGUISHABLE FROM A LOST JOB ────────
582
582
  //
583
583
  // The observable outcome of a dedup park was an empty queue and no run, which is exactly what an
584
584
  // enqueue that vanished looks like — and the two want completely different next actions. That got
@@ -598,7 +598,7 @@ async function duplicateNotify(agentId, base, job, prior = null, sig = null) {
598
598
  const which = prior?.msgId
599
599
  ? ` The run already under way was submitted as ${prior.msgId}${when ? ` at ${when}` : ""} — that is the one that will deliver.`
600
600
  : " The earlier run will deliver.";
601
- const text = `⚠️ Prelim request "${mark}" matches a matter already in progress or just delivered, so it was `
601
+ const text = `⚠️ Clearotron request "${mark}" matches a matter already in progress or just delivered, so it was `
602
602
  + `NOT run — a second search would spend twice for one answer.${which}`
603
603
  + ` If you genuinely need a fresh run of the same matter, re-submit it with dupOverride (\`--dup-override\` on the`
604
604
  + ` command line) and it will go through.`;
@@ -631,7 +631,7 @@ async function parkDuplicate(procPath, qdir, base, agentId, job, prior, sig) {
631
631
  const conv = String(job.conversationId ?? "").trim();
632
632
  const matchedBy = prior.conversationId && prior.conversationId === conv ? "thread (conversationId)" : "matter signature";
633
633
  const reason = [
634
- `duplicate prelim — not run (a second search for the same matter)`,
634
+ `duplicate clearotron — not run (a second search for the same matter)`,
635
635
  `matched by: ${matchedBy}`,
636
636
  `matter: ${sig}`,
637
637
  `conversationId: ${conv || "-"}`,
@@ -666,7 +666,7 @@ function preRunFailNotify(agentId, base, job, reason) {
666
666
  // terminalReasonFields `reason`, so this cut is a no-op today — which is exactly why it survived: a
667
667
  // latent second cap, unmarked, waiting for the next caller to pass a raw reason. It collapses and
668
668
  // trims identically, so this is the same string with the cut made visible when there is one.
669
- const text = `❌ Prelim request "${mark}" FAILED before the run could start: ${terminalReasonFields(reason).reason} — ` +
669
+ const text = `❌ Clearotron request "${mark}" FAILED before the run could start: ${terminalReasonFields(reason).reason} — ` +
670
670
  `nothing has been searched or delivered. Job parked as ${base}.failed in the ${agentId} queue.`;
671
671
  // `intake-${base}.` PREFIX, not a third scheme: scripts/e2e.mjs's outboxPackets matches by runId
672
672
  // first and by that prefix second, so a name outside it is a notice the harness reports as
@@ -716,7 +716,7 @@ async function backstopFailureNotice({ res, job, agentId, base, codename, studio
716
716
  shortReason, reasonVerbatim: reason.slice(0, 1000), whatsappTo: AGENT_WHATSAPP[agentId] ?? null,
717
717
  });
718
718
  // same per-send invariant as the pipeline's failure path: a fresh notice supersedes an older .sent
719
- // and its per-channel receipts (B4 — stale receipts would make prelim-deliver skip this notice)
719
+ // and its per-channel receipts (B4 — stale receipts would make clearotron-deliver skip this notice)
720
720
  try { rmSync(join(owned.dir, ".sent"), { force: true }); } catch { /* none */ }
721
721
  try { rmSync(driverDir(owned.dir, "send-receipts.json"), { force: true }); } catch { /* none */ }
722
722
  ensureDriverDir(owned.dir);
@@ -740,7 +740,7 @@ async function backstopFailureNotice({ res, job, agentId, base, codename, studio
740
740
  // one-at-a-time so the dedup check+record stays race-free even while prior jobs' pipelines run concurrently
741
741
  // (Phase-4). Returns the prepared {procPath, base, job} to execute, or null when the job was terminally
742
742
  // parked/failed-at-intake, or the claim was lost.
743
- // ── tracker issue 216 — THE ORDER-TIME REFUSAL, AND WHY IT IS HERE ──────────────────────────────────
743
+ // ── THE ORDER-TIME REFUSAL, AND WHY IT IS HERE ──────────────────────────────────
744
744
  //
745
745
  // A hosted install now STARTS with no register configured (owner ruling 2026-09-06: "someone can install
746
746
  // and select key later so it should still start"). The protection that used to live in
@@ -849,7 +849,7 @@ async function claimAndPrep(jsonFile, qdir, agentId) {
849
849
  await failAtIntake(procPath, qdir, base, agentId, job, v, v.errors);
850
850
  return null;
851
851
  }
852
- // ── tracker issue 216 — IS THIS BOX CONFIGURED TO SEARCH AT ALL? See the header above claimAndPrep.
852
+ // ── IS THIS BOX CONFIGURED TO SEARCH AT ALL? See the header above claimAndPrep.
853
853
  {
854
854
  const refusal = orderTimeRefusal(process.env, await runTables(), { envFile: unitEnvPath() });
855
855
  if (refusal) {
@@ -860,11 +860,11 @@ async function claimAndPrep(jsonFile, qdir, agentId) {
860
860
  }
861
861
  }
862
862
  // Search-depth spine — resolve WHICH product shape this job selects (job selector → project/customer
863
- // default → house prelim), then gate on what this deployment can actually run. A selection that cannot
863
+ // default → house clearotron), then gate on what this deployment can actually run. A selection that cannot
864
864
  // run here CLARIFIES loudly (parked + requester notified) — it must never silently run as a different-
865
865
  // priced product, and never silently drop. Fail-open discipline (review 2026-07-17): infra trouble may
866
866
  // NO FAIL-OPEN LEFT ON THIS PATH, and its removal is the point. It used to fall back to the literal
867
- // level `prelim` when resolution errored and the job "provably" wanted a plain clearance — but `prelim`
867
+ // level `clearotron` when resolution errored and the job "provably" wanted a plain clearance — but `clearotron`
868
868
  // named THREE products depending on where it pointed, so the fallback was a guess wearing a level key:
869
869
  // an account whose defaults hold one country would have run a Full country search, case law and all,
870
870
  // off a config read that failed. Under the offering the product is a function of the scope, and a scope
@@ -1027,7 +1027,7 @@ async function claimAndPrep(jsonFile, qdir, agentId) {
1027
1027
  // result the whole time and the marker threw it away.
1028
1028
  //
1029
1029
  // WHAT THIS DOES NOT DO: invent a cause. Neither branch classifies anything; each states which park
1030
- // fired and what its clock means. 's damage was a record that could not be contradicted from the
1030
+ // fired and what its clock means. That damage was a record that could not be contradicted from the
1031
1031
  // artifacts, so the fix is not a better guess — it is saying less, and saying which.
1032
1032
  export function parkCause(res = {}) {
1033
1033
  const RESOLVED_BY = "a live retry — the stored time is a hint about when to look, not the authority on "
@@ -1182,8 +1182,8 @@ async function runPrepared({ procPath, base, job }, qdir, agentId, resumeMeta =
1182
1182
  //
1183
1183
  // The pipeline already made this distinction where it writes its own sentinel — "only the recovery
1184
1184
  // sentinel carried a discriminator … the 2026-07-28 postmortem misread: a recovery park diagnosed
1185
- // as a rate-limit park". The queue-side marker never got it. Same shape as 's terminal fields
1186
- // reaching two writers and not four, and 's stamp reaching the audit path and not the rebuild.
1185
+ // as a rate-limit park". The queue-side marker never got it. Same shape as the terminal fields
1186
+ // reaching two writers and not four, and the stamp reaching the audit path and not the rebuild.
1187
1187
  ...parkCause(res),
1188
1188
  });
1189
1189
  note(`[runner] ${base} → POSTPONED (${parkCause(res).parkKind}; retries at the earlier of ${res.resetsAt ?? "its due time"} and its next probe — no hand-edit needed if it clears early)`);
@@ -113,7 +113,7 @@ export function checkClearanceScopeRules({ job = null, profile = null, resolved
113
113
  // request resolves to no territory" would be a claim about a scope nobody saw. But when the request —
114
114
  // or the saved search it names — DOES name territories, the profile is irrelevant to the count and the
115
115
  // rules still bite. Skipping them there is how a roster-blind deployment (profile_key_unknown → the
116
- // fail-open to prelim) would admit a three-country deep dive at the wall itself (review 2026-07-27).
116
+ // fail-open to clearotron) would admit a three-country deep dive at the wall itself (review 2026-07-27).
117
117
  if (!profileReadable && !scope.length) return { errors, warnings };
118
118
  // Quoted AS WRITTEN, worldwide tokens dropped (a mode is not a place — territory-tiers.mjs answers
119
119
  // which entries those are, so this module and the door cannot disagree about the spelling of
@@ -351,7 +351,7 @@ export function reportIdentityFor(levelOrPolicy) {
351
351
 
352
352
  /** The product's coverage note for the report masthead (charter ruling 1, 2026-07-30: what was bought
353
353
  * must be VISIBLY clear on the page — a reader must never confuse "the same section" in two different
354
- * searches). One plain sentence, NAME-LED per the ruling (match 's registry-name pills: the
354
+ * searches). One plain sentence, NAME-LED per the ruling (match the registry-name pills: the
355
355
  * product's name leads, never a rung on our ladder), stating what THIS search covers and the material
356
356
  * thing it does not. The name comes from the registry join (reportIdentityFor — today's name for what
357
357
  * ran, exactly the doctrine); the coverage clauses come from the run's own frozen COMPONENTS
@@ -678,7 +678,7 @@ export function productAvailability(policy, { built = BUILT, registerCanCount =
678
678
  */
679
679
  export const UNAVAILABLE_NOTE = {
680
680
  unbuilt: "Not part of the current release.",
681
- // `demo` IS DELETED FROM THIS MAP (, owner ruling 2026-08-31 14:47), and
681
+ // `demo` IS DELETED FROM THIS MAP (owner ruling 2026-08-31 14:47), and
682
682
  // deleting it is what makes the reversal structural rather than a filter somebody can undo by
683
683
  // accident. Every client-facing surface renders a product's refusal as `UNAVAILABLE_NOTE[cause]`;
684
684
  // while a sentence sat here for a demo, the greyed control was one `return "demo"` away from coming
@@ -692,7 +692,7 @@ export const UNAVAILABLE_NOTE = {
692
692
  // a baked-in provider name, no CLEAROTRON_* string in scope here, and it says the one thing a reader can
693
693
  // act on — this is a coverage limit, so a newer version will not fix it.
694
694
  //
695
- // `register-not-worldwide` IS DELETED FROM THIS MAP (, owner ruling
695
+ // `register-not-worldwide` IS DELETED FROM THIS MAP (owner ruling
696
696
  // 2026-08-31), and deleting it is what makes the ruling structural rather than a filter somebody can
697
697
  // reverse by accident. Every client-facing surface renders a product's refusal as
698
698
  // `UNAVAILABLE_NOTE[cause]`; while a sentence sat here for that cause, the ruling held only as long as
@@ -877,7 +877,7 @@ export const RECIPE_KEYS = [
877
877
  * The saved-search SCOPE block — where the machinery points, as against `base`/`components`, which
878
878
  * choose which machinery runs.
879
879
  *
880
- * This is what makes a saved search a saved SEARCH rather than a saved depth. "Zephyr Beverages knockouts — US
880
+ * This is what makes a saved search a saved SEARCH rather than a saved depth. "Drinks knockouts — US
881
881
  * focus" is a label over exactly this: base `knockout`, scope `{jurisdictions:["US"]}`. Without it a
882
882
  * saved search could only ever restate a level that is already one click away, which is why the recipe
883
883
  * store existed for weeks with nothing worth putting in it.
@@ -1066,7 +1066,7 @@ let recipeCache = null;
1066
1066
  * THE STORE IS NAMED, NEVER GUESSED. `CLEAROTRON_RECIPES_DIR` unset means this deployment has no saved
1067
1067
  * searches — not that it should use the ones bundled with the source.
1068
1068
  *
1069
- * `driver/recipes/` ships synthetic demos for two FICTIONAL customers (aurora, zephyr) so the dev
1069
+ * `driver/recipes/` ships synthetic demos for two test accounts so the dev
1070
1070
  * cockpit and the tests have something to render. It used to be the fallback when the env var was
1071
1071
  * unset, which is a foot-gun that only fires in production: the real deployment does not set the
1072
1072
  * variable, so switching saved searches on there would have surfaced invented customers inside the
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: AGPL-3.0-only
2
2
  // Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
3
3
  // skeptic-search.mjs — the skeptic's SANCTIONED READ SURFACE: literal substring search over the run's
4
- // own artifact tree. 's ratification hold, unlock path 1.
4
+ // own artifact tree. That ratification hold, unlock path 1.
5
5
  //
6
6
  // ── WHAT THIS REPLACES, measured and nothing more ───────────────────────────────────────────────────
7
7
  //
@@ -5,7 +5,7 @@ description: The frame-STARVED independent re-derivation for the v3 preliminary
5
5
 
6
6
  ## Purpose
7
7
 
8
- Every other stage in a prelim run reasons *inside* a frame that was set early (at `matter-frame` / `prelim-variants`): the variants to chase, the field that counts as on-field, the sources worth searching. Verification then runs *on* that frame — nothing tests the frame itself. When the frame is mis-scoped, the whole run inherits the miss and the skeptic, reasoning from the same frame, certifies it.
8
+ Every other stage in a clearotron run reasons *inside* a frame that was set early (at `matter-frame` / `prelim-variants`): the variants to chase, the field that counts as on-field, the sources worth searching. Verification then runs *on* that frame — nothing tests the frame itself. When the frame is mis-scoped, the whole run inherits the miss and the skeptic, reasoning from the same frame, certifies it.
9
9
 
10
10
  You are the antidote. You are **deliberately starved of the frame**: you receive only the raw instruction, exactly as the requester wrote it, and you re-derive the threat model **cold**. Because you never see the run's conclusions, you cannot anchor to them. Your output is later **diffed** against what the run actually scoped — the gaps in that diff are the omissions the frame missed.
11
11
 
@@ -27,7 +27,7 @@ Decompose the mark into its element(s) and name the **dominant element** (the sp
27
27
 
28
28
  - **Drop** characters: shorten the element (VELTRIN → VELTRI). A dropped letter is the commonest missed-cluster cause — the shorter root is its own crowded field.
29
29
  - **Add** characters / **composite**: the element living inside a larger mark (DELPHI Diagnostics, Osler Delphi, Delphic). A composite that shares your dominant element is on the board.
30
- - **Phonetic / homophone**: sound-alikes (ZEPHYR / ZEFFYR / ZEPHUR).
30
+ - **Phonetic / homophone**: sound-alikes (PHAROLIS / FAROLIS / PHAROLLIS). Carry the `ph`/`f` pair in particular: it sounds identical, files under a different letter, and survives no letter-distance measure — which is the whole reason this class is separate from the two above.
31
31
  - **Neighbour**: a one-keystroke real-word or famous-mark neighbour (CHROME on a NOVAPULSE clearance). A famous neighbour is carried for diligence even when off-field.
32
32
 
33
33
  For each, give the value, the direction, and one line of rationale.
@@ -17,7 +17,7 @@ cannot reach any other stage's context, because no stage shares one — and it i
17
17
  arranges or can lose. Nothing here spawns a session; sequencing, fan-in and retries are the driver's.
18
18
 
19
19
  The identical skill is also valid **inline** in ad-hoc chat when a conflict / confusability / enforcer
20
- question arises outside a prelim run.
20
+ question arises outside a clearotron run.
21
21
 
22
22
  **Reads** — from the dispatch message (plain markdown, not JSON), for each finding to ground:
23
23
  - the proposed mark and the conflicting mark / owner / entity,
@@ -46,7 +46,7 @@ Boards-of-Appeal decisions — no free API today). EUIPO *register* lookups are
46
46
 
47
47
  Called by `prelim-search` after synthesis flags the risk-relevant findings (Step 4.5). Also triggers in
48
48
  chat when the user raises a trademark conflict, likelihood-of-confusion, or enforcement-history question.
49
- Gated and optional: if this skill is absent, prelim skips Step 4.5 and delivers normally.
49
+ Gated and optional: if this skill is absent, clearotron skips Step 4.5 and delivers normally.
50
50
 
51
51
  ## Model
52
52
 
@@ -119,6 +119,90 @@ Measured tone only — no "extremely difficult", "most dangerous", "massive", "e
119
119
  colour communicates urgency. No quantitative claims from research ("major streaming hit", never
120
120
  "294M streams"; "significant market presence", never revenue figures).
121
121
 
122
+ ## Plain language — the two-register rule
123
+
124
+ The report goes to a lawyer who layers advice on top, and that lawyer's client reads the same page. The
125
+ band, the summary, the basis line and the one-liners are the whole product for the second reader. They
126
+ were the hardest lines on the page.
127
+
128
+ **Everything a reader sees before opening a fold is written for the client's business owner.** Ordinary
129
+ nouns, one idea per sentence, no sentence over 25 words, the conclusion first. On this product that is:
130
+ `chunkSummary`, `basis`, `factors`, `counterFactors`, `mitigation`, every finding's `net`, every
131
+ `registerReads[].read`, the `purpleNotes`, and `standardCaveats`.
132
+
133
+ **Inside a fold the lawyer's vocabulary is allowed** where a plain word would lose precision — a
134
+ finding's `basis`, the provenance, the long `assessment`. Even there, a term is explained the first time
135
+ it appears on the page.
136
+
137
+ The rule is the test, not the list. Ask of every noun: *does the reader already own this word?* These
138
+ are worked examples of the one failure, not its boundary:
139
+
140
+ | Instead of | Write |
141
+ |---|---|
142
+ | proprietor | owner |
143
+ | subsisting | live |
144
+ | senior | earlier, or came first |
145
+ | specification | goods list |
146
+ | DELPH-formative | names built on DELPH- |
147
+ | prevail | win |
148
+ | citable prior rights | earlier marks the office can raise against you |
149
+ | vulnerable to a non-use attack | could be cancelled for not being used |
150
+ | on the record as it stands | on what we found |
151
+ | the marks-and-goods comparison | same name, same goods |
152
+ | the confusion comparison meets on every limb | same name, same goods, same shops |
153
+ | belt-and-braces classes | extra classes |
154
+ | dispatch, instructed | the request, what was asked |
155
+ | lane | class, or channel — whichever you mean |
156
+ | chunk | never; say the batch, or these names |
157
+
158
+ The target is the level of these, each the standard for its line:
159
+
160
+ > **Basis.** "ORBIT is already the name of two satellite-tracking apps on the same app stores, and of an
161
+ > established satellite-communications company. Any of them would likely win a dispute over this name
162
+ > for this software. The word is a weak mark for these goods, which is why this is High and not Very
163
+ > High."
164
+
165
+ > **A finding's `net`.** "Same name, same goods, and their filing came first in every territory we
166
+ > searched. We see no argument against it."
167
+
168
+ > **The batch opener.** "One name screened: ORBIT, rated High."
169
+
170
+ **Shortening by dropping the reason is not the fix.** The "why" stays, in plain words. A visible
171
+ line that is short because it no longer says why is worse than the long one it replaced, and it
172
+ passes every length rule on this page while telling the reader less.
173
+
174
+ **Say it once.** A caveat, a limit or a finding belongs in one place. Four `standardCaveats` that each
175
+ restate "this is not a clearance" are one caveat and three repetitions — and the report's scope block
176
+ already carries that sentence in the renderer's own words, so a caveat repeating it is dropped before
177
+ the reader sees it. Write the one thing the scope block does not say, or write none.
178
+
179
+ **A note is verb-first, one line, and about one of two things.** Write each `purpleNotes` entry as an
180
+ instruction to the reviewing lawyer, opening on the verb. Every note is about the REQUEST — what was
181
+ asked, and whether it holds together — or about the NAME. The report prints the first kind at the top,
182
+ above the conflicts, and the second under that name's cards, so a note that mixes the two lands in one
183
+ place and reads oddly in it. Write two notes.
184
+
185
+ A note about the request NAMES the request in the note — "the request", or "what we were asked". That is
186
+ not a formality: the report sorts the two kinds by what the note talks about, so a request note that
187
+ never mentions the request is filed under the name and prints in the wrong place.
188
+
189
+ > "Check the request. The client is described as a beverages and supplements business, but we were asked
190
+ > to screen satellite-tracking software in Class 9. We screened the software. If beverages is the real
191
+ > business, this screen looked at the wrong market."
192
+
193
+ > "Ask the client whether it already uses ORBIT. The request does not say, and the client's own earlier
194
+ > use would change the picture."
195
+
196
+ A note about the name opens on what the lawyer should do about the name:
197
+
198
+ > "Pull EG Tech's full goods list at clearance. It is the record most likely to change the picture in
199
+ > either direction."
200
+
201
+ > "Search Classes 42 and 38 in their own right. Both carry live ORBIT filings, not spillover from
202
+ > Class 9."
203
+
204
+ A note that restates a finding already on the page is not a note. Cut it.
205
+
122
206
  ## The per-mark opening read (`assessment`)
123
207
 
124
208
  Each mark's report is delivered on its own, and `assessment` is the first thing its reader meets —
@@ -162,9 +246,14 @@ your job. These two fields are how what you concluded reaches the reader instead
162
246
  every id against that store and refuses one it does not hold — so the report can state a filing's
163
247
  source as a fact rather than as a word you typed about your own sourcing.
164
248
 
165
- - **`registerReads`** — on the MARK. Rows of `{recordId, read}` for a filing you weighed that did **not**
166
- become a `findings[]` record. `read` is what you concluded about *that* filing: whether it bears on the
167
- rating, and why. It prints on that filing's card.
249
+ - **`registerReads`** — on the MARK. Rows of `{recordId, read, band?}` for a filing you weighed that did
250
+ **not** become a `findings[]` record. `read` is what you concluded about *that* filing: whether it bears
251
+ on the rating, and why. It prints on that filing's card. `band` is **optional** and is how you rate that
252
+ filing on its own — in the framework's band words, the same vocabulary as the mark's rating. Send it
253
+ whenever you formed a view on the filing itself: a registered right is often the one hard legal fact on
254
+ the page, and with no band its card is the only one carrying no rating while softer uses around it carry
255
+ one, which reads as though the registration mattered least. Omit it and the read still prints, claiming
256
+ no rating.
168
257
  - **`weighedFilings`** — on a FINDING. The `recordId`s whose evidence your reasoning for that conflict
169
258
  actually used. The report derives the finding's source labelling from this, so list one only if you
170
259
  reasoned from it.
@@ -205,7 +294,8 @@ line, which describes the card and claims nothing about the rating. So:
205
294
  "classesDriving": [8], "bullets": ["..."], "purpleNotes": ["..."],
206
295
  "registerEstimate": "...", "parodyNote": null, "crowdedField": false,
207
296
  "registerReads": [ { "recordId": "<verbatim from the filings you were given>",
208
- "read": "<what you concluded about THAT filing>" } ],
297
+ "read": "<what you concluded about THAT filing>",
298
+ "band": "<OPTIONAL — your rating of THAT filing, in the ladder's words>" } ],
209
299
  "basis": "<ONE sentence: why this band, for this name, in these classes>",
210
300
  "factors": ["<2-4 load-bearing observations, one line each>"],
211
301
  "counterFactors": ["<1-3: what holds it at this band rather than the next>"],
@@ -75,11 +75,11 @@ You do not write a file. Hand the frame back by calling `record_matter_frame`; t
75
75
 
76
76
  ### Scope jurisdictions — search wide, cite narrow (instructed scope honored; worldwide / brand-signalled scope leans wide + discloses)
77
77
 
78
- Two scopes live here, and the doctrine is **narrow at citation, never silently at search**: the **search scope** (where the register sweep looks) must be wide enough to catch the conflict; the **citation scope** (what the report flags and ranks) is where rights legally matter. The failure to avoid is the PETCARY miss — *silently* pinning a globally-signalling brand to one country, so the real EU/UK/US conflict is never even searched. Derive both from THIS matter; a customer profile selects the **risk framework** only — it never sets territory.
78
+ Two scopes live here, and the doctrine is **narrow at citation, never silently at search**: the **search scope** (where the register sweep looks) must be wide enough to catch the conflict; the **citation scope** (what the report flags and ranks) is where rights legally matter. The failure to avoid is the pinned-scope miss — *silently* pinning a globally-signalling brand to one country, so the real EU/UK/US conflict is never even searched. Derive both from THIS matter; a customer profile selects the **risk framework** only — it never sets territory.
79
79
 
80
80
  - **Instructed scope is honored (narrow or wide).** When the client names territories — a list, or "X only" — that is the scope for BOTH search and citation; do not override a client who genuinely wants a narrow scope (a sweep of a country with no instructed interest and no reach is wasted). The profile's `defaultJurisdictions`, when present, is the *customer's own standing instruction* — treat it like an instructed set.
81
- - **Worldwide, or the brand's own signals point broader → the SEARCH widens (it never silently narrows).** When the instruction is worldwide, OR the brand signals broader use — a global gTLD (a `.io`/`.com` launch), an investor / expansion announcement, stated target markets, a genuinely global customer base — the **search set includes the major markets (US / EU / UK / CN / JP) plus the signalled markets**. Decide which to actually cite and rank at **selection** (where rights matter), and **disclose** any material market you could not fully cover (a `coverage-limited` row — never a silent clean). The one move forbidden: quietly pinning an unpinned, globally-signalling brand to a single country (the PETCARY miss). **The cost guard stays:** an abstract *"the sector tends to be global"* is **not, by itself, the widener** — the widener is a CONCRETE signal (a worldwide instruction, or the brand's own global footprint), so a deliberately local matter stays local.
82
- - **Genuinely unpinned, no global signal → reason the likely scope, LABEL it inferred, and DISCLOSE it.** Read the product / customer base / channels and scope to where the brand plausibly operates; never silently default to the requester's home country (that is the PETCARY mechanism). Where reach is plausibly broad, lean wide; where clearly local, scope local — either way set `Scope basis: inferred` and record a one-line `Scope assumption:` so a narrowing is visible and the coverage gate can clamp + disclose it.
81
+ - **Worldwide, or the brand's own signals point broader → the SEARCH widens (it never silently narrows).** When the instruction is worldwide, OR the brand signals broader use — a global gTLD (a `.io`/`.com` launch), an investor / expansion announcement, stated target markets, a genuinely global customer base — the **search set includes the major markets (US / EU / UK / CN / JP) plus the signalled markets**. Decide which to actually cite and rank at **selection** (where rights matter), and **disclose** any material market you could not fully cover (a `coverage-limited` row — never a silent clean). The one move forbidden: quietly pinning an unpinned, globally-signalling brand to a single country (the pinned-scope miss). **The cost guard stays:** an abstract *"the sector tends to be global"* is **not, by itself, the widener** — the widener is a CONCRETE signal (a worldwide instruction, or the brand's own global footprint), so a deliberately local matter stays local.
82
+ - **Genuinely unpinned, no global signal → reason the likely scope, LABEL it inferred, and DISCLOSE it.** Read the product / customer base / channels and scope to where the brand plausibly operates; never silently default to the requester's home country (that is the pinned-scope mechanism). Where reach is plausibly broad, lean wide; where clearly local, scope local — either way set `Scope basis: inferred` and record a one-line `Scope assumption:` so a narrowing is visible and the coverage gate can clamp + disclose it.
83
83
  - **In scope by reach.** A territory also counts when a right is **legally effective in an instructed territory by any route** — filed there; an international (Madrid) registration **designating** it; a regional/supranational right covering it (an EUTM covers every EU member; an instructed EU member is covered by an EUTM); a treaty / priority effect. Tag such a territory `in-scope-by-reach` and name the route. Reason the route from the right — never assume it.
84
84
  - **Excluded.** Territories you considered and set aside — neither instructed, nor brand-signalled, nor a major on a worldwide matter — name each, the reason, and a **reopen trigger** (a right or signal pointing there surfaces). A hit effective ONLY outside the scope set is out of *citation* scope (drop it from findings); but a market the brand actually signals belongs in the SEARCH set, not here.
85
85
  - **Primary vs only.** If the instruction names territories of "primary" / "first" interest WITHOUT "only", treat the named ones as the citation core but **let the search lean wide** to the majors / brand-signalled markets (the "primary" wording signals more may matter), and **record the assumption** — a one-line `Scope assumption: <text>`. (A single clarifying question is acceptable instead; the recorded default never blocks the run.)
@@ -88,7 +88,7 @@ Two scopes live here, and the doctrine is **narrow at citation, never silently a
88
88
 
89
89
  *Worked illustrations:*
90
90
  *— Instructed "Switzerland and the EU, only" → search CH + the EUTM/EU layer (+ any Madrid designation reaching them); majors beyond (CN/JP/US/UK) are out of scope — an honored narrow instruction (`Scope basis: instructed`).*
91
- *— A brand on a `.io` domain with an investor deck naming a US/EU launch and no explicit territory list → lean wide: search US/EU/UK/CN/JP + the named launch markets; cite where rights matter; disclose any gap (`Scope basis: inferred`). This is the PETCARY fix — do not pin it to CH.*
91
+ *— A brand on a `.io` domain with an investor deck naming a US/EU launch and no explicit territory list → lean wide: search US/EU/UK/CN/JP + the named launch markets; cite where rights matter; disclose any gap (`Scope basis: inferred`). This is the pinned-scope fix — do not pin it to CH.*
92
92
  *— A local artisan, national-only product, no global signal → scope the home market, `Scope basis: inferred`, `Scope assumption:` recorded — narrow but disclosed, never silent.*
93
93
 
94
94
  ### Off-field sectors
@@ -111,7 +111,7 @@ Two scopes live here, and the doctrine is **narrow at citation, never silently a
111
111
  ### Sector-convergence flags
112
112
  - Sectors off-field today where commercial trajectories may bring them adjacent
113
113
  - Brief reason
114
- - Example: "Aurora Interactive's broader AI / cloud AI narrative could theoretically bring vector-DBs adjacent to game-dev tooling, but Aurora dev kit is specifically game-tooling not LLM-tooling; convergence path exists but weak"
114
+ - Example: "Foxglade Interactive's broader AI / cloud AI narrative could theoretically bring vector-DBs adjacent to game-dev tooling, but Foxglade dev kit is specifically game-tooling not LLM-tooling; convergence path exists but weak"
115
115
 
116
116
  ### Machine lines the task message dictates
117
117
 
@@ -132,7 +132,7 @@ driver's fixed query shapes:
132
132
 
133
133
  ## Reasoning posture
134
134
 
135
- - When in doubt about an **off-field / adjacency** decision, INCLUDE rather than exclude — matter-frame should not silently filter a *field*; downstream review (`placement-inquiry`) can deprioritise later with reasoning. **Jurisdiction scope follows its own rule (see *Scope jurisdictions*): search wide, cite narrow.** An instructed-narrow scope is honored; a worldwide or brand-signalled scope widens the SEARCH to the majors + signalled markets; an inferred scope is labelled and disclosed. Do not silently pin a globally-signalling brand to one country (the PETCARY miss), and do not widen a deliberately-local matter on abstract "the sector is global" reasoning (a wasted sweep).
135
+ - When in doubt about an **off-field / adjacency** decision, INCLUDE rather than exclude — matter-frame should not silently filter a *field*; downstream review (`placement-inquiry`) can deprioritise later with reasoning. **Jurisdiction scope follows its own rule (see *Scope jurisdictions*): search wide, cite narrow.** An instructed-narrow scope is honored; a worldwide or brand-signalled scope widens the SEARCH to the majors + signalled markets; an inferred scope is labelled and disclosed. Do not silently pin a globally-signalling brand to one country (the pinned-scope miss), and do not widen a deliberately-local matter on abstract "the sector is global" reasoning (a wasted sweep).
136
136
  - Be concrete about WHY for each item. A senior lawyer reading matter-context.md should be able to disagree with specific items and see exactly where your reasoning broke — not just see a conclusion.
137
137
  - If you find yourself rating something as in-lane that a senior lawyer would obviously drop, surface the tension rather than smoothing it.
138
138
 
@@ -47,6 +47,6 @@ watchlists come from in any case, and is why this file was never authority.
47
47
 
48
48
  ## Cross-sector
49
49
 
50
- - **Aurora Interactive** — `major_brand_owners`. Broad AURORA / NEBULA / VANGUARD families;
51
- on an Aurora Interactive-adjacent matter watch the relevant family token and name
50
+ - **Foxglade Interactive** — `major_brand_owners`. Broad FOXGLADE / NEBULA / VANGUARD families;
51
+ on a Foxglade Interactive-adjacent matter watch the relevant family token and name
52
52
  ecosystem partners with their partnership context rather than as bare conflicts.
@@ -173,7 +173,7 @@ For game-title rows, the `developer_of_record` and `publisher_of_record` columns
173
173
  | Finding | Source / Platform | URL | Notes |
174
174
  |---|---|---|---|
175
175
  | Sony "Pulse Elevate" portfolio | Sony products | https://... | Sony uses "Elevate" in audio products; flagged for prelim-register cross-check |
176
- | Aurora "Borealis" console "Raise Your Play" tagline (prior usage) | Aurora Interactive marketing | https://... | Client's own prior use — note as supportive |
176
+ | Foxglade "Borealis" console "Raise Your Play" tagline (prior usage) | Foxglade Interactive marketing | https://... | Client's own prior use — note as supportive |
177
177
 
178
178
  ### PR / reputational risk
179
179
 
@@ -26,7 +26,7 @@ description: Orchestrator for preliminary trademark search requests with registe
26
26
 
27
27
  ## Spawned session
28
28
 
29
- This file is the **driver's compute orchestration spec** — it lives in `driver/skills/` (co-located with the driver) and is read by the pipeline stages, NOT by the integrator agent. The integrator's prelim role is only **intake** (recognise the request, resolve the client, submit the job — `../../docs/INTAKE.md`) and **delivery** (courier the outbox packets — `../../docs/DELIVERY.md`); everything between is the driver's.
29
+ This file is the **driver's compute orchestration spec** — it lives in `driver/skills/` (co-located with the driver) and is read by the pipeline stages, NOT by the integrator agent. The integrator's clearotron role is only **intake** (recognise the request, resolve the client, submit the job — `../../docs/INTAKE.md`) and **delivery** (courier the outbox packets — `../../docs/DELIVERY.md`); everything between is the driver's.
30
30
 
31
31
  This workflow is run by the **deterministic driver** (`driver/`): an intake path (the `enqueue` CLI or the ops-MCP `start_run` tool) enqueues a job and the driver invokes each stage as a standalone compute turn (the `anthropic-agent` engine — a headless `claude -p` process off the gateway; sequencing, fan-in, gating, retries all in code). The judgment content + companion files below are what the stages read; the driver passes each stage its run-dir paths + the job context (email message id, forwarder, instructions, mark names).
32
32
 
@@ -58,7 +58,7 @@ reads only their compact findings files. This is the workflow's primary cost con
58
58
 
59
59
  ## Trigger
60
60
 
61
- The requesting or reviewing lawyer forwards an email containing a **Trademark Search Request Form** to the intake mailbox. The forwarded email is typically structured as a request form ("Worldwide preliminary trademark search — TMP<n>", "Please run this through a preliminary search", or similar). When the request is recognisable as a prelim search ask, this skill invokes.
61
+ The requesting or reviewing lawyer forwards an email containing a **Trademark Search Request Form** to the intake mailbox. The forwarded email is typically structured as a request form ("Worldwide preliminary trademark search — TMP<n>", "Please run this through a preliminary search", or similar). When the request is recognisable as a clearotron search ask, this skill invokes.
62
62
 
63
63
  ## Register sources — the vendor is the source of truth; EUIPO is a free EU cross-check
64
64
 
@@ -259,7 +259,7 @@ The driver runs the delivery stage on **every** completed run — the search is
259
259
 
260
260
  **Methodology lives in the Excel Methodology tab, NOT in the email body.** Do not include paragraph-length descriptions of search approach, sub-skills invoked, variants generated, etc. in the client-facing email. That bloat is what the render-layer split fixes.
261
261
 
262
- **The email is a COVER NOTE; the HTML report is the single master document (wp50).** The house default for every customer: the email carries only the headline risk tier, the report link, and any surviving scope/verdict/handling flags plus reviewer's open questions — no findings body, no client-voice prose, no hand-holding preamble. Client-voice findings live in the **HTML report** (the one surface the client reads). The last exception — Aurora's review-table overlay (`delivery.email:'table'`) — is DELETED as of 2026-07-28, along with the knob that asked for it: a second full findings surface in the mail was the seam that let per-conflict tiers diverge from the report, and on the knockout lane it shipped internal purple notes over the wire. A lawyer who needs a bespoke, forwardable client mail asks the assistant to draft one from the run's `report-data.json` — formatting is judgement, and it belongs where judgement lives, not in a profile enum. The operative delivery spec is [delivery-contract.md](delivery-contract.md) + the driver's `report-synthesis` stage. (The `client-summary` stage, which re-voiced the findings into a separate client-facing document, is RETIRED as of 2026-08-01 — the one report is the one surface.)
262
+ **The email is a COVER NOTE; the HTML report is the single master document (wp50).** The house default for every customer: the email carries only the headline risk tier, the report link, and any surviving scope/verdict/handling flags plus reviewer's open questions — no findings body, no client-voice prose, no hand-holding preamble. Client-voice findings live in the **HTML report** (the one surface the client reads). The last exception — a customer's review-table overlay (`delivery.email:'table'`) — is DELETED as of 2026-07-28, along with the knob that asked for it: a second full findings surface in the mail was the seam that let per-conflict tiers diverge from the report, and on the knockout lane it shipped internal purple notes over the wire. A lawyer who needs a bespoke, forwardable client mail asks the assistant to draft one from the run's `report-data.json` — formatting is judgement, and it belongs where judgement lives, not in a profile enum. The operative delivery spec is [delivery-contract.md](delivery-contract.md) + the driver's `report-synthesis` stage. (The `client-summary` stage, which re-voiced the findings into a separate client-facing document, is RETIRED as of 2026-08-01 — the one report is the one surface.)
263
263
 
264
264
  Structure (content shared across templates):
265
265