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
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
// WRONG — the deployment was fine; the caller was not. With the portal's own ops token the same call
|
|
55
55
|
// answers `clients: 10`.
|
|
56
56
|
//
|
|
57
|
-
//
|
|
57
|
+
// an earlier validation failed because it ran in the wrong ENVIRONMENT. A probe can fail the same way by
|
|
58
58
|
// running as the wrong IDENTITY. So this check authenticates the way the portal does, and a missing
|
|
59
59
|
// token is reported as "not probed" rather than quietly producing a false failure.
|
|
60
60
|
//
|
|
@@ -90,7 +90,9 @@ import { unitsActiveVerdict } from "../driver/unit-state-verdict.mjs";
|
|
|
90
90
|
import { deploymentBox } from "../shared/deployment-box.mjs"; // — extracted; one allowlist, two readers
|
|
91
91
|
import { unitFileDriftVerdict } from "../driver/unit-file-drift.mjs"; //
|
|
92
92
|
import { placeholdersIn, resolveValues, renderUnit } from "../driver/systemd/render-units.mjs"; //
|
|
93
|
-
import { CHECKED_UNITS, unitInventoryVerdict, serviceCommitVerdict, unitWorkingDirectory } from "../driver/unit-inventory.mjs"; // · -bundle ·
|
|
93
|
+
import { CHECKED_UNITS, CHECKED_TIMERS, timerVerdict, unitInventoryVerdict, serviceCommitVerdict, unitWorkingDirectory, unitClone } from "../driver/unit-inventory.mjs"; // · -bundle ·
|
|
94
|
+
import { entrypointOf } from "../driver/systemd/install-census.mjs"; // the ONE ExecStart parser — a unit says which module it runs
|
|
95
|
+
import { treeOfRunning } from "../shared/checkout-move.mjs"; // …and the live argv says which tree that module came from
|
|
94
96
|
import { findUnitFiles, unitFilePath } from "../driver/unit-files.mjs"; //
|
|
95
97
|
import { managerGroupsVerdict } from "../driver/manager-groups-verdict.mjs"; //
|
|
96
98
|
import { config } from "../driver/driver.config.mjs"; //
|
|
@@ -224,6 +226,35 @@ function userBusEnv() {
|
|
|
224
226
|
// Returns {clones, probe}. `probe` is the honest answer to "could I look at all?" — {ok, why} — and it is
|
|
225
227
|
// SEPARATE from the clones list on purpose. "enumerated, nothing to compare" and "could not enumerate"
|
|
226
228
|
// were the same empty array before, and this suite exists because absences were read as successes.
|
|
229
|
+
/**
|
|
230
|
+
* Ask each declared TIMER about itself, as a timer.
|
|
231
|
+
*
|
|
232
|
+
* Deliberately not folded into the loop below. That loop asks a service for its WorkingDirectory and
|
|
233
|
+
* MainPID and attributes a running process to a checkout — none of which a `.timer` has, so putting
|
|
234
|
+
* timers through it would produce rows whose every attribution field is empty for a reason that is not
|
|
235
|
+
* a finding. Two questions, two calls, and each says what it could not answer.
|
|
236
|
+
*/
|
|
237
|
+
function declaredTimers() {
|
|
238
|
+
if (!CHECKED_TIMERS.length) return { rows: [], probeFailed: null };
|
|
239
|
+
const env = userBusEnv();
|
|
240
|
+
const rows = [];
|
|
241
|
+
let probeFailed = null;
|
|
242
|
+
for (const unit of CHECKED_TIMERS) {
|
|
243
|
+
try {
|
|
244
|
+
const shown = execFileSync("systemctl", ["--user", "show", unit, "-p", "ActiveState", "-p", "LoadState"],
|
|
245
|
+
{ encoding: "utf8", env, stdio: ["ignore", "pipe", "pipe"] });
|
|
246
|
+
const f = Object.fromEntries(shown.split("\n").filter(Boolean).map((l) => { const [k, ...v] = l.split("="); return [k, v.join("=")]; }));
|
|
247
|
+
// An EMPTY answer is the no-session-bus case, and it must not read as a stopped timer — that is
|
|
248
|
+
// the shape that turns "could not ask" into a finding about the box.
|
|
249
|
+
if (!f.ActiveState) { probeFailed = probeFailed ?? `systemctl --user answered nothing for ${unit}`; continue; }
|
|
250
|
+
rows.push({ unit, active: f.ActiveState || null, load: f.LoadState || null });
|
|
251
|
+
} catch (e) {
|
|
252
|
+
probeFailed = probeFailed ?? String(e?.message ?? e).slice(0, 120);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return { rows, probeFailed };
|
|
256
|
+
}
|
|
257
|
+
|
|
227
258
|
function serviceClones() {
|
|
228
259
|
// — the list is DECLARED, not written here. It used to be eight names inline, which put a unit
|
|
229
260
|
// inside the drift guarantee or outside it by omission: `client-access` was live on production and in
|
|
@@ -234,14 +265,20 @@ function serviceClones() {
|
|
|
234
265
|
const out = [];
|
|
235
266
|
let reached = 0, lastErr = null;
|
|
236
267
|
for (const u of units) {
|
|
237
|
-
let wd = null, active = null, type = null, since = null;
|
|
268
|
+
let wd = null, active = null, type = null, since = null, mainPid = null, fragment = null, load = null;
|
|
238
269
|
try {
|
|
239
270
|
// — `Type` and `StateChangeTimestamp` ride along on a call that was already being made. Both
|
|
240
271
|
// are for the MESSAGE, never for the verdict: Type tells a reader whether an `activating` unit is a
|
|
241
272
|
// oneshot mid-fire or a service mid-restart, and the timestamp lets a human judge a long
|
|
242
273
|
// `activating` that this check deliberately does not judge (see driver/unit-state-verdict.mjs).
|
|
274
|
+
//
|
|
275
|
+
// `MainPID` and `FragmentPath` ride along for the SECOND way to attribute a unit to a checkout,
|
|
276
|
+
// below. Same call, no extra round trip. Deliberately NOT `ExecStart`: systemd renders it
|
|
277
|
+
// unexpanded — `argv[]=/usr/bin/node ${CLEAROTRON_CHECKOUT_DIR}/driver/runner.mjs` — so the one
|
|
278
|
+
// field that looks like it names the tree is the one field that does not.
|
|
243
279
|
const shown = execFileSync("systemctl", ["--user", "show", u,
|
|
244
|
-
"-p", "WorkingDirectory", "-p", "ActiveState", "-p", "Type", "-p", "StateChangeTimestamp"
|
|
280
|
+
"-p", "WorkingDirectory", "-p", "ActiveState", "-p", "Type", "-p", "StateChangeTimestamp",
|
|
281
|
+
"-p", "MainPID", "-p", "FragmentPath", "-p", "LoadState"],
|
|
245
282
|
{ encoding: "utf8", env, stdio: ["ignore", "pipe", "pipe"] });
|
|
246
283
|
// `show` answers for a unit that does not exist too (ActiveState=inactive), so a PARSED answer is
|
|
247
284
|
// proof the bus was reachable — which is exactly the fact the old catch destroyed.
|
|
@@ -252,19 +289,77 @@ function serviceClones() {
|
|
|
252
289
|
if (k === "ActiveState") active = v.join("=") || null;
|
|
253
290
|
if (k === "Type") type = v.join("=") || null;
|
|
254
291
|
if (k === "StateChangeTimestamp") since = v.join("=") || null;
|
|
292
|
+
if (k === "MainPID") mainPid = v.join("=") || null;
|
|
293
|
+
if (k === "FragmentPath") fragment = v.join("=") || null;
|
|
294
|
+
// `LoadState` is the discriminator the comment above names and nothing acted on: `not-found`
|
|
295
|
+
// means this deployment DECLARES a unit that does not exist on this box — a defect in the
|
|
296
|
+
// declaration, not a unit at rest. Both used to arrive here as `ActiveState=inactive`.
|
|
297
|
+
if (k === "LoadState") load = v.join("=") || null;
|
|
255
298
|
}
|
|
256
299
|
} catch (e) { lastErr = String(e?.stderr || e?.message || e).replace(/\s+/g, " ").trim().slice(0, 160); }
|
|
257
|
-
|
|
258
|
-
//
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
300
|
+
|
|
301
|
+
// ── ATTRIBUTION ONE: THE DECLARATION ────────────────────────────────────────────────────────────
|
|
302
|
+
let declaredTree = null, declaredWhy = null;
|
|
303
|
+
if (!wd) declaredWhy = "the unit reported no WorkingDirectory";
|
|
304
|
+
else {
|
|
305
|
+
const parsed = unitWorkingDirectory(wd);
|
|
306
|
+
if (!parsed.path) declaredWhy = parsed.why;
|
|
307
|
+
else {
|
|
308
|
+
const top = gitTry(parsed.path, "rev-parse", "--show-toplevel");
|
|
309
|
+
if (top.ok) declaredTree = top.out;
|
|
310
|
+
else declaredWhy = `git could not read ${parsed.path}: ${top.err}`;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// ── ATTRIBUTION TWO: WHAT THE PROCESS IS ACTUALLY RUNNING ───────────────────────────────────────
|
|
315
|
+
//
|
|
316
|
+
// The unit file names its entrypoint as `${CLEAROTRON_CHECKOUT_DIR}/<module>`; the LIVE process was
|
|
317
|
+
// started with that expanded, and `/proc/<pid>/cmdline` carries the resolved absolute path. So the
|
|
318
|
+
// unit file says WHICH module to look for and the process says WHERE it came from. Both readers
|
|
319
|
+
// already exist and are tested — this composes them rather than parsing anything new.
|
|
320
|
+
let runningTree = null, runningWhy = null;
|
|
321
|
+
const pid = Number(mainPid);
|
|
322
|
+
if (!pid) runningWhy = "the unit reported no MainPID, so no running process could be read";
|
|
323
|
+
else if (!fragment) runningWhy = `pid ${pid} is running but the unit reported no FragmentPath, so nothing says which module to look for`;
|
|
324
|
+
else {
|
|
325
|
+
let unitText = null;
|
|
326
|
+
try { unitText = readFileSync(fragment, "utf8"); }
|
|
327
|
+
catch (e) { runningWhy = `the unit file ${fragment} could not be read: ${String(e?.message ?? e).slice(0, 80)}`; }
|
|
328
|
+
if (unitText !== null) {
|
|
329
|
+
const { rel, unreadable } = entrypointOf(unitText);
|
|
330
|
+
if (!rel) runningWhy = unreadable;
|
|
331
|
+
else {
|
|
332
|
+
let cmdline = null;
|
|
333
|
+
try { cmdline = readFileSync(`/proc/${pid}/cmdline`, "utf8"); }
|
|
334
|
+
catch (e) { runningWhy = `/proc/${pid}/cmdline could not be read: ${String(e?.message ?? e).slice(0, 80)}`; }
|
|
335
|
+
if (cmdline !== null) {
|
|
336
|
+
const { tree, why } = treeOfRunning(cmdline, rel);
|
|
337
|
+
if (!tree) runningWhy = why;
|
|
338
|
+
else {
|
|
339
|
+
const top = gitTry(tree, "rev-parse", "--show-toplevel");
|
|
340
|
+
if (top.ok) runningTree = top.out;
|
|
341
|
+
else runningWhy = `git could not read ${tree}, which pid ${pid} is running from: ${top.err}`;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
const chosen = unitClone({ declaredTree, runningTree, declaredWhy, runningWhy });
|
|
349
|
+
// — an inactive unit that reported nothing is NOT a gap in the population; there is genuinely
|
|
350
|
+
// nothing to compare, and `unreadable: null` says so. A unit that IS running and could not be
|
|
351
|
+
// attributed is a gap, and the reason names both halves.
|
|
352
|
+
if (!chosen.clone) {
|
|
353
|
+
const idle = !wd && !pid;
|
|
354
|
+
out.push({ unit: u, active, load, type, since, clone: null, head: null, source: null,
|
|
355
|
+
unreadable: idle ? null : chosen.why });
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
const head = gitTry(chosen.clone, "rev-parse", "HEAD");
|
|
359
|
+
out.push({ unit: u, active, load, type, since, clone: chosen.clone, source: chosen.source,
|
|
360
|
+
disagreement: chosen.disagreement,
|
|
361
|
+
head: head.ok ? head.out : null,
|
|
362
|
+
unreadable: head.ok ? null : `git could not read HEAD in ${chosen.clone}: ${head.err}` });
|
|
268
363
|
}
|
|
269
364
|
const probe = reached > 0
|
|
270
365
|
? { ok: true, why: null }
|
|
@@ -441,7 +536,12 @@ try {
|
|
|
441
536
|
//
|
|
442
537
|
// The arm above already travels the route the harness uses (`mcpToolCall` on `MCP_URL`, the same
|
|
443
538
|
// client `scripts/e2e.mjs` enqueues through), so a door that 401s every caller ALREADY fails this
|
|
444
|
-
// check and already fails the deploy —
|
|
539
|
+
// check and already fails the deploy — WHEN a deploy runs this script, which at the time of writing
|
|
540
|
+
// nothing does. `scripts/deploy-test.sh` gated on this script's exit code; that script is retired, and
|
|
541
|
+
// what replaced it was measured on the operations side and does NOT invoke this one. Nothing here is
|
|
542
|
+
// wrong: the check is a real instrument and its reasoning holds. It is simply not reached, and a caller
|
|
543
|
+
// is being wired back in. Until it is, read this as what the check is FOR, not as evidence that
|
|
544
|
+
// something enforces it.
|
|
445
545
|
// That is the issue's first criterion, by its sanctioned second branch, and its third and fourth.
|
|
446
546
|
//
|
|
447
547
|
// What neither arm could say is WHY the door has the posture it has. This face reaches the auth-proxy
|
|
@@ -592,8 +692,10 @@ const { clones, probe: unitProbe } = serviceClones();
|
|
|
592
692
|
const running = clones.filter((c) => c.head);
|
|
593
693
|
const heads = [...new Set(running.map((c) => c.head))];
|
|
594
694
|
// — THREE OUTCOMES, NOT TWO. This arm is the one whose entire purpose is to catch a service still
|
|
595
|
-
// running an old bundle after a deploy
|
|
596
|
-
// deploys itself every hour
|
|
695
|
+
// running an old bundle after a deploy. `deploy-test.sh` ran it as the final gate on an instance that
|
|
696
|
+
// deploys itself every hour; that script is retired and its replacement does not invoke this one, so at
|
|
697
|
+
// the time of writing nothing reaches this arm on a deploy — see the note above. It had been degrading to
|
|
698
|
+
// `skip` with a reason that ASSERTED the deployment
|
|
597
699
|
// was not systemd --user — on a box where it is, and where the units are running.
|
|
598
700
|
// · could not look → skip, naming the error. Not probed is not passed.
|
|
599
701
|
// · looked, found none → skip, saying so. A genuinely non-systemd deployment lands here honestly.
|
|
@@ -664,7 +766,7 @@ else {
|
|
|
664
766
|
// second criterion — an orphaned drainer in a closed login session is a
|
|
665
767
|
// state health must say out loud, whatever the ruling on the posture.
|
|
666
768
|
ppidOf: defaultPpidOf,
|
|
667
|
-
//
|
|
769
|
+
// THE SAME TWO PROBES THE QUEUE ARM READS, so this arm and that one cannot
|
|
668
770
|
// reach opposite conclusions about one box. They did: the queue arm read the worker unit and said
|
|
669
771
|
// the timer posture is retired here, while this one read nothing and called an absent drainer a
|
|
670
772
|
// fault in the same report. A probe that throws answers `enabled: null`, which the rule resolves
|
|
@@ -816,6 +918,14 @@ else {
|
|
|
816
918
|
const v = unitInventoryVerdict({ live: liveUnits, files: walk.files, collisions: walk.collisions,
|
|
817
919
|
filesError: walk.error, box, probe });
|
|
818
920
|
record("every live unit is declared", v.state, v.message);
|
|
921
|
+
|
|
922
|
+
// — AND WHETHER ANYTHING STILL STARTS THE TIMER-DRIVEN ONES. Reported separately from the line above
|
|
923
|
+
// because it answers a different question: that one says a declared unit exists and is not adrift,
|
|
924
|
+
// this one says its timer is still armed. A service whose timer was stopped satisfies the first and
|
|
925
|
+
// fails the second, and reads `inactive` for both — which is why one line could not carry both.
|
|
926
|
+
const t = declaredTimers();
|
|
927
|
+
const tv = timerVerdict(t.rows, { probeFailed: t.probeFailed });
|
|
928
|
+
record("every declared timer is still armed", tv.state, tv.message);
|
|
819
929
|
}
|
|
820
930
|
|
|
821
931
|
// ── — EVERY QUEUE THIS DEPLOYMENT WOULD DRAIN IS WATCHED BY SOMETHING ──────────────────────────
|
package/scripts/main-health.mjs
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
// and that a red no fix can clear turns into a tax. The next person either stops, or learns to reason
|
|
16
16
|
// past a red main, and the second one is how a real regression gets merged over.
|
|
17
17
|
//
|
|
18
|
-
// THIS IS
|
|
18
|
+
// THIS IS the DISTINCTION ONE SUBSYSTEM OVER. There it was `systemctl --user` with no bus reported
|
|
19
19
|
// as "the unit is not there"; here it is an unallocated runner reported as "the suite failed". Both are
|
|
20
20
|
// could-not-look rendered as a finding, and both are fixed by refusing to answer rather than answering
|
|
21
21
|
// wrongly.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
//
|
|
6
6
|
// ── WHY THIS EXISTS ──────────────────────────────────────────────────────────────────────────────
|
|
7
7
|
//
|
|
8
|
-
// merged at 18:45:01Z. The commit carrying
|
|
8
|
+
// merged at 18:45:01Z. The commit carrying its own acceptance check was authored at
|
|
9
9
|
// 18:53:12Z — eight minutes AFTER the merge — and never reached `main`. The pull request closed
|
|
10
10
|
// green showing one commit, the branch was deleted, and was labelled ready-for-verification
|
|
11
11
|
// against a fix whose check did not exist. Nothing in the repository noticed. It surfaced because
|
|
@@ -213,8 +213,8 @@ export function presenceOf(sha, git, base = "origin/main") {
|
|
|
213
213
|
// ── LANDED-AND-SINCE-REMOVED IS NOT LOST WORK, AND CALLING IT LOST IS THE WHOLE FAILURE ────────
|
|
214
214
|
//
|
|
215
215
|
// The first cut of this script reported six MISSING rows and every one of them was a merge that
|
|
216
|
-
// landed perfectly and was later retired ON PURPOSE:
|
|
217
|
-
// by,
|
|
216
|
+
// landed perfectly and was later retired ON PURPOSE: the bin/register-ledger-prune.mjs deleted
|
|
217
|
+
// by, the snapshot machinery deleted by, three env-governance.test.mjs rows rewritten
|
|
218
218
|
// by the same. Publishing those as lost work would have been six false accusations drawn
|
|
219
219
|
// from a real signal — the exact shape this check exists to catch, running in the other direction.
|
|
220
220
|
//
|
|
@@ -150,7 +150,7 @@ function main() {
|
|
|
150
150
|
try { prev = JSON.parse(readFileSync(CENSUS, "utf8")); } catch { /* first mint */ }
|
|
151
151
|
|
|
152
152
|
const lost = [];
|
|
153
|
-
//
|
|
153
|
+
// THE THIRD BUCKET, ruled by overwatch 2026-09-06.
|
|
154
154
|
//
|
|
155
155
|
// A reasoned skip is neither a pass nor a loss, and this census had no place to put one. Two guards
|
|
156
156
|
// that are each right about their own failure had come to disagree: `a-bail-on-an-unmeetable-
|
|
@@ -166,7 +166,7 @@ function main() {
|
|
|
166
166
|
for (const { ws } of CENSUS_WORKSPACES) {
|
|
167
167
|
const a = prev?.workspaces?.[ws]?.perFile ?? {};
|
|
168
168
|
const b = next.workspaces[ws].perFile;
|
|
169
|
-
//
|
|
169
|
+
// the buckets are decided in shared/suite-census.mjs, where a test can reach
|
|
170
170
|
// them, and BOTH populations below read the same function. The two loops used to spell the decision
|
|
171
171
|
// out separately and had already drifted on their all-clear line.
|
|
172
172
|
const { added, gone, shrunk, grew, losses, notes, allClear } = censusBuckets({ prev: a, next: b });
|
|
@@ -175,14 +175,14 @@ function main() {
|
|
|
175
175
|
? `${ws} REMOVED ${f} (was ${a[f].tests} tests, ${a[f].asserts} asserts)`
|
|
176
176
|
: `${ws} SHRANK ${f} ${a[f].tests}\u2192${b[f].tests} tests, ${a[f].asserts}\u2192${b[f].asserts} asserts`);
|
|
177
177
|
}
|
|
178
|
-
//
|
|
178
|
+
// a rising skip count is NOT a loss and does not refuse. It is collected for
|
|
179
179
|
// the bucket printed after both loops, where it is neither excused nor counted against the tree.
|
|
180
180
|
for (const { file: f } of notes) noted.push(`${ws} ${f} ${a[f].skips ?? 0}\u2192${b[f].skips ?? 0} skip(s), `
|
|
181
181
|
+ `${a[f].todos ?? 0}\u2192${b[f].todos ?? 0} todo(s)`);
|
|
182
182
|
console.log(`\n${ws}: ${Object.keys(next.workspaces[ws].perFile ?? {}).length} file(s)`);
|
|
183
183
|
for (const f of added) console.log(` + ${f} (${b[f].tests} tests, ${b[f].asserts} asserts)`);
|
|
184
184
|
// A file leaving the census, or shrinking inside it, is the shape this whole thing exists for.
|
|
185
|
-
// Printed loudly and separately, and — since
|
|
185
|
+
// Printed loudly and separately, and — since the loss arm — REFUSED below unless --allow-loss
|
|
186
186
|
// is passed. This comment used to end "an --apply that scrolls past these is the laundering", which
|
|
187
187
|
// was an accurate description of what the code then did: it printed both lines and wrote the file.
|
|
188
188
|
for (const f of gone) console.log(` REMOVED ${f} (was ${a[f].tests} tests, ${a[f].asserts} asserts)`);
|
|
@@ -197,7 +197,7 @@ function main() {
|
|
|
197
197
|
// a verdict. So growth is now printed as its own shape, and the all-clear says what it actually
|
|
198
198
|
// checked instead of implying currency it never established.
|
|
199
199
|
for (const f of grew) console.log(` grew ${f} ${a[f].tests}→${b[f].tests} tests, ${a[f].asserts}→${b[f].asserts} asserts`);
|
|
200
|
-
//
|
|
200
|
+
// `allClear` counts skips. Without that a file that gained nothing but skips
|
|
201
201
|
// printed "(unchanged)" over a tree where an arm had stopped running, which is the exact
|
|
202
202
|
// reassuring-narrator failure the growth line above was added to repair.
|
|
203
203
|
if (allClear) console.log(" (unchanged — no file added, removed, grown, shrunk or newly skipped)");
|
|
@@ -239,7 +239,7 @@ function main() {
|
|
|
239
239
|
else if (!undeclaredGone.length && !shrunk.length && !added.length) console.log(" (nothing LOST — the counts above moved, so the census on disk is stale)");
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
-
//
|
|
242
|
+
// PRINTED WHENEVER IT IS NON-EMPTY, on every mode this script has. `--check`
|
|
243
243
|
// returns before `--apply`'s refusal and `--apply` returns before `--check`'s comparison, so a bucket
|
|
244
244
|
// printed inside either one would be invisible from the other — and the mode a lane gate runs is the
|
|
245
245
|
// one nobody watches.
|
|
@@ -43,7 +43,7 @@ export function hoursSince(thenISO, nowISO) {
|
|
|
43
43
|
return Math.floor((now - then) / 3_600_000);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
/** The job's name, whichever shape the caller had. A bare string is the pre- form. */
|
|
46
|
+
/** The job's name, whichever shape the caller had. A bare string is the pre-change form. */
|
|
47
47
|
export function jobName(job) { return typeof job === "string" ? job : String(job?.name ?? "?"); }
|
|
48
48
|
|
|
49
49
|
/**
|
|
@@ -151,8 +151,6 @@ export function noticeBody({ runUrl, sha, subject, failedJobs = [], lastGreenAt,
|
|
|
151
151
|
+ "passes — a run that never started cannot make the platform green."
|
|
152
152
|
: "This thread is reused for every red night. Close it once the platform is green again — the next "
|
|
153
153
|
+ "red opens a new one.",
|
|
154
|
-
"",
|
|
155
|
-
"Agent: role-dev · bergface",
|
|
156
154
|
].join("\n");
|
|
157
155
|
}
|
|
158
156
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
|
|
3
|
+
//
|
|
4
|
+
// The install refuses an unsupported Node BEFORE anything is written — tracker issue 364.
|
|
5
|
+
//
|
|
6
|
+
// Three declarations already stated the requirement and none of them bound anyone: `engines.node` is a
|
|
7
|
+
// WARNING unless the person installing has set `engine-strict`, `.nvmrc` is read by nvm and nothing
|
|
8
|
+
// else, and the install guide is prose. An outside report arrived as "some node issues, not as obvious
|
|
9
|
+
// as the README made it seem" — which is what a warning inside an install log looks like from outside.
|
|
10
|
+
//
|
|
11
|
+
// So this is a `preinstall` hook, node builtins only, because nothing is installed when it runs.
|
|
12
|
+
//
|
|
13
|
+
// IT NAMES THE LATER FAILURE, not just the version. The whole defect is that an unsupported Node
|
|
14
|
+
// installs cleanly and then fails somewhere else saying nothing about Node, so a message that only
|
|
15
|
+
// prints a semver range leaves the reader where they started.
|
|
16
|
+
import { declaredRange, floorOf, meetsFloor, nodeFloorRefusal } from "../shared/node-floor.mjs";
|
|
17
|
+
|
|
18
|
+
const range = declaredRange();
|
|
19
|
+
if (!meetsFloor(process.versions.node, floorOf(range))) {
|
|
20
|
+
process.stderr.write(`\n${nodeFloorRefusal({ current: process.versions.node, required: floorOf(range).join("."), range })}\n`);
|
|
21
|
+
process.stderr.write(" Nothing has been installed.\n\n nvm install 22 && nvm use 22\n\n");
|
|
22
|
+
process.stderr.write(" Without nvm, take the current 22.x from https://nodejs.org/.\n\n");
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
@@ -50,7 +50,7 @@ const WORKSPACE_ROOT = argValue("--workspace-root") ?? envFrom(process.env, "CLE
|
|
|
50
50
|
// The default is the CANONICAL agent alone. It used to name two of this firm's people, which shipped
|
|
51
51
|
// their identities to every clone and told an installer nothing. Per-agent rosters are a
|
|
52
52
|
// property of a deployment, so they are passed: --agents a,b,c
|
|
53
|
-
const AGENTS = (argValue("--agents") ?? "
|
|
53
|
+
const AGENTS = (argValue("--agents") ?? "localagent").split(",").map((s) => s.trim()).filter(Boolean);
|
|
54
54
|
const APPLY = process.argv.includes("--apply");
|
|
55
55
|
const QUIET_MS = (() => {
|
|
56
56
|
const raw = argValue("--quiet-hours");
|
|
@@ -52,7 +52,8 @@ import { isEntrypoint } from "../shared/is-entrypoint.mjs";
|
|
|
52
52
|
import { cutDecision, versionAtHead, tagsHere } from "./release-cut-decision.mjs";
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
-
* Default bound:
|
|
55
|
+
* Default bound: twenty-five minutes at thirty-second steps. Both are arguments so an arm can drive
|
|
56
|
+
* the loop.
|
|
56
57
|
*
|
|
57
58
|
* TWENTY-FIVE, RAISED FROM FIFTEEN (tracker issue 247), because this waits for the version pull
|
|
58
59
|
* request's OWN CI and that is what it must clear. Measured over the first three cuts, the wait held
|
|
@@ -86,9 +87,10 @@ export const MIN_JOB_MARGIN_MS = 5 * 60 * 1000;
|
|
|
86
87
|
* The bound, overridable for one caller only: the dry-run rehearsal.
|
|
87
88
|
*
|
|
88
89
|
* A rehearsal must exercise this path — a step nobody rehearses is a step that first runs for real on
|
|
89
|
-
* the day it matters — but it has nothing to wait FOR, and
|
|
90
|
-
* is
|
|
91
|
-
* of 0 does exactly one read and returns, which is the whole of what a rehearsal needs to
|
|
90
|
+
* the day it matters — but it has nothing to wait FOR, and twenty-five minutes of polling to establish
|
|
91
|
+
* that is twenty-five minutes of a runner held for no answer. `awaitCut` asks before its first sleep,
|
|
92
|
+
* so a bound of 0 does exactly one read and returns, which is the whole of what a rehearsal needs to
|
|
93
|
+
* prove.
|
|
92
94
|
*
|
|
93
95
|
* REFUSES A VALUE IT CANNOT READ rather than falling back to the default. A typo here would silently
|
|
94
96
|
* restore the full wait on the rehearsal, or — worse in the other direction — a real run would take a
|
|
@@ -194,7 +194,7 @@ export function surfacesFor(repo, sha, api = gh) {
|
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
/**
|
|
197
|
-
* What each verdict costs the run — the half
|
|
197
|
+
* What each verdict costs the run — the half that had the defect, so the half
|
|
198
198
|
* worth driving rather than reading.
|
|
199
199
|
*
|
|
200
200
|
* `0` is not "everything is fine"; it is "nothing here needs to stop the release". A parked run clears
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
// because it is workspace-aware and this repository has four workspaces. It is, and it does not cover
|
|
8
8
|
// the case that matters: `changeset version` versions the WORKSPACE packages and leaves the ROOT
|
|
9
9
|
// package alone, and the root package is `clearotron` — the one thing a user installs and the only
|
|
10
|
-
// version they will ever quote back to us. Measured on 3.0.1: a note against `
|
|
11
|
-
//
|
|
10
|
+
// version they will ever quote back to us. Measured on 3.0.1: a note against `clearotron-driver` moved
|
|
11
|
+
// clearotron-driver 0.1.0 -> 0.1.1 and left `clearotron` at 0.1.0, with a changelog written per workspace
|
|
12
12
|
// and none at the root.
|
|
13
13
|
//
|
|
14
14
|
// So the four workspaces are a `fixed` group — one version number moves them together — and this script
|
package/scripts/render-check.mjs
CHANGED
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
//
|
|
38
38
|
// The demo is SPAWNED rather than reimplemented, and that is a safety property, not a shortcut: it
|
|
39
39
|
// inherits bin/example.mjs's FORBIDDEN containment refusal, so a fixture pool can never resolve inside
|
|
40
|
-
// /srv/trademark-archive or this environment's CLEAROTRON_REPORTS_DIR.
|
|
40
|
+
// /srv/trademark-archive or this environment's CLEAROTRON_REPORTS_DIR. That rule is untouched — there is
|
|
41
41
|
// still no default pool; `--fixture-pool` is an explicit request that writes only to a fresh temp dir
|
|
42
42
|
// and deletes it again unless `--keep`.
|
|
43
43
|
//
|
|
@@ -64,7 +64,7 @@ import { execFileSync, spawn } from "node:child_process";
|
|
|
64
64
|
import { createServer } from "node:http";
|
|
65
65
|
import { basename, extname } from "node:path";
|
|
66
66
|
import { join, dirname } from "node:path";
|
|
67
|
-
import { fileURLToPath } from "node:url";
|
|
67
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
68
68
|
import { tmpdir } from "node:os";
|
|
69
69
|
import { isEntrypoint } from "../shared/is-entrypoint.mjs"; // — one entry-point test, all spellings
|
|
70
70
|
import { envFrom } from "../shared/env-aliases.mjs"; // — the name a reader is told to set is the one in force
|
|
@@ -160,7 +160,7 @@ const PROBE = `<script>
|
|
|
160
160
|
// Reports from INSIDE the frame, which is the only place the truth lives: the parent cannot read a
|
|
161
161
|
// cross-origin document.
|
|
162
162
|
//
|
|
163
|
-
//
|
|
163
|
+
// MEASURED ON A LAYOUT EVENT, NEVER ON A CLOCK, and the reason is not style.
|
|
164
164
|
//
|
|
165
165
|
// This used to be \`setInterval(…, 400)\`, and it never fired once: the three assertions that depend on
|
|
166
166
|
// this script reported "no-probe" for the whole life of the check.
|
|
@@ -198,7 +198,7 @@ const PROBE = `<script>
|
|
|
198
198
|
winInnerH:window.innerHeight,
|
|
199
199
|
trueContent:Math.ceil(b.getBoundingClientRect().bottom),
|
|
200
200
|
SCROLLABLE:d.scrollHeight>window.innerHeight,
|
|
201
|
-
//
|
|
201
|
+
// every assertion in this file was about HEIGHT, and the report was 26px too WIDE.
|
|
202
202
|
hOverflowPx:d.scrollWidth-d.clientWidth,
|
|
203
203
|
slackPx:window.innerHeight-Math.ceil(b.getBoundingClientRect().bottom)},'*');
|
|
204
204
|
} catch (e) {
|
|
@@ -219,7 +219,7 @@ const PROBE = `<script>
|
|
|
219
219
|
/**
|
|
220
220
|
* A DELIBERATE 26px sideways overflow, injected into the report on `--plant-overflow`.
|
|
221
221
|
*
|
|
222
|
-
*
|
|
222
|
+
* That acceptance has two halves and this is the one that matters more: nine green assertions prove
|
|
223
223
|
* nothing unless the same harness still REDDENS on a report that is actually broken. The old check
|
|
224
224
|
* returned `stale-probe` for the sideways assertion in most runs, so it could not have caught this —
|
|
225
225
|
* and a run of nine PASSes from an instrument that cannot fail is the exact false authority the whole
|
|
@@ -255,7 +255,7 @@ const SHELL = `<!doctype html><html><head><meta charset="utf-8"><title>render-ch
|
|
|
255
255
|
<script>
|
|
256
256
|
var f=document.getElementById('f'),st={heightMsgs:0},lastHeightAt=Date.now();
|
|
257
257
|
window.addEventListener('message',function(e){var d=e.data;
|
|
258
|
-
//
|
|
258
|
+
// COUNT EVERY MESSAGE BEFORE THE SOURCE FILTER, and keep the count.
|
|
259
259
|
//
|
|
260
260
|
// msgsAll minus probeMsgs minus heightMsgs is an accounting: it separates "nothing arrived from
|
|
261
261
|
// inside the frame" from "something arrived and this handler discarded it", which a post-filter
|
|
@@ -447,12 +447,36 @@ async function measureAtZoom(zoom, deadlineMs = 90_000) {
|
|
|
447
447
|
}
|
|
448
448
|
}
|
|
449
449
|
|
|
450
|
+
/**
|
|
451
|
+
* PURE. Did the in-frame probe post, and if not, which of the two causes does the evidence name?
|
|
452
|
+
*
|
|
453
|
+
* SEPARATED SO EVERY BRANCH CAN BE DRIVEN. The whole finding here is a check that reported three failed
|
|
454
|
+
* measurements about values it never read, and an arm that could only reach this through a real browser on
|
|
455
|
+
* a starved runner would be the same shape one level up: untestable except by luck.
|
|
456
|
+
*
|
|
457
|
+
* `heightMsgs` is the discriminator and was already being collected. It counts messages from the report's
|
|
458
|
+
* OWN height bridge, which travels the same postMessage path as the probe — so non-zero means the frame
|
|
459
|
+
* loaded, ran scripts and reached this shell, and a missing probe is then the probe's problem. Zero means
|
|
460
|
+
* nothing arrived from inside at all, and the probe is not the thing to look at.
|
|
461
|
+
*/
|
|
462
|
+
export function probeVerdict({ innerScrollbar, hOverflowPx, slackPx, heightMsgs = 0 } = {}) {
|
|
463
|
+
const missing = innerScrollbar === "no-probe" || hOverflowPx === "no-probe" || slackPx === null;
|
|
464
|
+
if (!missing) return { measured: true, cause: null, why: null };
|
|
465
|
+
return heightMsgs > 0
|
|
466
|
+
? { measured: false, cause: "probe-only",
|
|
467
|
+
why: `${heightMsgs} height post(s) DID arrive, so the frame loaded and its scripts ran and reached `
|
|
468
|
+
+ "this shell. The probe alone is missing — look at the probe, not at the report." }
|
|
469
|
+
: { measured: false, cause: "nothing-from-inside",
|
|
470
|
+
why: "No message of any kind arrived from inside the frame. The frame did not load, or its scripts "
|
|
471
|
+
+ "did not run. The probe is not the thing to look at." };
|
|
472
|
+
}
|
|
473
|
+
|
|
450
474
|
async function main() {
|
|
451
475
|
const { pool: POOL, built } = resolvePool();
|
|
452
476
|
const runId = pickRun(POOL);
|
|
453
477
|
mkdirSync(WORK, { recursive: true });
|
|
454
478
|
|
|
455
|
-
const { readReport } = await import(join(REPO, "driver", "portal-report.mjs"));
|
|
479
|
+
const { readReport } = await import(pathToFileURL(join(REPO, "driver", "portal-report.mjs")).href);
|
|
456
480
|
const html = readReport(join(POOL, runId), { staff: true, poolRoot: POOL });
|
|
457
481
|
// chrome.css carries 35KB of typography; without it the layout is not the one users see. What must be
|
|
458
482
|
// true is that NO external stylesheet link survives into the measured document — either it was inlined,
|
|
@@ -473,12 +497,40 @@ async function main() {
|
|
|
473
497
|
console.log(" Expect the sideways assertion to FAIL. A clean run here means the instrument is blind.\n");
|
|
474
498
|
}
|
|
475
499
|
let failures = 0;
|
|
500
|
+
// A COULD-NOT-LOOK IS NOT A FAILED MEASUREMENT (tracker issue 239). Counted apart from `failures`
|
|
501
|
+
// because the two mean different things to whoever reads the exit code: 1 says the layout is wrong,
|
|
502
|
+
// 2 says nothing was measured. Merging them is how a starved runner sends a reader to look at CSS.
|
|
503
|
+
let unmeasured = 0;
|
|
476
504
|
|
|
477
505
|
for (const zoom of ZOOMS) {
|
|
478
506
|
const measured = await measureAtZoom(zoom);
|
|
479
507
|
if (!measured.ok) { console.log(` zoom ${zoom}: FAILED — ${measured.why}`); failures++; continue; }
|
|
480
508
|
const r = measured.state;
|
|
481
509
|
|
|
510
|
+
// ── THE THREE ASSERTIONS BELOW READ THE IN-FRAME PROBE, AND IT MAY NEVER HAVE POSTED ────────────
|
|
511
|
+
//
|
|
512
|
+
// `no-probe` and `null` are not measurements that disagreed with the expectation — they are the
|
|
513
|
+
// expectation never being tested. Rendering them as `FAIL … (got "no-probe")` is a check that could
|
|
514
|
+
// not look, reported as a check that looked and disliked what it saw, and it sends a reader to the
|
|
515
|
+
// report's CSS where there is nothing to find. Measured on a starved runner: three assertions failed
|
|
516
|
+
// on a branch whose diff was comments, a documentation line and a new test file.
|
|
517
|
+
//
|
|
518
|
+
// `heightMsgs` separates the two causes and was already being collected. It counts messages from the
|
|
519
|
+
// report's OWN height bridge, which travels the same postMessage path as the probe: non-zero means
|
|
520
|
+
// the frame loaded, ran scripts and reached the parent, so a missing probe is the probe's problem.
|
|
521
|
+
// Zero means nothing from inside arrived at all, and the probe is not the thing to look at.
|
|
522
|
+
const probe = probeVerdict(r);
|
|
523
|
+
if (!probe.measured) {
|
|
524
|
+
unmeasured++;
|
|
525
|
+
console.log(` zoom ${zoom}: (ready by ${r.readyBy}, heights ${r.heightsQuiet}, `
|
|
526
|
+
+ `settled after ${r.settleTries} × 25ms, ${r.heightMsgs} height post(s), ${r.probeMsgs} probe post(s))`);
|
|
527
|
+
console.log(` COULD NOT MEASURE — the in-frame probe never posted, so the report's own scrollbar,`);
|
|
528
|
+
console.log(` its sideways overflow and the frame's slack were not read at zoom ${zoom}.`);
|
|
529
|
+
console.log(` ${probe.why}`);
|
|
530
|
+
console.log(` ── raw state: ${JSON.stringify(r)}`);
|
|
531
|
+
continue;
|
|
532
|
+
}
|
|
533
|
+
|
|
482
534
|
const checks = [
|
|
483
535
|
["no border stealing from the frame's viewport", r.borderSteals === 0, r.borderSteals],
|
|
484
536
|
["the report has NO scrollbar of its own", r.innerScrollbar === false, r.innerScrollbar],
|
|
@@ -540,6 +592,13 @@ async function main() {
|
|
|
540
592
|
+ "clean run of this check is not evidence the report is clean.");
|
|
541
593
|
process.exit(caught ? 0 : 1);
|
|
542
594
|
}
|
|
595
|
+
if (unmeasured) {
|
|
596
|
+
// EXIT 2, THE HOUSE MEANING FOR COULD-NOT-LOOK. It still stops CI — nothing is waved through — but it
|
|
597
|
+
// does not claim the layout was measured and found wrong.
|
|
598
|
+
console.error(`\nrender-check: nothing was measured at ${unmeasured} zoom level(s) — the in-frame probe `
|
|
599
|
+
+ `never posted. This is a failure to LOOK, not a finding about the report.`);
|
|
600
|
+
process.exit(2);
|
|
601
|
+
}
|
|
543
602
|
console.log(failures ? `\nrender-check: ${failures} FAILED` : "\nrender-check: all checks passed");
|
|
544
603
|
process.exit(failures ? 1 : 0);
|
|
545
604
|
}
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
// Needs `google-chrome` (on the VM). Same mechanism as render-check.mjs: a page computes its verdict
|
|
23
23
|
// and writes it into <title>, which --dump-dom hands back.
|
|
24
24
|
|
|
25
|
-
import { chromeErrorPage } from "./headless-page.mjs"; //
|
|
25
|
+
import { chromeErrorPage } from "./headless-page.mjs"; // a dumped DOM can be chrome's own error document
|
|
26
26
|
import { execFileSync } from "node:child_process";
|
|
27
27
|
import { mkdtempSync, writeFileSync, rmSync, readFileSync } from "node:fs";
|
|
28
28
|
import { tmpdir } from "node:os";
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
// receives, so it loads the brand webfonts the client's browser loads. Two scripts, two intents; do not
|
|
20
20
|
// "fix" either to match the other.
|
|
21
21
|
import { spawn } from "node:child_process";
|
|
22
|
-
import { assertPageLoaded, cjkCharsIn, cjkVerdict, fontsCovering } from "./headless-page.mjs"; //
|
|
22
|
+
import { assertPageLoaded, cjkCharsIn, cjkVerdict, fontsCovering } from "./headless-page.mjs"; // did chrome open the report, or its own error page?
|
|
23
23
|
import { mkdtempSync, writeFileSync, existsSync } from "node:fs";
|
|
24
24
|
import { tmpdir } from "node:os";
|
|
25
25
|
import { join, dirname, resolve } from "node:path";
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
// MUST NOT run as a user with a virtual-memory ulimit (`ulimit -v`) — Chrome dumps core under one. Run it
|
|
60
60
|
// as a user with `ulimit -v unlimited`. The dbus/UPower errors Chrome prints on a headless box are noise.
|
|
61
61
|
|
|
62
|
-
import { navigateOrRefuse } from './headless-page.mjs' //
|
|
62
|
+
import { navigateOrRefuse } from './headless-page.mjs' // Page.navigate returns an errorText, and nothing read it
|
|
63
63
|
import { createServer } from 'node:http'
|
|
64
64
|
import { readFileSync, existsSync, writeFileSync, mkdtempSync, rmSync } from 'node:fs'
|
|
65
65
|
import { join, extname, dirname } from 'node:path'
|
package/scripts/score.mjs
CHANGED
|
@@ -159,7 +159,7 @@ function findingsOf(runDir) {
|
|
|
159
159
|
// Its finding rows carry no typed source at all: a `type` ("Active Business", "Famous Brand") that
|
|
160
160
|
// is free model prose, and a `url`. The class is not missing by accident — the lane's register
|
|
161
161
|
// component is a two-predicate count of the mark string and structurally cannot reach a register
|
|
162
|
-
// family (
|
|
162
|
+
// family (ruled and closed). Everything it PUBLISHES comes off the common-law screen.
|
|
163
163
|
//
|
|
164
164
|
// So the class is asserted here rather than guessed from `type`, and it is asserted in the
|
|
165
165
|
// direction that cannot overstate recall: a register gold entry is never satisfied by a knockout
|
|
@@ -496,7 +496,7 @@ function print(id, ref, run, s, delta, refPath) {
|
|
|
496
496
|
console.log(deliveryLine(run));
|
|
497
497
|
// — THE INSTRUMENT, BESIDE THE NUMBER. `--json` has carried `scorer_version` since this file
|
|
498
498
|
// shipped; the human path did not, and the human path is the one whose numbers get pasted into an
|
|
499
|
-
// issue.
|
|
499
|
+
// issue. That body states 6/9 for a run that re-scores 5/2/2 today across two scorer changes
|
|
500
500
|
// (`fd9938ce`, `212cdf73`), so every delta quoted from it crosses an unmarked boundary. A number a
|
|
501
501
|
// reader can carry away must carry the instrument with it.
|
|
502
502
|
//
|
|
@@ -805,11 +805,11 @@ function print(id, ref, run, s, delta, refPath) {
|
|
|
805
805
|
// Now: `asked=` and `ran=` side by side, and — per the owner's ruling, flag rather than gate — a
|
|
806
806
|
// LOUD marker when the ask was not met, carrying the cause on the same line so the reader is not
|
|
807
807
|
// sent to the artifact to find out which switch was off (the rule for degradedCause, applied
|
|
808
|
-
// to the field beside it). An unrecorded verdict prints as unrecorded: a pre- artifact cannot
|
|
808
|
+
// to the field beside it). An unrecorded verdict prints as unrecorded: a pre-change artifact cannot
|
|
809
809
|
// answer this and must not look like a lane that met its ask.
|
|
810
810
|
// `(not stated)` and `(not established)` are DIFFERENT cells and the row keeps them apart, in the
|
|
811
811
|
// vocabulary it already uses one column over: `not stated` = this artifact never answered the
|
|
812
|
-
// question (a pre- run), `not established` = it answered and the answer is that its own record
|
|
812
|
+
// question (a pre-change run), `not established` = it answered and the answer is that its own record
|
|
813
813
|
// cannot settle what ran. Neither is `candidates`, and neither may read as a met ask.
|
|
814
814
|
//
|
|
815
815
|
// THE REASON DOES NOT GO IN THE CELL. A row is a row: the first cut interpolated the verdict's whole
|