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.
- package/.env.example +82 -1
- package/.nvmrc +1 -1
- package/CONTRIBUTING.md +3 -3
- package/INSTALL.md +64 -58
- package/README.md +11 -16
- package/THIRD-PARTY-NOTICES.md +1 -1
- package/bin/brandowner.mjs +1 -1
- package/bin/clearotron.mjs +26 -4
- package/bin/connect.mjs +2 -2
- package/bin/example.mjs +31 -11
- package/bin/grant.mjs +3 -3
- package/bin/key.mjs +1 -1
- package/bin/onboard.mjs +252 -136
- package/bin/start.mjs +176 -33
- 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/demo/full-country-search/run/_driver/framework.json +1 -1
- package/demo/global-preliminary-search/run/_driver/framework.json +1 -1
- package/demo/knockout-search/run/_driver/framework.json +1 -1
- package/demo/multi-country-focus-search/run/_driver/framework.json +1 -1
- package/docs/DELIVERY.md +6 -2
- package/docs/E2E.md +5 -5
- package/docs/PORTAL.md +2 -2
- package/docs/README.md +5 -4
- package/docs/SECURITY.md +17 -0
- package/docs/architecture/01-product-overview.md +2 -2
- package/docs/architecture/02-architecture.md +2 -2
- package/docs/architecture/04-configuration-reference.md +8 -3
- package/docs/architecture/05-config-governance.md +52 -5
- package/docs/architecture/05-customer-profiles.md +2 -2
- package/docs/architecture/06-operations-runbook.md +13 -1
- package/docs/architecture/09-security-and-data.md +1 -1
- package/docs/configuration.md +4 -3
- package/docs/decisions/0004-documentation-structure.md +1 -1
- package/driver/CHANGELOG.md +121 -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 +2 -2
- package/driver/commonlaw-carry.mjs +1 -1
- package/driver/config-inventory.mjs +1 -1
- package/driver/config-staleness.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 +3 -3
- 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 +64 -12
- 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/cli-version.mjs +103 -0
- 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 +10 -10
- package/driver/enqueue.mjs +1 -1
- package/driver/envelope-settle.mjs +1 -1
- package/driver/evidence-claim-invariant.mjs +2 -2
- package/driver/feedback-store.mjs +1 -1
- package/driver/findings-model.mjs +60 -10
- package/driver/flag-snapshot.mjs +20 -0
- package/driver/floor-duty.mjs +1 -1
- package/driver/form-neighbourhood.mjs +1 -1
- package/driver/framework.mjs +2 -2
- package/driver/gateway.mjs +45 -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 +4 -4
- package/driver/party-facts.mjs +2 -2
- package/driver/phase0.mjs +2 -2
- package/driver/pipeline-knockout.mjs +52 -4
- package/driver/pipeline.mjs +180 -67
- package/driver/placement-diff.mjs +2 -2
- package/driver/placement-form.mjs +4 -4
- package/driver/placement-union.mjs +1 -1
- package/driver/plain-register.mjs +120 -0
- package/driver/portal-access.mjs +1 -1
- package/driver/portal-acks.mjs +1 -1
- package/driver/portal-config-view.mjs +42 -3
- package/driver/portal-families.mjs +1 -1
- package/driver/portal-local-auth.mjs +1 -1
- package/driver/portal-report.mjs +7 -7
- package/driver/portal-service.mjs +41 -22
- package/driver/portal-upstream.mjs +2 -2
- package/driver/predelivery-lint.mjs +149 -11
- package/driver/prelim-variants-record.mjs +2 -2
- package/driver/profile-page.html +11 -3
- package/driver/profile-selection.mjs +1 -1
- package/driver/profile-service.mjs +6 -6
- package/driver/profiles/README.md +3 -3
- package/driver/profiles.mjs +145 -13
- 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 +49 -8
- package/driver/publish/knockout.mjs +42 -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 +646 -144
- package/driver/publish/render.mjs +2 -2
- 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/reference-strip-signatures.mjs +20 -0
- 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 +5 -5
- package/driver/skeptic-search.mjs +1 -1
- package/driver/skills/blind-frame/SKILL.md +2 -2
- package/driver/skills/case-law-citation/SKILL.md +2 -2
- package/driver/skills/knockout-assess/SKILL.md +94 -4
- package/driver/skills/matter-frame/SKILL.md +6 -6
- package/driver/skills/matter-frame/watchlist-reference.md +2 -2
- package/driver/skills/prelim-common-law/SKILL.md +1 -1
- package/driver/skills/prelim-search/SKILL.md +3 -3
- package/driver/skills/prelim-search/report-prose.md +82 -0
- package/driver/skills/prelim-search/risk-framework-demo.manifest.json +1 -1
- package/driver/skills/prelim-search/risk-framework-triage.manifest.json +1 -1
- package/driver/skills/prelim-search/risk-framework.manifest.json +1 -1
- package/driver/skills/prelim-search/synthesis-rules.md +1 -1
- 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 +5 -5
- package/driver/stage-context.mjs +1 -1
- package/driver/stages-knockout.mjs +55 -4
- package/driver/stages.mjs +101 -44
- package/driver/stray-artifacts.mjs +2 -2
- package/driver/suite-census.json +275 -65
- 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 +297 -80
- package/driver/unit-state-verdict.mjs +20 -12
- package/driver/verify-knockout.mjs +10 -2
- package/driver/verify.mjs +13 -13
- package/driver/whatif-memo-run.mjs +72 -9
- package/driver/whatif-memo.mjs +19 -1
- package/driver/whatif-queue.mjs +1 -1
- package/driver/whatif-worker.mjs +1 -1
- package/examples/README.md +2 -2
- package/examples/grants.example.json +6 -7
- package/mcp-server/CHANGELOG.md +6 -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 +2 -2
- package/mcp-server/lib/whatif.mjs +5 -5
- package/mcp-server/mint-token.mjs +1 -1
- package/mcp-server/package.json +2 -2
- package/mcp-server/packs/ops/EXAMPLES.md +2 -2
- package/mcp-server/server.mjs +77 -12
- package/package.json +30 -12
- package/portal-ui/dist/assets/{index-Ct3iQtZ2.css → index-1ziUJX1E.css} +43 -2
- package/portal-ui/dist/assets/{index-BUGgiYtF.js → index-CEYvXdqH.js} +226 -49
- package/portal-ui/dist/index.html +2 -2
- 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 +2 -2
- package/providers/corsearch/src/core.js +1 -1
- package/providers/jx-subclass/BUILDING.md +1 -1
- package/providers/oauth-mcp-bridge/CHANGELOG.md +6 -0
- package/providers/oauth-mcp-bridge/package.json +1 -1
- package/providers/oauth-mcp-bridge/stdin-guard.mjs +2 -2
- package/providers/uspto-local/src/index-store.js +2 -2
- package/scripts/README.md +1 -1
- package/scripts/added-reference-check.mjs +29 -1
- package/scripts/authority-boundary-probe.mjs +1 -1
- package/scripts/backfill-started-at.mjs +1 -1
- package/scripts/citation-line-check.mjs +124 -5
- package/scripts/compare.mjs +2 -2
- 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 +206 -18
- 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/live-surface-check.mjs +129 -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 -3
- package/scripts/preinstall-node-check.mjs +24 -0
- 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 +139 -0
- package/scripts/test-run.mjs +19 -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/anon-overlay.mjs +3 -3
- package/shared/brand.mjs +13 -13
- package/shared/citation-scan.mjs +1 -1
- package/shared/client-door.mjs +7 -7
- package/shared/customer-store.mjs +1 -1
- 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 +29 -1
- package/shared/names-in-force.mjs +4 -0
- package/shared/node-floor.mjs +97 -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/staff-domain.mjs +154 -0
- package/shared/store-in-repo.mjs +25 -4
- 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/skills/clearotron-ops/SKILL.md +1 -1
- package/driver/recipes/README.md +0 -49
- package/driver/skills/prelim-search/risk-framework-aurora.manifest.json +0 -19
- package/driver/skills/prelim-search/risk-framework-aurora.md +0 -77
- package/driver/skills/prelim-search/risk-framework-zephyr.manifest.json +0 -14
- package/driver/skills/prelim-search/risk-framework-zephyr.md +0 -33
- package/driver/skills/prelim-search/worked-examples-aurora.md +0 -10
- package/driver/skills/prelim-search/worked-examples-zephyr.md +0 -10
- 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/ai-page-render-check.mjs +0 -532
- package/scripts/clearances-render-check.mjs +0 -480
- package/scripts/composer-render-check.mjs +0 -1027
- package/scripts/deploy-test.sh +0 -309
- package/scripts/home-render-check.mjs +0 -526
- package/scripts/portal-lifecycle-check.mjs +0 -639
package/scripts/env-classify.mjs
CHANGED
|
@@ -38,7 +38,7 @@ import "../shared/env-local.mjs"; // — FIRST, and it became REQUIRED here:
|
|
|
38
38
|
// the capture evaluates before the CLEAROTRON_* translation lands. A
|
|
39
39
|
// call in this file's BODY would run too late. The guard named the
|
|
40
40
|
// file, the module it reaches, and the fix.
|
|
41
|
-
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
41
|
+
import { readFileSync, readdirSync, writeFileSync, existsSync } from "node:fs";
|
|
42
42
|
// — the product-owned-names rule, shared rather than a regex in this file.
|
|
43
43
|
import { makeIsProductOwned, partitionByOwnership, droppedShape, FILTER_DECLARATION }
|
|
44
44
|
from "../shared/product-owned-names.mjs";
|
|
@@ -60,7 +60,7 @@ export function namesInEnvFile(text) {
|
|
|
60
60
|
}
|
|
61
61
|
/** Every house or vendor variable MENTIONED in a script — the shape the config repo's bin/ writes. */
|
|
62
62
|
export function namesMentioned(text) {
|
|
63
|
-
return [...text.matchAll(/\b(?:
|
|
63
|
+
return [...text.matchAll(/\b(?:CLEAROTRON|CLEAROTRON|PORTAL|TRADEMARK_MCP|CLIENT_MCP|CLIENT_ACCESS|PROFILE|RECIPE|MOCK)_[A-Z0-9_]+/g)].map((m) => m[0]);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/**
|
|
@@ -73,7 +73,7 @@ export function namesMentioned(text) {
|
|
|
73
73
|
// — NO EXECUTABLE LINE NAMES A SPECIFIC ACCOUNT'S HOME. These paths are per-box facts and this
|
|
74
74
|
// script ships. They arrive as COMMAND-LINE FLAGS, not environment variables.
|
|
75
75
|
//
|
|
76
|
-
// The first fix used four new house-prefixed variables instead, and
|
|
76
|
+
// The first fix used four new house-prefixed variables instead, and the ratchet refused them —
|
|
77
77
|
// correctly: adding four names to the configuration surface is precisely wrong in the tool built to
|
|
78
78
|
// shrink it, and a maintainer's per-invocation path is an argument. The names are deliberately not
|
|
79
79
|
// written out even here: `namesRead` scans comments too, and a variable that exists only in prose is
|
|
@@ -83,7 +83,74 @@ const flag = (name) => {
|
|
|
83
83
|
return i > 0 && process.argv[i + 1] && !process.argv[i + 1].startsWith("--") ? process.argv[i + 1] : "";
|
|
84
84
|
};
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
/**
|
|
87
|
+
* A SHIPPED FILE THIS SCRIPT CANNOT WORK WITHOUT — read it, or say so and stop.
|
|
88
|
+
*
|
|
89
|
+
* `read()` answers "" on ENOENT, which is right where a file is legitimately absent and wrong where its
|
|
90
|
+
* absence means the tree is broken. Every caller here is the second kind: they are files the product
|
|
91
|
+
* always ships, and an empty read of one silently empties a source that feeds `everSet` — and a name
|
|
92
|
+
* nothing is recorded as setting is a name a configuration cleanup removes.
|
|
93
|
+
*
|
|
94
|
+
* One helper rather than a check at each site, so a source added later cannot get this wrong by being
|
|
95
|
+
* written the obvious way: reading through it is how you read.
|
|
96
|
+
*/
|
|
97
|
+
function mustRead(root, rel, why) {
|
|
98
|
+
const p = join(root, rel);
|
|
99
|
+
// READ FIRST AND KEEP THE REASON. Going through `read()` and then asking `existsSync` would separate
|
|
100
|
+
// absent from present only by accident of which case that second call can see: `read()` swallows
|
|
101
|
+
// EVERY error, so a file that EXISTS and cannot be read — a permission, a directory standing where a
|
|
102
|
+
// file belongs, a truncated mount — comes back "" and passes straight through as though it held
|
|
103
|
+
// nothing. Same consequence as absence and the same silence, one test narrower.
|
|
104
|
+
try {
|
|
105
|
+
return readFileSync(p, "utf8");
|
|
106
|
+
} catch (e) {
|
|
107
|
+
const tail = `${why} Reading it as empty would put every name it holds on the deletion population.`;
|
|
108
|
+
if (e.code !== "ENOENT")
|
|
109
|
+
throw new Error(`env-classify: ${p} exists and could not be read (${e.code}). ${tail}`);
|
|
110
|
+
throw new Error(`env-classify: ${p} is absent. ${tail} Its absence is this script failing to look, `
|
|
111
|
+
+ "not a finding about the tree.");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Every variable name a WORKFLOW sets, across all of them.
|
|
117
|
+
*
|
|
118
|
+
* This source used to read `.github/workflows/ci.yml` and nothing else, which made the release workflow
|
|
119
|
+
* invisible to it. `CLEAROTRON_CUT_REF` and `CLEAROTRON_RELEASE_WAIT_MS` are set there and nowhere else,
|
|
120
|
+
* so both reported `everSet: []` and both landed on the deletion population — two names a reviewer would
|
|
121
|
+
* have been asked to remove because the one file that sets them was not being read. A name being set by
|
|
122
|
+
* the release surface rather than the test surface says nothing about whether it is a knob.
|
|
123
|
+
*
|
|
124
|
+
* AN ABSENT DIRECTORY THROWS instead of returning nothing. `read()` answers "" on ENOENT, so the old
|
|
125
|
+
* single-file read degraded silently: a renamed or moved ci.yml would have emptied this source, reported
|
|
126
|
+
* every workflow-set name as never set, and nothing in the output would have said the look had failed.
|
|
127
|
+
*/
|
|
128
|
+
function workflowNames(root) {
|
|
129
|
+
const dir = join(root, ".github/workflows");
|
|
130
|
+
let files;
|
|
131
|
+
try {
|
|
132
|
+
files = readdirSync(dir).filter((f) => /\.ya?ml$/.test(f)).sort();
|
|
133
|
+
} catch (e) {
|
|
134
|
+
throw new Error(`env-classify: cannot read ${dir} (${e.code}). That is this script failing to look, `
|
|
135
|
+
+ "not a tree with no workflows, and an empty CI source silently widens the deletion population.");
|
|
136
|
+
}
|
|
137
|
+
if (!files.length)
|
|
138
|
+
throw new Error(`env-classify: ${dir} holds no .yml files. Every workflow-set name would read as `
|
|
139
|
+
+ "never set, which is the shape this source exists to prevent.");
|
|
140
|
+
return files.flatMap((f) => [...read(join(dir, f)).matchAll(/^\s*([A-Z][A-Z0-9_]*):/gm)].map((m) => m[1]));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export function gather({ root = ROOT, prodList = null } = {}) {
|
|
144
|
+
// THE PRODUCTION HALF CAN BE ABSENT, AND ABSENT MUST NOT READ AS "PRODUCTION SETS NOTHING". `read()`
|
|
145
|
+
// answers "" on ENOENT, so a missing list made all 72 production-set names report `everSet: []` — and
|
|
146
|
+
// `tuning` with an empty `everSet` IS the deletion population. That is the same failure the CI source
|
|
147
|
+
// carried, one source over: the file is withheld from the public tree, so on a public checkout this
|
|
148
|
+
// silently classified production's own configuration as unused. `prodRead` records whether the look
|
|
149
|
+
// happened, so a caller can tell a real answer from no answer. A list passed in is its caller's claim
|
|
150
|
+
// to make, and counts as read.
|
|
151
|
+
const prodGiven = prodList !== null;
|
|
152
|
+
const prodText = prodGiven ? prodList : read(PROD);
|
|
153
|
+
const prodRead = prodGiven || existsSync(PROD);
|
|
87
154
|
const set = (xs) => new Set(xs.filter(Boolean));
|
|
88
155
|
const tracked = (glob) => git("ls-files", "--", glob).split("\n").filter(Boolean);
|
|
89
156
|
const sudoRead = (p) => { try { return execFileSync("sudo", ["-n", "cat", p], { encoding: "utf8" }); } catch { return ""; } };
|
|
@@ -91,14 +158,16 @@ export function gather({ root = ROOT, prodList = read(PROD) } = {}) {
|
|
|
91
158
|
const config = flag("config-repo") ? [flag("config-repo")] : [];
|
|
92
159
|
return {
|
|
93
160
|
// COMMITTED, not gathered: the production read needs privilege a reviewer does not have.
|
|
94
|
-
prod: set(
|
|
161
|
+
prod: set(prodText.split("\n").map((l) => l.trim()).filter((l) => l && !l.startsWith("#"))),
|
|
162
|
+
prodRead,
|
|
95
163
|
test: set(flag("test-env") ? namesInEnvFile(sudoRead(flag("test-env"))) : []),
|
|
96
164
|
config: set(config.flatMap((r) => {
|
|
97
165
|
let files = []; try { files = execFileSync("sudo", ["-n", "find", r, "-type", "f", "-not", "-path", "*/.git/*"], { encoding: "utf8" }).split("\n").filter(Boolean); } catch { return []; }
|
|
98
166
|
return files.flatMap((f) => { const t = sudoRead(f); return [...namesInEnvFile(t), ...namesMentioned(t)]; });
|
|
99
167
|
})),
|
|
100
|
-
ci: set(
|
|
101
|
-
e2e: set(["scripts/e2e.mjs", "scripts/test-run.mjs"]
|
|
168
|
+
ci: set(workflowNames(root)),
|
|
169
|
+
e2e: set(["scripts/e2e.mjs", "scripts/test-run.mjs"]
|
|
170
|
+
.flatMap((f) => namesMentioned(mustRead(root, f, "It is the end-to-end surface, and the names it sets are set nowhere else.")))),
|
|
102
171
|
// A DESCRIPTION, never a setting. Kept apart so `everSet` cannot be satisfied by documentation.
|
|
103
172
|
docs: set([".env.example", ".env.dev.example", ".env.prod.example"]
|
|
104
173
|
.flatMap((f) => [...read(join(root, f)).matchAll(/^#?\s*([A-Z][A-Z0-9_]*)=/gm)].map((m) => m[1]))),
|
|
@@ -108,8 +177,15 @@ export function gather({ root = ROOT, prodList = read(PROD) } = {}) {
|
|
|
108
177
|
|
|
109
178
|
/** The setup population: what the wizard WRITES, expanded through the alias table. */
|
|
110
179
|
export function setupNames(root = ROOT) {
|
|
111
|
-
|
|
112
|
-
|
|
180
|
+
// THE WORST ONE TO LOSE, and the reason it is read through `mustRead`. This is the population that
|
|
181
|
+
// separates "the wizard writes this at install" from "nobody sets this anywhere". Empty, every setup
|
|
182
|
+
// name falls through the shape tests to `tuning` — the residual bucket — and `tuning` with no recorded
|
|
183
|
+
// set-site IS the deletion population. So a missing wizard would not merely lose a source; it would
|
|
184
|
+
// propose the whole install surface for removal, with nothing in the output saying the file was gone.
|
|
185
|
+
const onboard = mustRead(root, "bin/onboard.mjs",
|
|
186
|
+
"It is the install wizard, and what it writes is the whole setup population.");
|
|
187
|
+
const cfg = mustRead(root, "driver/driver.config.mjs",
|
|
188
|
+
"It carries the table whose credential fields name the rest of that population.");
|
|
113
189
|
const seed = new Set();
|
|
114
190
|
for (const m of onboard.matchAll(/candidate\.([A-Z][A-Z0-9_]*)\s*=/g)) seed.add(m[1]);
|
|
115
191
|
for (const m of onboard.matchAll(/candidate\["([A-Z][A-Z0-9_]*)"\]\s*=/g)) seed.add(m[1]);
|
|
@@ -245,12 +321,45 @@ export function defaultAtReadSite(name, root = ROOT) {
|
|
|
245
321
|
|
|
246
322
|
/** The whole classification, pure over its inputs so a test drives it without a box. */
|
|
247
323
|
export function classify({ catalogue, sources, setup = setupNames(), readSites = defaultAtReadSite,
|
|
248
|
-
deploymentNames = DEPLOYMENT_NAMES } = {}) {
|
|
249
|
-
//
|
|
250
|
-
//
|
|
251
|
-
//
|
|
252
|
-
//
|
|
253
|
-
|
|
324
|
+
deploymentNames = DEPLOYMENT_NAMES, declared = new Map() } = {}) {
|
|
325
|
+
// NAMED OVERRIDES, listed rather than folded into a pattern so that each can be argued with.
|
|
326
|
+
//
|
|
327
|
+
// `CLEAROTRON_AGENT_WHATSAPP` matches no deployment shape and is not a knob: production sets it to a
|
|
328
|
+
// contact map, so it is a notification DESTINATION. Established from the SHAPE of the value, never its
|
|
329
|
+
// content. A pattern wide enough to catch it would have swept in real knobs.
|
|
330
|
+
//
|
|
331
|
+
// The other two are the same fact about the same thing, and they are here because the register already
|
|
332
|
+
// declares them `deployment` while this classifier — which keys on the NAME — filed them as `tuning`.
|
|
333
|
+
// That disagreement is not cosmetic: tuning names with no recorded set-site are the population this
|
|
334
|
+
// script walks for deletion candidates, and both are destinations a deployment may legitimately leave
|
|
335
|
+
// unset. A one-word mismatch would have put a notification address on a list of names to remove.
|
|
336
|
+
//
|
|
337
|
+
// · CLEAROTRON_REQUESTER_WHATSAPP — the map of requester → number. A destination, like the agent
|
|
338
|
+
// map above, and the reason that one is here applies verbatim.
|
|
339
|
+
// · CLEAROTRON_WHATSAPP_OPERATOR_COPY — whether the operator keeps a copy. It reads as a knob and is
|
|
340
|
+
// not one: it decides WHETHER a second destination is used, so
|
|
341
|
+
// changing it changes who is told, never what a run concludes.
|
|
342
|
+
//
|
|
343
|
+
// `CLEAROTRON_JX_SUBCLASS_DB` is the fourth, and it is the plainest reading of `deployment` on this
|
|
344
|
+
// list: the catalogue row says it names WHERE THE SUBCLASS TABLE LIVES, and that what the table says
|
|
345
|
+
// belongs to the build. Where input lives, with the conclusion a run reaches unchanged — the
|
|
346
|
+
// definition, almost word for word. The classifier filed it `tuning` because no shape in this file
|
|
347
|
+
// matches the spelling, and `tuning` is the residual bucket, so the row was not an opinion about the
|
|
348
|
+
// name so much as the absence of one.
|
|
349
|
+
//
|
|
350
|
+
// It is here rather than in a widened pattern because the name has no default and the lane REFUSES
|
|
351
|
+
// when it is unset. That makes it the worst possible member of a deletion population: removing it
|
|
352
|
+
// does not retire an unused knob, it takes out the only way the lane can be pointed at a table at all.
|
|
353
|
+
//
|
|
354
|
+
// The first three were found in review, not by the classifier, because nothing reconciled the
|
|
355
|
+
// catalogue's declared effect against this table and the two could disagree indefinitely. That
|
|
356
|
+
// comparison now runs as an arm, and this entry is the first thing it produced.
|
|
357
|
+
const OVERRIDES = {
|
|
358
|
+
CLEAROTRON_AGENT_WHATSAPP: "deployment",
|
|
359
|
+
CLEAROTRON_REQUESTER_WHATSAPP: "deployment",
|
|
360
|
+
CLEAROTRON_WHATSAPP_OPERATOR_COPY: "deployment",
|
|
361
|
+
CLEAROTRON_JX_SUBCLASS_DB: "deployment",
|
|
362
|
+
};
|
|
254
363
|
|
|
255
364
|
const cls = (name) => OVERRIDES[name] ?? (setup.has(name) ? "setup"
|
|
256
365
|
: VENDOR_RE.test(name) ? "vendor-credential"
|
|
@@ -261,7 +370,11 @@ export function classify({ catalogue, sources, setup = setupNames(), readSites =
|
|
|
261
370
|
|
|
262
371
|
const rows = catalogue.map((name) => {
|
|
263
372
|
const setIn = ["prod", "test", "config", "ci", "e2e"].filter((k) => sources[k]?.has(name));
|
|
264
|
-
|
|
373
|
+
// `declared` is the catalogue's own `# effect:` for this name, carried on the row so the artifact
|
|
374
|
+
// says what the document claims beside what this script derived. The two are different questions and
|
|
375
|
+
// the row is where a reader compares them.
|
|
376
|
+
return { name, class: cls(name), everSet: setIn, declared: declared.get(name) ?? null,
|
|
377
|
+
documented: Boolean(sources.docs?.has(name)) };
|
|
265
378
|
});
|
|
266
379
|
|
|
267
380
|
// "Set nowhere" is not by itself a licence to delete, and this is where 62 of 84 left the list.
|
|
@@ -269,6 +382,57 @@ export function classify({ catalogue, sources, setup = setupNames(), readSites =
|
|
|
269
382
|
const GATE_RE = /(===|!==|==|!=)\s*"[01]"|"[01]"\s*(===|!==|==|!=)|\|\|\s*"1"/;
|
|
270
383
|
const sub = {};
|
|
271
384
|
for (const n of tuning) {
|
|
385
|
+
// ── A DOCUMENT SAYING "THIS IS NOT A KNOB" KEEPS ITS NAME OFF THIS LIST ────────────────────────
|
|
386
|
+
//
|
|
387
|
+
// The classifier keys on the NAME and `tuning` is its residual — what a name falls to when no shape
|
|
388
|
+
// matches. So a name whose catalogue row declares any other effect reaches the deletion walk on a
|
|
389
|
+
// class its own documentation contradicts.
|
|
390
|
+
//
|
|
391
|
+
// THE TEST IS `!== "tuning"`, SO IT EXCLUDES ALL FIVE OTHER CLASSES. `tuning` is the only declared
|
|
392
|
+
// effect that AGREES with being a knob, so it is the only one that may reach the walk. Each of the
|
|
393
|
+
// five, in the catalogue's own words, and why deleting the name would cost something:
|
|
394
|
+
//
|
|
395
|
+
// silent-output-change "changes what a run produces, and nothing in the run's own artifacts says
|
|
396
|
+
// so" — the worst one to delete, because the loss is invisible in the output.
|
|
397
|
+
// disclosed-gate "changes what a run covers, AND the run discloses the gap" — deleting it
|
|
398
|
+
// silently restores coverage the operator chose to switch off, or removes
|
|
399
|
+
// their ability to switch it off at all.
|
|
400
|
+
// credential "absent, the run refuses at preflight by name" — deleting it turns a
|
|
401
|
+
// named refusal into an unexplained one.
|
|
402
|
+
// deployment "where input and output live; the conclusion a run reaches is unchanged"
|
|
403
|
+
// — unchanged CONCLUSION is not unchanged behaviour. This is the class the
|
|
404
|
+
// whole rule comes from: two notification addresses, legitimately unset on
|
|
405
|
+
// the deployment being read, were proposed for deletion on exactly this
|
|
406
|
+
// mismatch. Excluding it is the original finding, not an extension of it.
|
|
407
|
+
// harness "read only on a fixture, replay or self-test path; no production run
|
|
408
|
+
// reaches it" — the one that reads as safe to delete and is not. Deleting a
|
|
409
|
+
// harness name does not remove a knob nobody uses; it removes the only way
|
|
410
|
+
// a test can run. That argument is already made below for `instrument`, and
|
|
411
|
+
// it is the same argument. A declaration is a stronger version of it,
|
|
412
|
+
// because it does not depend on the spelling.
|
|
413
|
+
//
|
|
414
|
+
// The alternative — narrowing to the three classes this comment used to name — would put
|
|
415
|
+
// `deployment` back on the list and re-admit the defect the rule exists to stop.
|
|
416
|
+
//
|
|
417
|
+
// WHAT THIS TREE CAN SHOW YOU, and it is not the number to look for. Measured 2026-09-08: this tree
|
|
418
|
+
// carries 43 catalogued rows and 12 declarations, and NO name is in the contradicting position, so
|
|
419
|
+
// the rule changes nothing here and a check written against the live catalogue would pass while
|
|
420
|
+
// looking at nothing. That is why the checks plant a catalogue rather than reading this one. Over
|
|
421
|
+
// the full catalogue the same day the position holds seventeen names — ten declared
|
|
422
|
+
// `silent-output-change`, four `disclosed-gate`, two `harness`, one `credential` — and every one of
|
|
423
|
+
// them leaves the walk further down for an UNRELATED reason: the instrument regex matching their
|
|
424
|
+
// spelling, a non-numeric default, or no default found. The file already says what that is worth
|
|
425
|
+
// about a different name: exclusion "for an unrelated reason (no default found), which is luck, not
|
|
426
|
+
// a rule". Rename one of them to something without `DUMP` or `PROBE` in it and it joins the deletion
|
|
427
|
+
// population with a document beside it saying it changes what a run produces.
|
|
428
|
+
//
|
|
429
|
+
// Those counts are a dated reading and they move; two of the seventeen were added the same week.
|
|
430
|
+
// The RULE is what is being asserted here, not the population.
|
|
431
|
+
//
|
|
432
|
+
// So the declaration is read FIRST and it is the rule. Nothing is silently dropped: the names land
|
|
433
|
+
// in their own bucket, and the row carries the declaration that put them there.
|
|
434
|
+
const say = declared.get(n);
|
|
435
|
+
if (say && say !== "tuning") { sub[n] = "declared-not-a-knob"; continue; }
|
|
272
436
|
const body = git("grep", "-n", "--", n, "--", "*.mjs", "*.js")
|
|
273
437
|
.split("\n").filter((l) => l && !/(^|\/)test\//.test(l)).join("\n");
|
|
274
438
|
const onlyTests = git("grep", "-l", "--", n, "--", "*.mjs", "*.js").split("\n").filter(Boolean)
|
|
@@ -296,6 +460,7 @@ export function classify({ catalogue, sources, setup = setupNames(), readSites =
|
|
|
296
460
|
instrument: of("instrument"), "path-switch": of("path-switch"),
|
|
297
461
|
"model-or-agent-selector": of("model-or-agent-selector"),
|
|
298
462
|
"non-numeric-default": of("non-numeric-default"), "no-default-found": of("no-default-found"),
|
|
463
|
+
"declared-not-a-knob": of("declared-not-a-knob"),
|
|
299
464
|
"deletable-number": of("deletable-number"),
|
|
300
465
|
} };
|
|
301
466
|
}
|
|
@@ -305,7 +470,12 @@ function build() {
|
|
|
305
470
|
{ encoding: "utf8", cwd: ROOT, maxBuffer: 1e8 }));
|
|
306
471
|
const catalogue = audit.catalogue.rows.map((r) => r.name);
|
|
307
472
|
const sources = gather();
|
|
308
|
-
|
|
473
|
+
// The catalogue's own declarations, handed in so the deletion walk can read them. Same rows the
|
|
474
|
+
// audit already produced — not a second parse of the same documents, which would be a second thing
|
|
475
|
+
// to keep in step.
|
|
476
|
+
const declared = new Map(audit.catalogue.rows.filter((r) => r.effect).map((r) => [r.name, r.effect]));
|
|
477
|
+
const { rows, buckets } = classify({ catalogue, sources, declared });
|
|
478
|
+
const prodRead = sources.prodRead;
|
|
309
479
|
const by = (k) => rows.filter((r) => r.class === k).length;
|
|
310
480
|
return {
|
|
311
481
|
_what: "#1838 step 1 — every catalogued variable classified, and for every TUNING name the environments that have ever set it.",
|
|
@@ -318,11 +488,16 @@ function build() {
|
|
|
318
488
|
names: buckets["deletable-number"], count: buckets["deletable-number"].length,
|
|
319
489
|
},
|
|
320
490
|
_excludedFromDeletion: {
|
|
491
|
+
// FIRST, because it is the only one of these that is a RULE rather than an observation about a
|
|
492
|
+
// name's spelling or its default: the catalogue says this name changes what a run produces, so it
|
|
493
|
+
// is not a spare knob whatever its shape suggests.
|
|
494
|
+
"declared-not-a-knob": buckets["declared-not-a-knob"],
|
|
321
495
|
instrument: buckets.instrument, "path-switch": buckets["path-switch"],
|
|
322
496
|
"model-or-agent-selector": buckets["model-or-agent-selector"],
|
|
323
497
|
"non-numeric-default": buckets["non-numeric-default"], "no-default-found": buckets["no-default-found"],
|
|
324
498
|
},
|
|
325
499
|
rows,
|
|
500
|
+
_productionListRead: prodRead,
|
|
326
501
|
};
|
|
327
502
|
}
|
|
328
503
|
|
|
@@ -375,6 +550,18 @@ function main() {
|
|
|
375
550
|
return;
|
|
376
551
|
}
|
|
377
552
|
const next = build();
|
|
553
|
+
// A COULD-NOT-LOOK IS NOT AN ANSWER, and this is the one place it would have become one. Without the
|
|
554
|
+
// production list every name production sets reports `everSet: []`, and `tuning` with an empty
|
|
555
|
+
// `everSet` is the deletion population — so stamping here would record production's own configuration
|
|
556
|
+
// as a list of names to remove, in the artifact a reviewer reads to authorise removing them. Exit 2,
|
|
557
|
+
// not 1: this is the look failing, not the tree being stale, and `--check` already has 1.
|
|
558
|
+
if (!next._productionListRead && (arg === "--apply" || arg === "--check")) {
|
|
559
|
+
console.error(`env-classify: ${PROD} is absent, so nothing is known about what production sets.\n`
|
|
560
|
+
+ " Every production-set name would report `everSet: []` and land on the deletion population.\n"
|
|
561
|
+
+ " That is this script failing to look, not a finding. Refresh it with `--gather-prod` on the\n"
|
|
562
|
+
+ " production box, or run this where the list is present.");
|
|
563
|
+
process.exitCode = 2; return;
|
|
564
|
+
}
|
|
378
565
|
if (arg === "--apply") { writeFileSync(ART, JSON.stringify(next, null, 2) + "\n"); console.log(`wrote ${ART}`); return; }
|
|
379
566
|
if (arg === "--check") {
|
|
380
567
|
const prev = existsSync(ART) ? readFileSync(ART, "utf8") : "";
|
|
@@ -384,7 +571,8 @@ function main() {
|
|
|
384
571
|
return;
|
|
385
572
|
}
|
|
386
573
|
console.log(JSON.stringify(next._counts));
|
|
387
|
-
console.log(`step-3 population: ${next._stepThreePopulation.count}`
|
|
574
|
+
console.log(`step-3 population: ${next._stepThreePopulation.count}`
|
|
575
|
+
+ (next._productionListRead ? "" : " — WITHOUT the production list, so every name production sets is counted as never set"));
|
|
388
576
|
for (const [k, v] of Object.entries(next._excludedFromDeletion)) console.log(` excluded ${k.padEnd(24)} ${v.length}`);
|
|
389
577
|
}
|
|
390
578
|
|
|
@@ -47,7 +47,7 @@ import { join, dirname, relative, basename } from "node:path";
|
|
|
47
47
|
import { createHash } from "node:crypto";
|
|
48
48
|
import { driverDir } from "../shared/driver-dir.mjs"; //
|
|
49
49
|
import { tmpdir } from "node:os";
|
|
50
|
-
import { fileURLToPath } from "node:url";
|
|
50
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
51
51
|
|
|
52
52
|
const REPO = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
53
53
|
|
|
@@ -123,7 +123,7 @@ const FROZEN_DIRS = [
|
|
|
123
123
|
//
|
|
124
124
|
// research/ IS REQUIRED AND THE PROOF IS WHAT FOUND IT. publish/knockout.mjs
|
|
125
125
|
// traces every finding citation back to the run's own research payload — `research/<mark>.md`, read from
|
|
126
|
-
// the workspace (knockout.mjs:317) — and REFUSES the publish when a citation cannot be traced. The first
|
|
126
|
+
// the workspace (publish/knockout.mjs:317) — and REFUSES the publish when a citation cannot be traced. The first
|
|
127
127
|
// knockout freeze copied nine files, left research/ behind, and the republish proof threw:
|
|
128
128
|
//
|
|
129
129
|
// knockout publish REFUSED: 2 finding citation(s) could not be traced to this run's own research
|
|
@@ -506,7 +506,7 @@ const poolFull = join(scratch, "full");
|
|
|
506
506
|
const poolFrozen = join(scratch, "frozen");
|
|
507
507
|
const meta = { runId, codename, customerKey, template };
|
|
508
508
|
|
|
509
|
-
const { republishRun } = await import(join(REPO, "driver", "publish", "report-registry.mjs"));
|
|
509
|
+
const { republishRun } = await import(pathToFileURL(join(REPO, "driver", "publish", "report-registry.mjs")).href);
|
|
510
510
|
const publishInto = async (pool, dir) => {
|
|
511
511
|
mkdirSync(pool, { recursive: true });
|
|
512
512
|
return republishRun({ runId, meta, pool, poolUrl: "", runDir: dir, skipRegen: true });
|
|
@@ -113,7 +113,7 @@ export function fetchPulls(sha, repo, run = ghJson) {
|
|
|
113
113
|
/**
|
|
114
114
|
* `owner/repo` for the checkout this runs in, from its own origin remote.
|
|
115
115
|
*
|
|
116
|
-
* DERIVED, NOT CONFIGURED, and deliberately not an environment variable:
|
|
116
|
+
* DERIVED, NOT CONFIGURED, and deliberately not an environment variable: the ratchet is right that
|
|
117
117
|
* a new knob owes a documented row, and this one would document a fact the checkout already knows.
|
|
118
118
|
* It also keeps the script honest in a fork — a published clone asks about ITS repository
|
|
119
119
|
* rather than about ours.
|
|
@@ -36,6 +36,12 @@ import { execFileSync } from "node:child_process";
|
|
|
36
36
|
|
|
37
37
|
/** Chrome's own error pages live under this scheme. Nothing a real document is served from does. */
|
|
38
38
|
export const CHROME_ERROR_SCHEME = "chrome-error:";
|
|
39
|
+
/** What Chrome shows before it has navigated. Not a document, and not a wrong one. */
|
|
40
|
+
export const START_PAGE = "about:blank";
|
|
41
|
+
/** How long `assertPageLoaded` will wait for the browser to leave its start page. */
|
|
42
|
+
export const NAVIGATION_GRACE_MS = 5000;
|
|
43
|
+
/** How often it asks, inside that grace. */
|
|
44
|
+
export const NAVIGATION_POLL_MS = 100;
|
|
39
45
|
|
|
40
46
|
/**
|
|
41
47
|
* PURE. Given what the page says about itself, is it the document we asked for?
|
|
@@ -74,6 +80,25 @@ export function pageVerdict({ href = "", expected = "", marker = null, markerNam
|
|
|
74
80
|
+ "captured is Chrome's interstitial, not the artefact — and that page carries an `<h1>`, a "
|
|
75
81
|
+ "`<title>` and a body, so a content check alone reads it as a success." };
|
|
76
82
|
}
|
|
83
|
+
// ── THE BROWSER'S START PAGE IS NOT A WRONG DOCUMENT (tracker issue 273) ────────────────────────
|
|
84
|
+
//
|
|
85
|
+
// `about:blank` is what Chrome shows before it has navigated anywhere. Reaching the check below, it
|
|
86
|
+
// compares unequal to the expected URL and was reported as `wrong-document` — "a redirect, a stale tab
|
|
87
|
+
// or a second page target" — which is a finding about a page. It is not one. Nothing was ever loaded,
|
|
88
|
+
// so nothing about the target document has been measured either way.
|
|
89
|
+
//
|
|
90
|
+
// This mattered because it is what a LOADED BOX produces: three of these scripts launch Chrome with the
|
|
91
|
+
// URL as a command-line argument and cannot wait for a navigation event, so under load the address is
|
|
92
|
+
// read before the browser has moved. A real defect and a slow browser then arrived as the same message,
|
|
93
|
+
// and the arms that exist to catch a wrong page were the ones that fired.
|
|
94
|
+
if (said === START_PAGE || said.startsWith(`${START_PAGE}?`) || said.startsWith(`${START_PAGE}#`)) {
|
|
95
|
+
return { ok: false, kind: "not-navigated",
|
|
96
|
+
why: `chrome is on its start page (${said}) and never reached ${expected}. Nothing about that `
|
|
97
|
+
+ "document has been measured, so this is not a finding about the page. TWO THINGS LOOK LIKE "
|
|
98
|
+
+ "THIS and the address cannot tell them apart: a navigation that failed without saying so, and "
|
|
99
|
+
+ "one that had not happened yet. That is why the caller waits before asking — a verdict of this "
|
|
100
|
+
+ "kind means it waited and the browser never left the start page." };
|
|
101
|
+
}
|
|
77
102
|
// NORMALISED ON BOTH SIDES. Chrome resolves and percent-encodes a `file://` argument, so a raw string
|
|
78
103
|
// comparison fails on a path with a space and reports "the wrong document" about the right one.
|
|
79
104
|
const norm = (u) => { try { return new URL(u).href; } catch { return String(u); } };
|
|
@@ -103,8 +128,32 @@ export function pageVerdict({ href = "", expected = "", marker = null, markerNam
|
|
|
103
128
|
* handshake before this file existed and rewriting seven of them to share one is a bigger change than the
|
|
104
129
|
* defect warrants. What they must share is the QUESTION.
|
|
105
130
|
*/
|
|
106
|
-
export async function assertPageLoaded(evaluate, { expected, marker = null, markerName = "the page's own content", what = "this page", errorText = null
|
|
107
|
-
|
|
131
|
+
export async function assertPageLoaded(evaluate, { expected, marker = null, markerName = "the page's own content", what = "this page", errorText = null,
|
|
132
|
+
graceMs = NAVIGATION_GRACE_MS, pollMs = NAVIGATION_POLL_MS,
|
|
133
|
+
sleep = (ms) => new Promise((r) => setTimeout(r, ms)), now = () => Date.now() } = {}) {
|
|
134
|
+
// ── WAIT FOR THE BROWSER TO LEAVE ITS START PAGE, THEN JUDGE (tracker issue 273) ─────────────────
|
|
135
|
+
//
|
|
136
|
+
// Three of these scripts launch Chrome with the URL as an argument and get no response to wait on, so
|
|
137
|
+
// the first read of `location.href` can land before the browser has moved. On an idle box it never
|
|
138
|
+
// does; under a full parallel suite it did, repeatedly, and the arms reported the start page as a
|
|
139
|
+
// wrong document.
|
|
140
|
+
//
|
|
141
|
+
// BOUNDED, AND THE BOUND IS THE POINT. This waits for the browser to become ready — it does not wait
|
|
142
|
+
// for the page to become correct. If the address is anything other than the start page it is judged
|
|
143
|
+
// immediately, so a genuinely wrong document still fails on the first read and fails as fast as it did
|
|
144
|
+
// before. Only the "nothing has happened yet" case costs time, and only up to the grace.
|
|
145
|
+
//
|
|
146
|
+
// When the grace runs out the verdict is `not-navigated`, which is a could-not-look and says so.
|
|
147
|
+
// Deadline arithmetic is the caller's to drive: `sleep` and `now` are injected so the exhausted path
|
|
148
|
+
// can be exercised without a browser and without waiting.
|
|
149
|
+
let href = await evaluate("location.href");
|
|
150
|
+
if (String(href ?? "") === START_PAGE) {
|
|
151
|
+
const until = now() + graceMs;
|
|
152
|
+
while (String(href ?? "") === START_PAGE && now() < until) {
|
|
153
|
+
await sleep(pollMs);
|
|
154
|
+
href = await evaluate("location.href");
|
|
155
|
+
}
|
|
156
|
+
}
|
|
108
157
|
const found = marker == null ? null : Boolean(await evaluate(`Boolean(${marker})`));
|
|
109
158
|
const verdict = pageVerdict({ href, expected, marker: found, markerName, errorText });
|
|
110
159
|
if (!verdict.ok) {
|