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
|
@@ -105,12 +105,20 @@ export function frozenSamples(examplesDir) {
|
|
|
105
105
|
*/
|
|
106
106
|
export async function seedPool({ pool, examplesDir, republish }) {
|
|
107
107
|
const existing = poolRunIds(pool);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
108
|
+
// ── A POOL THAT ALREADY HOLDS SOMETHING IS TOPPED UP, NOT SKIPPED (tracker issue 277) ──────────────
|
|
109
|
+
//
|
|
110
|
+
// This used to return early on any non-empty pool. That was invisible while `demo/` shipped one child:
|
|
111
|
+
// seeding one and seeding all were the same act. When the other three landed, every box seeded before
|
|
112
|
+
// that day kept its single demo through every upgrade, because the pool was no longer empty and this
|
|
113
|
+
// returned without looking at what the package now carried.
|
|
114
|
+
//
|
|
115
|
+
// DEMOS ARE PACKAGE CONTENT, NOT USER DATA, so the package's set is the one that should be there. What
|
|
116
|
+
// is already published is left exactly as it is — this adds what is missing and removes nothing, so a
|
|
117
|
+
// pool holding a run this package does not ship keeps it.
|
|
118
|
+
//
|
|
119
|
+
// AND IT IS ONLY EVER A DEMO POOL. `bin/start.mjs` calls this inside its `--demo` branch alone; a real
|
|
120
|
+
// install is told its archive is empty and pointed at the demo command. Nothing here can put an example
|
|
121
|
+
// into a pool holding a customer's work, and that gate is the reason this can top up safely at all.
|
|
114
122
|
const { samples, problems } = frozenSamples(examplesDir);
|
|
115
123
|
if (!samples.length) {
|
|
116
124
|
// The empty archive is now the SYMPTOM of something, and this is where the something is named.
|
|
@@ -118,11 +126,13 @@ export async function seedPool({ pool, examplesDir, republish }) {
|
|
|
118
126
|
}
|
|
119
127
|
|
|
120
128
|
const seeded = [];
|
|
129
|
+
const already = [];
|
|
121
130
|
const failures = [];
|
|
122
131
|
for (const s of samples) {
|
|
123
|
-
//
|
|
124
|
-
// but a sample list carrying the same runId twice would otherwise overwrite silently.
|
|
132
|
+
// A sample list carrying the same runId twice would otherwise overwrite silently.
|
|
125
133
|
if (seeded.includes(s.meta.runId)) { failures.push(`${s.name}: runId ${s.meta.runId} appears twice under ${examplesDir}`); continue; }
|
|
134
|
+
// Already published: left alone, and NAMED. Silence here is what the old early return produced.
|
|
135
|
+
if (existing.includes(s.meta.runId)) { already.push(s.meta.runId); continue; }
|
|
126
136
|
try {
|
|
127
137
|
// poolUrl "" for the same reason the demo passes it: the report's link block addresses a
|
|
128
138
|
// deployment that serves the pool at a public URL, and this one is served from this machine.
|
|
@@ -133,5 +143,10 @@ export async function seedPool({ pool, examplesDir, republish }) {
|
|
|
133
143
|
failures.push(`${s.name}: ${String(e?.message ?? e)}`);
|
|
134
144
|
}
|
|
135
145
|
}
|
|
136
|
-
|
|
146
|
+
// `skipped` still carries a sentence when there was nothing to add, because "seeded 0" and "seeded 0
|
|
147
|
+
// BECAUSE all four were already here" are the same number and different facts.
|
|
148
|
+
const skipped = !seeded.length && already.length
|
|
149
|
+
? `the pool already holds all ${already.length} example(s) this package ships`
|
|
150
|
+
: null;
|
|
151
|
+
return { seeded, already, skipped, problems: [...problems, ...failures] };
|
|
137
152
|
}
|
|
@@ -87,7 +87,7 @@ const statExists = (p) => {
|
|
|
87
87
|
* drains continuously under `--watch`, so there is no arrival to trigger and no schedule to wait for.
|
|
88
88
|
* This module could not see that posture at all, which is why a box in it produced a permanent
|
|
89
89
|
* "the .path unit could not be read" — honest, correct, and indistinguishable from an open finding
|
|
90
|
-
* forever (
|
|
90
|
+
* forever (the third criterion, in the consumer that actually printed the line).
|
|
91
91
|
*
|
|
92
92
|
* ENABLED, NOT MERELY PRESENT, for the same reason the timer is read that way: an installed unit nobody
|
|
93
93
|
* enabled drains nothing, and answering "present" would license the strongest sentence this module has
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
// precisely so they cannot come to different conclusions about the same box; they were still reaching
|
|
47
47
|
// two different conclusions about the same *consequence*. This closes that.
|
|
48
48
|
|
|
49
|
-
import { drainPosture, CONTINUOUS } from "./drain-posture.mjs"; //
|
|
49
|
+
import { drainPosture, CONTINUOUS } from "./drain-posture.mjs"; // one rule about the box
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
52
|
* @param {object} a
|
|
@@ -62,7 +62,7 @@ export const RECALL_TOP_SLICE = 10;
|
|
|
62
62
|
* MOVED to coverage-ledger.mjs and re-exported here, so every existing import site is unchanged. It had
|
|
63
63
|
* to move because coverage-form.mjs must carry the same token into the `seat_row_contract` it writes
|
|
64
64
|
* INTO the file the seat edits, and that module is pure by contract while this one is not (it reaches
|
|
65
|
-
* registry-fidelity.mjs, which reads the filesystem). A second copy of the literal is
|
|
65
|
+
* registry-fidelity.mjs, which reads the filesystem). A second copy of the literal is the defect.
|
|
66
66
|
*
|
|
67
67
|
* `crowdRulingCount` moved for the SAME reason and rides the same re-export: the typed coverage
|
|
68
68
|
* call now refuses an uncounted crowd row at call time, and it is pure, so the parser had to sit in the
|
|
@@ -168,7 +168,7 @@ export function makeRecipeService({
|
|
|
168
168
|
// the "reported outcome diverges from disk truth" class).
|
|
169
169
|
if (!v.ok) return { status: 400, json: { error: "validation_failed", errors: v.errors } };
|
|
170
170
|
const { files } = writeRecipe({ recipesDir, customer, slug, recipe: effective });
|
|
171
|
-
const message = `chore(
|
|
171
|
+
const message = `chore(clearotron): ${existing ? (effective.archived && !existing.archived ? "archive" : "update") : "create"} saved search ${customer}/${slug} (via config UI, by ${by})`;
|
|
172
172
|
// — the row rides IN the commit, so it no longer names a sha. shared/store-in-repo.mjs says why.
|
|
173
173
|
const { commit, commitError } = commitWithAuditRow({ audit, gitCommit, files, message, by,
|
|
174
174
|
row: { event: existing ? "recipe-update" : "recipe-create", key: `${customer}/${slug}`, by,
|
package/driver/record-carry.mjs
CHANGED
|
@@ -103,7 +103,7 @@ export const TRACE_SCOPE = {
|
|
|
103
103
|
uninstrumented: [
|
|
104
104
|
{ path: "common-law", reason: "common-law-grid.json → findings is not joined here; a candidate lost on that path emits NO row and this trace can say nothing about it either way" },
|
|
105
105
|
{ path: "case-law", reason: "case-law findings are not traced to a record at all" },
|
|
106
|
-
{ path: "serp/nativeread", reason: "
|
|
106
|
+
{ path: "serp/nativeread", reason: "reason: and write _driver/jx/zh-grid.json; nothing on them reaches this trace because it traces the register path only. Their carry is the common-law tracer's, because zh-grid.json carries the common-law cells[]+gaps[] shape and not a register band" },
|
|
107
107
|
{ path: "crowd remainder", reason: "count-only slices have no record bodies — enumerated per slice in untraceable_slices[], never per record" },
|
|
108
108
|
],
|
|
109
109
|
};
|
|
@@ -125,7 +125,7 @@ export const TRACE_SCOPE = {
|
|
|
125
125
|
// the only direction that also hides the 2 unreasoned drops the common-law trace DID find.
|
|
126
126
|
//
|
|
127
127
|
// So the declaration is derived from which sibling tracers actually produced a computable artifact on
|
|
128
|
-
// THIS run, exactly as
|
|
128
|
+
// THIS run, exactly as the dictated set is read from the paths factory and the obligations are one
|
|
129
129
|
// calculation. A hand-kept list whose staleness is invisible is not a contract; it is a comment.
|
|
130
130
|
//
|
|
131
131
|
// UNCHANGED IN THE CONSERVATIVE DIRECTION: a path only moves to `instrumented` on positive evidence that
|
|
@@ -825,3 +825,142 @@ export function silentlyLostFindings({ reconciliation = null, carryRows = null,
|
|
|
825
825
|
population_empty: false, cross_checked: crossChecked,
|
|
826
826
|
checked: ended.length, matched: seen.length, lost };
|
|
827
827
|
}
|
|
828
|
+
|
|
829
|
+
/**
|
|
830
|
+
* Positions the DIGEST ended as findings that did not reach the findings, dropped WITH a stated reason.
|
|
831
|
+
*
|
|
832
|
+
* ── THE SIBLING'S BLIND SPOT, AND IT IS THE ONE THAT REACHED A CLIENT (tracker issue 248) ──────────
|
|
833
|
+
*
|
|
834
|
+
* `silentlyLostFindings` above is correct and must not be widened to cover this. Its population is
|
|
835
|
+
* `step-silent` — a finding-ending followed by silence — and its own header records why that boundary
|
|
836
|
+
* exists: silent drops are the norm (690 of 741 records on the evidence run), so a rule flagging them
|
|
837
|
+
* broadly would flag almost everything, and the defect it targets is the CONJUNCTION of silence after a
|
|
838
|
+
* finding-ending.
|
|
839
|
+
*
|
|
840
|
+
* It also anticipated this gap in writing: "nine divergences from a digest finding-ending, every one of
|
|
841
|
+
* them `step-stated`". Nine of the shape nothing checked.
|
|
842
|
+
*
|
|
843
|
+
* MEASURED ON A DELIVERED R2 RUN, 2026-09-06. The sibling ran and reported
|
|
844
|
+
* `{checked:5, matched:5, lost:0}` — correctly. On that same delivery two marks from the lawyer's final
|
|
845
|
+
* list, `OSLER DELPHI` and `DELFITY`, one rated HIGH, are absent from `findings.json`. They were dropped
|
|
846
|
+
* WITH a reason, so they sat outside the sibling's population by design:
|
|
847
|
+
*
|
|
848
|
+
* IMMATERIAL ask:recall:recall-osler-delphi: … — OSLER DELPHI / Osler Diagnostics Limited is
|
|
849
|
+
* already reasoned on the incumbent sheet in register-findings.md.
|
|
850
|
+
*
|
|
851
|
+
* WHY THE STATED CASE IS THE MORE DANGEROUS ONE. A silent drop leaves a hole. A stated drop leaves a
|
|
852
|
+
* SENTENCE, and the sentence reads as diligence. On that one delivery `doubt-closure.md` carries 92
|
|
853
|
+
* recall asks and 66 rulings of IMMATERIAL. A drop with a reason nobody verifies is not accounted for;
|
|
854
|
+
* it is unexamined with a paper trail.
|
|
855
|
+
*
|
|
856
|
+
* `step-structural` is deliberately NOT in this population: it is a mechanical screen verdict
|
|
857
|
+
* (`the in-line record screen returned "…"`), not a judgment sentence a reader would take on trust.
|
|
858
|
+
* `absent` belongs to the sibling's family, not this one.
|
|
859
|
+
*
|
|
860
|
+
* WHAT THIS DOES NOT DECIDE. Whether any given stated reason is RIGHT. That is a change to what the
|
|
861
|
+
* client receives and is the owner's call; this makes the class visible, which is worth having whichever
|
|
862
|
+
* way that lands, because today nobody would know the closures happened.
|
|
863
|
+
*
|
|
864
|
+
* Same contract as the sibling, deliberately: `computable:false` with a named reason rather than a clean
|
|
865
|
+
* `[]`; `population_empty` as its own state; `cross_checked` so a caller can tell "could not look" from
|
|
866
|
+
* "looked and found nothing"; and `matched` returned so a caller can insist the join actually joined —
|
|
867
|
+
* that field exists because a case-sensitive URI join once matched zero rows on every run and read as
|
|
868
|
+
* zero divergences. PURE.
|
|
869
|
+
*/
|
|
870
|
+
export function statedDivergenceFindings({ reconciliation = null, carryRows = null, digestFindingUris = null } = {}) {
|
|
871
|
+
const no = (reason, crossChecked = false) => ({ computable: false, reason, population_empty: false,
|
|
872
|
+
cross_checked: crossChecked, checked: 0, matched: 0, diverged: [] });
|
|
873
|
+
if (!reconciliation || reconciliation.computable !== true) {
|
|
874
|
+
return no("no computable recall-reconciliation — the digest's own endings are the population and there is none");
|
|
875
|
+
}
|
|
876
|
+
if (!Array.isArray(carryRows)) {
|
|
877
|
+
return no("no record-carry rows — the knockout lane writes none, so this join cannot look at that product");
|
|
878
|
+
}
|
|
879
|
+
// ── THE POPULATION IS THE CARRY ROWS, NOT THE RECONCILIATION (corrected 2026-09-07) ─────────────
|
|
880
|
+
//
|
|
881
|
+
// The first cut of this function gated on the reconciliation's finding-ended positions, mirroring the
|
|
882
|
+
// sibling. That inherited the sibling's BLIND SPOT along with its shape, and the check was inert on
|
|
883
|
+
// the very delivery it was written for. Replayed against that delivery:
|
|
884
|
+
//
|
|
885
|
+
// silentlyLostFindings checked=5 matched=5 lost=0
|
|
886
|
+
// statedDivergenceFindings checked=5 matched=5 diverged=0 ← should have named two marks
|
|
887
|
+
//
|
|
888
|
+
// The reconciliation names five finding-ended positions and they are five OTHER marks — VELTRIN
|
|
889
|
+
// bioenergetische Kosmetik, DELPHIC HSE, DELPHI, DELPHIN & EMERENCE, DELPHI DIAGNOSTICS. The two that
|
|
890
|
+
// were lost sit in the CARRY rows and the reconciliation never mentions them:
|
|
891
|
+
//
|
|
892
|
+
// OSLER DELPHI reach=placed stopped_at=digest reason_source=step-stated reason=digest:reasoned-negative
|
|
893
|
+
// DELFITY reach=placed stopped_at=digest reason_source=step-stated reason=digest:reasoned-negative
|
|
894
|
+
//
|
|
895
|
+
// The unit arms all passed because their fixtures put the mark in BOTH populations, which the real run
|
|
896
|
+
// does not. That is the lesson worth keeping: a fixture that satisfies two joins at once cannot tell
|
|
897
|
+
// you the joins disagree.
|
|
898
|
+
//
|
|
899
|
+
// So the carry rows are the population — they are where a stated drop is RECORDED — and the
|
|
900
|
+
// reconciliation is demoted to optional corroboration. Measured on that delivery, the correct
|
|
901
|
+
// population is 70 rows over 34 distinct marks, all `digest:reasoned-negative`, and it contains both.
|
|
902
|
+
const arrived = new Set(["finding", "findings-surface"]);
|
|
903
|
+
const population = carryRows.filter((r) => r?.uri
|
|
904
|
+
&& r.reason_source === "step-stated" // the sibling owns step-silent; step-structural is mechanical
|
|
905
|
+
&& !arrived.has(r.reach)); // arrived, or arrived somewhere visible, is not a divergence
|
|
906
|
+
|
|
907
|
+
// Kept for corroboration only. `ended` no longer gates anything; where the reconciliation DOES name a
|
|
908
|
+
// position it agrees with, that is recorded on the row so a reader can weigh it.
|
|
909
|
+
const ended = [];
|
|
910
|
+
for (const bucket of ["top_slice", "residual"]) {
|
|
911
|
+
for (const row of reconciliation[bucket] ?? []) {
|
|
912
|
+
if (row?.ending !== "finding") continue;
|
|
913
|
+
for (const uri of row.position_records ?? []) ended.push({ uri: lc(uri), mark: row.mark_text ?? null });
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
const endedUris = new Set(ended.map((e) => e.uri));
|
|
917
|
+
const byUri = new Map();
|
|
918
|
+
for (const r of carryRows) if (r?.uri) byUri.set(lc(r.uri), r);
|
|
919
|
+
|
|
920
|
+
// The disjoint-population guard, for the sibling's reason: overlap is the signal, a shortfall is not.
|
|
921
|
+
if (Array.isArray(digestFindingUris) && digestFindingUris.length && ended.length) {
|
|
922
|
+
const digest = new Set(digestFindingUris.map(lc));
|
|
923
|
+
if (!ended.some((e) => digest.has(e.uri))) {
|
|
924
|
+
return no(`the reconciliation's ${ended.length} finding-ended position(s) share NOTHING with the `
|
|
925
|
+
+ `${digest.size} finding row(s) the digest's own typed calls recorded — the two populations are `
|
|
926
|
+
+ "disjoint, so this join is examining a different set and its answer cannot be trusted", true);
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
// A ZERO POPULATION IS ITS OWN STATE. No stated drop recorded is a real answer on a healthy run, and
|
|
930
|
+
// it must not be reported in the same shape as "there were some and none diverged".
|
|
931
|
+
if (!population.length) {
|
|
932
|
+
return { computable: true, reason: "no record-carry row records a stated drop on this run — there is "
|
|
933
|
+
+ "no population here, which is the healthy answer and not a comparison that found nothing",
|
|
934
|
+
population_empty: true, cross_checked: false, checked: 0, matched: 0, diverged: [] };
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
const diverged = [];
|
|
938
|
+
for (const row of population) {
|
|
939
|
+
const e = { uri: lc(row.uri), mark: row.mark ?? null };
|
|
940
|
+
// NAME THE ARTIFACT THE REASON POINTS AT. The defect this check exists for is an absence discharged
|
|
941
|
+
// by the WRONG artifact — "already reasoned in register-findings.md" answers a question nobody asked,
|
|
942
|
+
// because the ask was about the findings. Surfacing the cited artifact is what lets a reader see the
|
|
943
|
+
// substitution rather than read the sentence as diligence.
|
|
944
|
+
const reason = row.reason ?? null;
|
|
945
|
+
const cites = typeof reason === "string" ? (reason.match(/[a-z0-9._-]+\.(?:md|json)\b/gi) ?? []) : [];
|
|
946
|
+
diverged.push({ uri: e.uri, mark: e.mark ?? row.mark ?? null, reach: row.reach ?? null,
|
|
947
|
+
stopped_at: row.stopped_at ?? null, reason,
|
|
948
|
+
cites_artifact: cites.length ? [...new Set(cites.map(String))] : null,
|
|
949
|
+
// CORROBORATION, NOT A GATE. The reconciliation naming this position is worth a reader knowing;
|
|
950
|
+
// its SILENCE is not evidence of anything, which is exactly what the first cut got wrong.
|
|
951
|
+
reconciliation_agrees: endedUris.has(e.uri),
|
|
952
|
+
why: "this position was dropped with a stated reason and never reached the findings, and the reason "
|
|
953
|
+
+ "given points at a different artifact than the one the absence is about" });
|
|
954
|
+
}
|
|
955
|
+
const crossChecked = Array.isArray(digestFindingUris) && digestFindingUris.length > 0;
|
|
956
|
+
return { computable: true,
|
|
957
|
+
reason: crossChecked ? null
|
|
958
|
+
: "no cross-check was possible — this run recorded no typed digest finding rows, so the "
|
|
959
|
+
+ "population was not verified against an independent one",
|
|
960
|
+
population_empty: false, cross_checked: crossChecked,
|
|
961
|
+
// `checked` is the population this check actually walked, and `matched` how many of them the
|
|
962
|
+
// reconciliation ALSO named. On the delivery this was written for those are 70 and 0 — which is the
|
|
963
|
+
// whole point: a `matched` of zero used to mean "report nothing" and now means "the reconciliation
|
|
964
|
+
// saw none of them", a fact about the reconciliation rather than about the run.
|
|
965
|
+
checked: population.length, matched: diverged.filter((d) => d.reconciliation_agrees).length, diverged };
|
|
966
|
+
}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
// owns. Measured consequence, not a hypothesis: on 2e203b75 a blind-frame seat obeyed the prose and
|
|
26
26
|
// hand-wrote a 17182B model with no call capture beside it, on a box whose grant already carried
|
|
27
27
|
// the tool. The dictation deletes are; this direction is what keeps them deleted.
|
|
28
|
-
// (c) ORDERED BUT NOT GRANTED.
|
|
28
|
+
// (c) ORDERED BUT NOT GRANTED. That seed direction. E12 owns it for skill docs; here it reaches the
|
|
29
29
|
// dispatch and the repair ladder too.
|
|
30
30
|
//
|
|
31
31
|
// ── PURE, AND THAT IS WHAT MAKES THE PLANTS CHEAP ────────────────────────────────────────────────────
|
|
@@ -182,7 +182,7 @@ export function bareGrant(granted) {
|
|
|
182
182
|
* be silent on whichever repair path it did not happen to hold.
|
|
183
183
|
* @param {Array<{surface:string, kind:string, text:string}>} a.union
|
|
184
184
|
* @param {string[]} a.toolUniverse every tool name that exists anywhere, for direction (c)
|
|
185
|
-
* @param {Array<{stage:string, tool:string}>} [a.backlog]
|
|
185
|
+
* @param {Array<{stage:string, tool:string}>} [a.backlog] the named, excused members — ONE list, read
|
|
186
186
|
* from contract-dictation-registry.mjs. A second excuse list here would be authoring number eight, which
|
|
187
187
|
* is the failure that registry's own header exists to forbid.
|
|
188
188
|
* @param {Set<string>} [a.providerConditionalSurfaces] surfaces that are provider-conditional BY
|
|
@@ -284,7 +284,7 @@ export function agreementFindings({ stage, granted, artifacts, union, toolUniver
|
|
|
284
284
|
const excused = new Set(backlog.filter((b) => b.stage === stage).map((b) => b.tool));
|
|
285
285
|
for (const tool of [...toolUniverse].sort()) {
|
|
286
286
|
if (held.has(tool)) continue;
|
|
287
|
-
if (excused.has(tool)) continue; // named on
|
|
287
|
+
if (excused.has(tool)) continue; // named on the backlog; the list can only shrink
|
|
288
288
|
for (const m of union) {
|
|
289
289
|
if (!namesTool(m.text, tool)) continue;
|
|
290
290
|
// ── — A PROVIDER CANNOT SERVE IT, AND THIS ORDER SAYS SO ──────────────────
|
|
@@ -235,7 +235,7 @@ export function matchesReference(ref, candidate, { sameOwner = false } = {}) {
|
|
|
235
235
|
return null;
|
|
236
236
|
}
|
|
237
237
|
|
|
238
|
-
// 3 — ALIAS. splits this in two, on the same precedent as rules 1 and 4 (
|
|
238
|
+
// 3 — ALIAS. splits this in two, on the same precedent as rules 1 and 4 ("the scorer calls
|
|
239
239
|
// a different owner's longer mark a hit"). This rule was the one cross-owner escape left open.
|
|
240
240
|
//
|
|
241
241
|
// FULL IDENTITY — one name on each side and they are the same name — is NOT a relaxation and stays
|
|
@@ -667,14 +667,64 @@ export function scoreRecall({ reference, findings = [], retrieved = [], scopeCla
|
|
|
667
667
|
// what it saw. Auto-promoting a collision to `found` would be the scorer manufacturing recall from
|
|
668
668
|
// its own confusion, which is the defect one layer up from the one being fixed. score.mjs prints
|
|
669
669
|
// these; a reader adjudicates.
|
|
670
|
+
// ── THE PREDICATE WAS THE OWNER, AND THE HEADING ABOVE SAYS RECORD (tracker issue 249) ──────────
|
|
671
|
+
//
|
|
672
|
+
// The only condition used to be `ownersMatch`. That implements a different class from the one the
|
|
673
|
+
// paragraph above states, and the justification — "they cannot both be true" — does not hold for any
|
|
674
|
+
// proprietor with more than one mark. A large filer can perfectly well have one mark the run withheld
|
|
675
|
+
// and a DIFFERENT mark, not in the reference, that it surfaced. Both rows are true.
|
|
676
|
+
//
|
|
677
|
+
// It fired on a delivered R2 run: `<large filer>: reference "DELFITY" is withheld, surfaced "DELPHINA"
|
|
678
|
+
// is noise`. Different marks, different records, one proprietor that files a great many. And because
|
|
679
|
+
// score.mjs prints a collision as "do not read the recall numbers above", ONE such proprietor
|
|
680
|
+
// suppressed the whole run's recall measurement — a real 88% → 63% movement went unquoted on the
|
|
681
|
+
// regression issue because of a warning that was spurious.
|
|
682
|
+
//
|
|
683
|
+
// WHY NOT A RECORD JOIN, WHICH IS WHAT THE ISSUE ASKED FOR. Measured on the delivered artifact: a
|
|
684
|
+
// finding carries `{band, disposition, mark, meters, net, ordinal, owner, quadrant, source, …}` and
|
|
685
|
+
// NO record identity — `source.resolved_link` is empty on every row. Noise rows are built from
|
|
686
|
+
// findings, so there is nothing on that side to join a record URI to. Stating it here so the next
|
|
687
|
+
// reader does not re-derive it: the acceptance criterion is unmeetable on this side until a finding
|
|
688
|
+
// carries its record, and that is a change to the findings contract, not to the scorer.
|
|
689
|
+
//
|
|
690
|
+
// WHY NOT `matchesReference`, WHICH IS THE FILE'S OWN MARK MATCHER. It would make this check VACUOUS.
|
|
691
|
+
// The noise loop above already skips any finding that matches a reference entry, so by construction
|
|
692
|
+
// no noise row matches one — the collision would always be empty. This check exists precisely to
|
|
693
|
+
// catch the case where THE MATCHER DISAGREED WITH ITSELF, so it cannot be built out of the matcher.
|
|
694
|
+
//
|
|
695
|
+
// So the predicate is deliberately weaker than the matcher and stronger than the owner: same owner
|
|
696
|
+
// AND one mark contained in the other once normalised. That is the shape of the case this check was
|
|
697
|
+
// built for — `DELPHI GENETICS` in LOST beside `DG DELPHI GENETICS` in NOISE — and it is not the
|
|
698
|
+
// shape of `DELFITY` beside `DELPHINA`.
|
|
699
|
+
const collisionKey = (s) => String(s ?? "").normalize("NFKC").toUpperCase().replace(/[^A-Z0-9]/g, "");
|
|
700
|
+
// A FLOOR, because containment on a short string matches everything. `DEL` inside `DELPHINA` is not
|
|
701
|
+
// evidence of a shared record; four characters is the shortest reference mark shape worth trusting
|
|
702
|
+
// here, and a pair below it drops to the advisory rather than being dropped entirely.
|
|
703
|
+
const CONTAIN_FLOOR = 4;
|
|
670
704
|
buckets.collisions = [];
|
|
705
|
+
buckets.ownerEchoes = [];
|
|
671
706
|
for (const bucket of ["lost", "withheld"]) {
|
|
672
707
|
for (const e of buckets[bucket]) {
|
|
673
708
|
for (const n of buckets.noise) {
|
|
674
709
|
if (!ownersMatch(e.owner, n.owner)) continue;
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
710
|
+
const a = collisionKey(e.mark ?? e.name);
|
|
711
|
+
const b = collisionKey(n.mark);
|
|
712
|
+
const row = { bucket, entry: e.mark ?? e.name ?? null, noise: n.mark,
|
|
713
|
+
owner: ownerName(n.owner) ?? ownerName(e.owner) };
|
|
714
|
+
const sameRecord = a && b
|
|
715
|
+
&& Math.min(a.length, b.length) >= CONTAIN_FLOOR
|
|
716
|
+
&& (a === b || a.includes(b) || b.includes(a));
|
|
717
|
+
if (sameRecord) {
|
|
718
|
+
buckets.collisions.push({ ...row,
|
|
719
|
+
why: `the reference entry is reported ${bucket} while a surfaced record of the SAME owner whose `
|
|
720
|
+
+ "mark contains or is contained by it is reported noise — these are one record in two buckets" });
|
|
721
|
+
} else {
|
|
722
|
+
// REPORTABLE, NEVER SUPPRESSING. A reader may still want to see that a proprietor appears on
|
|
723
|
+
// both sides; what they must not be told is that the recall numbers are unreadable.
|
|
724
|
+
buckets.ownerEchoes.push({ ...row,
|
|
725
|
+
why: `same proprietor on both sides with different marks — not a contradiction: a filer may hold `
|
|
726
|
+
+ `a reference mark this run ${bucket} and another, outside the reference, that it surfaced` });
|
|
727
|
+
}
|
|
678
728
|
}
|
|
679
729
|
}
|
|
680
730
|
}
|
|
@@ -699,7 +749,7 @@ export function scoreRecall({ reference, findings = [], retrieved = [], scopeCla
|
|
|
699
749
|
* AND THE DIRECTION IS THE DANGEROUS ONE. A `withheld` that over-counted would be investigated the first
|
|
700
750
|
* round it appeared. This one reads clean.
|
|
701
751
|
*
|
|
702
|
-
* This does NOT compute carry-through — that needs the run's screened set and is
|
|
752
|
+
* This does NOT compute carry-through — that needs the run's screened set and is the acceptance 1.
|
|
703
753
|
* What it does is stop a bare `0` from reading as "nothing was dropped", by naming on the line how many
|
|
704
754
|
* retrieved marks the number could not have spoken to. The file already refuses a bare `0` for the
|
|
705
755
|
* no-`_driver/` case, in as many words; this is the same refusal for the case that reads clean.
|
|
@@ -1588,7 +1638,7 @@ export function ownersMatch(a, b) {
|
|
|
1588
1638
|
* derives the same sentence from the delivery-time record instead: slice 1 from its per-lane map
|
|
1589
1639
|
* (`slices.candidates.lanes[lane]`), slices 2–3 from their own `lane` field. PER LANE, never the
|
|
1590
1640
|
* run-level join: the SERP grid is zh-only, so `lane ja: executes=candidates+serp-grid` would be a
|
|
1591
|
-
* claim about the ja lane that no record supports (
|
|
1641
|
+
* claim about the ja lane that no record supports (the fix, kept exact here).
|
|
1592
1642
|
*
|
|
1593
1643
|
* THREE ANSWERS, AND THE THIRD IS THE ONE THAT MATTERS:
|
|
1594
1644
|
* "candidates+serp-grid" the named slices ran for this lane
|
|
@@ -1660,7 +1710,7 @@ export function readJxLanes(doc) {
|
|
|
1660
1710
|
// — DERIVED from fold.slices, with the declaration as a LEGACY fallback only. Two artifact
|
|
1661
1711
|
// generations reach this line and they are read in this order deliberately:
|
|
1662
1712
|
// fold.slices present → derive. The record of what ran wins, always.
|
|
1663
|
-
// pre- artifact → its frozen `lanes.<lane>.executes` string, the only thing that run
|
|
1713
|
+
// pre-change artifact → its frozen `lanes.<lane>.executes` string, the only thing that run
|
|
1664
1714
|
// ever recorded (a run minted between and carries BOTH, and
|
|
1665
1715
|
// the derived value is the accurate one — hence the order).
|
|
1666
1716
|
// neither → null ⇒ the scorer prints "(not stated)". Not "none": no statement
|
|
@@ -1705,7 +1755,7 @@ export function readJxLanes(doc) {
|
|
|
1705
1755
|
why: lanes.length ? null : "_driver/jx-lanes.json is present and declares no lane — the file was written and no jurisdiction lane was built, which is not the same as the file being absent",
|
|
1706
1756
|
lanes,
|
|
1707
1757
|
// — the RUN-level statement, three-valued on itself in the same discipline as the rest of this
|
|
1708
|
-
// function: present, or absent with a reason. A pre- artifact and a fold that never ran are both
|
|
1758
|
+
// function: present, or absent with a reason. A pre-change artifact and a fold that never ran are both
|
|
1709
1759
|
// "the run did not state it", and neither is a pass.
|
|
1710
1760
|
statement: typeof doc.fold?.executes === "string" ? doc.fold.executes : null,
|
|
1711
1761
|
slices: doc.fold?.slices ?? null,
|
|
@@ -1728,7 +1778,7 @@ export function readJxLanes(doc) {
|
|
|
1728
1778
|
* present, no units `present:true, units:[]` — its own fact, its own sentence.
|
|
1729
1779
|
* present, with units each unit's own `degraded` / cause / attempts, nothing inferred.
|
|
1730
1780
|
*
|
|
1731
|
-
* `degraded` is TYPEOF-tested, never coerced. A pre- units.json carries the cause STRING in that
|
|
1781
|
+
* `degraded` is TYPEOF-tested, never coerced. A pre-change units.json carries the cause STRING in that
|
|
1732
1782
|
* field; `Boolean(r.degraded)` would report an old artifact as having stated something it never stated.
|
|
1733
1783
|
*
|
|
1734
1784
|
* PURE.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright 2026 Cordillera Sàrl. Additional terms under section 7 of the AGPL-3.0 apply — see ADDITIONAL-TERMS.md
|
|
3
|
+
//
|
|
4
|
+
// THE TWO SIGNATURES THE REFERENCE STRIP LEFT BEHIND (tracker issue 185).
|
|
5
|
+
//
|
|
6
|
+
// The strip's job was to remove internal references from this repository before it went public, and it
|
|
7
|
+
// did that. Where the reference was the SUBJECT of the sentence, it took the subject with it:
|
|
8
|
+
//
|
|
9
|
+
// "[ref]'s design ruling — above any fold, only a statement…" became "'s design ruling — …"
|
|
10
|
+
// "renders the pre-[ref] section" became "renders the pre- section"
|
|
11
|
+
//
|
|
12
|
+
// Neither construction occurs in written English, which is the whole reason they can be counted rather
|
|
13
|
+
// than judged. A reader of a public repository meets them as sentences that do not finish, and one of
|
|
14
|
+
// them is in user-facing configuration documentation rather than in a comment.
|
|
15
|
+
//
|
|
16
|
+
// WHAT THIS MODULE IS AND IS NOT. It finds them. It does not repair them: the repair is per-sentence and
|
|
17
|
+
// needs somebody reading the surrounding code, because "the pre- section" means "the section as it was
|
|
18
|
+
// before the findings contract changed" and only that reader can say so. The finding is mechanical and
|
|
19
|
+
// costs nothing, so it is the part that ships as a check.
|
|
20
|
+
export const SIGNATURES = [
|
|
21
|
+
{
|
|
22
|
+
name: "a comment beginning with a bare possessive",
|
|
23
|
+
// Anchored at the comment leader, so `it's` and `the run's` mid-sentence are untouched — only the
|
|
24
|
+
// case where the possessive has nothing in front of it to possess.
|
|
25
|
+
re: /^\s*(?:\/\/|#|\*)\s*'s\b/,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "`pre- ` followed by a lowercase word",
|
|
29
|
+
// The hyphen is left dangling by a stripped number. `pre-flight` and `pre-delivery` do not match:
|
|
30
|
+
// the strip's residue always leaves whitespace after the hyphen.
|
|
31
|
+
re: /\bpre-\s+[a-z]/,
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
// THE RULE'S OWN DEFINITION IS THE ONLY EXEMPTION, and it is named rather than pattern-matched.
|
|
36
|
+
//
|
|
37
|
+
// These three files QUOTE the residue in order to define it: the specimens in the arm, the examples in
|
|
38
|
+
// the header above. Scanning them counts the definition as an instance, which puts the guard's own text
|
|
39
|
+
// into the backlog it polices and makes every re-mint grow the number it exists to shrink. Caught by a
|
|
40
|
+
// plant, not by review — they were untracked when the table was first minted, so `git ls-files` did not
|
|
41
|
+
// list them and the census read a tree that did not include them yet.
|
|
42
|
+
export const RULE_DEFINITIONS = [
|
|
43
|
+
"driver/reference-strip-signatures.mjs",
|
|
44
|
+
"driver/test/the-reference-strip-left-sentences-unfinished.test.mjs",
|
|
45
|
+
"scripts/mint-reference-strip-backlog.mjs",
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
/** Files worth scanning: prose-bearing, tracked, not generated, and not this rule's own definition. */
|
|
49
|
+
export const isScannable = (f) =>
|
|
50
|
+
/\.(mjs|md|yml|ts)$/.test(f) && !f.startsWith("portal-ui/dist/") && !RULE_DEFINITIONS.includes(f);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Count both signatures per file across `files`.
|
|
54
|
+
* `read` is injected so an arm can drive this over a synthetic tree — a census helper that can only
|
|
55
|
+
* read the real repository cannot be planted, and a plant is the only thing that proves it still counts.
|
|
56
|
+
*/
|
|
57
|
+
export function censusOf(root, files, read) {
|
|
58
|
+
const out = {};
|
|
59
|
+
let total = 0;
|
|
60
|
+
for (const f of files.filter(isScannable)) {
|
|
61
|
+
let text;
|
|
62
|
+
try { text = read(f); } catch { continue; } // binary or unreadable — nothing to count
|
|
63
|
+
const counts = SIGNATURES.map((s) => text.split("\n").filter((l) => s.re.test(l)).length);
|
|
64
|
+
if (counts.some((n) => n > 0)) { out[f] = counts; total += counts.reduce((a, b) => a + b, 0); }
|
|
65
|
+
}
|
|
66
|
+
// Sorted, so a re-mint produces a reviewable diff instead of a reordered file.
|
|
67
|
+
return { total, files: Object.fromEntries(Object.entries(out).sort(([a], [b]) => a < b ? -1 : 1)) };
|
|
68
|
+
}
|
package/driver/refusal-bound.mjs
CHANGED
|
@@ -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
|
// ── ONE REFUSAL BOUND FOR EVERY TRANSPORT THAT LOOPS PER-ITEM OBLIGATIONS ─────────────────────────────
|
|
4
4
|
//
|
|
5
|
-
//
|
|
5
|
+
// That Part 2. is the incident: one row of a meaning sweep was refused 217 times across three
|
|
6
6
|
// attempts, exhausted the stage's recoveries, and killed a production run that had already ruled 72 of
|
|
7
7
|
// its 73 obligations. Nothing delivered. The cure at that stage was a per-row bound and a park; this
|
|
8
8
|
// module is that cure written once, so the other members of the class do not each grow their own.
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
// 1,256 rows before this was built: present and distinct in every one.
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
|
-
* THE BOUND. Thirty, inherited from
|
|
36
|
+
* THE BOUND. Thirty, inherited from the disposition park, where the number was argued from a real
|
|
37
37
|
* ledger rather than chosen: twelve is refuted (two rows that were CONVERGING sat at 17), and 30 is still
|
|
38
38
|
* a sevenfold cut from the 217 that killed the run. That argument is about the SHAPE of a live-lock, not
|
|
39
39
|
* about meaning obligations, so it carries to the other members unchanged.
|
|
@@ -56,7 +56,7 @@ function* refusals(verdicts) {
|
|
|
56
56
|
/**
|
|
57
57
|
* How many times each item has been refused so far. PURE — the park's own evidence.
|
|
58
58
|
*
|
|
59
|
-
* COUNTED PER ITEM ACROSS CALLS, which is the unit
|
|
59
|
+
* COUNTED PER ITEM ACROSS CALLS, which is the unit the banner records an earlier investigation dying
|
|
60
60
|
* on when it joined per-item-final-state instead. A row refused on eight calls and ruled on the ninth
|
|
61
61
|
* counts eight; a row refused eight times in ONE call also counts eight, because eight refusals is eight
|
|
62
62
|
* refusals however they were batched.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
// The first cut narrowed the contract's covered list to the configured members and handed that
|
|
18
18
|
// downstream. It is wrong twice over:
|
|
19
19
|
//
|
|
20
|
-
// ·
|
|
20
|
+
// · the admission gate reads `offices.covered` to decide which territories a client may ORDER.
|
|
21
21
|
// Narrowing it to EU would refuse a US-only matter AT THE DOOR, on a provider that covers the US.
|
|
22
22
|
// is the report of that shape of refusal and its acceptance is that a US-only scenario is
|
|
23
23
|
// admitted rather than vetoed. A door that refuses is not a disclosure.
|
|
@@ -130,7 +130,7 @@ export function unavailableByOffice(unavailable) {
|
|
|
130
130
|
* against the full declared coverage and hand them straight to the provider adapter. On a composite
|
|
131
131
|
* that is a fan-out to EVERY member, so the unconfigured one is asked, refuses, and the composite
|
|
132
132
|
* correctly declines to return a partial sum — killing a lane whose other half works perfectly. That
|
|
133
|
-
* is
|
|
133
|
+
* is the observed refusal, and the acceptance ("free-tier starts and ships a disclosed US
|
|
134
134
|
* deferral") was never met on these two lanes.
|
|
135
135
|
*
|
|
136
136
|
* @param regions what resolveRegions produced, against the FULL coverage. `[]` is meaningful.
|
|
@@ -533,7 +533,7 @@ export function countLine(entry) {
|
|
|
533
533
|
//
|
|
534
534
|
// On the rendered line rather than only in `scope.deferredJurisdictions`, which has been written by
|
|
535
535
|
// both Depth 2 lanes since they were built and which `git grep` finds no reader for. A field nobody
|
|
536
|
-
// sees is not a disclosure — that is
|
|
536
|
+
// sees is not a disclosure — that is the defect exactly, where `deferred_coverage` rode the plan
|
|
537
537
|
// and the run shipped an EU-only clean with no row saying the US register was never searched.
|
|
538
538
|
const deferred = entry.deferredScope ?? [];
|
|
539
539
|
const oneDeferred = deferred.length === 1;
|
|
@@ -168,6 +168,36 @@ const FINDING_COLUMNS = Object.freeze(
|
|
|
168
168
|
// finding it there together with screen_verdict / class / status.
|
|
169
169
|
const NEGATIVE_COLUMNS = Object.freeze(["Mark", "Search Term / Variant", "Result", "Notes"]);
|
|
170
170
|
|
|
171
|
+
/**
|
|
172
|
+
* The "Mark" cell for one Negative-results row.
|
|
173
|
+
*
|
|
174
|
+
* A `duplicate-of-surfaced` row is not a statement about the MARK. It is a statement about one
|
|
175
|
+
* registration of a mark whose position is already reported above it — the digest's own rule is "one
|
|
176
|
+
* row per POSITION, never one per registration of the same right". Printing the bare mark under a
|
|
177
|
+
* column headed "Mark" says the opposite of what the row means, and the document then reads as both
|
|
178
|
+
* "keep this mark, here is the reasoning" in the incumbent table and "no separate row for this mark"
|
|
179
|
+
* here. Nine readers scan this file, and one of them is the drafting seat that decides what the client
|
|
180
|
+
* is shown.
|
|
181
|
+
*
|
|
182
|
+
* Naming the record removes the contradiction and changes no judgment the digest made: the row is
|
|
183
|
+
* still a drop, still on the same ground, still carrying the seat's own reason.
|
|
184
|
+
*
|
|
185
|
+
* ✕ EVERY OTHER GROUND IS LEFT ALONE, deliberately. `off-field`, `dead-status` and `out-of-class` are
|
|
186
|
+
* about the record on its own terms, where the bare mark is what a reader wants and is not ambiguous.
|
|
187
|
+
* A blanket change to this column would touch every negative row in every report for a defect that
|
|
188
|
+
* only exists on the duplicate class.
|
|
189
|
+
*
|
|
190
|
+
* The office comes from the record uri (`/mark/wo/…` -> `WO`); every uri in the archived corpus carries
|
|
191
|
+
* a two-letter office in that position. When it cannot be read the BARE MARK is printed rather than a
|
|
192
|
+
* broken qualifier — a missing qualifier is a smaller defect than "OSLER DELPHI — UNDEFINED record".
|
|
193
|
+
*/
|
|
194
|
+
export function negativeMarkCell(row) {
|
|
195
|
+
const mark = String(row?.cells?.mark ?? "").trim();
|
|
196
|
+
if (row?.ground !== "duplicate-of-surfaced" || !mark) return mark;
|
|
197
|
+
const office = String(row?.cells?.uri ?? "").split("/")[2] ?? "";
|
|
198
|
+
return /^[a-z]{2}$/i.test(office) ? `${mark} \u2014 ${office.toUpperCase()} record` : mark;
|
|
199
|
+
}
|
|
200
|
+
|
|
171
201
|
// ── THE FLOOR, AND WHAT ITS ZERO MEANS ────────────────────────────────────────────────────────────
|
|
172
202
|
//
|
|
173
203
|
// `validators.registerFindings` carried `nonEmpty(c)` with no character number, so there is no
|
|
@@ -353,7 +383,7 @@ export function renderRegisterFindings(model, facts = emptyFacts()) {
|
|
|
353
383
|
out.push(DIGEST_SECTIONS.negative, "");
|
|
354
384
|
out.push(model.negative_rows.length
|
|
355
385
|
? table(NEGATIVE_COLUMNS, model.negative_rows.map((r) => [
|
|
356
|
-
r
|
|
386
|
+
negativeMarkCell(r), r.variant || r.cells.mark, r.drop_reason,
|
|
357
387
|
[`URI ${r.cells.uri}`, r.screen_verdict ? `screen_verdict=${r.screen_verdict}` : "",
|
|
358
388
|
r.cells.classes ? `class=${r.cells.classes}` : "", r.cells.status ? `status=${r.cells.status}` : ""]
|
|
359
389
|
.filter(Boolean).join("; "),
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// `unit.md` is provider-INDEPENDENT doctrine, and it named three provider-DEPENDENT tools flat:
|
|
8
8
|
// "Your register key also carries register_record_fetch, register_image_fetch and register_batch_screen."
|
|
9
9
|
// On a signa deployment two thirds of that sentence is false and the seat is told it holds tools its
|
|
10
|
-
// grant does not carry; the same shape is
|
|
10
|
+
// grant does not carry; the same shape is the subject across six
|
|
11
11
|
// providers. A dispatch that asserts a capability the active provider lacks is the defect, whatever the
|
|
12
12
|
// seat then does with it.
|
|
13
13
|
//
|
|
@@ -39,7 +39,7 @@ export const HELD_BUT_NOT_CALLED = Object.freeze([
|
|
|
39
39
|
* ✕ NULL IS NOT AN EMPTY SENTENCE, and the difference is the defect this exists to fix. Ask
|
|
40
40
|
* `providerUnavailableRegisterTools` on an unresolved provider and it answers with an empty withheld
|
|
41
41
|
* set — deliberately, as a reporting helper that must never throw. Composed into this sentence, an empty
|
|
42
|
-
* withheld set reads as "your grant carries all of them":
|
|
42
|
+
* withheld set reads as "your grant carries all of them": the defect, restored
|
|
43
43
|
* silently, on exactly the `--experiment` single-stage path a diagnosis reaches for. So resolution is
|
|
44
44
|
* asked for HERE, and an unresolved provider omits the sentence rather than composing a false one.
|
|
45
45
|
*/
|