clearotron 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +54 -1
- package/CONTRIBUTING.md +3 -3
- package/INSTALL.md +53 -49
- package/bin/brandowner.mjs +1 -1
- package/bin/clearotron.mjs +4 -4
- package/bin/connect.mjs +2 -2
- package/bin/example.mjs +27 -11
- package/bin/grant.mjs +3 -3
- package/bin/key.mjs +1 -1
- package/bin/onboard.mjs +58 -118
- package/bin/start.mjs +22 -25
- package/bin/stop.mjs +65 -3
- package/bin/update.mjs +7 -7
- package/bin/uspto-sync.mjs +1 -1
- package/build-info.json +2 -2
- package/docs/DELIVERY.md +6 -2
- package/docs/architecture/01-product-overview.md +2 -2
- package/docs/architecture/02-architecture.md +2 -2
- package/docs/architecture/04-configuration-reference.md +6 -3
- package/docs/architecture/05-config-governance.md +38 -5
- package/docs/architecture/06-operations-runbook.md +13 -1
- package/docs/architecture/09-security-and-data.md +1 -1
- package/docs/decisions/0004-documentation-structure.md +1 -1
- package/driver/CHANGELOG.md +65 -1
- package/driver/README.md +2 -2
- package/driver/ask-ledger.mjs +3 -3
- package/driver/authority-trees.mjs +1 -1
- package/driver/call-capture.mjs +1 -1
- package/driver/card-frame.mjs +1 -1
- package/driver/case-law-ledger.mjs +1 -1
- package/driver/claim-liveness.mjs +1 -1
- package/driver/common-law-receipts.mjs +1 -1
- package/driver/commonlaw-carry.mjs +1 -1
- package/driver/config-inventory.mjs +1 -1
- package/driver/connotation-search.mjs +12 -12
- package/driver/contract-audit.mjs +5 -5
- package/driver/contract-dictation-registry.mjs +4 -4
- package/driver/contract-dictation.mjs +2 -2
- package/driver/contract-e3-backlog.mjs +6 -6
- package/driver/contract-vocabulary.mjs +3 -3
- package/driver/corrections-feedforward.mjs +1 -1
- package/driver/coverage-form-io.mjs +2 -2
- package/driver/coverage-form.mjs +4 -4
- package/driver/coverage-ledger.mjs +3 -3
- package/driver/coverage-union.mjs +1 -1
- package/driver/declination-call.mjs +35 -3
- package/driver/declination-duty.mjs +1 -1
- package/driver/deliver-trigger.sh +3 -3
- package/driver/deploy-live-run-guard.mjs +6 -2
- package/driver/dev-portal.mjs +1 -1
- package/driver/disposition-call.mjs +4 -4
- package/driver/disposition-tool.mjs +4 -4
- package/driver/disposition-union.mjs +2 -2
- package/driver/doc-constants.mjs +1 -1
- package/driver/door-gates.mjs +2 -2
- package/driver/doubt-selection.mjs +2 -2
- package/driver/drainer-identity.mjs +1 -1
- package/driver/driver.config.mjs +63 -11
- package/driver/e2e-rounds.mjs +2 -2
- package/driver/effort-model.mjs +2 -2
- package/driver/engine/anthropic-agent.mjs +24 -24
- package/driver/engine/auth.mjs +1 -1
- package/driver/engine/common.mjs +1 -1
- package/driver/engine/deny-authority-write.mjs +1 -1
- package/driver/engine/jx-turn.mjs +1 -1
- package/driver/engine/mcp/clarivate-server.mjs +1 -1
- package/driver/engine/mcp/corsearch-server.mjs +1 -1
- package/driver/engine/mcp/declination-server.mjs +1 -1
- package/driver/engine/mcp/dispositions-server.mjs +1 -1
- package/driver/engine/mcp/euipo-server.mjs +1 -1
- package/driver/engine/mcp/fetch-server.mjs +1 -1
- package/driver/engine/mcp/free-tier-server.mjs +2 -2
- package/driver/engine/mcp/gather-config.mjs +11 -11
- package/driver/engine/mcp/perplexity-server.mjs +1 -1
- package/driver/engine/mcp/recording-server.mjs +8 -4
- package/driver/engine/mcp/signa-server.mjs +1 -1
- package/driver/engine/mcp/uspto-local-server.mjs +1 -1
- package/driver/engine/openai-agent.mjs +2 -2
- package/driver/engine-build.mjs +2 -2
- package/driver/enqueue-schema.mjs +2 -2
- package/driver/enqueue.mjs +1 -1
- package/driver/envelope-settle.mjs +1 -1
- package/driver/evidence-claim-invariant.mjs +2 -2
- package/driver/findings-model.mjs +8 -8
- package/driver/floor-duty.mjs +1 -1
- package/driver/form-neighbourhood.mjs +1 -1
- package/driver/framework.mjs +1 -1
- package/driver/gateway.mjs +28 -23
- package/driver/grounds-grammar.mjs +1 -1
- package/driver/hit-list.mjs +1 -1
- package/driver/jurisdiction-systems.mjs +1 -1
- package/driver/jx-lanes.mjs +1 -1
- package/driver/jx-units.mjs +1 -1
- package/driver/jx.mjs +3 -3
- package/driver/knockout-assess-record.mjs +5 -1
- package/driver/narrative-refutation-record.mjs +3 -3
- package/driver/numeric-setting.mjs +1 -1
- package/driver/owner-use-check.mjs +184 -0
- package/driver/package.json +2 -2
- package/driver/phase0.mjs +1 -1
- package/driver/pipeline-knockout.mjs +52 -4
- package/driver/pipeline.mjs +175 -62
- package/driver/placement-diff.mjs +2 -2
- package/driver/placement-form.mjs +4 -4
- package/driver/placement-union.mjs +1 -1
- package/driver/portal-acks.mjs +1 -1
- package/driver/portal-config-view.mjs +2 -2
- package/driver/portal-local-auth.mjs +1 -1
- package/driver/portal-report.mjs +6 -6
- package/driver/portal-service.mjs +15 -15
- package/driver/predelivery-lint.mjs +28 -10
- package/driver/prelim-variants-record.mjs +2 -2
- package/driver/profile-page.html +1 -1
- package/driver/profile-selection.mjs +1 -1
- package/driver/profile-service.mjs +2 -2
- package/driver/profiles.mjs +1 -1
- package/driver/progress.mjs +6 -6
- package/driver/provider-usage.mjs +1 -1
- package/driver/publish/demo-marking.mjs +1 -1
- package/driver/publish/index.mjs +47 -6
- package/driver/publish/knockout.mjs +36 -14
- package/driver/publish/parse.mjs +4 -4
- package/driver/publish/publish-inputs.mjs +2 -2
- package/driver/publish/register-presence.mjs +1 -1
- package/driver/publish/render-knockout.mjs +198 -31
- package/driver/publish/report-data.mjs +13 -3
- package/driver/queue-watch-probe.mjs +1 -1
- package/driver/queue-watch-verdict.mjs +1 -1
- package/driver/recall-reconciliation.mjs +1 -1
- package/driver/recipe-service.mjs +1 -1
- package/driver/record-carry.mjs +5 -5
- package/driver/recording-agreement.mjs +3 -3
- package/driver/reference-score.mjs +7 -7
- package/driver/refusal-bound.mjs +3 -3
- package/driver/register-availability.mjs +2 -2
- package/driver/register-count.mjs +1 -1
- package/driver/register-grant-vocabulary.mjs +2 -2
- package/driver/register-plan.mjs +8 -8
- package/driver/register-records.mjs +2 -2
- package/driver/registry-fidelity.mjs +3 -3
- package/driver/remedy-accounting.mjs +1 -1
- package/driver/repair-composers.mjs +2 -2
- package/driver/repair-digest.mjs +3 -3
- package/driver/repairs.mjs +6 -6
- package/driver/replay-archive.mjs +2 -0
- package/driver/report-card-record.mjs +2 -2
- package/driver/result-noun-fields.mjs +10 -3
- package/driver/run-economics.mjs +2 -2
- package/driver/run-integrity.mjs +1 -1
- package/driver/runner.mjs +22 -22
- package/driver/scope-rules.mjs +1 -1
- package/driver/search-policy.mjs +3 -3
- package/driver/skeptic-search.mjs +1 -1
- package/driver/skills/blind-frame/SKILL.md +1 -1
- package/driver/skills/case-law-citation/SKILL.md +2 -2
- package/driver/skills/knockout-assess/SKILL.md +10 -4
- package/driver/skills/prelim-search/SKILL.md +2 -2
- package/driver/skills/prelim-search/template-formatting.md +1 -1
- package/driver/skills/prelim-search/templates/email/generic.md +1 -1
- package/driver/skills/prelim-search/worked-examples.md +1 -1
- package/driver/skills/prelim-variants/SKILL.md +2 -2
- package/driver/stage-context.mjs +1 -1
- package/driver/stages-knockout.mjs +55 -4
- package/driver/stages.mjs +97 -40
- package/driver/stray-artifacts.mjs +2 -2
- package/driver/suite-census.json +146 -32
- package/driver/synthesis-record.mjs +1 -1
- package/driver/systemd/clearotron-client-mcp.service +1 -1
- package/driver/systemd/clearotron-portal.service +1 -1
- package/driver/systemd/render-units.mjs +1 -1
- package/driver/tokens.mjs +1 -1
- package/driver/tool-calls.mjs +1 -1
- package/driver/turnaround-bands.mjs +1 -1
- package/driver/unit-file-drift.mjs +1 -1
- package/driver/unit-inventory.mjs +121 -61
- package/driver/unit-state-verdict.mjs +20 -12
- package/driver/verify-knockout.mjs +10 -2
- package/driver/verify.mjs +12 -12
- package/driver/whatif-memo-run.mjs +46 -5
- package/driver/whatif-queue.mjs +1 -1
- package/driver/whatif-worker.mjs +1 -1
- package/mcp-server/CHANGELOG.md +4 -0
- package/mcp-server/README.md +3 -3
- package/mcp-server/http-server.mjs +44 -1
- package/mcp-server/key-socket.mjs +184 -0
- package/mcp-server/lib/audit-view.mjs +69 -2
- package/mcp-server/lib/brief.mjs +15 -0
- package/mcp-server/lib/driver.mjs +7 -1
- package/mcp-server/lib/events.mjs +1 -1
- package/mcp-server/lib/http-handler.mjs +1 -1
- package/mcp-server/lib/knockout.mjs +435 -0
- package/mcp-server/lib/ops.mjs +4 -4
- package/mcp-server/lib/options.mjs +1 -1
- package/mcp-server/lib/plan.mjs +1 -1
- package/mcp-server/lib/runs.mjs +1 -1
- package/mcp-server/lib/scrub.mjs +1 -1
- package/mcp-server/lib/whatif.mjs +3 -3
- package/mcp-server/mint-token.mjs +1 -1
- package/mcp-server/package.json +2 -2
- package/mcp-server/server.mjs +76 -11
- package/package.json +3 -3
- package/portal-ui/package.json +1 -1
- package/providers/_shared/enumerate.mjs +1 -1
- package/providers/_shared/ledger-path.mjs +3 -3
- package/providers/_shared/ledger.mjs +1 -1
- package/providers/_shared/result-shape.mjs +3 -3
- package/providers/_shared/term-shape.mjs +1 -1
- package/providers/corsearch/src/core.js +1 -1
- package/providers/jx-subclass/BUILDING.md +1 -1
- package/providers/oauth-mcp-bridge/CHANGELOG.md +4 -0
- package/providers/oauth-mcp-bridge/package.json +1 -1
- package/providers/oauth-mcp-bridge/stdin-guard.mjs +2 -2
- package/scripts/README.md +1 -1
- package/scripts/added-reference-check.mjs +29 -1
- package/scripts/ai-page-render-check.mjs +1 -1
- package/scripts/authority-boundary-probe.mjs +1 -1
- package/scripts/backfill-started-at.mjs +1 -1
- package/scripts/citation-line-check.mjs +3 -3
- package/scripts/clearances-render-check.mjs +3 -3
- package/scripts/compare.mjs +2 -2
- package/scripts/composer-render-check.mjs +6 -6
- package/scripts/contract-dictation-scan.mjs +2 -2
- package/scripts/dead-names.mjs +1 -1
- package/scripts/drain-preflight.mjs +5 -5
- package/scripts/e2e-unread-terminals.mjs +1 -1
- package/scripts/e2e.mjs +8 -8
- package/scripts/env-audit.mjs +7 -7
- package/scripts/env-classify.mjs +139 -15
- package/scripts/freeze-example-run.mjs +3 -3
- package/scripts/head-arrived-gated.mjs +1 -1
- package/scripts/headless-page.mjs +51 -2
- package/scripts/home-render-check.mjs +2 -2
- package/scripts/live-surface-check.mjs +92 -19
- package/scripts/main-health.mjs +1 -1
- package/scripts/merge-presence-check.mjs +3 -3
- package/scripts/mint-suite-census.mjs +6 -6
- package/scripts/nightly-notice.mjs +1 -1
- package/scripts/portal-lifecycle-check.mjs +3 -3
- package/scripts/reconcile-runs.mjs +1 -1
- package/scripts/release-await-cut.mjs +6 -4
- package/scripts/release-version-pr-checks.mjs +1 -1
- package/scripts/release-version.mjs +2 -2
- package/scripts/render-check.mjs +66 -7
- package/scripts/report-frame-check.mjs +1 -1
- package/scripts/report-screenshot.mjs +1 -1
- package/scripts/revisit-render-check.mjs +1 -1
- package/scripts/score.mjs +4 -4
- package/scripts/strip-tracker-citations.mjs +116 -0
- package/scripts/test-run.mjs +3 -3
- package/scripts/third-party-notices.mjs +3 -3
- package/scripts/travelling-predicates.mjs +3 -3
- package/scripts/unexecuted-asserts.mjs +2 -2
- package/scripts/verify-publishable.mjs +2 -2
- package/scripts/write-up-form-census.mjs +1 -1
- package/shared/access-audience.mjs +1 -1
- package/shared/brand.mjs +13 -13
- package/shared/citation-scan.mjs +1 -1
- package/shared/client-door.mjs +7 -7
- package/shared/driver-dir.mjs +1 -1
- package/shared/env-aliases.mjs +0 -48
- package/shared/env-local.mjs +1 -1
- package/shared/identifier-scan.mjs +3 -3
- package/shared/invocation.mjs +1 -1
- package/shared/names-in-force.mjs +2 -0
- package/shared/product-owned-names.mjs +1 -1
- package/shared/register-selection.mjs +1 -1
- package/shared/scope.mjs +5 -5
- package/shared/server-units.mjs +4 -4
- package/shared/store-in-repo.mjs +2 -2
- package/shared/suite-census.mjs +4 -4
- package/shared/tty-style.mjs +1 -1
- package/shared/uspto-index-size.mjs +1 -1
- package/shared/vacuous-pass.mjs +1 -1
- package/skills/clearotron-account/SKILL.md +42 -13
- package/driver/systemd/prelim-driver.path +0 -69
- package/driver/systemd/prelim-driver.service +0 -86
- package/driver/systemd/prelim-driver.timer +0 -14
- package/driver/systemd/prelim-outbox.path +0 -27
- package/driver/systemd/prelim-outbox.service +0 -37
- package/driver/systemd/prelim-outbox.timer +0 -21
- package/node_modules/exceljs/README_zh.md +0 -2878
- package/node_modules/exceljs/dist/LICENSE +0 -22
- package/node_modules/exceljs/dist/es5/csv/csv.js +0 -182
- package/node_modules/exceljs/dist/es5/csv/csv.js.map +0 -1
- package/node_modules/exceljs/dist/es5/csv/line-buffer.js +0 -68
- package/node_modules/exceljs/dist/es5/csv/line-buffer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/csv/stream-converter.js +0 -110
- package/node_modules/exceljs/dist/es5/csv/stream-converter.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/anchor.js +0 -73
- package/node_modules/exceljs/dist/es5/doc/anchor.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/cell.js +0 -961
- package/node_modules/exceljs/dist/es5/doc/cell.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/column.js +0 -274
- package/node_modules/exceljs/dist/es5/doc/column.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/data-validations.js +0 -18
- package/node_modules/exceljs/dist/es5/doc/data-validations.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/defined-names.js +0 -173
- package/node_modules/exceljs/dist/es5/doc/defined-names.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/enums.js +0 -49
- package/node_modules/exceljs/dist/es5/doc/enums.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/image.js +0 -69
- package/node_modules/exceljs/dist/es5/doc/image.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/modelcontainer.js +0 -16
- package/node_modules/exceljs/dist/es5/doc/modelcontainer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/note.js +0 -64
- package/node_modules/exceljs/dist/es5/doc/note.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/range.js +0 -229
- package/node_modules/exceljs/dist/es5/doc/range.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/row.js +0 -382
- package/node_modules/exceljs/dist/es5/doc/row.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/table.js +0 -443
- package/node_modules/exceljs/dist/es5/doc/table.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/workbook.js +0 -202
- package/node_modules/exceljs/dist/es5/doc/workbook.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/worksheet.js +0 -900
- package/node_modules/exceljs/dist/es5/doc/worksheet.js.map +0 -1
- package/node_modules/exceljs/dist/es5/exceljs.bare.js +0 -14
- package/node_modules/exceljs/dist/es5/exceljs.bare.js.map +0 -1
- package/node_modules/exceljs/dist/es5/exceljs.browser.js +0 -36
- package/node_modules/exceljs/dist/es5/exceljs.browser.js.map +0 -1
- package/node_modules/exceljs/dist/es5/exceljs.nodejs.js +0 -15
- package/node_modules/exceljs/dist/es5/exceljs.nodejs.js.map +0 -1
- package/node_modules/exceljs/dist/es5/index.js +0 -15
- package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js +0 -90
- package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js +0 -94
- package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js +0 -94
- package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js +0 -362
- package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js +0 -347
- package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js +0 -392
- package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js +0 -652
- package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/auto-drain.js +0 -18
- package/node_modules/exceljs/dist/es5/utils/auto-drain.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js +0 -15
- package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js +0 -18
- package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/cell-matrix.js +0 -149
- package/node_modules/exceljs/dist/es5/utils/cell-matrix.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/col-cache.js +0 -258
- package/node_modules/exceljs/dist/es5/utils/col-cache.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/copy-style.js +0 -43
- package/node_modules/exceljs/dist/es5/utils/copy-style.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/encryptor.js +0 -58
- package/node_modules/exceljs/dist/es5/utils/encryptor.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/iterate-stream.js +0 -46
- package/node_modules/exceljs/dist/es5/utils/iterate-stream.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/parse-sax.js +0 -47
- package/node_modules/exceljs/dist/es5/utils/parse-sax.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/shared-formula.js +0 -42
- package/node_modules/exceljs/dist/es5/utils/shared-formula.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/shared-strings.js +0 -32
- package/node_modules/exceljs/dist/es5/utils/shared-strings.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/stream-base64.js +0 -66
- package/node_modules/exceljs/dist/es5/utils/stream-base64.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/stream-buf.js +0 -343
- package/node_modules/exceljs/dist/es5/utils/stream-buf.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/string-buf.js +0 -73
- package/node_modules/exceljs/dist/es5/utils/string-buf.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/string-builder.js +0 -32
- package/node_modules/exceljs/dist/es5/utils/string-builder.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js +0 -61
- package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/typed-stack.js +0 -23
- package/node_modules/exceljs/dist/es5/utils/typed-stack.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/under-dash.js +0 -168
- package/node_modules/exceljs/dist/es5/utils/under-dash.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/utils.js +0 -171
- package/node_modules/exceljs/dist/es5/utils/utils.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/xml-stream.js +0 -151
- package/node_modules/exceljs/dist/es5/utils/xml-stream.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/zip-stream.js +0 -79
- package/node_modules/exceljs/dist/es5/utils/zip-stream.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js +0 -230
- package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/rel-type.js +0 -18
- package/node_modules/exceljs/dist/es5/xlsx/rel-type.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js +0 -139
- package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js +0 -85
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +0 -24
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js +0 -27
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js +0 -51
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js +0 -234
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js +0 -103
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js +0 -76
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +0 -35
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +0 -53
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +0 -97
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js +0 -107
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js +0 -92
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +0 -61
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js +0 -51
- package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +0 -30
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +0 -27
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js +0 -93
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js +0 -112
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js +0 -158
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js +0 -23
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js +0 -65
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +0 -47
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +0 -61
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js +0 -40
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +0 -35
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +0 -62
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js +0 -82
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js +0 -98
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +0 -40
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js +0 -38
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +0 -38
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +0 -59
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +0 -63
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js +0 -67
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js +0 -30
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +0 -62
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js +0 -91
- package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +0 -40
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js +0 -451
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +0 -275
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +0 -25
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +0 -38
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +0 -45
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +0 -77
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +0 -42
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +0 -71
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +0 -22
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +0 -43
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +0 -28
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +0 -88
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +0 -38
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +0 -52
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +0 -43
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +0 -75
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +0 -22
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +0 -66
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +0 -22
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js +0 -78
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js +0 -247
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js +0 -28
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +0 -69
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js +0 -126
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +0 -50
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +0 -26
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js +0 -52
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +0 -35
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +0 -24
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js +0 -46
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js +0 -99
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js +0 -45
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +0 -37
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js +0 -128
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +0 -51
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +0 -83
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +0 -84
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +0 -190
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js +0 -513
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js +0 -27
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js +0 -58
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js +0 -47
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js +0 -53
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js +0 -47
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js +0 -61
- package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +0 -98
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js +0 -92
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js +0 -99
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js +0 -114
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js +0 -39
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js +0 -139
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js +0 -185
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js +0 -66
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js +0 -106
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js +0 -308
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js +0 -175
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js +0 -59
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js +0 -53
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js +0 -118
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js +0 -612
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js +0 -46
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js +0 -75
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js +0 -30
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js +0 -89
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js +0 -28
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js +0 -42
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js +0 -40
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js +0 -123
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xlsx.js +0 -697
- package/node_modules/exceljs/dist/es5/xlsx/xlsx.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js +0 -5
- package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js.map +0 -1
- package/node_modules/exceljs/dist/exceljs.bare.js +0 -55253
- package/node_modules/exceljs/dist/exceljs.bare.js.map +0 -761
- package/node_modules/exceljs/dist/exceljs.bare.min.js +0 -45
- package/node_modules/exceljs/dist/exceljs.bare.min.js.map +0 -1
- package/node_modules/exceljs/dist/exceljs.js +0 -59900
- package/node_modules/exceljs/dist/exceljs.js.map +0 -1083
- package/node_modules/exceljs/dist/exceljs.min.js +0 -45
- package/node_modules/exceljs/dist/exceljs.min.js.map +0 -1
- package/scripts/deploy-test.sh +0 -309
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
// Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
|
|
4
|
+
//
|
|
5
|
+
// Removes the internal citation OPENER from comments and prose in the tree (tracker issue 309).
|
|
6
|
+
//
|
|
7
|
+
// The form is `tracker issue NNN — ` standing at the head of a sentence, where the citation is not part
|
|
8
|
+
// of what the sentence says but a label in front of it. Stripping the opener leaves the sentence intact:
|
|
9
|
+
//
|
|
10
|
+
// // tracker issue 1149 — the walk must start at the repository root
|
|
11
|
+
// // the walk must start at the repository root
|
|
12
|
+
//
|
|
13
|
+
// assert.ok(x, "Refs tracker issue 2075 — an absent file is a finding")
|
|
14
|
+
// assert.ok(x, "an absent file is a finding")
|
|
15
|
+
//
|
|
16
|
+
// WHY THE PATTERN LOOKS OVER-SPECIFIED. Three parts of it are load-bearing and each was measured, not
|
|
17
|
+
// reasoned:
|
|
18
|
+
//
|
|
19
|
+
// · THE CAPTURE GROUP. The match begins at the line opener — a comment leader, a quote, a bracket —
|
|
20
|
+
// and the replacement is `$1`, which puts that opener back. Without the group the sweep deletes the
|
|
21
|
+
// opening quote of every test name it touches, and a broken string literal is a syntax error in the
|
|
22
|
+
// lucky cases and a changed assertion in the unlucky ones.
|
|
23
|
+
// · `\s+` AFTER THE SEPARATOR, never `\s*`. `tracker issue 1149-12` is an ITEM suffix, not a citation
|
|
24
|
+
// followed by prose: there is no space after its hyphen. `\s*` eats the item number.
|
|
25
|
+
// · THE `i` FLAG. `Refs tracker issue NNN` is capitalised at the head of a commit-style line and is a
|
|
26
|
+
// fifth of the corpus.
|
|
27
|
+
//
|
|
28
|
+
// WHAT IT WILL NOT TOUCH, and both exclusions are BY NAME rather than by pattern, because a pattern that
|
|
29
|
+
// could recognise them could also stop recognising them:
|
|
30
|
+
//
|
|
31
|
+
// · THE FILES THAT USE A CITATION AS TEST DATA. Three tests feed a citation to the guard that refuses
|
|
32
|
+
// citations and assert what comes back. A sweep that rewrites their fixtures edits the corpus the
|
|
33
|
+
// guard is checked against, and the guard then passes on something it has stopped checking. That is
|
|
34
|
+
// a green tick bought by deleting the question.
|
|
35
|
+
// · THE FROZEN RENDERER. `driver/publish/render.mjs` is pinned at a content hash. Changing it reds its
|
|
36
|
+
// freeze check, and the repair of a sentence is not worth spending a freeze on; touching it needs an
|
|
37
|
+
// entry in the break ledger, which is a decision and not a sweep.
|
|
38
|
+
//
|
|
39
|
+
// USAGE
|
|
40
|
+
//
|
|
41
|
+
// node scripts/strip-tracker-citations.mjs # report only: per-class counts + hand-off list
|
|
42
|
+
// node scripts/strip-tracker-citations.mjs --apply # rewrite the mechanical cases
|
|
43
|
+
//
|
|
44
|
+
// The report is the default because the hand-off list is the point: the lines this cannot do are the
|
|
45
|
+
// ones a person has to read, and a sweep that rewrote first would bury them.
|
|
46
|
+
//
|
|
47
|
+
// THIS COUNTS EVERY LINE CARRYING THE FORM, including lines another stripper would also catch. That is
|
|
48
|
+
// deliberate and it is why this number will not match the reference-strip backlog's. A sweep STRIPS; a
|
|
49
|
+
// backlog SELECTS. Overlapping strippers cost nothing and a missed line ships a citation into a public
|
|
50
|
+
// tree, so the population here is the whole corpus rather than the residue left after other rules have
|
|
51
|
+
// taken their share. Reconciling the two numbers is a category error: they answer different questions.
|
|
52
|
+
//
|
|
53
|
+
// A NOTE ON THE OTHER RESIDUE, because the names invite the confusion. `driver/reference-strip-
|
|
54
|
+
// signatures.mjs` counts a DIFFERENT thing — sentences the earlier strip left unfinished, `'s` with
|
|
55
|
+
// nothing to possess and a dangling `pre- `. That is damage: a defect whether or not anyone rules on
|
|
56
|
+
// citations, with a floor that should fall to zero as sentences are repaired. This file's subject is
|
|
57
|
+
// intact text that a ruling removes, whose population goes to zero the day the sweep runs and then
|
|
58
|
+
// wants a guard against reintroduction rather than a backlog. Different residue, different repair.
|
|
59
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
60
|
+
import { execFileSync } from "node:child_process";
|
|
61
|
+
import { join, dirname } from "node:path";
|
|
62
|
+
import { fileURLToPath } from "node:url";
|
|
63
|
+
|
|
64
|
+
const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
65
|
+
const APPLY = process.argv.includes("--apply");
|
|
66
|
+
|
|
67
|
+
// The mechanical case: a citation standing in front of a sentence, with the opener captured so it
|
|
68
|
+
// survives the replacement.
|
|
69
|
+
export const OPENER = /((?:^|["'`(\[]|\/\/|\/\*|#|\*|·|──)\s*)(?:refs\s+)?tracker issues?\s+\d+\s*[—:–-]\s+/i;
|
|
70
|
+
|
|
71
|
+
// Any remaining citation, mechanical or not. The difference between this count and the opener count is
|
|
72
|
+
// the hand-off: a citation inside a sentence cannot be removed without rewriting the sentence around it.
|
|
73
|
+
export const ANY_CITATION = /\btracker issues?\s+\d+/i;
|
|
74
|
+
|
|
75
|
+
export const EXCLUDED = [
|
|
76
|
+
// Citations used as literal test DATA — the corpus the citation guard is checked against.
|
|
77
|
+
"driver/test/a-bare-reference-added-in-a-diff-is-refused.test.mjs",
|
|
78
|
+
"driver/test/prompt-payload-names-no-tracker-issue.test.mjs",
|
|
79
|
+
"driver/test/euipo-environment-doctrine.test.mjs",
|
|
80
|
+
// Pinned at a content hash; a prose repair is not worth spending a freeze on.
|
|
81
|
+
"driver/publish/render.mjs",
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
export const isScannable = (f) =>
|
|
85
|
+
/\.(mjs|md|yml|ts|js|json)$/.test(f) && !f.startsWith("portal-ui/dist/") && !EXCLUDED.includes(f);
|
|
86
|
+
|
|
87
|
+
/** Per-file classification. PURE, and `read` is injected so an arm can drive it over a synthetic tree. */
|
|
88
|
+
export function surveyOf(files, read) {
|
|
89
|
+
const stripped = {}, handoff = [];
|
|
90
|
+
let strippedTotal = 0, remainingTotal = 0;
|
|
91
|
+
for (const f of files.filter(isScannable)) {
|
|
92
|
+
let text;
|
|
93
|
+
try { text = read(f); } catch { continue; }
|
|
94
|
+
let n = 0;
|
|
95
|
+
const out = text.split("\n").map((line, i) => {
|
|
96
|
+
if (OPENER.test(line)) { n++; return line.replace(OPENER, "$1"); }
|
|
97
|
+
if (ANY_CITATION.test(line)) handoff.push({ file: f, line: i + 1, text: line.trim() });
|
|
98
|
+
return line;
|
|
99
|
+
});
|
|
100
|
+
if (n) { stripped[f] = n; strippedTotal += n; }
|
|
101
|
+
remainingTotal += out.filter((l) => ANY_CITATION.test(l)).length;
|
|
102
|
+
if (APPLY && n) writeFileSync(join(ROOT, f), out.join("\n"));
|
|
103
|
+
}
|
|
104
|
+
return { strippedTotal, remainingTotal, stripped, handoff };
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
108
|
+
const tracked = execFileSync("git", ["-C", ROOT, "ls-files"], { encoding: "utf8", maxBuffer: 1 << 28 })
|
|
109
|
+
.split("\n").filter(Boolean);
|
|
110
|
+
const s = surveyOf(tracked, (f) => readFileSync(join(ROOT, f), "utf8"));
|
|
111
|
+
console.log(`${APPLY ? "stripped" : "would strip"} ${s.strippedTotal} opener(s) across ${Object.keys(s.stripped).length} file(s)`);
|
|
112
|
+
console.log(`${s.handoff.length} citation(s) are NOT openers and need a reader — the hand-off list:`);
|
|
113
|
+
for (const h of s.handoff) console.log(` ${h.file}:${h.line} ${h.text.slice(0, 110)}`);
|
|
114
|
+
console.log(`\n${s.remainingTotal} citation(s) would remain after this sweep.`);
|
|
115
|
+
console.log(`excluded by name: ${EXCLUDED.join(", ")}`);
|
|
116
|
+
}
|
package/scripts/test-run.mjs
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
//
|
|
26
26
|
// The second obvious fix is a posttest sweeper matching fixture prefixes with an mtime floor. But agents
|
|
27
27
|
// run these suites CONCURRENTLY — that is how the box filled in the first place — so "delete everything
|
|
28
|
-
// matching
|
|
28
|
+
// matching clearotron-mock-* older than N" can delete another run's live fixtures. Prefix matching cannot
|
|
29
29
|
// distinguish my fixtures from yours.
|
|
30
30
|
//
|
|
31
31
|
// A third option needs neither. os.tmpdir() honours TMPDIR, and every leaking call site is already
|
|
@@ -65,7 +65,7 @@ import { snapshotRepo, repoWrites, explainRepoWrites } from "./repo-writes.mjs";
|
|
|
65
65
|
// CLEAROTRON_DATABASE=clarivate node scripts/test-run.mjs node -e '<print>'
|
|
66
66
|
// -> CLEAROTRON_DATABASE = "corsearch"
|
|
67
67
|
//
|
|
68
|
-
// The operator named a vendor and the suite ran as a different one, in silence. That is
|
|
68
|
+
// The operator named a vendor and the suite ran as a different one, in silence. That is its own
|
|
69
69
|
// sentence — "a default is the one wrong value that never announces itself" — reached through the
|
|
70
70
|
// compatibility window rather than through a code default.
|
|
71
71
|
//
|
|
@@ -286,7 +286,7 @@ if (missingDeps.length) {
|
|
|
286
286
|
process.exit(1);
|
|
287
287
|
}
|
|
288
288
|
|
|
289
|
-
// ── THE SUITE CANNOT READ THE OPERATOR'S CONFIGURATION, IN OR OUT (
|
|
289
|
+
// ── THE SUITE CANNOT READ THE OPERATOR'S CONFIGURATION, IN OR OUT () ──────────────────
|
|
290
290
|
//
|
|
291
291
|
// TWO DIRECTIONS, ONE SEAT. The guard below refuses when a data-plane ROOT escapes; these two stop the
|
|
292
292
|
// suite reading the operator's configuration and stop it writing into their data plane. Same wrapper,
|
|
@@ -171,7 +171,7 @@ function resolveInstalled(root, name, path) {
|
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
/**
|
|
174
|
-
*
|
|
174
|
+
* WHY `npm ls` IS COMPLAINING, WHEN THE ANSWER IS NOT IN THE CODE AT ALL.
|
|
175
175
|
*
|
|
176
176
|
* Adding a `git worktree` and symlinking `node_modules` from another one — the obvious way to skip a
|
|
177
177
|
* five-minute install — makes six licence arms fail in a way that reads exactly like a code defect, on
|
|
@@ -257,7 +257,7 @@ export function collect(root = ROOT, tree = npmTree(root), { linkTarget = defaul
|
|
|
257
257
|
+ "this file has not been looked at:\n " + undeclared.slice(0, 12).join("\n ")
|
|
258
258
|
+ (undeclared.length > 12 ? `\n …and ${undeclared.length - 12} more` : "")
|
|
259
259
|
+ "\n\nFix the tree, or declare it in DECLARED_LS_PROBLEMS with the reason it is allowed."
|
|
260
|
-
//
|
|
260
|
+
// appended, never substituted: a real problem keeps the sentence above.
|
|
261
261
|
+ (foreignTreeNote(root, undeclared, { linkTarget }) ?? ""));
|
|
262
262
|
}
|
|
263
263
|
// ── ONE PACKAGE, SEVERAL NODES, AND ONLY ONE OF THEM CARRIES THE CHILDREN ──────────────────────
|
|
@@ -382,7 +382,7 @@ if (isEntrypoint(import.meta.url)) {
|
|
|
382
382
|
if (!check) { writeFileSync(OUTPUT, next); console.log(`third-party-notices: wrote ${OUTPUT}`); process.exit(0); }
|
|
383
383
|
const now = existsSync(OUTPUT) ? readFileSync(OUTPUT, "utf8") : null;
|
|
384
384
|
if (now === next) { console.log("third-party-notices: THIRD-PARTY-NOTICES.md matches the installed production tree."); process.exit(0); }
|
|
385
|
-
// ──
|
|
385
|
+
// ── THE REFUSAL SAYS HOW TO FIX IT, INCLUDING THE HALF THAT IS FORGOTTEN ──
|
|
386
386
|
//
|
|
387
387
|
// "regenerate with: <script>" was true and insufficient. What reds CI is a PRODUCTION-DEPENDENCY BUMP
|
|
388
388
|
// whose regenerated notices file was not COMMITTED WITH IT, and the committing half is the half that
|
|
@@ -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
|
//
|
|
4
|
-
// travelling-predicates.mjs —
|
|
4
|
+
// travelling-predicates.mjs — the candidate population, DISCOVERED rather than recalled.
|
|
5
5
|
//
|
|
6
6
|
// hunts a class: a contract whose two ends measure different things — a demand computed against
|
|
7
7
|
// one unit or snapshot, satisfaction enforced against another, with no guard asserting the two agree.
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
// looked like an assignment, and filed `const push = (row) => { if (!asks.some(…)) … }` as "stored"
|
|
43
43
|
// because the line starts with `const`. That is a proxy validating a proxy. This parses.
|
|
44
44
|
//
|
|
45
|
-
// ── THE SECOND QUESTION: WHERE DOES IT COME TO REST? (
|
|
45
|
+
// ── THE SECOND QUESTION: WHERE DOES IT COME TO REST? (the adjudication set) ──────────────────────
|
|
46
46
|
//
|
|
47
47
|
// "Travelling" is a candidate ceiling and this file has said so since it was written. Ninety-nine
|
|
48
48
|
// candidates is not a population anybody adjudicates one essay at a time, and reading them as ninety-nine
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
//
|
|
60
60
|
// structure written into something that OUTLIVES the expression that computed it — an object field,
|
|
61
61
|
// an assignment, or a local that lands in a returned object. THIS is the class's shape:
|
|
62
|
-
//
|
|
62
|
+
// That `quote_required` was a flag on a form, judged later against candidates that had
|
|
63
63
|
// been rebuilt. A boolean at rest can be met by data that has moved.
|
|
64
64
|
//
|
|
65
65
|
// The three are exhaustive and mechanical, so the sweep's own numbers say how much reading is owed and
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
// Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
|
|
4
|
-
// unexecuted-asserts.mjs —
|
|
4
|
+
// unexecuted-asserts.mjs — the fifth member: an arm that RAN and asserted nothing.
|
|
5
5
|
//
|
|
6
6
|
// node scripts/unexecuted-asserts.mjs <lcov> # DRY RUN — prints what would change
|
|
7
7
|
// node scripts/unexecuted-asserts.mjs <lcov> --apply # writes it
|
|
@@ -199,7 +199,7 @@ if (isEntrypoint(import.meta.url)) {
|
|
|
199
199
|
// THE REMEDY IS THE WHOLE COMMAND, not a placeholder. Whoever this fires on has probably never heard
|
|
200
200
|
// of CT_COVERAGE_DIR — it is set in ci.yml and nowhere a contributor reads — so `<lcov>` sends them to
|
|
201
201
|
// the workflow file to find out what to substitute. A guard whose remedy has to be looked up is a
|
|
202
|
-
// guard people delete (
|
|
202
|
+
// guard people delete (its own rule, applied to its own error message).
|
|
203
203
|
console.error(`\nCHECK FAILED — ${grew.length} file(s) grew an assert site that never ran.\n\n`
|
|
204
204
|
+ "READ EACH ONE FIRST. An arm that stopped asserting is the defect this exists to find (#1010);\n"
|
|
205
205
|
+ "a new honest branch — a platform check, an else nobody takes here — is re-stamped deliberately:\n\n"
|
|
@@ -49,7 +49,7 @@ const staging = mkdtempSync(join(tmpdir(), "clearotron-verify-"));
|
|
|
49
49
|
// ── CAN THIS RUN ON THE TREE IT IS POINTED AT — tracker issue 196 ───────────────────────────────────
|
|
50
50
|
//
|
|
51
51
|
// THIS SCRIPT WAS INVOKED BY NOTHING for as long as it has existed on the public tree: no workflow, no
|
|
52
|
-
// npm script, every other mention of its name a comment. That is
|
|
52
|
+
// npm script, every other mention of its name a comment. That is the shape — an
|
|
53
53
|
// instrument that exists, has stopped being reachable, and whose silence is indistinguishable from a
|
|
54
54
|
// pass. Five uninstallable releases shipped past it.
|
|
55
55
|
//
|
|
@@ -82,7 +82,7 @@ if (!existsSync(CUT_TABLE)) {
|
|
|
82
82
|
console.error(" dependency, in CI and again at publish. That covers the manifest. It does not type the verbs");
|
|
83
83
|
console.error(" and it does not check the substitution.\n");
|
|
84
84
|
console.error(" To make this runnable, the pack's reconcile step needs either the cut table or a decision that");
|
|
85
|
-
console.error(" it does not need it. That decision is
|
|
85
|
+
console.error(" it does not need it. That decision is stated out of scope and is nobody's yet.");
|
|
86
86
|
process.exit(2);
|
|
87
87
|
}
|
|
88
88
|
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
// 1. UNRESOLVED DEPTH. `depthFor` falls back to full-country depth stamped `default-ungraded` when it
|
|
35
35
|
// cannot resolve a policy, and `writeUpForm` maps every ungraded rung to `full`. A census built on a
|
|
36
36
|
// policy object that does not resolve therefore reports "every product authors every card, the ladder
|
|
37
|
-
// saves nothing" — quotable, and false.
|
|
37
|
+
// saves nothing" — quotable, and false. its own ladder shipped dead for exactly this reason. So
|
|
38
38
|
// the depth row is asserted resolved before a single finding is counted.
|
|
39
39
|
// 2. NO BAND SHAPE. The floor tier joins from `band-shape.json`; absent, every finding reads as holding
|
|
40
40
|
// no floor and the graded products UNDER-count their full cards — erasing the one class the owner
|
|
@@ -273,7 +273,7 @@ export async function probeAudience({ url, fetchImpl = fetch, timeoutMs = 5000,
|
|
|
273
273
|
const t = ac ? setTimeout(() => ac.abort(new Error(`no answer within ${timeoutMs}ms`)), timeoutMs) : null;
|
|
274
274
|
try {
|
|
275
275
|
const res = await fetchImpl(url, { redirect: "manual", signal: signalFor ?? ac.signal });
|
|
276
|
-
// TWO MORE HEADERS, AND THEY ARE THE WHOLE OF
|
|
276
|
+
// TWO MORE HEADERS, AND THEY ARE THE WHOLE OF THIS CHECK. Without them every non-redirecting
|
|
277
277
|
// answer collapses to "no redirect", and three different doors read as one. `www-authenticate` is
|
|
278
278
|
// how an Access-fronted API path announces itself; `cf-ray` is how a 5xx says the EDGE answered and
|
|
279
279
|
// the origin behind it did not. Both are on the response already — nothing extra is fetched.
|
package/shared/brand.mjs
CHANGED
|
@@ -26,7 +26,7 @@ const HERE = dirname(fileURLToPath(import.meta.url));
|
|
|
26
26
|
// index header, nav brand, Excel metadata, connector instructions). Env-overridable per deployment —
|
|
27
27
|
// branding is tenant config, not code. Read once at import (deployment-static, like the systemd env).
|
|
28
28
|
//
|
|
29
|
-
// CASING: THE VALUE IS PROSE, SO IT IS CAPITALISED (
|
|
29
|
+
// CASING: THE VALUE IS PROSE, SO IT IS CAPITALISED (superseding ruling 2026-08-20). The rule is
|
|
30
30
|
// Clearotron in prose and UI, `clearotron` in config values, commands, binary names and identifiers.
|
|
31
31
|
// This DEFAULT is prose in every place it lands — report and portal <title>, the pool index header,
|
|
32
32
|
// Excel `creator`, the connector steps, "You reached X" — so it takes the capital. The VARIABLE that
|
|
@@ -95,7 +95,7 @@ export const BRAND = {
|
|
|
95
95
|
*
|
|
96
96
|
* ABSENT IS NOT FALSE. The plain confidentiality line claims nothing and is what any legal deliverable
|
|
97
97
|
* carries; collapsing absent into false is precisely the coercion that shipped House-default clearances
|
|
98
|
-
* with no marking at all. That is
|
|
98
|
+
* with no marking at all. That is the property and it is untouched.
|
|
99
99
|
*
|
|
100
100
|
* `true` USED TO SELECT A LONGER LINE — the plain marking plus a legal characterisation of the document
|
|
101
101
|
* — and the owner dropped that wording on 2026-08-20. It renders as the default here rather than being
|
|
@@ -154,7 +154,7 @@ export const PALETTE = {
|
|
|
154
154
|
|
|
155
155
|
// — THE DARK COUNTERPART. Until this landed, every dark value in the product was a literal typed
|
|
156
156
|
// into whichever block needed it, and the two server-rendered door pages (sign-in, refusal) had guessed
|
|
157
|
-
// their own set — a THIRD ground,
|
|
157
|
+
// their own set — a THIRD ground, #17150f, against the brand pack's #0f0e0c.
|
|
158
158
|
//
|
|
159
159
|
// The two entries the brand pack fixes are marked; the rest have no pack entry and are the values the
|
|
160
160
|
// warm surfaces already shipped, kept as-is. `cream` has no dark twin by name because a dark ground is
|
|
@@ -164,7 +164,7 @@ export const PALETTE_DARK = {
|
|
|
164
164
|
ground: '#0f0e0c', // brand pack §01 "Dark BG" — near-black. Supersedes the doors' #17150f
|
|
165
165
|
ink: '#f0e8d8', // brand pack §01 "Parchment" — dark text / mark. Supersedes #ece5d8
|
|
166
166
|
// The three locked crimsons, lifted for the dark ground. `crimson` itself is NOT here: it is a FILL
|
|
167
|
-
// (badges, the accent) and keeps
|
|
167
|
+
// (badges, the accent) and keeps #860F09 in both schemes. Crimson as TEXT is what needs lifting, and
|
|
168
168
|
// that is `crimsonText` — the value the warm and report dark blocks already applied to links.
|
|
169
169
|
crimsonDeep: '#6a0a13',
|
|
170
170
|
crimsonMid: '#c47f7a',
|
|
@@ -350,7 +350,7 @@ export const REPORT_ROOT =
|
|
|
350
350
|
|
|
351
351
|
// Risk ramp — the designer's ramp from the portal redesign. It is a BAND family
|
|
352
352
|
// of its own: --high is deliberately NOT --accent any more (the shipped --high was byte-identical to
|
|
353
|
-
//
|
|
353
|
+
// #860F09, so a High risk dot read as a Start button and needed a ring workaround). --accent /
|
|
354
354
|
// --crimson / --maroon above are untouched. The gauge's stop order is clear→low→med→high→severe.
|
|
355
355
|
`--clear:#5F8A64; --low:#8A9440; --med:#C8871B; --high:#B23A2E; --severe:#7C1E15;` +
|
|
356
356
|
// Soft/text pairs: re-derived from the five bases by the rule in shared/tools/derive-band-pairs.mjs (same
|
|
@@ -374,12 +374,12 @@ export const REPORT_ROOT =
|
|
|
374
374
|
// • *_EXPLICIT variants — the `[data-theme="dark"]` block ONLY, no `@media` —
|
|
375
375
|
// CUSTOMER-facing surfaces (the per-customer index): first view is ALWAYS light; dark only by
|
|
376
376
|
// the visitor's explicit toggle. The @media string must never appear in client output (tests pin this).
|
|
377
|
-
// Crimson discipline: `--crimson`/`--h-red` KEEP
|
|
378
|
-
// where white-on-crimson stays high-contrast. `--high` used to be in that list because it WAS
|
|
377
|
+
// Crimson discipline: `--crimson`/`--h-red` KEEP #860F09 in dark — they are FILLS (badges, the accent)
|
|
378
|
+
// where white-on-crimson stays high-contrast. `--high` used to be in that list because it WAS #860F09;
|
|
379
379
|
// since the 2026-07-19 ramp recolor it is a band token (#B23A2E) and lightens with the rest of the band
|
|
380
380
|
// family. Crimson TEXT uses (links, summaries, the wordmark)
|
|
381
381
|
// are recolored to a lightened #e0736b by SCOPED rules inside the dark block only — zero light-side edits.
|
|
382
|
-
// Every dark hex avoids the BLUE_SKIN regex /#3b4fd6
|
|
382
|
+
// Every dark hex avoids the BLUE_SKIN regex /#3b4fd6|#11132a|#f5f6f9|#1a1a2e/i (note #1b1714 ≠ #1a1a2e).
|
|
383
383
|
//
|
|
384
384
|
// Inside the @media branch, override RULES are prefixed `html:not([data-theme="light"])` (not `:root:not`)
|
|
385
385
|
// on purpose: `:root` would add a full class-level of specificity and out-rank sibling base rules like
|
|
@@ -427,7 +427,7 @@ const WARM_DARK_RULES = [
|
|
|
427
427
|
];
|
|
428
428
|
|
|
429
429
|
// Report dark tokens (token-for-token against REPORT_ROOT; --font/--mono unchanged). --crimson keeps
|
|
430
|
-
//
|
|
430
|
+
// #860F09 (it is the accent FILL). The risk BANDS are their own family since the 2026-07-19 recolor and
|
|
431
431
|
// are free to lighten: each is its light base at +11 lightness (severe +10), saturation ×.92 — the same
|
|
432
432
|
// relationship the previous dark ramp used. That relationship is what makes the last stop visible on the
|
|
433
433
|
// dark ramp, and it does so better than before: dark --severe reads 2.70:1 on the page (was 1.74) and
|
|
@@ -478,10 +478,10 @@ export const REPORT_ROOT_DARK_EXPLICIT = darkBlock(REPORT_DARK_TOKENS, REPORT_DA
|
|
|
478
478
|
//
|
|
479
479
|
// WHY IT IS A FAMILY AND NOT A PAGE'S BUSINESS. Both doors are server-rendered by driver/portal-service
|
|
480
480
|
// and each carried its own copy of this block — including a hand-picked dark set that had drifted from
|
|
481
|
-
// the pack (
|
|
481
|
+
// the pack (#17150f ground, #ece5d8 text) and error colours with no home at all. Two copies of a palette
|
|
482
482
|
// is how the light palettes drifted before PALETTE existed.
|
|
483
483
|
//
|
|
484
|
-
// THE GATING IS `[data-theme]` ONLY (
|
|
484
|
+
// THE GATING IS `[data-theme]` ONLY (correcting what shipped). The portal's doctrine is
|
|
485
485
|
// that a CLIENT surface never follows the OS colour preference: first view is always light, and dark
|
|
486
486
|
// arrives only from a choice the visitor made themselves. kept the media query on the argument
|
|
487
487
|
// that these pages have no toggle, so removing it would leave a first-time visitor no route to dark —
|
|
@@ -574,7 +574,7 @@ header.rep .theme-toggle{float:right;margin-left:12px}
|
|
|
574
574
|
// emitted page — including reports published by deployments with no connection to that firm (
|
|
575
575
|
// measured it on the demo pool index, twice on one page). Stripping the label was the fix then;
|
|
576
576
|
// removing the watermark removes the surface.
|
|
577
|
-
// THE SWISS FLAG IS GONE, and it is
|
|
577
|
+
// THE SWISS FLAG IS GONE, and it is the ruling rather than a new one. The portal's lockup
|
|
578
578
|
// dropped it when the product was renamed — portal-ui/src/components/Logo.tsx states the reason and
|
|
579
579
|
// portal-ui/test/lockup.test.ts pins its ABSENCE so a well-meaning restore fails there:
|
|
580
580
|
//
|
|
@@ -639,7 +639,7 @@ export const CHROME_CSS = `
|
|
|
639
639
|
.lockup .lk-tag{margin-top:5px;font-size:7.5px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--muted)}
|
|
640
640
|
.has-glow{position:relative;isolation:isolate}
|
|
641
641
|
.has-glow::before{content:"";position:absolute;top:0;left:0;width:min(92vw,1100px);aspect-ratio:1.5;background:radial-gradient(farthest-side at 0% 0%,var(--web-glow),transparent 72%);pointer-events:none;z-index:-1}
|
|
642
|
-
/*
|
|
642
|
+
/* the .watermark rule and its ::after are GONE. They masked the parent company's ridge behind
|
|
643
643
|
every report and the pool index; the owner's call is removal, not a bracket version of the same
|
|
644
644
|
thing. The three body elements that carried the class drop it too, and --wm-alpha goes with them:
|
|
645
645
|
a token nothing reads is a knob somebody re-wires.
|
package/shared/citation-scan.mjs
CHANGED
|
@@ -47,7 +47,7 @@ export function scanCitations(files, readFn, { paths, excluded, declaredFor, sou
|
|
|
47
47
|
// Measured at the bound written here: 6 hits, all real. Widen it further only with the same
|
|
48
48
|
// measurement in hand.
|
|
49
49
|
const base = path.endsWith("/") ? null : path.slice(path.lastIndexOf("/") + 1);
|
|
50
|
-
// AND A DIRECTORY IS CITED BY ITS OWN NAME TOO (
|
|
50
|
+
// AND A DIRECTORY IS CITED BY ITS OWN NAME TOO (measured 2026-08-24). Three shipping
|
|
51
51
|
// files named `fixtures/owner-screen-2026-07-29` — a path relative to the file, not to the repo
|
|
52
52
|
// root — so `includes(path)` walked straight past every one of them and the reader got a
|
|
53
53
|
// directory that is not there. The FILES-ONLY bound above was measured against basenames like
|
package/shared/client-door.mjs
CHANGED
|
@@ -48,7 +48,7 @@ export const CLIENT_DOOR_UNIT = "clearotron-client-mcp.service";
|
|
|
48
48
|
/**
|
|
49
49
|
* Where revoked key ids live, and the one place that decides it.
|
|
50
50
|
*
|
|
51
|
-
* —
|
|
51
|
+
* — found in review. This literal was written out in four places (connect, start
|
|
52
52
|
* twice, disconnect). `connect` armed the variable AND created the file, with a comment saying exactly
|
|
53
53
|
* why: a named-but-absent file was the same landmine one step later, because `isRevoked` then failed
|
|
54
54
|
* OPEN on an unreadable list. It fails CLOSED now, which makes creating the file more load-bearing
|
|
@@ -63,7 +63,7 @@ export const defaultDenylistPath = (home) => join(home, ".config", "clearotron",
|
|
|
63
63
|
/**
|
|
64
64
|
* The denylist path a door should be given — the operator's, if they set one.
|
|
65
65
|
*
|
|
66
|
-
*,
|
|
66
|
+
*, a later review's sharpening of it. `defaultDenylistPath` answers "where does it live
|
|
67
67
|
* when nobody said"; this answers "where does it live", which is the question every caller actually had.
|
|
68
68
|
* The client door was composed with the default UNCONDITIONALLY while every other child inherited
|
|
69
69
|
* TRADEMARK_MCP_TOKEN_DENYLIST, so on a box where an operator had placed the list themselves:
|
|
@@ -173,7 +173,7 @@ export function clientDoorState({ env = {}, unitDir, exists, active = null, list
|
|
|
173
173
|
// synonym for false: a caller that cannot reach systemd must not be able to report a door as down
|
|
174
174
|
// any more than it can report one as up. Same discipline as the queue-watch arm's unprobed half.
|
|
175
175
|
return {
|
|
176
|
-
// —
|
|
176
|
+
// — found in review: what is ANSWERING, which the unit file cannot say.
|
|
177
177
|
// — THE PAIR, NOT ITS BOOLEAN. `active` collapses ActiveState and SubState,
|
|
178
178
|
// so a crash loop (`activating/auto-restart`) and a unit that was never started (`inactive/dead`)
|
|
179
179
|
// reduce to the same `false` and printed the same sentence — one is a fault to read the journal for,
|
|
@@ -228,7 +228,7 @@ export function describeDoorState(door, {
|
|
|
228
228
|
text: `the client door is HALF configured — ${missing}. Something began setting it up and stopped: `
|
|
229
229
|
+ `finish with \`${connectCmd}\`, or close it with \`${closeCmd}\`.` };
|
|
230
230
|
}
|
|
231
|
-
// A DOOR THAT ANSWERS IS SET UP, WHATEVER THE UNITS SAY (
|
|
231
|
+
// A DOOR THAT ANSWERS IS SET UP, WHATEVER THE UNITS SAY (found in review).
|
|
232
232
|
//
|
|
233
233
|
// `standing` is unit-file + fence, and a FOREGROUND `clearotron start` has neither: it runs the door
|
|
234
234
|
// as its own child. Measured — the door listening on its port while this sentence said "the client
|
|
@@ -263,7 +263,7 @@ export function describeDoorState(door, {
|
|
|
263
263
|
+ "so this says the door is set up, not that it answers" };
|
|
264
264
|
}
|
|
265
265
|
if (door.active === false) {
|
|
266
|
-
// NAME THE STATE, AND NEVER ASSERT AN EMPTY PORT WITHOUT LOOKING
|
|
266
|
+
// NAME THE STATE, AND NEVER ASSERT AN EMPTY PORT WITHOUT LOOKING.
|
|
267
267
|
//
|
|
268
268
|
// This said "nothing is listening on the client door" from `active === false` alone, while a probe
|
|
269
269
|
// of that very port had already been taken and passed in — and read nowhere on this branch. With a
|
|
@@ -477,7 +477,7 @@ export function enablePlan({ env = {}, address, identity, accessFile = null, por
|
|
|
477
477
|
}
|
|
478
478
|
}
|
|
479
479
|
|
|
480
|
-
// ── THE PORT IS CHECKED, NOT ASSUMED (
|
|
480
|
+
// ── THE PORT IS CHECKED, NOT ASSUMED (and measured 2026-08-31) ──────────────────────────
|
|
481
481
|
//
|
|
482
482
|
// A default port is a guess about which instance you are. Driving this verb on a shared box found
|
|
483
483
|
// 18811 ALREADY HELD by another user's client face: the unit was installed, started, and crash-looped,
|
|
@@ -987,7 +987,7 @@ export function applyDisablePlan(plan, io) {
|
|
|
987
987
|
return { done };
|
|
988
988
|
}
|
|
989
989
|
|
|
990
|
-
// ── IS THE PUBLISHED ADDRESS REAL? (
|
|
990
|
+
// ── IS THE PUBLISHED ADDRESS REAL? (acceptance 2) ────────────────────────────────
|
|
991
991
|
//
|
|
992
992
|
// The criterion is deliberate about which question this answers: "doctor reports the door's
|
|
993
993
|
// REACHABILITY, not its configuration — the address is set AND answers from outside the box. An address
|
package/shared/driver-dir.mjs
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
// IT DOES NOT SET A MODE, and this change alters no behaviour on disk. Pinning 0o750 here in the same
|
|
44
44
|
// commit would be a semantic change riding inside a seam, and the seam is the part that has to be
|
|
45
45
|
// reviewable by reading nineteen call sites and agreeing they still mean what they meant. The mode is
|
|
46
|
-
//
|
|
46
|
+
// That business, and when it is taken it is one line in this file.
|
|
47
47
|
//
|
|
48
48
|
// IT WOULD NOT RESTRAIN THE SEAT IF IT DID. The agent runs as the same account that owns these
|
|
49
49
|
// directories, so owner bits apply whatever the group bits say. A tighter mode removes GROUP write,
|
package/shared/env-aliases.mjs
CHANGED
|
@@ -85,48 +85,6 @@ export function envFrom(env, name) {
|
|
|
85
85
|
return v === "" ? undefined : v;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
/** The prefix every retired spelling carries. The rename moved the stem and nothing else. */
|
|
89
|
-
export const RETIRED_PREFIX = "PRELIM_";
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Every retired-spelling line SET in `env`, each with the name in force where there is one.
|
|
93
|
-
*
|
|
94
|
-
* ── THE DETECTION NEEDS NO TABLE, AND THAT IS DELIBERATE ────────────────────────────────────────
|
|
95
|
-
*
|
|
96
|
-
* No product code reads a `PRELIM_*` name — nothing on this tree does, and an arm holds it that way
|
|
97
|
-
* (driver/test/retired-env-spellings.test.mjs). So a `PRELIM_*` line that is SET is dead, full stop,
|
|
98
|
-
* and this cannot go stale against a list somebody forgot to update. A table-driven detection would
|
|
99
|
-
* have exactly the failure mode the issue was filed about: silence for the name nobody wrote down.
|
|
100
|
-
*
|
|
101
|
-
* The table decides only the SECOND half of the sentence — which name to use instead — because that
|
|
102
|
-
* is the half that can be wrong. `NAMES_IN_FORCE` is derived from the build's own readers
|
|
103
|
-
* (scripts/mint-names-in-force.mjs), so a replacement is named only when something actually reads it.
|
|
104
|
-
* Where no `CLEAROTRON_` partner exists the setting did not move, it went, and `replacement` is null.
|
|
105
|
-
* Sending an operator to a variable nothing reads would replace one silent failure with another.
|
|
106
|
-
*
|
|
107
|
-
* EMPTY IS UNSET, as everywhere else here: an `X=` line in an EnvironmentFile means "not configured",
|
|
108
|
-
* so it is not reported. An operator who blanked a line has already stopped setting it.
|
|
109
|
-
*/
|
|
110
|
-
export function retiredSpellingsIn(env = process.env) {
|
|
111
|
-
const inForce = new Set(NAMES_IN_FORCE);
|
|
112
|
-
const found = [];
|
|
113
|
-
for (const name of Object.keys(env ?? {})) {
|
|
114
|
-
if (!name.startsWith(RETIRED_PREFIX) || !has(env, name)) continue;
|
|
115
|
-
const candidate = `CLEAROTRON_${name.slice(RETIRED_PREFIX.length)}`;
|
|
116
|
-
found.push({ name, replacement: inForce.has(candidate) ? candidate : null });
|
|
117
|
-
}
|
|
118
|
-
return found.sort((a, b) => a.name.localeCompare(b.name));
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/** The one sentence a retired spelling is worth, used by every surface that reports one. */
|
|
122
|
-
export function retiredSpellingLine({ name, replacement }) {
|
|
123
|
-
return replacement
|
|
124
|
-
? `${name} is a RETIRED spelling and nothing reads it — the name in force is ${replacement}. `
|
|
125
|
-
+ `Rename the line in your environment file; its value is being ignored until you do.`
|
|
126
|
-
: `${name} is a RETIRED spelling and nothing reads it — this setting no longer exists under any `
|
|
127
|
-
+ `name. Delete the line from your environment file.`;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
88
|
/**
|
|
131
89
|
* Say so when a DELETED setting is still set. Nothing is applied and nothing is translated.
|
|
132
90
|
*
|
|
@@ -141,12 +99,6 @@ export function warnRetiredEnv({ env = process.env, note = defaultNote } = {}) {
|
|
|
141
99
|
+ `environment file.\n`);
|
|
142
100
|
said.push(name);
|
|
143
101
|
}
|
|
144
|
-
// The retired SPELLINGS, on the same footing and through the same emitter — so every service that
|
|
145
|
-
// already announces its posture at boot announces this too, rather than one service happening to.
|
|
146
|
-
for (const row of retiredSpellingsIn(env)) {
|
|
147
|
-
note(`[env] ${retiredSpellingLine(row)}\n`);
|
|
148
|
-
said.push(row.name);
|
|
149
|
-
}
|
|
150
102
|
return said;
|
|
151
103
|
}
|
|
152
104
|
|
package/shared/env-local.mjs
CHANGED
|
@@ -203,7 +203,7 @@ export const NO_DOTFILE = Object.freeze([
|
|
|
203
203
|
// derived guard caught it in the same commit that created it, which is the eleventh arriving loudly.
|
|
204
204
|
"scripts/post-deploy-validate.mjs",
|
|
205
205
|
// step 4 / — THE DERIVED SCAN COULD NOT SEE THESE TWO, and the reason is worth keeping.
|
|
206
|
-
//
|
|
206
|
+
// That scan walked every shebang entry looking for a module-top `process.env` capture of a renamed
|
|
207
207
|
// name. These capture INSIDE a function, so the scan passed over them — and they were stranding an
|
|
208
208
|
// operator all the same: both read a retired spelling and reached no translation, so a box configured
|
|
209
209
|
// with the name in force handed them nothing and the read fell through to a default. `compare` printed
|
|
@@ -288,7 +288,7 @@ const COMMENT_LINE = /^\s*(\/\/|#|\*|<!--)/;
|
|
|
288
288
|
// address, and a reader sent looking for one would be looking in the wrong place.
|
|
289
289
|
// `contact` joins on the owner's ruling of 2026-08-24: the launch documents collapsed to ONE public
|
|
290
290
|
// mailbox, and counsel's pack (ADDITIONAL-TERMS.md, NOTICES.md, TRADEMARKS.md) prints it. Added here in
|
|
291
|
-
// the same PR that introduced it, per
|
|
291
|
+
// the same PR that introduced it, per the rule above — a ruled mailbox joins this list, it never gets
|
|
292
292
|
// a domain exemption. `interested` and `security` stay: they are no longer printed by any shipping
|
|
293
293
|
// document, but removing a localpart from an allowlist is how a future document that uses one again
|
|
294
294
|
// fails for a reason nobody expects.
|
|
@@ -390,7 +390,7 @@ export function scanOperatorIdentity(files, readFn, { withheld = () => false } =
|
|
|
390
390
|
// ──: THE RETIRED PLATFORM ───────────────────────────────────────────────────────────────────
|
|
391
391
|
//
|
|
392
392
|
// The sixth pattern, and the narrowest: one token, matched case-insensitively, anywhere in a tracked
|
|
393
|
-
// file. It is here rather than in a one-off script because
|
|
393
|
+
// file. It is here rather than in a one-off script because the last scope line asks for exactly
|
|
394
394
|
// this — "extend the battery so this class cannot return" — and because the class it guards is the
|
|
395
395
|
// one the other five provably could not see. An integrator platform's name is not a person, not a
|
|
396
396
|
// home path, not a classification stamp, not an audience, and not a vendor standing where a category
|
|
@@ -439,7 +439,7 @@ export const namesRetiredPlatform = (text) => RETIRED_PLATFORM.test(String(text
|
|
|
439
439
|
// reasonably concludes they need a Cloudflare account.
|
|
440
440
|
//
|
|
441
441
|
// WHY A QUALIFIER RATHER THAN A BAN. The vendor name must keep appearing — a runbook worked through
|
|
442
|
-
// one real proxy end to end is worth more to an installer than an abstract one, and
|
|
442
|
+
// one real proxy end to end is worth more to an installer than an abstract one, and the rewrite
|
|
443
443
|
// deliberately kept it. What must not happen is the name standing where the CATEGORY belongs. So the
|
|
444
444
|
// rule is: name the vendor as much as you like, provided the line (or the one either side of it) says
|
|
445
445
|
// it is an example, a reference, or what THIS deployment happens to use.
|
package/shared/invocation.mjs
CHANGED
|
@@ -263,7 +263,7 @@ export const bareInvocation = (verb) => `clearotron ${verb}`;
|
|
|
263
263
|
/**
|
|
264
264
|
* Refuse a prompt when there is nobody to answer it.
|
|
265
265
|
*
|
|
266
|
-
* —
|
|
266
|
+
* — found in review. `install` has said this since it was written; `connect`
|
|
267
267
|
* and `disconnect` prompt through readline and did not, so piped or redirected they read EOF and took
|
|
268
268
|
* it as an answer. `install`'s exit code and wording are the model, and this is that model shared
|
|
269
269
|
* rather than copied a third time.
|
|
@@ -141,6 +141,7 @@ export const NAMES_IN_FORCE = Object.freeze([
|
|
|
141
141
|
"CLEAROTRON_REPLAY_SNAPSHOT",
|
|
142
142
|
"CLEAROTRON_REPORTS_DIR",
|
|
143
143
|
"CLEAROTRON_REPORTS_URL",
|
|
144
|
+
"CLEAROTRON_REQUESTER_WHATSAPP",
|
|
144
145
|
"CLEAROTRON_REQUIRE_EXPLICIT_PORTS",
|
|
145
146
|
"CLEAROTRON_RETRY_BACKOFF_MS",
|
|
146
147
|
"CLEAROTRON_RUN_DIR",
|
|
@@ -168,6 +169,7 @@ export const NAMES_IN_FORCE = Object.freeze([
|
|
|
168
169
|
"CLEAROTRON_WARM_RETRY",
|
|
169
170
|
"CLEAROTRON_WATCH_",
|
|
170
171
|
"CLEAROTRON_WHATIF_MAX_CONCURRENT",
|
|
172
|
+
"CLEAROTRON_WHATSAPP_OPERATOR_COPY",
|
|
171
173
|
"CLEAROTRON_WORKSPACE_PREFIX",
|
|
172
174
|
"CLEAROTRON_WORK_DIR",
|
|
173
175
|
"CLEAROTRON_X",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
// Add it here and nowhere else, and only if this product genuinely owns it. A prefix added to let one
|
|
25
25
|
// awkward name through re-opens the gap for every future gather — the cost is not local.
|
|
26
26
|
export const PRODUCT_NAME_PREFIXES = Object.freeze([
|
|
27
|
-
"
|
|
27
|
+
"CLEAROTRON", "CLEAROTRON", "PORTAL", "TRADEMARK_MCP", "CLIENT_MCP", "CLIENT_ACCESS",
|
|
28
28
|
"CLIENT_CF", "PROFILE", "RECIPE", "MCP_A",
|
|
29
29
|
]);
|
|
30
30
|
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
// `driver/run-requirements.mjs` derives from those two fields and never restates them.
|
|
32
32
|
//
|
|
33
33
|
// The vendor sign-up steps travel WITH the table rather than staying behind in the wizard: they are
|
|
34
|
-
// facts about the register, the wizard is one reader of them, and
|
|
34
|
+
// facts about the register, the wizard is one reader of them, and the same steps are asked for on the same
|
|
35
35
|
// steps on surfaces the wizard does not own.
|
|
36
36
|
|
|
37
37
|
// The USPTO sizing figures are MEASURED and live in their own module; the warnings below quote them
|