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
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import { readFileSync, writeFileSync, mkdirSync, chmodSync, existsSync } from 'node:fs';
|
|
11
11
|
import { join } from 'node:path';
|
|
12
12
|
import { driverDir, ensureDriverDir } from '../../shared/driver-dir.mjs'; //
|
|
13
|
-
import { riskTier, TONE_TIER, regenIndex, regenSurfaces, auditRouteFor, markReportRouteFor } from './index.mjs';
|
|
13
|
+
import { riskTier, TONE_TIER, regenIndex, regenSurfaces, auditRouteFor, markReportRouteFor, reportRouteFor } from './index.mjs';
|
|
14
14
|
import { runKnockoutLint, deliveryFlagLines } from '../predelivery-lint.mjs';
|
|
15
15
|
import { note } from '../log.mjs';
|
|
16
16
|
import { addSheet } from './xlsx.mjs';
|
|
@@ -68,9 +68,13 @@ export const knockoutStatement = (framework, marks) =>
|
|
|
68
68
|
// 11pt, no <!DOCTYPE>, no <head>, no <meta charset> — and they rendered a Depth 2 report as a grey
|
|
69
69
|
// spreadsheet with the register hit-counts the customer paid for buried in a table cell. The report now
|
|
70
70
|
// renders through publish/render-knockout.mjs in the product's own design language, off the same shared
|
|
71
|
-
// stylesheet and brand tokens as the clearance report.
|
|
72
|
-
//
|
|
73
|
-
//
|
|
71
|
+
// stylesheet and brand tokens as the clearance report.
|
|
72
|
+
//
|
|
73
|
+
// THE REVIEWER'S NOTES ARE ON THE REPORT SINCE 2026-09-07 (owner ruling, tracker issue 274). This
|
|
74
|
+
// paragraph used to end "internal working material (the purple staff notes, the model's registerEstimate)
|
|
75
|
+
// is not IN the report; it lives in the audit workbook". That is now true of `registerEstimate` only: the
|
|
76
|
+
// notes render on the page, labelled, and the workbook keeps its copy. See render-knockout.mjs's header
|
|
77
|
+
// for the ruling and reviewerNotesBlock for the shape.
|
|
74
78
|
|
|
75
79
|
// ── The workbook: the skill's three sheet names + columns, plus the conditional sheets below ────────
|
|
76
80
|
// ── ONE DRILL-THROUGH KEY: `<MARK> #<ordinal>`, per mark ──────────────────────────────────────
|
|
@@ -250,9 +254,11 @@ export async function buildKnockoutWorkbook(findings, receipts, outPath, registe
|
|
|
250
254
|
// ── The email: a COVER NOTE. Headline band, one line per mark, the report link. Nothing else. ────────
|
|
251
255
|
// The report is the deliverable and the email points at it — the same doctrine the clearance lane
|
|
252
256
|
// follows. The old `delivery.email === 'table'` overlay inlined the full review table into the mail
|
|
253
|
-
// body,
|
|
254
|
-
//
|
|
255
|
-
//
|
|
257
|
+
// body, which put the findings in front of whoever the mail reached rather than whoever opened the
|
|
258
|
+
// report, and made a second rendering of them in a second dialect — a second thing to keep true.
|
|
259
|
+
// (That overlay's other charge, that it shipped an INTERNAL variant, no longer describes anything: the
|
|
260
|
+
// 2026-09-07 ruling put the reviewer's notes on the one report. The reason above is the load-bearing one
|
|
261
|
+
// and it is unaffected — the mail stays a cover note.) Per-lawyer client formatting is drafted by the assistant from the
|
|
256
262
|
// run's report-data.json, not by a template knob in here.
|
|
257
263
|
// `reports` is publishKnockout's own list — `[{mark, url}]`, one per published document — and
|
|
258
264
|
// `auditUrl` is composed by the publisher from the pool URL it already holds. Neither is derived here.
|
|
@@ -358,6 +364,12 @@ export async function publishKnockout({ runId, codename, runDir, findings, plan,
|
|
|
358
364
|
let registerRecords = null;
|
|
359
365
|
try { registerRecords = JSON.parse(readFileSync(driverDir(runDir, 'register-records.json'), 'utf8')); }
|
|
360
366
|
catch { registerRecords = null; }
|
|
367
|
+
// The owner lookups this run made (tracker issue 276), read the same tolerant way as the records above:
|
|
368
|
+
// an archived run that predates the lane has no file, and its cards then render exactly as they were
|
|
369
|
+
// delivered. The source line the report prints comes from HERE, not from anything the seat typed.
|
|
370
|
+
let ownerChecks = [];
|
|
371
|
+
try { ownerChecks = JSON.parse(readFileSync(driverDir(runDir, 'owner-checks.json'), 'utf8')).checks ?? []; }
|
|
372
|
+
catch { ownerChecks = []; }
|
|
361
373
|
|
|
362
374
|
// ── — THIS LANE HAD NO RECORD-ORIGIN LOGIC AT ALL ─────────────────────────────────────────────
|
|
363
375
|
//
|
|
@@ -473,12 +485,22 @@ export async function publishKnockout({ runId, codename, runDir, findings, plan,
|
|
|
473
485
|
// "every audit link we have ever emailed died at the front door, silently". It came back here twice:
|
|
474
486
|
// once as string surgery on the report URL, once as this function, and both spelled a pool path.
|
|
475
487
|
//
|
|
476
|
-
// A SINGLE MARK
|
|
477
|
-
//
|
|
478
|
-
//
|
|
488
|
+
// A SINGLE MARK USED TO KEEP THE LEGACY SHAPE, on the reasoning that `<runId>/report.html` is what the
|
|
489
|
+
// rewrite exists for and that it resolves. THAT IS FALSE ON PRODUCTION (tracker issue 289) and the
|
|
490
|
+
// paragraph is kept, corrected, because its warning is still the right instinct and only its premise
|
|
491
|
+
// was wrong.
|
|
492
|
+
//
|
|
493
|
+
// Settled by the account owner against the live deployment, signed in as a delivered run's own owner:
|
|
494
|
+
// the emailed link returned the portal application's own `{"error":"not_found"}` — the app answered, so
|
|
495
|
+
// no rewrite touched the path — while the portal's own link for that run opened. The edge block this
|
|
496
|
+
// reasoning rests on is not in this repository, and the transcription of it in the test tree describes
|
|
497
|
+
// a host at the moment somebody wrote it down, not production today.
|
|
498
|
+
//
|
|
499
|
+
// The warning it ends with — changing a link that works to match one that did not — is why this was
|
|
500
|
+
// checked against the live thing before being changed rather than after.
|
|
479
501
|
const origin = poolUrl ? String(poolUrl).replace(/\/$/, '') : null;
|
|
480
502
|
const reportUrlFor = (slug) => !origin ? null
|
|
481
|
-
: single ?
|
|
503
|
+
: single ? reportRouteFor(origin, runId)
|
|
482
504
|
: markReportRouteFor(origin, runId, slug);
|
|
483
505
|
// — resolved once for the whole publish, off the same two sources the clearance
|
|
484
506
|
// publisher uses (frozen sidecar, then roster; either marks, neither un-marks).
|
|
@@ -512,7 +534,7 @@ export async function publishKnockout({ runId, codename, runDir, findings, plan,
|
|
|
512
534
|
};
|
|
513
535
|
const markBand = single ? overall : worstBand(framework, [m]);
|
|
514
536
|
writeRO(file, renderKnockoutHtml(one, framework, {
|
|
515
|
-
runId, overall: markBand, issued, auditFile, probeRan, registerCounts, registerRecords, identity, matter: runId,
|
|
537
|
+
runId, overall: markBand, issued, auditFile, probeRan, registerCounts, registerRecords, ownerChecks, identity, matter: runId,
|
|
516
538
|
// — an invented mark says so on its own report. Resolved ONCE above the loop:
|
|
517
539
|
// the answer is a property of the run, and asking per mark would let a multi-mark demo mark some
|
|
518
540
|
// documents and not others if the roster moved mid-publish.
|
|
@@ -528,7 +550,7 @@ export async function publishKnockout({ runId, codename, runDir, findings, plan,
|
|
|
528
550
|
// native-render path has been reading for since before anything wrote it. One per report, so the
|
|
529
551
|
// native render of a per-mark document is that mark's data and not the batch's.
|
|
530
552
|
writeRO(dataFile, JSON.stringify(knockoutReportData(one, framework, {
|
|
531
|
-
runId, codename, overall: markBand, issued, registerCounts, registerRecords, auditFile, customerKey, matter: runId,
|
|
553
|
+
runId, codename, overall: markBand, issued, registerCounts, registerRecords, ownerChecks, auditFile, customerKey, matter: runId,
|
|
532
554
|
identity: { ...identity, level: searchPolicy?.level ?? null },
|
|
533
555
|
url: reportUrlFor(slug),
|
|
534
556
|
}), null, 2));
|
|
@@ -628,7 +650,7 @@ export async function publishKnockout({ runId, codename, runDir, findings, plan,
|
|
|
628
650
|
// WHICH DOCUMENTS THIS RUN PUBLISHED, and for which name. Every reader that has to open,
|
|
629
651
|
// serve or link a knockout's reports takes the list from here rather than deriving a filename: the
|
|
630
652
|
// naming rule (one mark ⇒ `report.html`, several ⇒ `report-<slug>.html`) is written ONCE, above, and
|
|
631
|
-
// nobody re-implements it. Absent on every pre- meta, which is exactly the run that has one
|
|
653
|
+
// nobody re-implements it. Absent on every pre-change meta, which is exactly the run that has one
|
|
632
654
|
// report at `report.html` — so a reader that falls back to that name on absence is reading the
|
|
633
655
|
// archive correctly, not guessing.
|
|
634
656
|
// — `slug` RIDES. It was destructured away here while being computed twenty lines up, and
|
package/driver/publish/parse.mjs
CHANGED
|
@@ -225,11 +225,11 @@ export function stripTelemetry(md) {
|
|
|
225
225
|
.join('\n');
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
// ──
|
|
228
|
+
// ── THE CLIENT CUT OF THE AUDIT BLOCK'S CROSS-REFERENCE LINES ────────────────────────────────
|
|
229
229
|
//
|
|
230
230
|
// `disposition` is a PLACEMENT key. stages.mjs dictates it as the posture that sets only WHERE a card is
|
|
231
231
|
// placed and never the band; findings-model's DISPOSITION_GROUP maps it to the section heading the report
|
|
232
|
-
// already prints.
|
|
232
|
+
// already prints. D5 took it off the report's risk chip and a later change added the `disposition` KEY to
|
|
233
233
|
// scrubCards' strip list — and the word still reached client principals, because audit-from-spine.mjs
|
|
234
234
|
// re-encodes it into two OTHER keys that survive an allowlist keyed on names:
|
|
235
235
|
//
|
|
@@ -252,7 +252,7 @@ export function stripTelemetry(md) {
|
|
|
252
252
|
// resolved to, and which fragment of a contradicted pair the record supports. Deleting the key deletes the
|
|
253
253
|
// pointer along with the word.
|
|
254
254
|
//
|
|
255
|
-
// THIS IS NOT THE SUBSTITUTION
|
|
255
|
+
// THIS IS NOT THE FORBIDDEN SUBSTITUTION. Nothing here reads arbitrary client prose for a vocabulary.
|
|
256
256
|
// Each rule is ANCHORED to one position in a grammar THIS ENGINE writes: the disposition token at the head
|
|
257
257
|
// of `resolution`, and the disposition token inside the `(finding #N, …)` parenthetical the contradiction
|
|
258
258
|
// line builds. A mark named ADVERSARIAL survives both — it is not at position 0 of a resolution line, and
|
|
@@ -290,7 +290,7 @@ export function contradictionResolutionForClient(v) {
|
|
|
290
290
|
return String(v).replace(CONTRADICTION_DISPOSITION_RE, '$1)');
|
|
291
291
|
}
|
|
292
292
|
|
|
293
|
-
// ──
|
|
293
|
+
// ── ENGINE_PLAIN AND plainify ARE DELETED ────────────────────────────────────────────────────
|
|
294
294
|
//
|
|
295
295
|
// doc-52 put nineteen find-and-replace rules on the rendered client surface. tracker issue 656 is what that cost:
|
|
296
296
|
// `axis` -> `group` turned "AXIS Bank filed in class 36" into "group Bank filed in class 36" — a report
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
//
|
|
20
20
|
// Modelled on mcp-server/lib/coverage.mjs:65-75 (assertValidatorCoverage): a closed partition asserted
|
|
21
21
|
// at LOAD, so a new store cannot be added without consciously choosing its gating. The failure that
|
|
22
|
-
// mechanism exists to prevent is
|
|
22
|
+
// mechanism exists to prevent is the — a hand-copied mirror that silently stopped covering an
|
|
23
23
|
// artifact and still answered "complete: yes" about a file it never checked.
|
|
24
24
|
|
|
25
25
|
import { existsSync, readFileSync } from "node:fs";
|
|
@@ -93,7 +93,7 @@ export const NOT_READ_BY_NAME = {
|
|
|
93
93
|
"token-ledger": "the per-recipe token rollup, read through tokens.mjs rollupTokens(runDir) which walks the run's own telemetry; absent ⇒ the meta simply omits the tokens field",
|
|
94
94
|
};
|
|
95
95
|
|
|
96
|
-
// Neither of these is a run-side store, and both have been miscounted as one (
|
|
96
|
+
// Neither of these is a run-side store, and both have been miscounted as one (its own issue body
|
|
97
97
|
// lists audit.md among the stores publishReport reads). They are FUNCTION ARGUMENTS — publishReport is
|
|
98
98
|
// handed the two contract markdown paths by its caller and reads them from wherever it is told, so an
|
|
99
99
|
// absent one is the caller's error and already throws. Declared so the source scan can tell "argument"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
|
|
3
3
|
// register-presence.mjs — the audit's queryable store of every live, matter-in-scope enumerated record.
|
|
4
4
|
//
|
|
5
|
-
// THE RULING THIS IMPLEMENTS (
|
|
5
|
+
// THE RULING THIS IMPLEMENTS (owner 2026-08-31): "YES of course they should be in
|
|
6
6
|
// the audit. always. … we don't need to report on them but we need to store them." On the run this was
|
|
7
7
|
// measured against, 65 live records inside the matter's scope and carrying the client's own dominant
|
|
8
8
|
// element appeared in NO stored artifact — not the report (correct), and not the audit either (the
|
|
@@ -21,10 +21,20 @@
|
|
|
21
21
|
// ~60 lines of duplicated document shell, and it is the right price: the alternative is exporting the
|
|
22
22
|
// shell out of the frozen file, which is a bigger break than the duplication saves.
|
|
23
23
|
//
|
|
24
|
-
// ONE report. There is no client variant and no internal variant
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
//
|
|
24
|
+
// ONE report. There is no client variant and no internal variant, and that is
|
|
25
|
+
// still the rule — it is what removes the whole class of "the wrong link got sent".
|
|
26
|
+
//
|
|
27
|
+
// WHAT CHANGED, 2026-09-07 (owner ruling, tracker issue 274): the one report now CARRIES the reviewer's
|
|
28
|
+
// notes rather than routing them to the audit workbook alone. The earlier reading of "one report" was
|
|
29
|
+
// that internal working material is simply not part of it; the ruling is that there is one report and the
|
|
30
|
+
// person who ran Clearotron reads it, so holding material back "just adds confusion for where data is
|
|
31
|
+
// lost". Six notes written for the reviewing lawyer on a delivered run reached the spreadsheet and
|
|
32
|
+
// nothing else, which is the measurement behind the ruling.
|
|
33
|
+
//
|
|
34
|
+
// So: the notes render, LABELLED, in report.css's existing `.internal` purple convention (see
|
|
35
|
+
// reviewerNotesBlock) — never merged into the client-voiced body. The workbook keeps them as well; this
|
|
36
|
+
// added a surface and moved none. The model's `registerEstimate` is NOT covered by the ruling and stays
|
|
37
|
+
// off the page.
|
|
28
38
|
import { readFileSync } from 'node:fs';
|
|
29
39
|
import { join, dirname } from 'node:path';
|
|
30
40
|
import { fileURLToPath } from 'node:url';
|
|
@@ -118,7 +128,7 @@ function bandStop(framework, band) {
|
|
|
118
128
|
|
|
119
129
|
const DEGRADED_NOTE = 'Automated research for this name was unavailable — manual verification is recommended before relying on this rating.';
|
|
120
130
|
|
|
121
|
-
//
|
|
131
|
+
// THE QUALIFIER, IN WORDS. It rendered as a bare grey token under the band chip — `low`, no
|
|
122
132
|
// label, no border, nothing on the page saying what it qualified. A reader met one word of a private
|
|
123
133
|
// vocabulary and had to guess whether it described the risk, the confidence or the search.
|
|
124
134
|
//
|
|
@@ -176,6 +186,14 @@ const KO_CSS = `
|
|
|
176
186
|
.ko-findev{margin:0;font-size:12.5px;line-height:1.6;word-break:break-word}
|
|
177
187
|
.ko-count{font-family:var(--mono);font-size:13px;color:var(--ink);margin:0}
|
|
178
188
|
.ko-degraded{font-size:13px;color:var(--med-tx,#82550A);margin:8px 0 0;font-style:italic}
|
|
189
|
+
/* The reviewer-notes legend. NOT .ko-legend — that name is taken by the framework attribution row
|
|
190
|
+
above, and reusing it would restyle the caption. It names the purple convention report.css already
|
|
191
|
+
draws for .internal, so the colour is stated once and never re-specified. */
|
|
192
|
+
.ko-refnote{margin:0;padding:11px 24px 0;font-size:12px;color:#6a2b6e;font-style:italic}
|
|
193
|
+
/* The notes sit inside a mark's column, so the shared .internal block's bullets keep the column's
|
|
194
|
+
own list indent and do not fight the paragraph above them. */
|
|
195
|
+
.ko-row .internal .ko-bul{margin:0 0 4px}
|
|
196
|
+
.ko-row .internal .ko-bul:last-child{margin-bottom:0}
|
|
179
197
|
.ko-counts table{width:100%;border-collapse:collapse;font-size:14px}
|
|
180
198
|
.ko-counts th{text-align:left;font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);
|
|
181
199
|
font-weight:700;padding:14px 24px 8px;border-bottom:1px solid var(--line)}
|
|
@@ -248,13 +266,13 @@ function glanceSection(marks, framework, registerCounts) {
|
|
|
248
266
|
</div>
|
|
249
267
|
</div>`;
|
|
250
268
|
}).join('');
|
|
251
|
-
//
|
|
269
|
+
// THE FRAMEWORK IS NAMED BESIDE THE CHIPS IT EXPLAINS. Every `.ko-band` chip below speaks one
|
|
252
270
|
// word out of a framework's vocabulary, and that framework was named exactly once on this page: in the
|
|
253
271
|
// footer, under everything it governs. This is ATTRIBUTION AND NOTHING ELSE — the same "Rated under
|
|
254
272
|
// <name>" the footer prints, moved to where the words it licenses are actually read.
|
|
255
273
|
//
|
|
256
274
|
// NO LADDER HERE. Spelling the band scale out beside the chips would be new furniture on a client
|
|
257
|
-
// deliverable, and
|
|
275
|
+
// deliverable, and a rung buys depth, never furniture. If the knockout reader needs the
|
|
258
276
|
// scale, that is its own decision on its own merits, not a rider on this one.
|
|
259
277
|
//
|
|
260
278
|
// No framework ⇒ NOTHING. A run this render was given no manifest for gets no attribution invented for
|
|
@@ -637,6 +655,28 @@ const REGISTER_ORDINAL_FLOOR = 900;
|
|
|
637
655
|
export const NOT_WEIGHED_LINE = 'Register listing — this card carries no rating of its own';
|
|
638
656
|
const NOT_WEIGHED = NOT_WEIGHED_LINE;
|
|
639
657
|
|
|
658
|
+
/**
|
|
659
|
+
* The register card's basis line, which cannot be written without knowing whether the card is rated.
|
|
660
|
+
*
|
|
661
|
+
* THE TWO RULINGS MEET HERE AND THEY ALMOST CONTRADICTED EACH OTHER ON A CLIENT PAGE. tracker issue
|
|
662
|
+
* 1935 retired a code-owned placeholder because a rating nobody performed must not appear; tracker
|
|
663
|
+
* issue 274 then ruled that the rater's OWN band for a promoted filing must appear, because a filing
|
|
664
|
+
* the rater weighed into the verdict was rendering as though it had not been. Both hold, and they hold
|
|
665
|
+
* over different cards.
|
|
666
|
+
*
|
|
667
|
+
* `band` and `read` are independent fields — the band comes from `registerReads[].band` and the read
|
|
668
|
+
* from its `text` — so a filing the rater banded WITHOUT typing a read is reachable, and the first cut
|
|
669
|
+
* of this rendered the band chip beside the sentence "this card carries no rating of its own". The
|
|
670
|
+
* report would have been contradicting itself in one card, in the client's voice.
|
|
671
|
+
*
|
|
672
|
+
* So: the retired line belongs only to a card with no band. A banded card with no read says nothing
|
|
673
|
+
* rather than something false — the chip and the source tag already say what the card is.
|
|
674
|
+
*/
|
|
675
|
+
function basisLine(band, read) {
|
|
676
|
+
if (read) return `<p class="ko-findbasis">${esc(read)}</p>`;
|
|
677
|
+
return band ? '' : `<p class="ko-findbasis">${esc(NOT_WEIGHED)}</p>`;
|
|
678
|
+
}
|
|
679
|
+
|
|
640
680
|
|
|
641
681
|
/**
|
|
642
682
|
* Which listed filings get pointed at. TWO tests, and both fail OPEN — a filing is promoted unless
|
|
@@ -654,7 +694,11 @@ const NOT_WEIGHED = NOT_WEIGHED_LINE;
|
|
|
654
694
|
* Neither test is a judgment about the filing. Whether any of it blocks anything is lawyer work this
|
|
655
695
|
* product does not do — the same line register-records.mjs rule 3 has held since the lane shipped.
|
|
656
696
|
*/
|
|
657
|
-
|
|
697
|
+
// EXPORTED so the pipeline can ask the same question the page asks (tracker issue 276). The owner
|
|
698
|
+
// use-check runs on PROMOTED filings only, and "promoted" has to mean here what it means on the report —
|
|
699
|
+
// a second predicate would let the engine search an owner whose filing the report never shows, or skip
|
|
700
|
+
// one it does.
|
|
701
|
+
export function promotableRecords(entry, mark) {
|
|
658
702
|
const scope = new Set([...(mark?.classesSearched ?? []), ...(entry?.classes ?? [])]
|
|
659
703
|
.map(Number).filter(Number.isInteger));
|
|
660
704
|
return (entry?.records ?? []).filter((r) => {
|
|
@@ -728,9 +772,13 @@ function registerCardViews(mark, framework, registerRecords) {
|
|
|
728
772
|
* is gone; what tells the two apart on the page is where the finding came from, which is the vocabulary
|
|
729
773
|
* the clearance reports already use for exactly this.
|
|
730
774
|
*
|
|
731
|
-
*
|
|
732
|
-
* here
|
|
733
|
-
*
|
|
775
|
+
* THE BAND CHIP IS DRAWN ONLY WHEN THE RATER SENT ONE, and that condition is the whole rule. The old note
|
|
776
|
+
* here said "no band chip and no `bandStop`, ever: a rung of the run's ladder would be a rating nobody
|
|
777
|
+
* performed" — which was true for as long as nothing could carry the rater's rating of an individual
|
|
778
|
+
* filing. `registerReads[].band` now can (tracker issue 274), so the objection is answered where it was
|
|
779
|
+
* raised: with a band, the rating WAS performed, by the seat, in the framework's own words, and the chip
|
|
780
|
+
* states it. With no band the old rule stands unchanged — --faint rail, no chip, nothing claimed — and
|
|
781
|
+
* that is still what every archived run renders.
|
|
734
782
|
*
|
|
735
783
|
* THE LINE UNDER THE STATEMENT DESCRIBES THE CARD, NOT THE RATING. It used to deny
|
|
736
784
|
* that the rating turned on this filing, which this function has no way to know and which a delivered
|
|
@@ -759,28 +807,83 @@ function sourceChips(v) {
|
|
|
759
807
|
return `${commonLaw ? '<span class="src cl">Common law</span>' : ''}${register ? '<span class="src reg">Register</span>' : ''}`;
|
|
760
808
|
}
|
|
761
809
|
|
|
762
|
-
|
|
810
|
+
// ── THE REVIEWER'S NOTES, ON THE REPORT ─────────────────────────────────────────────────
|
|
811
|
+
//
|
|
812
|
+
// OWNER RULING, 2026-09-07: there is one report and the person who ran Clearotron reads it — keeping
|
|
813
|
+
// this material off the page "just adds confusion for where data is lost". This replaces the earlier
|
|
814
|
+
// split under which the notes went to the audit workbook alone (the header of this file and
|
|
815
|
+
// publish/knockout.mjs carried that rule; both now say what replaced it). The workbook keeps them too:
|
|
816
|
+
// this adds a surface, it does not move one.
|
|
817
|
+
//
|
|
818
|
+
// LABELLED, NEVER MERGED. They render in the established `.internal` purple convention report.css
|
|
819
|
+
// already defines — the same one the clearance report uses for this material — so a reader can see whose
|
|
820
|
+
// voice a line is in. Merging them into the client-voiced body would make the reviewer's asides read as
|
|
821
|
+
// findings about the mark, which is the one way this ruling could produce a worse document.
|
|
822
|
+
const REVIEWER_NOTES_LEGEND = 'Information for your reference/context that likely does not need to be shared with the business is shown in purple.';
|
|
823
|
+
|
|
824
|
+
// The clearance lane's own label, copied rather than re-worded (tracker issue 276). One spelling across
|
|
825
|
+
// both products is the point: a reader who has seen it on a clearance report knows what it means here.
|
|
826
|
+
const USE_CHECK_LABEL = 'Use-check source:';
|
|
827
|
+
|
|
828
|
+
/** The owner lookup covering a filing, joined by recordId. `null` when this run owed that filing none. */
|
|
829
|
+
function ownerCheckFor(ownerChecks, recordId) {
|
|
830
|
+
const id = String(recordId ?? '').trim();
|
|
831
|
+
if (!id) return null;
|
|
832
|
+
return (Array.isArray(ownerChecks) ? ownerChecks : [])
|
|
833
|
+
.find((c) => (Array.isArray(c?.recordIds) ? c.recordIds : []).some((x) => String(x).trim() === id)) ?? null;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
function reviewerNotesBlock(m) {
|
|
837
|
+
const notes = (Array.isArray(m?.purpleNotes) ? m.purpleNotes : [])
|
|
838
|
+
.map((n) => String(n ?? '').trim()).filter(Boolean);
|
|
839
|
+
if (!notes.length) return '';
|
|
840
|
+
return `<div class="internal">
|
|
841
|
+
<span class="tag">For your reference</span>
|
|
842
|
+
${notes.map((n) => `<p class="ko-bul">${inlineMd(n)}</p>`).join('')}
|
|
843
|
+
</div>`;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
function registerFindingBlock(v, markIndex, reads = null, framework = null, ownerChecks = []) {
|
|
763
847
|
const r = v.record;
|
|
764
848
|
// — THE RATER'S OWN READ OF THIS FILING, when it recorded one. `registerReads` is
|
|
765
849
|
// joined to the record store by the validator, so a row that reaches here names a filing this run
|
|
766
850
|
// actually holds. With no row the neutral line stands, and the neutral line is TRUE: it describes the
|
|
767
851
|
// card. That is why the field can be optional without the page ever asserting something false.
|
|
768
|
-
const
|
|
769
|
-
.map((x) => ({ id: String(x?.recordId ?? '').trim(), text: String(x?.read ?? '').trim() }))
|
|
770
|
-
.find((x) => x.id && x.id === String(r?.recordId ?? '').trim())
|
|
852
|
+
const row = (Array.isArray(reads) ? reads : [])
|
|
853
|
+
.map((x) => ({ id: String(x?.recordId ?? '').trim(), text: String(x?.read ?? '').trim(), band: String(x?.band ?? '').trim() }))
|
|
854
|
+
.find((x) => x.id && x.id === String(r?.recordId ?? '').trim());
|
|
855
|
+
const read = row?.text;
|
|
856
|
+
// The band rides the SAME row as the read and is independently optional: a read with no band prints
|
|
857
|
+
// exactly as it did before this field existed. The validator has already checked the word against the
|
|
858
|
+
// frozen ladder, so `bandStop` resolves a real stop rather than falling through to a default that would
|
|
859
|
+
// colour an unknown word as though it were rated.
|
|
860
|
+
const band = row?.band || null;
|
|
861
|
+
const stop = band ? bandStop(framework, band) : null;
|
|
862
|
+
// ── WHERE THE OWNER'S TRADE WAS LOOKED UP (tracker issue 276) ──────────────────────────────────
|
|
863
|
+
//
|
|
864
|
+
// The source is the DRIVER'S, joined by this filing's own recordId — never a URL the seat typed. That
|
|
865
|
+
// is the whole reason a reader can trust it: the row exists because the driver made the call, so
|
|
866
|
+
// "asserting a no-result without issuing a query" is not a thing this surface can express.
|
|
867
|
+
//
|
|
868
|
+
// ABSENT ON A RUN THAT OWED NO CHECK, and that silence is correct: no line at all says nothing, while
|
|
869
|
+
// a line reading "no result" on a filing nobody was asked about would claim a search that never ran.
|
|
870
|
+
const useCheck = ownerCheckFor(ownerChecks, r?.recordId);
|
|
871
|
+
const useCheckSource = useCheck?.source ?? null;
|
|
771
872
|
const meta = [r.owner ? esc(r.owner) : 'proprietor not stated', r.territory ? esc(r.territory) : null]
|
|
772
873
|
.filter(Boolean).join(' · ');
|
|
773
874
|
const receipt = isHttpUrl(r.url) ? linkOrText(r.url) : esc(r.recordId ?? 'no record address supplied');
|
|
774
875
|
return `<div class="card ko-find" data-ko-mark="${Number(markIndex)}" data-ko-ord="${Number(v.ordinal)}">
|
|
775
876
|
<div class="top">
|
|
776
|
-
<div class="rail" style="background:var(--faint)"></div>
|
|
877
|
+
<div class="rail" style="background:var(${stop ?? '--faint'})"></div>
|
|
777
878
|
<div class="body">
|
|
778
879
|
<div class="cardhead">
|
|
779
|
-
<span class="fnum">${esc(v.ref)}</span><span class="who">${esc(r.mark ?? 'Unnamed filing')}</span
|
|
880
|
+
<span class="fnum">${esc(v.ref)}</span><span class="who">${esc(r.mark ?? 'Unnamed filing')}</span>${
|
|
881
|
+
band ? `<span class="ko-findband" style="background:var(${stop})">${esc(band)}</span>` : ''}<span class="src reg">Register</span>
|
|
780
882
|
</div>
|
|
781
883
|
<p class="ko-findmeta">${meta}</p>
|
|
782
884
|
<p class="ko-findnet">${esc(v.statement)}</p>
|
|
783
|
-
|
|
885
|
+
${basisLine(band, read)}
|
|
886
|
+
${useCheck ? `<p class="ko-findev">${esc(USE_CHECK_LABEL)} ${isHttpUrl(useCheckSource) ? linkOrText(useCheckSource) : esc(useCheckSource)}</p>` : ''}
|
|
784
887
|
<p class="ko-findev">Register record: ${receipt}</p>
|
|
785
888
|
</div>
|
|
786
889
|
</div>
|
|
@@ -916,7 +1019,7 @@ function readBlock(m) {
|
|
|
916
1019
|
].filter(Boolean).join('');
|
|
917
1020
|
}
|
|
918
1021
|
|
|
919
|
-
function analysisSection(marks, framework, { registerCounts = null, probeRan = false, registerRecords = null } = {}) {
|
|
1022
|
+
function analysisSection(marks, framework, { registerCounts = null, probeRan = false, registerRecords = null, ownerChecks = [] } = {}) {
|
|
920
1023
|
const cards = marks.map((m, markIndex) => {
|
|
921
1024
|
const stop = bandStop(framework, m.rating);
|
|
922
1025
|
const bullets = readBlock(m);
|
|
@@ -925,7 +1028,7 @@ function analysisSection(marks, framework, { registerCounts = null, probeRan = f
|
|
|
925
1028
|
// under compareKnockoutBlockingPower, so appending them is the ladder's own rule applied to a row
|
|
926
1029
|
// that has no rung, not a new one invented for the register.
|
|
927
1030
|
const reg = registerCardViews(m, framework, registerRecords);
|
|
928
|
-
const regBlocks = reg.cards.map((v) => registerFindingBlock(v, markIndex, m?.registerReads)).join('');
|
|
1031
|
+
const regBlocks = reg.cards.map((v) => registerFindingBlock(v, markIndex, m?.registerReads, framework, ownerChecks)).join('');
|
|
929
1032
|
const overflow = reg.promoted > reg.cards.length
|
|
930
1033
|
? `<p class="ko-bul">${esc(`${reg.promoted - reg.cards.length} further filing${reg.promoted - reg.cards.length === 1 ? '' : 's'} for this name met the same test — every one of them is in the filings section below.`)}</p>`
|
|
931
1034
|
: '';
|
|
@@ -950,11 +1053,17 @@ function analysisSection(marks, framework, { registerCounts = null, probeRan = f
|
|
|
950
1053
|
<div>
|
|
951
1054
|
${body || '<p class="ko-bul">No adverse signals recorded for this name on this screen.</p>'}
|
|
952
1055
|
${m.degraded ? `<p class="ko-degraded">${esc(DEGRADED_NOTE)}</p>` : ''}
|
|
1056
|
+
${reviewerNotesBlock(m)}
|
|
953
1057
|
<p class="ko-reg">${esc(registerLine(m, registerCounts, probeRan, registerRecords, reg.cards))}</p>
|
|
954
1058
|
</div>
|
|
955
1059
|
</div>`;
|
|
956
1060
|
}).join('');
|
|
957
|
-
|
|
1061
|
+
// The legend rides the panel and only when a note is actually on it — a standing sentence explaining a
|
|
1062
|
+
// colour no reader can see would be the report describing a convention it did not use.
|
|
1063
|
+
const anyNotes = marks.some((m) => (Array.isArray(m?.purpleNotes) ? m.purpleNotes : [])
|
|
1064
|
+
.some((n) => String(n ?? '').trim()));
|
|
1065
|
+
const legend = anyNotes ? `<p class="ko-refnote">${esc(REVIEWER_NOTES_LEGEND)}</p>` : '';
|
|
1066
|
+
return `<div class="panel ko-glance">${legend}${cards}</div>`;
|
|
958
1067
|
}
|
|
959
1068
|
|
|
960
1069
|
// The method line names EXACTLY what ran, and its wording is doctrine — with counts on the page, "register
|
|
@@ -1114,6 +1223,9 @@ function methodLine(registerCounts, probeRan, { citedFindings = 0, uncitedFindin
|
|
|
1114
1223
|
export function renderKnockoutHtml(findings, framework, {
|
|
1115
1224
|
runId, overall, issued = null, auditFile = null, probeRan = false, registerCounts = null,
|
|
1116
1225
|
registerRecords = null,
|
|
1226
|
+
// The driver's own record of the owner lookups it ran (tracker issue 276). Defaults to [] so an
|
|
1227
|
+
// archived run that predates the lane renders exactly as it was delivered.
|
|
1228
|
+
ownerChecks = [],
|
|
1117
1229
|
identity = null, matter = null, homeHref = null, chromeHref = null, depthNote = null,
|
|
1118
1230
|
// — the run's FROZEN policy, so the scope section states what this run was
|
|
1119
1231
|
// instructed to do rather than what its artifacts happen to show. Defaults to null, and an archived
|
|
@@ -1154,7 +1266,7 @@ export function renderKnockoutHtml(findings, framework, {
|
|
|
1154
1266
|
const counts = hasCounts
|
|
1155
1267
|
? countsSection(marks, registerCounts)
|
|
1156
1268
|
: `<div class="panel"><p class="ko-tier">${esc(tierLine)}</p></div>`;
|
|
1157
|
-
const analysis = analysisSection(marks, framework, { registerCounts, probeRan, registerRecords });
|
|
1269
|
+
const analysis = analysisSection(marks, framework, { registerCounts, probeRan, registerRecords, ownerChecks });
|
|
1158
1270
|
const provider = hasCounts ? (registerCounts.providerLabel ?? registerCounts.provider ?? 'the register') : null;
|
|
1159
1271
|
// The filings appendix renders only when the run produced a listing artifact — never on its absence,
|
|
1160
1272
|
// and never as an empty table. A knockout with no sidecar publishes exactly the counts-only document.
|
|
@@ -1282,7 +1394,7 @@ window.addEventListener('beforeprint',o);})();</script>
|
|
|
1282
1394
|
* where the working notes live, and a data file that quietly re-admitted them would reopen exactly the
|
|
1283
1395
|
* leak this series closed.
|
|
1284
1396
|
*/
|
|
1285
|
-
export function knockoutReportData(findings, framework, { runId, codename, overall, issued, identity, registerCounts, registerRecords = null, url, auditFile, customerKey, matter }) {
|
|
1397
|
+
export function knockoutReportData(findings, framework, { runId, codename, overall, issued, identity, registerCounts, registerRecords = null, ownerChecks = [], url, auditFile, customerKey, matter }) {
|
|
1286
1398
|
const marks = findings?.marks ?? [];
|
|
1287
1399
|
return {
|
|
1288
1400
|
schema: 'report-data/1',
|
|
@@ -1324,6 +1436,39 @@ export function knockoutReportData(findings, framework, { runId, codename, overa
|
|
|
1324
1436
|
classesDriving: m.classesDriving ?? [],
|
|
1325
1437
|
degraded: Boolean(m.degraded),
|
|
1326
1438
|
points: m.bullets ?? [],
|
|
1439
|
+
// ── THE ASSESSMENT THE RUN ALREADY WROTE (tracker issue 274) ──────────────────────────────
|
|
1440
|
+
//
|
|
1441
|
+
// Seven keys the assess stage writes into knockout-findings.json reached this file as nothing.
|
|
1442
|
+
// They were not withheld by a rule — no code decided against them; this projection is an explicit
|
|
1443
|
+
// whitelist and nobody had added them, so an assistant drafting from this file could not see the
|
|
1444
|
+
// reasoning behind a rating it was drafting about.
|
|
1445
|
+
//
|
|
1446
|
+
// `assessment` is the sharpest case: publish substitutes it into `batch.executiveSummary` ONLY on
|
|
1447
|
+
// a multi-mark batch, so on a single-mark run — the common knockout — the mark's own opening read
|
|
1448
|
+
// was written, validated, and then dropped by both surfaces at once.
|
|
1449
|
+
//
|
|
1450
|
+
// `purpleNotes` is the reviewer's notes, and it is here by the owner's ruling of 2026-09-07: one
|
|
1451
|
+
// report, read by the person who ran Clearotron, because keeping material off it "just adds
|
|
1452
|
+
// confusion for where data is lost". They are LABELLED on the page rather than merged into the
|
|
1453
|
+
// client-voiced body — see reviewerNotesBlock — so a reader can tell whose voice they are in.
|
|
1454
|
+
assessment: (() => { const t = String(m.assessment ?? '').trim(); return t || null; })(),
|
|
1455
|
+
counterFactors: m.counterFactors ?? [],
|
|
1456
|
+
mitigation: (() => { const t = String(m.mitigation ?? '').trim(); return t || null; })(),
|
|
1457
|
+
// `null`, not `false`, when the rater said nothing: a crowded field is a mitigant the reasoning
|
|
1458
|
+
// turns on, and an unstated one must not read as a stated "no".
|
|
1459
|
+
crowdedField: typeof m.crowdedField === 'boolean' ? m.crowdedField : null,
|
|
1460
|
+
reviewerNotes: m.purpleNotes ?? [],
|
|
1461
|
+
// The proof-of-search rows — the same defensibility record list_searches answers from.
|
|
1462
|
+
negatives: (m.negatives ?? []).map((n) => ({
|
|
1463
|
+
term: n?.term ?? null, source: n?.source ?? null, note: n?.note ?? null,
|
|
1464
|
+
})),
|
|
1465
|
+
// The rater's read of a filing it weighed, keyed by the record id the card prints, so a consumer
|
|
1466
|
+
// can join a read to its filing without matching on prose.
|
|
1467
|
+
registerReads: (m.registerReads ?? []).map((x) => ({
|
|
1468
|
+
recordId: x?.recordId ?? null,
|
|
1469
|
+
read: x?.read ?? null,
|
|
1470
|
+
band: String(x?.band ?? '').trim() || null,
|
|
1471
|
+
})),
|
|
1327
1472
|
// — the typed finding, ranked, with the reference the report prints. The old key was
|
|
1328
1473
|
// `evidence[]` and it was `(m.findings ?? []).filter((f) => f?.url)`: a typed finding has no
|
|
1329
1474
|
// `url`, so this file — the one the assistant drafts client mail from — silently carried zero
|
|
@@ -1345,14 +1490,36 @@ export function knockoutReportData(findings, framework, { runId, codename, overa
|
|
|
1345
1490
|
// A promoted filing the brief omitted would be the report and the brief disagreeing about
|
|
1346
1491
|
// what the run found.
|
|
1347
1492
|
//
|
|
1348
|
-
// `
|
|
1349
|
-
//
|
|
1350
|
-
//
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1493
|
+
// `shape: 'register'` is the load-bearing field: a consumer can tell a weighed conflict from a
|
|
1494
|
+
// pointed-at filing without parsing prose.
|
|
1495
|
+
//
|
|
1496
|
+
// `band` AND `basis` NOW CARRY THE RATER'S READ WHEN IT SENT ONE (tracker issue 274). Before
|
|
1497
|
+
// this, both were constants — `band: null` and the not-weighed sentence — on every filing of
|
|
1498
|
+
// every run, including runs where the seat had written a full read of that exact filing and the
|
|
1499
|
+
// HTML card was already printing it. The page and this file disagreed, and this file is the one
|
|
1500
|
+
// the MCP brief answers from, so the surface a reader asks "what did you make of that
|
|
1501
|
+
// registration?" was the surface that had dropped the answer.
|
|
1502
|
+
//
|
|
1503
|
+
// The unmatched case is unchanged and must stay that way: no row for this recordId ⇒ `band:
|
|
1504
|
+
// null` and the not-weighed line, which describes the card and claims nothing.
|
|
1505
|
+
...registerCardViews(m, framework, registerRecords).cards.map((v) => {
|
|
1506
|
+
const row = (Array.isArray(m?.registerReads) ? m.registerReads : [])
|
|
1507
|
+
.find((x) => String(x?.recordId ?? '').trim() && String(x?.recordId ?? '').trim() === String(v.record?.recordId ?? '').trim());
|
|
1508
|
+
const read = String(row?.read ?? '').trim() || null;
|
|
1509
|
+
const band = String(row?.band ?? '').trim() || null;
|
|
1510
|
+
// The driver's own record of where this filing's proprietor was looked up (tracker issue
|
|
1511
|
+
// 276), joined by recordId. `null` where the run owed no check — the same three states the
|
|
1512
|
+
// card has, so a consumer can tell "searched and found nothing" from "never searched".
|
|
1513
|
+
const oc = ownerCheckFor(ownerChecks, v.record?.recordId);
|
|
1514
|
+
return {
|
|
1515
|
+
ref: v.ref, ordinal: v.ordinal, name: v.record.mark, owner: v.record.owner, band,
|
|
1516
|
+
type: 'Register filing',
|
|
1517
|
+
net: read ? v.statement : `${v.statement} It was ${NOT_WEIGHED}.`,
|
|
1518
|
+
basis: read ?? NOT_WEIGHED,
|
|
1519
|
+
useCheckSource: oc?.source ?? null,
|
|
1520
|
+
evidence: v.evidence, shape: 'register',
|
|
1521
|
+
};
|
|
1522
|
+
}),
|
|
1356
1523
|
],
|
|
1357
1524
|
registerCounts: counted?.counts
|
|
1358
1525
|
? {
|
|
@@ -4,9 +4,19 @@
|
|
|
4
4
|
// report-data.json since the one-report collapse; the clearance lane's native-render branch existed in
|
|
5
5
|
// the portal with NO producer anywhere (B3's "the aspirational path") — this is that producer.
|
|
6
6
|
//
|
|
7
|
-
// Two readers, one file (the knockout doctrine,
|
|
8
|
-
// it, and the portal's native-render path reads it instead of iframing baked HTML.
|
|
9
|
-
//
|
|
7
|
+
// Two readers, one file (the knockout doctrine, as it stood): the assistant drafts client-facing mail
|
|
8
|
+
// from it, and the portal's native-render path reads it instead of iframing baked HTML.
|
|
9
|
+
//
|
|
10
|
+
// THE TWO LANES DIVERGED ON 2026-09-07 AND THIS FILE DID NOT MOVE. The owner ruled (tracker issue 274)
|
|
11
|
+
// that the KNOCKOUT report carries the reviewer's notes, on the ground that one report is read by the
|
|
12
|
+
// person who ran Clearotron and holding material back confuses where data went; render-knockout.mjs
|
|
13
|
+
// projects them under `reviewerNotes`. That ruling was about those notes on that lane. It did not touch
|
|
14
|
+
// what this producer strips — withdrawn findings, verification receipts, `::p::` tails, `[internal]`
|
|
15
|
+
// labels and engine-internal narration are all still cut here, and the guard test still polices them.
|
|
16
|
+
// Do not read the knockout change as licence to relax this list; if the ruling is meant to extend, it
|
|
17
|
+
// extends by being asked, not by inference.
|
|
18
|
+
//
|
|
19
|
+
// It remains the CLIENT CUT by construction, not by serve-time stripping:
|
|
10
20
|
// • only LIVE findings (a withdrawn finding renders nowhere — it does not exist here either);
|
|
11
21
|
// • no verification receipts (use_check / own_rights / bears_on — those are the reviewer's evidence
|
|
12
22
|
// trail and live in the audit workbook), no withdrawn_reason, no quarantine records;
|