clearotron 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +105 -0
- package/CONTRIBUTING.md +3 -3
- package/INSTALL.md +57 -52
- package/README.md +2 -1
- package/bin/brandowner.mjs +1 -1
- package/bin/clearotron.mjs +4 -4
- package/bin/connect.mjs +2 -2
- package/bin/example.mjs +114 -37
- package/bin/grant.mjs +3 -3
- package/bin/key.mjs +1 -1
- package/bin/onboard.mjs +97 -119
- package/bin/start.mjs +29 -25
- package/bin/stop.mjs +65 -3
- package/bin/update.mjs +7 -7
- package/bin/uspto-sync.mjs +1 -1
- package/build-info.json +2 -2
- package/docs/DELIVERY.md +6 -2
- package/docs/RELEASES.md +6 -4
- package/docs/architecture/01-product-overview.md +2 -2
- package/docs/architecture/02-architecture.md +2 -2
- package/docs/architecture/04-configuration-reference.md +7 -4
- package/docs/architecture/05-config-governance.md +38 -5
- package/docs/architecture/06-operations-runbook.md +13 -1
- package/docs/architecture/09-security-and-data.md +1 -1
- package/docs/decisions/0004-documentation-structure.md +1 -1
- package/driver/CHANGELOG.md +95 -1
- package/driver/README.md +2 -2
- package/driver/ask-ledger.mjs +72 -4
- package/driver/authority-trees.mjs +1 -1
- package/driver/call-capture.mjs +1 -1
- package/driver/card-frame.mjs +1 -1
- package/driver/case-law-ledger.mjs +1 -1
- package/driver/claim-liveness.mjs +1 -1
- package/driver/common-law-receipts.mjs +1 -1
- package/driver/commonlaw-carry.mjs +1 -1
- package/driver/config-inventory.mjs +1 -1
- package/driver/connotation-search.mjs +12 -12
- package/driver/contract-audit.mjs +5 -5
- package/driver/contract-dictation-registry.mjs +4 -4
- package/driver/contract-dictation.mjs +2 -2
- package/driver/contract-e3-backlog.mjs +6 -6
- package/driver/contract-vocabulary.mjs +3 -3
- package/driver/corrections-feedforward.mjs +1 -1
- package/driver/coverage-form-io.mjs +2 -2
- package/driver/coverage-form.mjs +4 -4
- package/driver/coverage-ledger.mjs +3 -3
- package/driver/coverage-union.mjs +1 -1
- package/driver/declination-call.mjs +35 -3
- package/driver/declination-duty.mjs +1 -1
- package/driver/deliver-trigger.sh +3 -3
- package/driver/deploy-live-run-guard.mjs +6 -2
- package/driver/dev-portal.mjs +1 -1
- package/driver/disposition-call.mjs +4 -4
- package/driver/disposition-tool.mjs +4 -4
- package/driver/disposition-union.mjs +2 -2
- package/driver/doc-constants.mjs +1 -1
- package/driver/door-gates.mjs +2 -2
- package/driver/doubt-selection.mjs +2 -2
- package/driver/drainer-identity.mjs +1 -1
- package/driver/driver.config.mjs +63 -11
- package/driver/e2e-rounds.mjs +2 -2
- package/driver/effort-model.mjs +2 -2
- package/driver/engine/anthropic-agent.mjs +24 -24
- package/driver/engine/auth.mjs +1 -1
- package/driver/engine/common.mjs +1 -1
- package/driver/engine/deny-authority-write.mjs +1 -1
- package/driver/engine/jx-turn.mjs +1 -1
- package/driver/engine/mcp/clarivate-server.mjs +1 -1
- package/driver/engine/mcp/corsearch-server.mjs +1 -1
- package/driver/engine/mcp/declination-server.mjs +1 -1
- package/driver/engine/mcp/dispositions-server.mjs +1 -1
- package/driver/engine/mcp/euipo-server.mjs +1 -1
- package/driver/engine/mcp/fetch-server.mjs +1 -1
- package/driver/engine/mcp/free-tier-server.mjs +2 -2
- package/driver/engine/mcp/gather-config.mjs +11 -11
- package/driver/engine/mcp/perplexity-server.mjs +1 -1
- package/driver/engine/mcp/recording-server.mjs +8 -4
- package/driver/engine/mcp/signa-server.mjs +1 -1
- package/driver/engine/mcp/uspto-local-server.mjs +1 -1
- package/driver/engine/openai-agent.mjs +2 -2
- package/driver/engine-build.mjs +2 -2
- package/driver/enqueue-schema.mjs +2 -2
- package/driver/enqueue.mjs +1 -1
- package/driver/envelope-settle.mjs +1 -1
- package/driver/evidence-claim-invariant.mjs +2 -2
- package/driver/findings-model.mjs +8 -8
- package/driver/floor-duty.mjs +1 -1
- package/driver/form-neighbourhood.mjs +1 -1
- package/driver/framework.mjs +1 -1
- package/driver/gateway.mjs +28 -23
- package/driver/grounds-grammar.mjs +1 -1
- package/driver/hit-list.mjs +1 -1
- package/driver/jurisdiction-systems.mjs +1 -1
- package/driver/jx-lanes.mjs +1 -1
- package/driver/jx-units.mjs +1 -1
- package/driver/jx.mjs +3 -3
- package/driver/knockout-assess-record.mjs +5 -1
- package/driver/narrative-refutation-record.mjs +3 -3
- package/driver/numeric-setting.mjs +1 -1
- package/driver/owner-use-check.mjs +184 -0
- package/driver/package.json +2 -2
- package/driver/phase0.mjs +1 -1
- package/driver/pipeline-knockout.mjs +52 -4
- package/driver/pipeline.mjs +215 -63
- package/driver/placement-diff.mjs +2 -2
- package/driver/placement-form.mjs +4 -4
- package/driver/placement-union.mjs +1 -1
- package/driver/portal-acks.mjs +1 -1
- package/driver/portal-config-view.mjs +2 -2
- package/driver/portal-local-auth.mjs +1 -1
- package/driver/portal-report.mjs +6 -6
- package/driver/portal-service.mjs +15 -15
- package/driver/predelivery-lint.mjs +29 -11
- package/driver/prelim-variants-record.mjs +2 -2
- package/driver/profile-page.html +1 -1
- package/driver/profile-selection.mjs +1 -1
- package/driver/profile-service.mjs +2 -2
- package/driver/profiles.mjs +1 -1
- package/driver/progress.mjs +6 -6
- package/driver/provider-usage.mjs +1 -1
- package/driver/publish/demo-marking.mjs +1 -1
- package/driver/publish/index.mjs +47 -6
- package/driver/publish/knockout.mjs +36 -14
- package/driver/publish/parse.mjs +4 -4
- package/driver/publish/publish-inputs.mjs +2 -2
- package/driver/publish/register-presence.mjs +1 -1
- package/driver/publish/render-knockout.mjs +198 -31
- package/driver/publish/report-data.mjs +13 -3
- package/driver/publish/seed-pool.mjs +24 -9
- 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 +141 -2
- package/driver/recording-agreement.mjs +3 -3
- package/driver/reference-score.mjs +59 -9
- package/driver/reference-strip-signatures.mjs +68 -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-digest-record.mjs +31 -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 +7 -7
- package/driver/replay-archive.mjs +2 -0
- package/driver/report-card-record.mjs +2 -2
- package/driver/result-noun-fields.mjs +10 -3
- package/driver/run-economics.mjs +2 -2
- package/driver/run-integrity.mjs +1 -1
- package/driver/runner.mjs +22 -22
- package/driver/scope-rules.mjs +1 -1
- package/driver/search-policy.mjs +3 -3
- package/driver/skeptic-search.mjs +1 -1
- package/driver/skills/blind-frame/SKILL.md +1 -1
- package/driver/skills/case-law-citation/SKILL.md +2 -2
- package/driver/skills/knockout-assess/SKILL.md +10 -4
- package/driver/skills/prelim-search/SKILL.md +2 -2
- package/driver/skills/prelim-search/template-formatting.md +1 -1
- package/driver/skills/prelim-search/templates/email/generic.md +1 -1
- package/driver/skills/prelim-search/worked-examples.md +1 -1
- package/driver/skills/prelim-variants/SKILL.md +2 -2
- package/driver/stage-context.mjs +1 -1
- package/driver/stages-knockout.mjs +55 -4
- package/driver/stages.mjs +97 -40
- package/driver/stray-artifacts.mjs +2 -2
- package/driver/suite-census.json +188 -44
- package/driver/synthesis-record.mjs +1 -1
- package/driver/systemd/clearotron-client-mcp.service +1 -1
- package/driver/systemd/clearotron-portal.service +1 -1
- package/driver/systemd/render-units.mjs +1 -1
- package/driver/tokens.mjs +1 -1
- package/driver/tool-calls.mjs +1 -1
- package/driver/turnaround-bands.mjs +1 -1
- package/driver/unit-file-drift.mjs +1 -1
- package/driver/unit-inventory.mjs +121 -61
- package/driver/unit-state-verdict.mjs +20 -12
- package/driver/verify-knockout.mjs +10 -2
- package/driver/verify.mjs +14 -14
- package/driver/whatif-memo-run.mjs +46 -5
- package/driver/whatif-queue.mjs +1 -1
- package/driver/whatif-worker.mjs +1 -1
- package/mcp-server/CHANGELOG.md +12 -0
- package/mcp-server/README.md +3 -3
- package/mcp-server/http-server.mjs +44 -1
- package/mcp-server/key-socket.mjs +184 -0
- package/mcp-server/lib/audit-view.mjs +69 -2
- package/mcp-server/lib/brief.mjs +15 -0
- package/mcp-server/lib/driver.mjs +7 -1
- package/mcp-server/lib/events.mjs +1 -1
- package/mcp-server/lib/http-handler.mjs +1 -1
- package/mcp-server/lib/knockout.mjs +435 -0
- package/mcp-server/lib/ops.mjs +4 -4
- package/mcp-server/lib/options.mjs +1 -1
- package/mcp-server/lib/plan.mjs +1 -1
- package/mcp-server/lib/runs.mjs +1 -1
- package/mcp-server/lib/scrub.mjs +1 -1
- package/mcp-server/lib/whatif.mjs +12 -3
- package/mcp-server/mint-token.mjs +1 -1
- package/mcp-server/package.json +2 -2
- package/mcp-server/server.mjs +76 -11
- package/package.json +3 -3
- package/portal-ui/package.json +1 -1
- package/providers/_shared/enumerate.mjs +1 -1
- package/providers/_shared/ledger-path.mjs +3 -3
- package/providers/_shared/ledger.mjs +1 -1
- package/providers/_shared/result-shape.mjs +3 -3
- package/providers/_shared/term-shape.mjs +1 -1
- package/providers/corsearch/src/core.js +1 -1
- package/providers/jx-subclass/BUILDING.md +1 -1
- package/providers/oauth-mcp-bridge/CHANGELOG.md +12 -0
- package/providers/oauth-mcp-bridge/package.json +1 -1
- package/providers/oauth-mcp-bridge/stdin-guard.mjs +2 -2
- package/scripts/README.md +1 -1
- package/scripts/added-reference-check.mjs +29 -1
- package/scripts/ai-page-render-check.mjs +2 -1
- package/scripts/authority-boundary-probe.mjs +1 -1
- package/scripts/backfill-started-at.mjs +1 -1
- package/scripts/citation-line-check.mjs +3 -3
- package/scripts/clearances-render-check.mjs +4 -3
- package/scripts/compare.mjs +2 -2
- package/scripts/composer-render-check.mjs +6 -6
- package/scripts/contract-dictation-scan.mjs +2 -2
- package/scripts/dead-names.mjs +1 -1
- package/scripts/drain-preflight.mjs +5 -5
- package/scripts/e2e-unread-terminals.mjs +1 -1
- package/scripts/e2e.mjs +8 -8
- package/scripts/env-audit.mjs +27 -7
- package/scripts/env-classify.mjs +139 -15
- package/scripts/freeze-example-run.mjs +3 -3
- package/scripts/head-arrived-gated.mjs +1 -1
- package/scripts/headless-page.mjs +274 -0
- package/scripts/home-render-check.mjs +3 -2
- package/scripts/live-surface-check.mjs +92 -19
- package/scripts/main-health.mjs +1 -1
- package/scripts/merge-presence-check.mjs +3 -3
- package/scripts/mint-reference-strip-backlog.mjs +41 -0
- package/scripts/mint-suite-census.mjs +6 -6
- package/scripts/nightly-notice.mjs +1 -1
- package/scripts/portal-lifecycle-check.mjs +3 -3
- package/scripts/reconcile-runs.mjs +1 -1
- package/scripts/release-await-cut.mjs +101 -11
- package/scripts/release-version-pr-checks.mjs +26 -2
- package/scripts/release-version.mjs +2 -2
- package/scripts/render-check.mjs +66 -7
- package/scripts/report-frame-check.mjs +12 -0
- package/scripts/report-screenshot.mjs +62 -2
- package/scripts/revisit-render-check.mjs +3 -2
- package/scripts/score.mjs +18 -4
- package/scripts/strip-tracker-citations.mjs +116 -0
- package/scripts/test-run.mjs +3 -3
- package/scripts/third-party-notices.mjs +3 -3
- package/scripts/travelling-predicates.mjs +3 -3
- package/scripts/unexecuted-asserts.mjs +2 -2
- package/scripts/verify-publishable.mjs +2 -2
- package/scripts/write-up-form-census.mjs +1 -1
- package/shared/access-audience.mjs +215 -0
- package/shared/brand.mjs +13 -13
- package/shared/citation-scan.mjs +1 -1
- package/shared/client-door.mjs +7 -7
- package/shared/driver-dir.mjs +1 -1
- package/shared/env-aliases.mjs +0 -48
- package/shared/env-local.mjs +1 -1
- package/shared/identifier-scan.mjs +3 -3
- package/shared/invocation.mjs +1 -1
- package/shared/names-in-force.mjs +2 -0
- package/shared/product-owned-names.mjs +1 -1
- package/shared/register-selection.mjs +1 -1
- package/shared/scope.mjs +5 -5
- package/shared/server-units.mjs +4 -4
- package/shared/store-in-repo.mjs +2 -2
- package/shared/suite-census.mjs +4 -4
- package/shared/tracked-files.mjs +31 -0
- package/shared/tty-style.mjs +1 -1
- package/shared/uspto-index-size.mjs +1 -1
- package/shared/vacuous-pass.mjs +1 -1
- package/skills/clearotron-account/SKILL.md +42 -13
- package/driver/systemd/prelim-driver.path +0 -69
- package/driver/systemd/prelim-driver.service +0 -86
- package/driver/systemd/prelim-driver.timer +0 -14
- package/driver/systemd/prelim-outbox.path +0 -27
- package/driver/systemd/prelim-outbox.service +0 -37
- package/driver/systemd/prelim-outbox.timer +0 -21
- package/node_modules/exceljs/README_zh.md +0 -2878
- package/node_modules/exceljs/dist/LICENSE +0 -22
- package/node_modules/exceljs/dist/es5/csv/csv.js +0 -182
- package/node_modules/exceljs/dist/es5/csv/csv.js.map +0 -1
- package/node_modules/exceljs/dist/es5/csv/line-buffer.js +0 -68
- package/node_modules/exceljs/dist/es5/csv/line-buffer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/csv/stream-converter.js +0 -110
- package/node_modules/exceljs/dist/es5/csv/stream-converter.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/anchor.js +0 -73
- package/node_modules/exceljs/dist/es5/doc/anchor.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/cell.js +0 -961
- package/node_modules/exceljs/dist/es5/doc/cell.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/column.js +0 -274
- package/node_modules/exceljs/dist/es5/doc/column.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/data-validations.js +0 -18
- package/node_modules/exceljs/dist/es5/doc/data-validations.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/defined-names.js +0 -173
- package/node_modules/exceljs/dist/es5/doc/defined-names.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/enums.js +0 -49
- package/node_modules/exceljs/dist/es5/doc/enums.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/image.js +0 -69
- package/node_modules/exceljs/dist/es5/doc/image.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/modelcontainer.js +0 -16
- package/node_modules/exceljs/dist/es5/doc/modelcontainer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/note.js +0 -64
- package/node_modules/exceljs/dist/es5/doc/note.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/range.js +0 -229
- package/node_modules/exceljs/dist/es5/doc/range.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/row.js +0 -382
- package/node_modules/exceljs/dist/es5/doc/row.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/table.js +0 -443
- package/node_modules/exceljs/dist/es5/doc/table.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/workbook.js +0 -202
- package/node_modules/exceljs/dist/es5/doc/workbook.js.map +0 -1
- package/node_modules/exceljs/dist/es5/doc/worksheet.js +0 -900
- package/node_modules/exceljs/dist/es5/doc/worksheet.js.map +0 -1
- package/node_modules/exceljs/dist/es5/exceljs.bare.js +0 -14
- package/node_modules/exceljs/dist/es5/exceljs.bare.js.map +0 -1
- package/node_modules/exceljs/dist/es5/exceljs.browser.js +0 -36
- package/node_modules/exceljs/dist/es5/exceljs.browser.js.map +0 -1
- package/node_modules/exceljs/dist/es5/exceljs.nodejs.js +0 -15
- package/node_modules/exceljs/dist/es5/exceljs.nodejs.js.map +0 -1
- package/node_modules/exceljs/dist/es5/index.js +0 -15
- package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js +0 -90
- package/node_modules/exceljs/dist/es5/stream/xlsx/hyperlink-reader.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js +0 -94
- package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-comments-writer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js +0 -94
- package/node_modules/exceljs/dist/es5/stream/xlsx/sheet-rels-writer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js +0 -362
- package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-reader.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js +0 -347
- package/node_modules/exceljs/dist/es5/stream/xlsx/workbook-writer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js +0 -392
- package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-reader.js.map +0 -1
- package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js +0 -652
- package/node_modules/exceljs/dist/es5/stream/xlsx/worksheet-writer.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/auto-drain.js +0 -18
- package/node_modules/exceljs/dist/es5/utils/auto-drain.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js +0 -15
- package/node_modules/exceljs/dist/es5/utils/browser-buffer-decode.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js +0 -18
- package/node_modules/exceljs/dist/es5/utils/browser-buffer-encode.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/cell-matrix.js +0 -149
- package/node_modules/exceljs/dist/es5/utils/cell-matrix.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/col-cache.js +0 -258
- package/node_modules/exceljs/dist/es5/utils/col-cache.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/copy-style.js +0 -43
- package/node_modules/exceljs/dist/es5/utils/copy-style.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/encryptor.js +0 -58
- package/node_modules/exceljs/dist/es5/utils/encryptor.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/iterate-stream.js +0 -46
- package/node_modules/exceljs/dist/es5/utils/iterate-stream.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/parse-sax.js +0 -47
- package/node_modules/exceljs/dist/es5/utils/parse-sax.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/shared-formula.js +0 -42
- package/node_modules/exceljs/dist/es5/utils/shared-formula.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/shared-strings.js +0 -32
- package/node_modules/exceljs/dist/es5/utils/shared-strings.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/stream-base64.js +0 -66
- package/node_modules/exceljs/dist/es5/utils/stream-base64.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/stream-buf.js +0 -343
- package/node_modules/exceljs/dist/es5/utils/stream-buf.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/string-buf.js +0 -73
- package/node_modules/exceljs/dist/es5/utils/string-buf.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/string-builder.js +0 -32
- package/node_modules/exceljs/dist/es5/utils/string-builder.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js +0 -61
- package/node_modules/exceljs/dist/es5/utils/stuttered-pipe.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/typed-stack.js +0 -23
- package/node_modules/exceljs/dist/es5/utils/typed-stack.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/under-dash.js +0 -168
- package/node_modules/exceljs/dist/es5/utils/under-dash.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/utils.js +0 -171
- package/node_modules/exceljs/dist/es5/utils/utils.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/xml-stream.js +0 -151
- package/node_modules/exceljs/dist/es5/utils/xml-stream.js.map +0 -1
- package/node_modules/exceljs/dist/es5/utils/zip-stream.js +0 -79
- package/node_modules/exceljs/dist/es5/utils/zip-stream.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js +0 -230
- package/node_modules/exceljs/dist/es5/xlsx/defaultnumformats.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/rel-type.js +0 -18
- package/node_modules/exceljs/dist/es5/xlsx/rel-type.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js +0 -139
- package/node_modules/exceljs/dist/es5/xlsx/xform/base-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js +0 -85
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/defined-name-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/sheet-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js +0 -24
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-calc-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js +0 -27
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js +0 -51
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-view-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js +0 -234
- package/node_modules/exceljs/dist/es5/xlsx/xform/book/workbook-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js +0 -103
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comment-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js +0 -76
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/comments-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js +0 -35
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-position-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/style/vml-protection-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js +0 -53
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-anchor-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js +0 -97
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-client-data-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js +0 -107
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-notes-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js +0 -92
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-shape-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js +0 -61
- package/node_modules/exceljs/dist/es5/xlsx/xform/comment/vml-textbox-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js +0 -51
- package/node_modules/exceljs/dist/es5/xlsx/xform/composite-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js +0 -30
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-heading-pairs-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js +0 -27
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-titles-of-parts-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js +0 -93
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/app-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js +0 -112
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/content-types-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js +0 -158
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/core-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js +0 -23
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationship-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js +0 -65
- package/node_modules/exceljs/dist/es5/xlsx/xform/core/relationships-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js +0 -47
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/base-cell-anchor-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js +0 -61
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-fill-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js +0 -40
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/blip-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js +0 -35
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pic-pr-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js +0 -62
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/c-nv-pr-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js +0 -82
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/cell-position-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js +0 -98
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/drawing-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js +0 -40
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-lst-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js +0 -38
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js +0 -38
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/hlink-click-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js +0 -59
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/nv-pic-pr-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js +0 -63
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/one-cell-anchor-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js +0 -67
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/pic-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js +0 -30
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/sp-pr.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js +0 -62
- package/node_modules/exceljs/dist/es5/xlsx/xform/drawing/two-cell-anchor-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js +0 -91
- package/node_modules/exceljs/dist/es5/xlsx/xform/list-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js +0 -40
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/auto-filter-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js +0 -451
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cell-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js +0 -275
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cf-rule-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js +0 -25
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/cfvo-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js +0 -38
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/color-scale-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js +0 -45
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formatting-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js +0 -77
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/conditional-formattings-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js +0 -42
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/databar-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js +0 -71
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/ext-lst-ref-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js +0 -22
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/formula-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js +0 -43
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf/icon-set-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js +0 -28
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js +0 -88
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js +0 -38
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js +0 -52
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js +0 -43
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js +0 -75
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/databar-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js +0 -22
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/f-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js +0 -66
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js +0 -22
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js +0 -78
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/col-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js +0 -247
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/data-validations-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js +0 -28
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/dimension-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/drawing-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js +0 -69
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/ext-lst-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js +0 -126
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/header-footer-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js +0 -50
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/hyperlink-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js +0 -26
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merge-cell-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js +0 -52
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/merges.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js +0 -35
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/outline-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js +0 -24
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-breaks-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js +0 -46
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-margins-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js +0 -99
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/page-setup-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/picture-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js +0 -45
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/print-options-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js +0 -37
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-breaks-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js +0 -128
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/row-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js +0 -51
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-format-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js +0 -83
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-properties-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js +0 -84
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-protection-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js +0 -190
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/sheet-view-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js +0 -32
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/table-part-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js +0 -513
- package/node_modules/exceljs/dist/es5/xlsx/xform/sheet/worksheet-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js +0 -27
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/boolean-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js +0 -58
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/date-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js +0 -47
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/float-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js +0 -53
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/integer-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js +0 -47
- package/node_modules/exceljs/dist/es5/xlsx/xform/simple/string-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js +0 -61
- package/node_modules/exceljs/dist/es5/xlsx/xform/static-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js +0 -98
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/phonetic-text-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js +0 -92
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/rich-text-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js +0 -99
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-string-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js +0 -114
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/shared-strings-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js +0 -39
- package/node_modules/exceljs/dist/es5/xlsx/xform/strings/text-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js +0 -139
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/alignment-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js +0 -185
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/border-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js +0 -66
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/color-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js +0 -106
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/dxf-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js +0 -308
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/fill-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js +0 -175
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/font-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js +0 -59
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/numfmt-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js +0 -53
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/protection-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js +0 -118
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/style-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js +0 -612
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/styles-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js +0 -46
- package/node_modules/exceljs/dist/es5/xlsx/xform/style/underline-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js +0 -75
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/auto-filter-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js +0 -30
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/custom-filter-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js +0 -89
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-column-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js +0 -28
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/filter-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js +0 -42
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-column-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js +0 -40
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-style-info-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js +0 -123
- package/node_modules/exceljs/dist/es5/xlsx/xform/table/table-xform.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xlsx.js +0 -697
- package/node_modules/exceljs/dist/es5/xlsx/xlsx.js.map +0 -1
- package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js +0 -5
- package/node_modules/exceljs/dist/es5/xlsx/xml/theme1.js.map +0 -1
- package/node_modules/exceljs/dist/exceljs.bare.js +0 -55253
- package/node_modules/exceljs/dist/exceljs.bare.js.map +0 -761
- package/node_modules/exceljs/dist/exceljs.bare.min.js +0 -45
- package/node_modules/exceljs/dist/exceljs.bare.min.js.map +0 -1
- package/node_modules/exceljs/dist/exceljs.js +0 -59900
- package/node_modules/exceljs/dist/exceljs.js.map +0 -1083
- package/node_modules/exceljs/dist/exceljs.min.js +0 -45
- package/node_modules/exceljs/dist/exceljs.min.js.map +0 -1
- package/scripts/deploy-test.sh +0 -309
|
@@ -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,21 +52,45 @@ 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
|
-
*
|
|
59
|
-
*
|
|
58
|
+
* TWENTY-FIVE, RAISED FROM FIFTEEN (tracker issue 247), because this waits for the version pull
|
|
59
|
+
* request's OWN CI and that is what it must clear. Measured over the first three cuts, the wait held
|
|
60
|
+
* 552 s, 622 s and 686 s against a 900 s budget — rising every time, and the thing it waits on is the
|
|
61
|
+
* offline suite, which grows on purpose every time anybody adds an arm. The margin was one slow queue.
|
|
62
|
+
*
|
|
63
|
+
* AND THE FAILURE IS SILENT, which is why the margin has to be generous rather than adequate. Running
|
|
64
|
+
* out is a quiet exit 0 by design — an ordinary "nothing merged" must not read as a fault — so the
|
|
65
|
+
* first time this budget is exceeded, the release is simply stranded behind a green tick. There is no
|
|
66
|
+
* red to notice. The cron floor underneath would eventually publish it, which makes the silence worse
|
|
67
|
+
* rather than better: the version ships late, from a different run, with nobody told why.
|
|
68
|
+
*
|
|
69
|
+
* THE JOB'S `timeout-minutes` MUST EXCEED THIS, with room for the checkout and install above it. A
|
|
70
|
+
* budget smaller than its own longest step cancels the job at the moment it was about to publish, and a
|
|
71
|
+
* cancelled run reads as neither a success nor a failure to anybody scanning the list. The comment here
|
|
72
|
+
* used to say the job was capped at 30 while the job actually said 25 — harmless at a 15 minute wait,
|
|
73
|
+
* and exactly the sort of thing that stops being harmless when somebody raises one number and believes
|
|
74
|
+
* a sentence about the other. `MIN_JOB_MARGIN_MS` is what an arm holds the pair to now.
|
|
75
|
+
*/
|
|
76
|
+
export const WAIT_MS = 25 * 60 * 1000;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* How far the job's budget must exceed the wait's: enough for the checkout, the install and the pack
|
|
80
|
+
* that surround it. Five minutes, which is generous against the ~90 s those actually take, because the
|
|
81
|
+
* cost of being wrong in this direction is a cancelled publish and the cost of being wrong in the other
|
|
82
|
+
* is a runner held slightly longer.
|
|
60
83
|
*/
|
|
61
|
-
export const
|
|
84
|
+
export const MIN_JOB_MARGIN_MS = 5 * 60 * 1000;
|
|
62
85
|
|
|
63
86
|
/**
|
|
64
87
|
* The bound, overridable for one caller only: the dry-run rehearsal.
|
|
65
88
|
*
|
|
66
89
|
* A rehearsal must exercise this path — a step nobody rehearses is a step that first runs for real on
|
|
67
|
-
* the day it matters — but it has nothing to wait FOR, and
|
|
68
|
-
* is
|
|
69
|
-
* 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.
|
|
70
94
|
*
|
|
71
95
|
* REFUSES A VALUE IT CANNOT READ rather than falling back to the default. A typo here would silently
|
|
72
96
|
* restore the full wait on the rehearsal, or — worse in the other direction — a real run would take a
|
|
@@ -111,6 +135,70 @@ export async function awaitCut({ refresh, read, sleep, waitMs = WAIT_MS, stepMs
|
|
|
111
135
|
|
|
112
136
|
const git = (args) => execFileSync("git", args, { encoding: "utf8" });
|
|
113
137
|
|
|
138
|
+
/**
|
|
139
|
+
* One read of `main`: the version it carries, whether that version is tagged, and WHICH COMMIT said so.
|
|
140
|
+
*
|
|
141
|
+
* THE COMMIT IS READ IN THE SAME PASS AS THE VERSION, and that is the whole point of this function
|
|
142
|
+
* existing rather than being three calls at the call site (tracker issue 238). The job below used to
|
|
143
|
+
* check out `main` by name after this loop returned, so a commit landing in between — one that moves no
|
|
144
|
+
* version, an instrument fix with no note — was packed and published under a number whose changelog
|
|
145
|
+
* never described it. Nothing downstream could see it: the tip check compares VERSIONS, and the version
|
|
146
|
+
* had not moved. Naming the commit here is what makes the two ends of the pipeline talk about the same
|
|
147
|
+
* tree.
|
|
148
|
+
*
|
|
149
|
+
* No fetch happens between the two reads, so they cannot straddle one.
|
|
150
|
+
*
|
|
151
|
+
* EVERY READER IS AN ARGUMENT, and that is not decoration. An arm that injected only `run` still asked
|
|
152
|
+
* real git for the version and the tags, so it answered differently on a box where `main` is tagged than
|
|
153
|
+
* on a runner where the checkout has neither `origin/main` nor tags — green here, red there, for reasons
|
|
154
|
+
* that have nothing to do with what it was checking. This file's own suite header warns about exactly
|
|
155
|
+
* that shape, and one of these arms was written into it anyway.
|
|
156
|
+
*/
|
|
157
|
+
export function versionBumpCommit({ version, ref = "origin/main", run = git, versionAt = versionAtHead, maxWalk = 100 }) {
|
|
158
|
+
const shas = run(["rev-list", "--first-parent", `-n${maxWalk}`, ref]).trim().split("\n").filter(Boolean);
|
|
159
|
+
let answer = null;
|
|
160
|
+
let sawTheChange = false;
|
|
161
|
+
for (const sha of shas) {
|
|
162
|
+
if (versionAt({ ref: sha }) !== version) { sawTheChange = true; break; }
|
|
163
|
+
// KEEP WALKING PAST THE FIRST MATCH. Every commit landing after the bump and before this read also
|
|
164
|
+
// carries the version — that is precisely the class of commit this exists to leave out — so the
|
|
165
|
+
// answer is the OLDEST consecutive one, not the newest.
|
|
166
|
+
answer = sha;
|
|
167
|
+
}
|
|
168
|
+
// A WALK THAT NEVER SAW THE VERSION CHANGE HAS NOT FOUND THE BUMP; it has run out of road. The oldest
|
|
169
|
+
// commit it happened to reach carries the version by coincidence of the window, and publishing that
|
|
170
|
+
// would ship a tree from before the release. An absence is a finding.
|
|
171
|
+
return sawTheChange ? answer : null;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export function readMain({ run = git, versionAt = versionAtHead, tags = tagsHere, decide = cutDecision } = {}) {
|
|
175
|
+
const sha = run(["rev-parse", "origin/main"]).trim();
|
|
176
|
+
// CHECKED BEFORE THE VERSION IS READ, so a checkout with no `origin/main` refuses here rather than
|
|
177
|
+
// going on to answer confidently about a tree it could not name. `git rev-parse` prints the name back
|
|
178
|
+
// when it cannot resolve it, so the failure looks like a value rather than like an error.
|
|
179
|
+
if (!/^[0-9a-f]{40}$/.test(sha)) {
|
|
180
|
+
throw new Error(`release-await-cut: \`git rev-parse origin/main\` answered "${sha.slice(0, 80)}", which is `
|
|
181
|
+
+ "not a commit. The publish below checks out what this reports, so a name it cannot resolve must "
|
|
182
|
+
+ "refuse here rather than resolve to something else there.");
|
|
183
|
+
}
|
|
184
|
+
const d = decide({ version: versionAt({ ref: "origin/main" }), tags: tags() });
|
|
185
|
+
// NOT THE TIP. `origin/main` is where the branch points in this pass, and a commit that landed after
|
|
186
|
+
// the version bump carries the same version — so the tip check downstream, which compares versions,
|
|
187
|
+
// passes on exactly the commit that made the tarball disagree with its changelog. The answer is the
|
|
188
|
+
// commit that MOVED the version, which is the version pull request's merge.
|
|
189
|
+
//
|
|
190
|
+
// Only asked when there is something to publish. On the ordinary "nothing merged" answer the tip is
|
|
191
|
+
// what a reader wants recorded, and there is no version whose bump could be looked for.
|
|
192
|
+
if (!d.cut) return { ...d, sha, tip: sha };
|
|
193
|
+
const bump = versionBumpCommit({ version: d.version, run, versionAt });
|
|
194
|
+
if (!bump) {
|
|
195
|
+
throw new Error(`release-await-cut: main carries ${d.version} but no commit in the last 100 could be `
|
|
196
|
+
+ "found that moved it there. The publish below checks out what this reports, and reporting the "
|
|
197
|
+
+ "branch tip instead would publish whatever else has landed since.");
|
|
198
|
+
}
|
|
199
|
+
return { ...d, sha: bump, tip: sha };
|
|
200
|
+
}
|
|
201
|
+
|
|
114
202
|
function main() {
|
|
115
203
|
const out = process.env.GITHUB_OUTPUT;
|
|
116
204
|
const started = Date.now();
|
|
@@ -120,7 +208,7 @@ function main() {
|
|
|
120
208
|
// tags never arrived answers "no tag" about every version there has ever been. That is the one wrong
|
|
121
209
|
// answer this pipeline cannot afford, so it is refreshed on every pass rather than once at checkout.
|
|
122
210
|
refresh: async () => { git(["fetch", "--no-tags", "--prune", "origin", "+refs/heads/main:refs/remotes/origin/main"]); git(["fetch", "--tags", "--force", "origin"]); },
|
|
123
|
-
read: () =>
|
|
211
|
+
read: () => readMain(),
|
|
124
212
|
sleep: (ms) => new Promise((r) => setTimeout(r, ms)),
|
|
125
213
|
now: () => Date.now() - started,
|
|
126
214
|
}).catch((e) => {
|
|
@@ -137,7 +225,7 @@ function main() {
|
|
|
137
225
|
+ `(${String(e?.message ?? e).slice(0, 200)}). This is a failure to LOOK, not a finding that `
|
|
138
226
|
+ "nothing was cut — nothing downstream may treat it as one.");
|
|
139
227
|
process.exitCode = 2;
|
|
140
|
-
if (out) appendFileSync(out, "cut=false\nversion=\nlooked=false\n");
|
|
228
|
+
if (out) appendFileSync(out, "cut=false\nversion=\nsha=\nlooked=false\n");
|
|
141
229
|
}).then((r) => {
|
|
142
230
|
if (!r) return;
|
|
143
231
|
const secs = Math.round(r.waitedMs / 1000);
|
|
@@ -148,7 +236,9 @@ function main() {
|
|
|
148
236
|
// `looked` SEPARATES the two negatives above: a loop that ran and found nothing merged, from one
|
|
149
237
|
// that could not read main at all. The publish job below requires `cut=true`, so neither publishes —
|
|
150
238
|
// but a reader deciding whether a release went missing needs to know which of the two happened.
|
|
151
|
-
|
|
239
|
+
// `sha` IS WRITTEN ON BOTH ANSWERS, not only on a cut. It records which commit this loop's verdict is
|
|
240
|
+
// about, so a run that published nothing can still be read back against the tree it looked at.
|
|
241
|
+
if (out) appendFileSync(out, `cut=${r.cut ? "true" : "false"}\nversion=${r.version}\nsha=${r.sha ?? ""}\nlooked=true\n`);
|
|
152
242
|
});
|
|
153
243
|
}
|
|
154
244
|
|
|
@@ -131,7 +131,31 @@ export function checksVerdict({ checkRuns = [], workflowRuns = [], policy = null
|
|
|
131
131
|
* incident, and this is the difference between a false red on the version job — cheap, loud, retried by
|
|
132
132
|
* the next push — and a red that means what it says.
|
|
133
133
|
*/
|
|
134
|
-
|
|
134
|
+
/**
|
|
135
|
+
* This file's own window: 32 attempts at 15 s, or eight minutes.
|
|
136
|
+
*
|
|
137
|
+
* NAMED SO AN ARM CAN COUPLE THE JOB'S BUDGET TO IT (tracker issue 247). The `version` job's
|
|
138
|
+
* `timeout-minutes` has to contain THIS wait, and the arm that claimed to check that compared the job
|
|
139
|
+
* against `release-await-cut.mjs`'s constant instead — a different wait, in a different job, which this
|
|
140
|
+
* job never runs. It held by luck and would have failed the moment that unrelated number was raised.
|
|
141
|
+
*/
|
|
142
|
+
export const CHECK_ATTEMPTS = 32;
|
|
143
|
+
export const CHECK_EVERY_MS = 15_000;
|
|
144
|
+
export const CHECKS_WINDOW_MS = CHECK_ATTEMPTS * CHECK_EVERY_MS;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* What the `version` job spends around this wait: checkout, install, the changesets action that cuts the
|
|
148
|
+
* pull request, and the cut/awaited steps either side of it.
|
|
149
|
+
*
|
|
150
|
+
* This margin belongs to THIS file for the same reason the window does. `release-await-cut.mjs` exports a
|
|
151
|
+
* margin of its own with the same name-shape and a different subject — the checkout and install around the
|
|
152
|
+
* `awaited` job's wait. Coupling the version job's budget to that one repeats the very defect this issue
|
|
153
|
+
* closes, one size smaller: raising the other job's margin would move this job's requirement, about a job
|
|
154
|
+
* whose behaviour had not changed. Two jobs, two waits, two margins, and no number shared between them.
|
|
155
|
+
*/
|
|
156
|
+
export const CHECKS_JOB_MARGIN_MS = 4 * 60 * 1000;
|
|
157
|
+
|
|
158
|
+
export async function waitForChecks({ read, sleep, attempts = CHECK_ATTEMPTS, everyMs = CHECK_EVERY_MS } = {}) {
|
|
135
159
|
if (typeof read !== "function") throw new Error("release-version-pr-checks: waitForChecks needs a read()");
|
|
136
160
|
let seen = null;
|
|
137
161
|
for (let i = 1; i <= attempts; i++) {
|
|
@@ -170,7 +194,7 @@ export function surfacesFor(repo, sha, api = gh) {
|
|
|
170
194
|
}
|
|
171
195
|
|
|
172
196
|
/**
|
|
173
|
-
* What each verdict costs the run — the half
|
|
197
|
+
* What each verdict costs the run — the half that had the defect, so the half
|
|
174
198
|
* worth driving rather than reading.
|
|
175
199
|
*
|
|
176
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,6 +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"; // a dumped DOM can be chrome's own error document
|
|
25
26
|
import { execFileSync } from "node:child_process";
|
|
26
27
|
import { mkdtempSync, writeFileSync, rmSync, readFileSync } from "node:fs";
|
|
27
28
|
import { tmpdir } from "node:os";
|
|
@@ -63,6 +64,17 @@ function main() {
|
|
|
63
64
|
"--virtual-time-budget=8000", "--dump-dom", `file://${join(work, "verify.html")}`,
|
|
64
65
|
], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"], timeout: 120000 });
|
|
65
66
|
|
|
67
|
+
// ── IS THIS OUR PAGE, OR CHROME'S ERROR PAGE? (tracker issue 227) ───────────────────────────────
|
|
68
|
+
//
|
|
69
|
+
// `--dump-dom` prints whatever chrome ended up showing, and a file it could not read produces the
|
|
70
|
+
// interstitial — which has a `<title>` of its own. This was saved from reporting a pass only by the
|
|
71
|
+
// marker below being specific: the title has to parse as JSON with a `kept` array. That is luck, not
|
|
72
|
+
// a check, and the next person to loosen the parse removes it. Said out loud instead.
|
|
73
|
+
if (chromeErrorPage(out)) {
|
|
74
|
+
console.log(`FAILED — chrome could not open the page and dumped its own error document instead. `
|
|
75
|
+
+ `Nothing below is about the report.`);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
66
78
|
const m = /<title>(.*?)<\/title>/s.exec(out);
|
|
67
79
|
if (!m || m[1] === "pending") { console.log("FAILED — the page never reported"); process.exit(1); }
|
|
68
80
|
const kept = JSON.parse(m[1]).kept;
|
|
@@ -19,6 +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"; // did chrome open the report, or its own error page?
|
|
22
23
|
import { mkdtempSync, writeFileSync, existsSync } from "node:fs";
|
|
23
24
|
import { tmpdir } from "node:os";
|
|
24
25
|
import { join, dirname, resolve } from "node:path";
|
|
@@ -29,6 +30,9 @@ const OUT = resolve(process.argv[3] ?? join(ROOT, "docs", "assets", "example-rep
|
|
|
29
30
|
const WIDTH = 1280, HEIGHT = 1040;
|
|
30
31
|
// The frame starts here rather than at the top of the document — see the scroll block below.
|
|
31
32
|
const ANCHOR = process.argv.includes("--anchor") ? process.argv[process.argv.indexOf("--anchor") + 1] : "h1";
|
|
33
|
+
// WHAT ONLY A REPORT CARRIES. `h1` is the ANCHOR — where to start the frame — and it is on every HTML
|
|
34
|
+
// page including Chrome's error interstitial, so it cannot also be the proof that this IS a report.
|
|
35
|
+
const MARKER = process.argv.includes("--marker") ? process.argv[process.argv.indexOf("--marker") + 1] : "[data-run-id]";
|
|
32
36
|
|
|
33
37
|
const src = process.argv[2];
|
|
34
38
|
if (!src) { console.error("usage: node scripts/report-screenshot.mjs <report.html> [out.png]"); process.exit(2); }
|
|
@@ -69,6 +73,34 @@ const sessionId = sess.sessionId;
|
|
|
69
73
|
const cmd = (method, params = {}) => new Promise((r) => { const n = ++id; pending.set(n, r); ws.send(JSON.stringify({ id: n, sessionId, method, params })); });
|
|
70
74
|
|
|
71
75
|
await cmd("Page.enable");
|
|
76
|
+
|
|
77
|
+
// ── IS THIS THE REPORT, OR CHROME'S OWN ERROR PAGE? (tracker issue 227) ──────────────────────────────
|
|
78
|
+
//
|
|
79
|
+
// Chrome is launched with the file URL as an ARGUMENT, so there is no navigation response to check and
|
|
80
|
+
// nothing here ever asked. When the file could not be read, Chrome showed `ERR_ACCESS_DENIED` — a page
|
|
81
|
+
// with an `<h1>` — the anchor below resolved against it, the clip was taken, and this exited 0 having
|
|
82
|
+
// written 38 KB of grey error page over the README's example frame. The successful run and the failed
|
|
83
|
+
// one differed in the log by an anchor offset and a font count, neither of which was asserted on.
|
|
84
|
+
//
|
|
85
|
+
// `existsSync` above does not cover it: a file that EXISTS and cannot be READ passes that check and
|
|
86
|
+
// fails in Chrome. So does a file that is readable and is not a report.
|
|
87
|
+
//
|
|
88
|
+
// THE MARKER IS THE RUN ID, not a tag. `h1` is what the error page has; `[data-run-id]` is what only a
|
|
89
|
+
// rendered report has, and naming it in the log is what makes the success line say what it certified
|
|
90
|
+
// rather than "an h1 was found".
|
|
91
|
+
const evaluate = async (expression) => {
|
|
92
|
+
const r = await cmd("Runtime.evaluate", { expression, returnByValue: true });
|
|
93
|
+
return r?.result?.result?.value;
|
|
94
|
+
};
|
|
95
|
+
const loaded = await assertPageLoaded(evaluate, {
|
|
96
|
+
expected: `file://${page}`,
|
|
97
|
+
marker: `document.querySelector(${JSON.stringify(MARKER)})`,
|
|
98
|
+
markerName: `a report element (${MARKER})`,
|
|
99
|
+
what: "report-screenshot",
|
|
100
|
+
});
|
|
101
|
+
if (!loaded.ok) { chrome.kill(); process.exit(1); }
|
|
102
|
+
const runId = await evaluate(`(document.querySelector(${JSON.stringify(MARKER)})?.getAttribute("data-run-id") ?? "")`);
|
|
103
|
+
|
|
72
104
|
// The fonts are the point of allowing the network at all, so wait for them rather than for a fixed
|
|
73
105
|
// sleep: a timer long enough on this box is a timer too short on a slower one, and the failure is a
|
|
74
106
|
// screenshot in the wrong typeface that nobody notices until it is in the README.
|
|
@@ -91,11 +123,39 @@ if (typeof top !== "number") {
|
|
|
91
123
|
console.error(`report-screenshot: no element matched ${JSON.stringify(ANCHOR)} — nothing to anchor the frame to.`);
|
|
92
124
|
chrome.kill(); process.exit(1);
|
|
93
125
|
}
|
|
126
|
+
// ── CAN THIS BOX DRAW WHAT THE PAGE SAYS? (tracker issue 227) ───────────────────────────────────────
|
|
127
|
+
//
|
|
128
|
+
// The default demo product's report carries the mark's native-script renderings — ベンクリ, ベンコリ,
|
|
129
|
+
// ヴェンコリ — and they are load-bearing: the verdict sentence reads "A live Japanese class 9
|
|
130
|
+
// registration reading ベンクリ covers measuring and testing instruments". With no CJK-capable font
|
|
131
|
+
// those render as empty boxes, twice in the captured frame, and nothing said so.
|
|
132
|
+
//
|
|
133
|
+
// The wait for `document.fonts.ready` above was written against exactly this class — "the failure is a
|
|
134
|
+
// screenshot in the wrong typeface that nobody notices until it is in the README" — and solved the
|
|
135
|
+
// TYPEFACE half. This is the WRITING-SYSTEM half, in the same script.
|
|
136
|
+
//
|
|
137
|
+
// REFUSES rather than warns. This writes an image that goes into the README by hand; a warning on a
|
|
138
|
+
// terminal nobody is reading when the file is already written is the shape that produced the defect
|
|
139
|
+
// above it. `--allow-tofu` is there for a reader who genuinely wants the frame anyway and has been told
|
|
140
|
+
// what is in it.
|
|
141
|
+
const pageText = await evaluate("document.body ? document.body.innerText : ''");
|
|
142
|
+
const cjkChars = cjkCharsIn(pageText);
|
|
143
|
+
const glyphs = cjkVerdict({ cjkChars, covering: fontsCovering("ja"),
|
|
144
|
+
sample: (String(pageText).match(/[\u3040-\u30ff\u4e00-\u9fff]{2,8}/u) ?? [])[0] ?? "" });
|
|
145
|
+
if (!glyphs.ok && !process.argv.includes("--allow-tofu")) {
|
|
146
|
+
console.error(`report-screenshot: ${glyphs.why}`);
|
|
147
|
+
console.error(" Pass --allow-tofu to capture it anyway, knowing the frame is missing those glyphs.");
|
|
148
|
+
chrome.kill(); process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
if (!glyphs.ok) console.error(`report-screenshot: WARNING — ${glyphs.why} Capturing anyway (--allow-tofu).`);
|
|
151
|
+
|
|
94
152
|
const y = Math.max(top - 56, 0); // a little air above the title, so the page does not read as cropped
|
|
95
153
|
const shot = await cmd("Page.captureScreenshot", { format: "png", captureBeyondViewport: true,
|
|
96
154
|
clip: { x: 0, y, width: WIDTH, height: HEIGHT, scale: 1 } });
|
|
97
155
|
if (!shot?.result?.data) { console.error(`report-screenshot: chrome returned no image. ${JSON.stringify(shot).slice(0, 300)}`); chrome.kill(); process.exit(1); }
|
|
98
156
|
writeFileSync(OUT, Buffer.from(shot.result.data, "base64"));
|
|
99
|
-
const
|
|
157
|
+
const fonts = await cmd("Runtime.evaluate", { expression: "document.fonts.size + ':' + [...document.fonts].filter(f=>f.status==='loaded').length", returnByValue: true });
|
|
100
158
|
chrome.kill();
|
|
101
|
-
|
|
159
|
+
// NAMES WHAT IT CERTIFIED. "an h1 was found" is true of the error page this used to photograph; the
|
|
160
|
+
// run id is read out of the document and is the thing a reader can check against the report they meant.
|
|
161
|
+
console.log(`report-screenshot: wrote ${OUT} of run ${runId || "(no run id in the page)"} (${WIDTH}x${HEIGHT}, anchor ${JSON.stringify(ANCHOR)} at y=${Math.round(y)}, fonts ${fonts?.result?.result?.value ?? "?"}, ${glyphs.kind})`);
|
|
@@ -59,6 +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' // Page.navigate returns an errorText, and nothing read it
|
|
62
63
|
import { createServer } from 'node:http'
|
|
63
64
|
import { readFileSync, existsSync, writeFileSync, mkdtempSync, rmSync } from 'node:fs'
|
|
64
65
|
import { join, extname, dirname } from 'node:path'
|
|
@@ -284,7 +285,7 @@ const record = {}
|
|
|
284
285
|
|
|
285
286
|
// The shell, once. Everything after this is client-side.
|
|
286
287
|
epoch = 'boot'
|
|
287
|
-
await cmd
|
|
288
|
+
await navigateOrRefuse(cmd, `${origin}/portal/home`, { what: 'revisit-render-check' })
|
|
288
289
|
if (!(await settle())) say(false, 'the shell never went quiet within 12s — it is still requesting')
|
|
289
290
|
const bootPath = await where()
|
|
290
291
|
say(bootPath === '/portal/home', `the shell loaded on /portal/home (got ${bootPath})`)
|
|
@@ -375,7 +376,7 @@ await twice('clearances', () => clickNav('Clearances'), '/portal/clearances')
|
|
|
375
376
|
// URL and the SECOND is the Back button, which is the revisit a reader actually performs and the one that
|
|
376
377
|
// runs AppShell's popstate listener rather than its click funnel.
|
|
377
378
|
epoch = 'result:1'
|
|
378
|
-
await cmd
|
|
379
|
+
await navigateOrRefuse(cmd, `${origin}/portal/result/${RUN_ID}`, { what: 'revisit-render-check' })
|
|
379
380
|
const rq1 = await settle()
|
|
380
381
|
const rp1 = await where()
|
|
381
382
|
const rt1 = await screenText()
|
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
|
//
|
|
@@ -646,6 +646,20 @@ function print(id, ref, run, s, delta, refPath) {
|
|
|
646
646
|
for (const c of B.collisions)
|
|
647
647
|
console.log(` · ${c.owner}: reference "${c.entry}" is ${c.bucket}, surfaced "${c.noise}" is noise`);
|
|
648
648
|
}
|
|
649
|
+
// ── SAME PROPRIETOR, DIFFERENT MARKS — REPORTED, NEVER SUPPRESSING (tracker issue 249) ───────────
|
|
650
|
+
//
|
|
651
|
+
// These used to print under the line above, which tells the reader not to read the recall numbers.
|
|
652
|
+
// One large filer anywhere in a matter therefore suppressed a whole run's measurement, and did: R2's
|
|
653
|
+
// real 88% → 63% recall movement went unquoted on the regression issue because `Novartis AG` held one
|
|
654
|
+
// withheld reference mark and one surfaced non-reference mark. Those two rows are both true.
|
|
655
|
+
//
|
|
656
|
+
// Kept visible because a reader may still want the pairing, and deliberately WITHOUT a verdict: this
|
|
657
|
+
// is an observation about the matter, not a fault in the scorer.
|
|
658
|
+
if (B.ownerEchoes?.length) {
|
|
659
|
+
console.log(`\n same-proprietor rows (${B.ownerEchoes.length}) — NOT a collision, and the recall numbers above stand:`);
|
|
660
|
+
for (const c of B.ownerEchoes)
|
|
661
|
+
console.log(` · ${c.owner}: reference "${c.entry}" is ${c.bucket}, surfaced "${c.noise}" is noise (different marks)`);
|
|
662
|
+
}
|
|
649
663
|
|
|
650
664
|
for (const [name, label] of [["withheld", "WITHHELD — in this run's own records, absent from its findings"],
|
|
651
665
|
["lost", "LOST — never retrieved"],
|
|
@@ -791,11 +805,11 @@ function print(id, ref, run, s, delta, refPath) {
|
|
|
791
805
|
// Now: `asked=` and `ran=` side by side, and — per the owner's ruling, flag rather than gate — a
|
|
792
806
|
// LOUD marker when the ask was not met, carrying the cause on the same line so the reader is not
|
|
793
807
|
// sent to the artifact to find out which switch was off (the rule for degradedCause, applied
|
|
794
|
-
// 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
|
|
795
809
|
// answer this and must not look like a lane that met its ask.
|
|
796
810
|
// `(not stated)` and `(not established)` are DIFFERENT cells and the row keeps them apart, in the
|
|
797
811
|
// vocabulary it already uses one column over: `not stated` = this artifact never answered the
|
|
798
|
-
// 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
|
|
799
813
|
// cannot settle what ran. Neither is `candidates`, and neither may read as a met ask.
|
|
800
814
|
//
|
|
801
815
|
// THE REASON DOES NOT GO IN THE CELL. A row is a row: the first cut interpolated the verdict's whole
|