clearotron 0.2.1 → 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 +54 -1
- package/CONTRIBUTING.md +3 -3
- package/INSTALL.md +53 -49
- package/bin/brandowner.mjs +1 -1
- package/bin/clearotron.mjs +4 -4
- package/bin/connect.mjs +2 -2
- package/bin/example.mjs +27 -11
- package/bin/grant.mjs +3 -3
- package/bin/key.mjs +1 -1
- package/bin/onboard.mjs +58 -118
- package/bin/start.mjs +22 -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/architecture/01-product-overview.md +2 -2
- package/docs/architecture/02-architecture.md +2 -2
- package/docs/architecture/04-configuration-reference.md +6 -3
- 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 +65 -1
- package/driver/README.md +2 -2
- package/driver/ask-ledger.mjs +3 -3
- package/driver/authority-trees.mjs +1 -1
- package/driver/call-capture.mjs +1 -1
- package/driver/card-frame.mjs +1 -1
- package/driver/case-law-ledger.mjs +1 -1
- package/driver/claim-liveness.mjs +1 -1
- package/driver/common-law-receipts.mjs +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 +175 -62
- 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 +28 -10
- 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/queue-watch-probe.mjs +1 -1
- package/driver/queue-watch-verdict.mjs +1 -1
- package/driver/recall-reconciliation.mjs +1 -1
- package/driver/recipe-service.mjs +1 -1
- package/driver/record-carry.mjs +5 -5
- package/driver/recording-agreement.mjs +3 -3
- package/driver/reference-score.mjs +7 -7
- package/driver/refusal-bound.mjs +3 -3
- package/driver/register-availability.mjs +2 -2
- package/driver/register-count.mjs +1 -1
- package/driver/register-grant-vocabulary.mjs +2 -2
- package/driver/register-plan.mjs +8 -8
- package/driver/register-records.mjs +2 -2
- package/driver/registry-fidelity.mjs +3 -3
- package/driver/remedy-accounting.mjs +1 -1
- package/driver/repair-composers.mjs +2 -2
- package/driver/repair-digest.mjs +3 -3
- package/driver/repairs.mjs +6 -6
- package/driver/replay-archive.mjs +2 -0
- package/driver/report-card-record.mjs +2 -2
- package/driver/result-noun-fields.mjs +10 -3
- package/driver/run-economics.mjs +2 -2
- package/driver/run-integrity.mjs +1 -1
- package/driver/runner.mjs +22 -22
- package/driver/scope-rules.mjs +1 -1
- package/driver/search-policy.mjs +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 +146 -32
- 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 +12 -12
- 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 +4 -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 +3 -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 +4 -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 +1 -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 +3 -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 +7 -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 +51 -2
- package/scripts/home-render-check.mjs +2 -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-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 +6 -4
- package/scripts/release-version-pr-checks.mjs +1 -1
- package/scripts/release-version.mjs +2 -2
- package/scripts/render-check.mjs +66 -7
- package/scripts/report-frame-check.mjs +1 -1
- package/scripts/report-screenshot.mjs +1 -1
- package/scripts/revisit-render-check.mjs +1 -1
- package/scripts/score.mjs +4 -4
- package/scripts/strip-tracker-citations.mjs +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 +1 -1
- 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/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
package/driver/stages.mjs
CHANGED
|
@@ -287,14 +287,14 @@ export function paths(runDir) {
|
|
|
287
287
|
// form's era stamp (`form_required`/`form_path`). One file, two facts, written by runDigest before
|
|
288
288
|
// every digest pass it dispatches and BEFORE the form itself, so a failed form write fails closed.
|
|
289
289
|
coverageEnum: p(driverRel("coverage-enum.json")),
|
|
290
|
-
// — the seat-facing coverage form. DICTATED here so
|
|
290
|
+
// — the seat-facing coverage form. DICTATED here so the stray-artifact sweep knows the
|
|
291
291
|
// driver put it there; the accumulator beside it in `_driver/` is derived from this name.
|
|
292
292
|
narrative: p("narrative.md"),
|
|
293
293
|
findings: p("findings.json"), // Phase 1 — the per-finding machine contract; synthesis mirrors its RATED findings into this JSON, the report/Excel render consume it
|
|
294
294
|
caseLaw: p("case-law-findings.md"),
|
|
295
295
|
// — the RETRIEVAL RECORD beside the prose. Until this existed, `case-law-findings.md` was the
|
|
296
296
|
// only artifact case law produced and its whole contract was a non-empty check, so "the sweep ran"
|
|
297
|
-
// and "the dive read something" were unanswerable and
|
|
297
|
+
// and "the dive read something" were unanswerable and the record trace had nothing to join to.
|
|
298
298
|
caseLawCitations: p("case-law-citations.json"),
|
|
299
299
|
seniorEyeReview: p("senior-eye-review.md"),
|
|
300
300
|
// delivery contract (file-gated; rendered to the page by the pure-code publish step)
|
|
@@ -303,7 +303,7 @@ export function paths(runDir) {
|
|
|
303
303
|
reportCardsDir: p("report-cards"), // B1 — per-finding card files (one isolated LLM call each)
|
|
304
304
|
reportCard: (ord) => p(join("report-cards", `${ord}.md`)), // B1 — LLM (report-card): ONE card from finding[ord]'s own record
|
|
305
305
|
audit: p("audit.md"), // CODE (buildAuditMd from the spine) — full audit record
|
|
306
|
-
// THE SEAT WRITES THIS ONE, so it cannot live in `_driver/`.
|
|
306
|
+
// THE SEAT WRITES THIS ONE, so it cannot live in `_driver/`. That write boundary makes
|
|
307
307
|
// `<runDir>/_driver/**` a tree a seat may NEVER write into (authority-trees.mjs:70, `live: true`) —
|
|
308
308
|
// and this stage's dispatch handed the seat a path inside it. The deny fires, the seat writes the
|
|
309
309
|
// only place it can (the run root), the validator looks in `_driver/` and reports `missing_file`,
|
|
@@ -336,7 +336,7 @@ export const AGENT_WHATSAPP = (() => {
|
|
|
336
336
|
const m = JSON.parse(process.env.CLEAROTRON_AGENT_WHATSAPP || "");
|
|
337
337
|
if (m && typeof m === "object" && !Array.isArray(m)) return m;
|
|
338
338
|
} catch { /* fall through to the demo roster */ }
|
|
339
|
-
return { clawdi: "+10000000001", "clawdi-alex": "+10000000002", "clawdi-sam": "+10000000003" };
|
|
339
|
+
return { localagent: "+10000000001", clawdi: "+10000000001", "clawdi-alex": "+10000000002", "clawdi-sam": "+10000000003" };
|
|
340
340
|
})();
|
|
341
341
|
|
|
342
342
|
|
|
@@ -356,7 +356,7 @@ export const AGENT_WHATSAPP = (() => {
|
|
|
356
356
|
// clearances later the evidence is one-sided: the meaning seat has never converged on attempt 1 on
|
|
357
357
|
// haiku/low, on any run, and the two candidate confounds have both been eliminated by shipping them —
|
|
358
358
|
// `cdec607`'s write mode did not close it (a run on that engine still took 3 attempts and 26m48s) and
|
|
359
|
-
//
|
|
359
|
+
// That clause split did not close it (5 attempts across 2 ladders on the acceptance round). Its
|
|
360
360
|
// ladder costs 15–28 minutes of critical path per clearance, every clearance, because the halves fan in
|
|
361
361
|
// and this seat is the wave maximum whenever its matter is dense.
|
|
362
362
|
//
|
|
@@ -368,7 +368,7 @@ export const AGENT_WHATSAPP = (() => {
|
|
|
368
368
|
// WHAT IT WILL NOT FIX, STATED SO THE ROUND IS NOT MISREAD. Every measured failure is bookkeeping, not
|
|
369
369
|
// judgment: a literal `RULED-BENIGN` written where a receipt id belongs, a well-formed id bound to the
|
|
370
370
|
// wrong row, a form left untouched while a polished narrative was written. A stronger model does
|
|
371
|
-
// bookkeeping better; it does not stop the bookkeeping being the seat's job.
|
|
371
|
+
// bookkeeping better; it does not stop the bookkeeping being the seat's job. That class ruling — hand
|
|
372
372
|
// the constraint to the model instead of grading it against one — is the cure, and this is not it.
|
|
373
373
|
//
|
|
374
374
|
// WHY THE SEATS NEEDED SEPARATING. gave the meaning seat its own job and left it on the tier the
|
|
@@ -404,7 +404,7 @@ export const AGENT_WHATSAPP = (() => {
|
|
|
404
404
|
// bought against the wrong baseline. Reading `_driver/common-law-half:m.jsonl`, which is the file that
|
|
405
405
|
// entry names:
|
|
406
406
|
//
|
|
407
|
-
// R2, 08-09, pre-
|
|
407
|
+
// R2, 08-09, pre-change haiku 7 attempts (6 failed) 1972.1s
|
|
408
408
|
// quoted in-file, undated haiku 8 attempts 1721s
|
|
409
409
|
// quoted in-file, 08-11 sonnet 1 attempt 1674.2s
|
|
410
410
|
// R2, 08-12, on 857db4a haiku 2 attempts (1 failed) 422.9s
|
|
@@ -412,7 +412,7 @@ export const AGENT_WHATSAPP = (() => {
|
|
|
412
412
|
// **haiku on current code converges in 2 attempts at 423s — 4.7x faster than haiku on the old code.**
|
|
413
413
|
// The haiku→haiku pair is the solid row and it is attributable to the CODE, not the tier: changed
|
|
414
414
|
// what the seat is told on a refusal, and that is what bought the convergence. The sonnet flip was
|
|
415
|
-
// measured against pre- haiku, so it was credited with an improvement it did not cause. Against
|
|
415
|
+
// measured against pre-change haiku, so it was credited with an improvement it did not cause. Against
|
|
416
416
|
// current code sonnet's 1674.2s is ~4x the wall of haiku's 423s for the same delivered outcome.
|
|
417
417
|
//
|
|
418
418
|
// THE MARGIN, RECORDED RATHER THAN BURIED. Adequacy is load-dependent: R2 two attempts, R1 two attempts,
|
|
@@ -427,7 +427,7 @@ export const AGENT_WHATSAPP = (() => {
|
|
|
427
427
|
// override stays: `CLEAROTRON_MEANING_SEAT_MODEL=sonnet` on the box restores the old behaviour with no code
|
|
428
428
|
// change and no second path, which is the same one-line data edit that moved it here. And it does not
|
|
429
429
|
// fix the class of defect above: every measured failure is bookkeeping, and a cheaper model does
|
|
430
|
-
// bookkeeping no worse than a dearer one did —
|
|
430
|
+
// bookkeeping no worse than a dearer one did — the ruling remains the cure.
|
|
431
431
|
//
|
|
432
432
|
// SAVES ~20 MINUTES OF CRITICAL PATH PER CLEARANCE. This seat is the wave maximum whenever its matter is
|
|
433
433
|
// dense, so its wall is the fan-in's wall.
|
|
@@ -982,7 +982,7 @@ export const pharmaMatter = (job) =>
|
|
|
982
982
|
// that silently breaks per-customer framework selection). stages-followup.test.mjs pins message() and
|
|
983
983
|
// skillReadsFor emitting the SAME list, under a custom profile and under a pharma matter, so the two call
|
|
984
984
|
// sites cannot drift apart.
|
|
985
|
-
//
|
|
985
|
+
// the report prose standard. General rules ONCE, in one shared file, reached by every stage that
|
|
986
986
|
// writes a line a reader sees and by no other. There was no such file before: the three prose stages
|
|
987
987
|
// overlap only on the per-customer framework, so the general rules had to be duplicated (they were, in
|
|
988
988
|
// synthesis-rules.md and delivery-contract.md) or reach only some stages. A standard that reaches some
|
|
@@ -1097,7 +1097,7 @@ const scriptFloorDirective = (job, profile) => {
|
|
|
1097
1097
|
return `SCRIPT COVERAGE (MANDATORY, and the validator refuses a manifest without it): this matter is scoped to territories that register marks in ${scripts.length > 1 ? "scripts" : "a script"} other than Latin — ${scripts.map(([s, t]) => `${s} (${t.join(", ")})`).join("; ")}. State AT LEAST ONE rendering of the mark in each, as a "transliteration" variant carrying its "romanization" field. A conflicting right in one of these territories is commonly registered in the local script under characters a Latin-only family never asks for, so the search would come back clean because it never looked. ONE rendering per script is the floor — how many the mark deserves, and which of them bite, is your judgment and this floor never touches it. If the mark genuinely has no defensible rendering in one of these scripts, say so in the manifest prose rather than inventing one: a fabricated transliteration is a search we cannot stand behind.`;
|
|
1098
1098
|
};
|
|
1099
1099
|
|
|
1100
|
-
// ──
|
|
1100
|
+
// ── THE SIX CATEGORY NAMES WERE GIVEN AND NONE OF THEM WAS DEFINED ───────────────────────────
|
|
1101
1101
|
//
|
|
1102
1102
|
// An evidence run scored 7 of 9 found, 2 lost, **withheld 0**. Nothing was
|
|
1103
1103
|
// retrieved and dropped — DELPHI SCIENTIFIC and DELFITY were never searched for. The variant dispatch
|
|
@@ -1191,7 +1191,7 @@ export const VARIANT_CATEGORY_BRIEF =
|
|
|
1191
1191
|
// THERE IS NO BARE `mechanical`. A mechanical element must name what discharges it — "mechanical" on
|
|
1192
1192
|
// its own is a label a defect can wear, which is the failure exists to end.
|
|
1193
1193
|
//
|
|
1194
|
-
// THE CLASS IS THE DOCTRINAL CLASS — what discharges the element under
|
|
1194
|
+
// THE CLASS IS THE DOCTRINAL CLASS — what discharges the element under the plan — NOT a claim that
|
|
1195
1195
|
// the move has landed. `receipt_id` reads mechanical:pre-bound while a model still types it; M1 is what
|
|
1196
1196
|
// makes that true. stays open for the moves.
|
|
1197
1197
|
//
|
|
@@ -1391,7 +1391,7 @@ export const STAGES = {
|
|
|
1391
1391
|
// review round.
|
|
1392
1392
|
// `completeness` (A7, 2026-07-31) arms verify.mjs's variantCompletenessGaps floor the same way —
|
|
1393
1393
|
// its own key, so an archived output minted under the romanisation prompt alone keeps its verdict.
|
|
1394
|
-
// `term_shape` (
|
|
1394
|
+
// `term_shape` (2026-08-08) arms variantTermShapeGaps: a manifest value carrying markdown
|
|
1395
1395
|
// emphasis or a `, etc.` enumeration compiles to a nil search that reads as CLEAN, and the plan-side
|
|
1396
1396
|
// screen stops the search without ever telling this stage. Its own key for the same reason as above.
|
|
1397
1397
|
contract: { romanization: 1, completeness: 1, term_shape: 1 },
|
|
@@ -1420,7 +1420,7 @@ export const STAGES = {
|
|
|
1420
1420
|
},
|
|
1421
1421
|
"Prose Elements table columns — Role | Saturation (low|borderline|high|very-high) | Famous-mark | Notes": {
|
|
1422
1422
|
class: "judgment", tokens: [],
|
|
1423
|
-
why: "a FOUR-value saturation scale plus separate role, famous-mark and incumbent notes, against ONE three-value `kind` enum in the structured model (ELEMENT_KINDS declared in variant-manifest-model.mjs). The structured model cannot carry the distinction, so
|
|
1423
|
+
why: "a FOUR-value saturation scale plus separate role, famous-mark and incumbent notes, against ONE three-value `kind` enum in the structured model (ELEMENT_KINDS declared in variant-manifest-model.mjs). The structured model cannot carry the distinction, so the move for this stage (\"model emits the structured model only; code renders the prose tables from it\") drops the saturation rating, the famous-mark flag and the incumbent note unless the schema grows those keys first",
|
|
1424
1424
|
},
|
|
1425
1425
|
"variants[].value — the search terms themselves": {
|
|
1426
1426
|
class: "judgment", tokens: ["variantmodel_term_markup"],
|
|
@@ -1488,7 +1488,7 @@ export const STAGES = {
|
|
|
1488
1488
|
},
|
|
1489
1489
|
"Prose variant-table category token — translit-<script>, and for Chinese translit-zh-meaning vs translit-zh-phonetic": {
|
|
1490
1490
|
class: "judgment", tokens: [],
|
|
1491
|
-
why: "the meaning-vs-phonetic SENSE is a judgment the downstream class-scope gates key on, and variant-manifest.json has NO key that can carry it (one flat `transliteration` value). So this prose row is not rendered from the structured model, and
|
|
1491
|
+
why: "the meaning-vs-phonetic SENSE is a judgment the downstream class-scope gates key on, and variant-manifest.json has NO key that can carry it (one flat `transliteration` value). So this prose row is not rendered from the structured model, and the \"structured only\" move for this stage loses the distinction unless the schema grows a sense field first",
|
|
1492
1492
|
},
|
|
1493
1493
|
// The search floor came back at as a TYPED designation, having been retired at as a ⭐
|
|
1494
1494
|
// marker. The retirement was right on its own terms and this is not a reversal of it: what it
|
|
@@ -1695,7 +1695,7 @@ export const STAGES = {
|
|
|
1695
1695
|
},
|
|
1696
1696
|
"legacy branch — author the search-as-code grid program from the prompt template": {
|
|
1697
1697
|
class: "mechanical:tool-written", tokens: ["grid_join_missing", "platforms_missing"],
|
|
1698
|
-
why: "The same program is compiled by the driver into the grid spec on the deterministic branch, so code already holds it. The legacy branch is a second contract for one artifact and it is still in the shipped message —
|
|
1698
|
+
why: "The same program is compiled by the driver into the grid spec on the deterministic branch, so code already holds it. The legacy branch is a second contract for one artifact and it is still in the shipped message — the audit reads only the deterministic branch and does not name it.",
|
|
1699
1699
|
},
|
|
1700
1700
|
"legacy branch — save the grid call's stdout JSON VERBATIM to common-law-grid.json (single object, or array per batch in batch order)": {
|
|
1701
1701
|
class: "mechanical:tool-written", tokens: ["grid_ledger_missing", "grid_ledger_unparseable", "grid_join_missing", "platforms_missing"],
|
|
@@ -1946,7 +1946,7 @@ export const STAGES = {
|
|
|
1946
1946
|
},
|
|
1947
1947
|
"covering EVERY disposition row across the turn's calls": {
|
|
1948
1948
|
class: "mechanical:pre-bound", tokens: ["connotation_token_absent", "connotation_call_never_made", "connotation_call_partial"],
|
|
1949
|
-
why: "The obligation set is driver-computed before dispatch. This is
|
|
1949
|
+
why: "The obligation set is driver-computed before dispatch. This is a1: 81 rows, 12 ruled, turn ended honestly — under the typed transport the tool's answer names the remainder after every call.",
|
|
1950
1950
|
},
|
|
1951
1951
|
"do not hand-write the disposition table into the findings file": {
|
|
1952
1952
|
class: "mechanical:code-rendered", tokens: [],
|
|
@@ -1974,7 +1974,7 @@ export const STAGES = {
|
|
|
1974
1974
|
},
|
|
1975
1975
|
"layer-availability declaration — whether the findings prose says the marketplace layer could not be completed": {
|
|
1976
1976
|
class: "mechanical:code-extracted", tokens: ["declared_unavailable"],
|
|
1977
|
-
why: "The half ledger's gap rows already decide it —
|
|
1977
|
+
why: "The half ledger's gap rows already decide it — the whole argument, and the R5 MERIDIAN THISTLE terminal is the case where the phrase out-ranked the machine record on a complete grid.",
|
|
1978
1978
|
},
|
|
1979
1979
|
"final return — the absolute output path plus a 2-3 line summary": {
|
|
1980
1980
|
class: "mechanical:pre-bound", tokens: [],
|
|
@@ -2218,7 +2218,7 @@ export const STAGES = {
|
|
|
2218
2218
|
inScope
|
|
2219
2219
|
? `IN-SCOPE NICE CLASSES = [${inScope}]. Pin EVERY ${supplementalLane ? "proposal" : "register_enumerate"} to these — pass nice_classes:[${inScope}] AND in_scope_classes:[${inScope}] on every ${supplementalLane ? "proposal" : "call"}. ${supplementalLane ? "A proposal" : "An enumerate"} WITHOUT nice_classes (all-class default / starts_with / ends_with / phonetic / fuzzy) is FORBIDDEN: it pulls an all-45-class crowd that floods the band and times the stage out — it is not breadth. A bare saturated element with no class filter is a COUNT-ONLY descriptor (register_search limit:1), never enumerated. ONLY exception: the exact-IDENTICAL cross-class merch check (nice_classes:[25], match_mode:exact).`
|
|
2220
2220
|
: `Pin EVERY ${supplementalLane ? "proposal" : "register_enumerate"} to the matter's in-scope Nice classes (from the matter frame) via nice_classes — an unscoped all-class ${supplementalLane ? "proposal" : "enumerate"} is FORBIDDEN (it floods the band + times out the stage). Only exception: the exact-identical cross-class merch check (nice_classes:[25]).`,
|
|
2221
|
-
// CROWD BOUND (
|
|
2221
|
+
// CROWD BOUND (a REMOVAL): gate the dangerous-category substring enumeration on the class-scoped
|
|
2222
2222
|
// RESULT (tractable vs crowd), not the manifest label — a slice that returns a crowd is terminal (stop the
|
|
2223
2223
|
// per-major/phonetic fan-out). On a crowd, WRITE a block only for the distinctive anchor (material); for a
|
|
2224
2224
|
// stripped common component (GREAT/OUTDOORS) write none — saturation-probe already counted it (immaterial).
|
|
@@ -2357,7 +2357,7 @@ export const STAGES = {
|
|
|
2357
2357
|
},
|
|
2358
2358
|
"mark / owner / records / territories / classes on a SELECTED row": {
|
|
2359
2359
|
class: "mechanical:code-extracted", tokens: [],
|
|
2360
|
-
why: "renderEntry() in placement-form.mjs machine-copies all five from the canonical row built out of _driver/register-positions.json; SELECT_ROW_CONTRACT declared in placement-form.mjs states it in its do_not field. The driver already overwrites what the model types, which is
|
|
2360
|
+
why: "renderEntry() in placement-form.mjs machine-copies all five from the canonical row built out of _driver/register-positions.json; SELECT_ROW_CONTRACT declared in placement-form.mjs states it in its do_not field. The driver already overwrites what the model types, which is the audit's own definition of mechanical.",
|
|
2361
2361
|
},
|
|
2362
2362
|
"retract: <row_id> — withdrawing a seat row already on the form": {
|
|
2363
2363
|
class: "judgment", tokens: [],
|
|
@@ -2490,7 +2490,7 @@ export const STAGES = {
|
|
|
2490
2490
|
},
|
|
2491
2491
|
"## Summary counts — total queries executed (search + detail-fetch), enumerated records across N axes, crowd-descriptor count, candidates past the gate, surfaced count, open-verification-flag count": {
|
|
2492
2492
|
class: "mechanical:tool-written", tokens: [],
|
|
2493
|
-
why: "CONVERTED (conversion 11): the driver renders the whole Summary section from its own receipts and the tool takes no count field at all. band_shape computes the band totals and the crowds list; _driver/plan-execution.json records every executed plan entry; _driver/tool-calls.jsonl writes one line per call with server/tool/axis/seq (tool-calls.mjs), so call counts are the driver's arithmetic. Unlike case-law's queries[] (
|
|
2493
|
+
why: "CONVERTED (conversion 11): the driver renders the whole Summary section from its own receipts and the tool takes no count field at all. band_shape computes the band totals and the crowds list; _driver/plan-execution.json records every executed plan entry; _driver/tool-calls.jsonl writes one line per call with server/tool/axis/seq (tool-calls.mjs), so call counts are the driver's arithmetic. Unlike case-law's queries[] (the M5 blocker) no query TEXT is needed here — only counts, which the log already supports.",
|
|
2494
2494
|
},
|
|
2495
2495
|
"Audit trail — per-unit search/detail-fetch counts, per-jurisdiction `_query` attribution": {
|
|
2496
2496
|
class: "mechanical:tool-written", tokens: [],
|
|
@@ -2532,7 +2532,7 @@ export const STAGES = {
|
|
|
2532
2532
|
// class, and its SUBJECT is restated as what those tokens are about today.
|
|
2533
2533
|
"the archived-era prose `## Coverage ledger` table — the pre-#476 contract these tokens still judge on a REPLAYED run (no live run reaches it)": {
|
|
2534
2534
|
class: "mechanical:code-rendered", tokens: ["no_coverage_status_row", "coverage_status_offenum", "coverage_deferred_unaccounted", "coverage_clean_unverified_incomplete", "coverage_ledger_unparseable", "coverage_ledger_empty", "coverage_key_unknown", "coverage_axis_invalid", "coverage_status_invalid", "coverage_classes_invalid", "coverage_axis_missing", "missing"],
|
|
2535
|
-
why: "RETIRED SUBJECT, LIVE TOKENS.
|
|
2535
|
+
why: "RETIRED SUBJECT, LIVE TOKENS. the move M6 (2026-08-14) deleted the branch and made the driver always arm and always write, so NO LIVE RUN reaches the arms below: where the form exists the driver renders both the table and the JSON mirror from it. What the tokens judge now is an ARCHIVED pre-conversion run, which carries no era stamp and whose coverage verdict is decided by exactly this contract — that is why verify.mjs's prose arms are not dead code and must not be tidied away as such. ARM SCOPING (verify.mjs): coverage_deferred_unaccounted and coverage_clean_unverified_incomplete fire only inside `if (!stamp.required)`; coverage_status_offenum reads parseCoverageLedgerFull over the model's prose; the coverage_ledger_* / coverage_axis_* / coverage_key_unknown / coverage_classes_invalid family comes from parseCoverageLedgerJson over register-coverage-ledger.json, which is code-derived in BOTH eras — so on a form run those are driver faults and only on the archived branch do they speak about model output. Conversion 11 does not touch any of this: it moves the findings DOCUMENT, and the coverage form keeps its own transport (record_coverage) and its own writer.",
|
|
2536
2536
|
},
|
|
2537
2537
|
"return payload — the absolute output path plus a 2-3 line summary (counts + the path of the file written)": {
|
|
2538
2538
|
class: "mechanical:tool-written", tokens: [],
|
|
@@ -2591,7 +2591,7 @@ export const STAGES = {
|
|
|
2591
2591
|
// A NO-FORM arm stood here until M6, saying "this run has NO coverage form, so the ## Coverage
|
|
2592
2592
|
// ledger table in your findings is yours to write and it is what every coverage gate reads". It
|
|
2593
2593
|
// was the one condition could not reach — the driver armed the form only when the plan
|
|
2594
|
-
// apparatus was in reach — and inside it,
|
|
2594
|
+
// apparatus was in reach — and inside it, the whole correction was reversed: the model's prose
|
|
2595
2595
|
// was the source of truth again. One contract per stage, not one per runtime condition.
|
|
2596
2596
|
//
|
|
2597
2597
|
// The driver now always arms and always writes (pipeline.mjs runDigest). A run that can carry no
|
|
@@ -2606,7 +2606,7 @@ export const STAGES = {
|
|
|
2606
2606
|
// (digestDispatchExtra appends coverageFormBrief, which enumerates every row with its computed
|
|
2607
2607
|
// identifiers), and the tool's every answer re-lists what is outstanding.
|
|
2608
2608
|
`Your Coverage ledger is a set of driver-computed obligations, enumerated in this dispatch (the coverage block below, with a row_id per row). Record a "status" and a "reason" on EVERY row ONLY by calling the \`record_coverage\` tool — the driver validates each row as it arrives, holds the record itself, and renders both the ## Coverage ledger table and the coverage JSON from it. Never write or edit any coverage file, and do NOT write a ## Coverage ledger table into your findings — nothing you hand-write in either place is read. Each row is discharged only by ITSELF: a status on one row never accounts for another row's slice. If this dispatch carries NO coverage block, the run's coverage form is a driver-written declaration of absence — a complete answer; there is nothing for you to record.`,
|
|
2609
|
-
// ── CONVERTED (
|
|
2609
|
+
// ── CONVERTED (conversion 11). A bare write-return naming the findings path
|
|
2610
2610
|
// stood here
|
|
2611
2611
|
// and the sections above dictated a document skeleton the seat typed and nine parsers read back.
|
|
2612
2612
|
// What survives is every sentence that says what a JUDGMENT MEANS — the relevance gate, the
|
|
@@ -2712,10 +2712,10 @@ export const STAGES = {
|
|
|
2712
2712
|
// — THE DICTATED LINE SHAPE AND THE PATH ARE BOTH GONE. `writeReturn(P.skepticFlags)` closed this
|
|
2713
2713
|
// dispatch and the prose above dictated `ESCALATE: <axis> — <one-line reason>` in a named section, a
|
|
2714
2714
|
// shape pipeline.mjs re-parses. The seat now sends VALUES and the driver renders the file, so the one
|
|
2715
|
-
// authority for the line shape is `renderSkepticFlags` — which is what
|
|
2715
|
+
// authority for the line shape is `renderSkepticFlags` — which is what the "typed rows, code
|
|
2716
2716
|
// renders" asked for, and what the E3 backlog row on this dictation was waiting for.
|
|
2717
2717
|
// DIRECTION (a) — THE GRANT CARRIED THIS TOOL AND NO SERVED TEXT NAMED IT. `search_run_artifacts`
|
|
2718
|
-
// landed with the conversion (
|
|
2718
|
+
// landed with the conversion (the unlock path 1) as the sanctioned replacement for the seven Bash
|
|
2719
2719
|
// reads O3c measured on this stage, and then appeared in no dispatch, no skill doc and no repair
|
|
2720
2720
|
// prose — so the seat was handed a capability it had no way to know about while the doctrine it DOES
|
|
2721
2721
|
// read still tells it to build every row from files. A granted-but-unnamed tool does not fail loudly:
|
|
@@ -2902,7 +2902,7 @@ export const STAGES = {
|
|
|
2902
2902
|
},
|
|
2903
2903
|
"findings[].source.resolved_link — the record URL actually fetched": {
|
|
2904
2904
|
class: "mechanical:code-extracted", tokens: ["finding_source_invalid", "finding_record_url_foreign_host"],
|
|
2905
|
-
why: "the URL is composable in code from the record's own uri plus the provider host table — the skill file says so outright, and
|
|
2905
|
+
why: "the URL is composable in code from the record's own uri plus the provider host table — the skill file says so outright, and the foreign-host gate exists only because the model types it",
|
|
2906
2906
|
},
|
|
2907
2907
|
"findings[].source.source_type — register-vendor / register-euipo / common-law-marketplace / common-law-web / case-law": {
|
|
2908
2908
|
class: "mechanical:code-extracted", tokens: ["finding_source_type_invalid", "finding_source_key_unknown"],
|
|
@@ -2930,7 +2930,7 @@ export const STAGES = {
|
|
|
2930
2930
|
},
|
|
2931
2931
|
"findings[].quadrant {x,y}": {
|
|
2932
2932
|
class: "judgment", tokens: ["finding_quadrant_invalid"],
|
|
2933
|
-
why: "Owner ruling S1 (2026-08-13): the precise position is the single authored statement of severity and stays with the model; the meter words are derived from it. The draft recorded S1 as unruled — it was ruled in
|
|
2933
|
+
why: "Owner ruling S1 (2026-08-13): the precise position is the single authored statement of severity and stays with the model; the meter words are derived from it. The draft recorded S1 as unruled — it was ruled in the audit's comments.",
|
|
2934
2934
|
},
|
|
2935
2935
|
"findings[].use_check.source — the searched use-check result URL or the honest negative": {
|
|
2936
2936
|
class: "mechanical:tool-written", tokens: ["finding_use_check_missing", "finding_use_check_source_missing", "finding_use_check_invalid"],
|
|
@@ -2942,7 +2942,7 @@ export const STAGES = {
|
|
|
2942
2942
|
},
|
|
2943
2943
|
"findings[].own_rights.source — the record URI(s) the own-portfolio check returned, or the scoped negative": {
|
|
2944
2944
|
class: "mechanical:code-extracted", tokens: ["finding_own_rights_source_missing", "finding_own_rights_invalid", "finding_own_rights_key_unknown"],
|
|
2945
|
-
why: "the check runs through band_lookup / band_record, and reading-log.jsonl captures those tools' args and results (
|
|
2945
|
+
why: "the check runs through band_lookup / band_record, and reading-log.jsonl captures those tools' args and results (the contrast with tool-calls.jsonl) — the URIs the lookup returned are on disk before the model retypes them",
|
|
2946
2946
|
},
|
|
2947
2947
|
"findings[].bears_on — what a risk-raising fact proves about THIS conflict": {
|
|
2948
2948
|
class: "judgment", tokens: ["finding_bears_on_invalid"],
|
|
@@ -2978,7 +2978,7 @@ export const STAGES = {
|
|
|
2978
2978
|
},
|
|
2979
2979
|
"coverage_judgment.rows — the per-open-slice register": {
|
|
2980
2980
|
class: "mechanical:code-extracted", tokens: ["findings_coverage_judgment_rows_invalid", "findings_coverage_judgment_row_key_unknown"],
|
|
2981
|
-
why: "the driver builds it from the coverage ledger and the plan-execution receipt (register-coverage-ledger.json + _driver/plan-execution.json). The prompt forbids typing it AND the driver replaces it, yet the parser still polices the shape —
|
|
2981
|
+
why: "the driver builds it from the coverage ledger and the plan-execution receipt (register-coverage-ledger.json + _driver/plan-execution.json). The prompt forbids typing it AND the driver replaces it, yet the parser still polices the shape — the ruling is to delete the field from the contract",
|
|
2982
2982
|
},
|
|
2983
2983
|
"mark_assessment.distinctiveness / connotation (prose or structured form: spectrum, read, per_class[], per_market[], acquired, note)": {
|
|
2984
2984
|
class: "judgment", tokens: ["findings_mark_assessment_invalid", "findings_mark_assessment_key_unknown"],
|
|
@@ -3034,7 +3034,7 @@ export const STAGES = {
|
|
|
3034
3034
|
},
|
|
3035
3035
|
"rated_under_framework — the framework_key of the framework this rating reasoned with": {
|
|
3036
3036
|
class: "mechanical:pre-bound", tokens: ["findings_rated_under_missing", "findings_rated_under_mismatch"],
|
|
3037
|
-
why: "THE SECOND frame_scope_missing. The driver holds the value in _driver/framework.json, writes it into the dispatch, asks the model to retype it, and fails the file when the retyping does not match its own copy.
|
|
3037
|
+
why: "THE SECOND frame_scope_missing. The driver holds the value in _driver/framework.json, writes it into the dispatch, asks the model to retype it, and fails the file when the retyping does not match its own copy. The audit table groups it under the tool-written envelope row; pre-bound is the sharper discharge and either removes it from the model",
|
|
3038
3038
|
},
|
|
3039
3039
|
},
|
|
3040
3040
|
message: ({ paths: P, job, customerUnknown, profile, intakeAsks, enforcerSignals, framework, jxAim, registerOnly, crowdContext, dispatchBlocks, findingsSurface, depth }) => lines(
|
|
@@ -3111,7 +3111,7 @@ export const STAGES = {
|
|
|
3111
3111
|
// it appears in a register receipt. The second gave the common-law layer a record of its own and
|
|
3112
3112
|
// named common-law-findings.md as it. That file is the common-law stage's NARRATIVE, not a
|
|
3113
3113
|
// receipt: treating it as proof a check ran is exactly how one stage's unsupported assertion
|
|
3114
|
-
// becomes the next stage's supported fact, which is
|
|
3114
|
+
// becomes the next stage's supported fact, which is the shape and the shape this whole build
|
|
3115
3115
|
// exists to stop.
|
|
3116
3116
|
//
|
|
3117
3117
|
// So: ONE layer has a driver-computed receipt and the line says which. Everywhere else the
|
|
@@ -3131,7 +3131,7 @@ export const STAGES = {
|
|
|
3131
3131
|
// clean statement — two opposed instructions about one file in one dispatch. The carve-out is
|
|
3132
3132
|
// DIRECTIONAL, which is what makes it safe: that ledger constrains (a `coverage-limited` row
|
|
3133
3133
|
// forbids a clean negative) and never licenses (a `confirmed-clean` row is still the stage's own
|
|
3134
|
-
// word, so a clean claim still needs a source).
|
|
3134
|
+
// word, so a clean claim still needs a source). That shape stays blocked.
|
|
3135
3135
|
...synthesisRegisterRecordLines({ dispatchBlocks, paths: P, registerOnly }),
|
|
3136
3136
|
// A3 (F5/F8) — the machine's own open items are FIRST-CLASS judgment inputs, not telemetry:
|
|
3137
3137
|
// every reopen deferral and every skeptic flag must be weighed, and the weighing must LAND somewhere
|
|
@@ -3260,14 +3260,14 @@ export const STAGES = {
|
|
|
3260
3260
|
// would be ordering an empty ritual.
|
|
3261
3261
|
// THE ORDER IS UNCONDITIONAL; ONLY THE LIST IS NOT. The first draft gated this whole block on
|
|
3262
3262
|
// `findingsSurface`, reasoning that a stage handed no list should not be ordered to answer one.
|
|
3263
|
-
//
|
|
3263
|
+
// That agreement guard refused it, and it was right: `record_declination` was then a tool the
|
|
3264
3264
|
// grant carried and no dictation mentioned — "granted-but-never-ordered", which is the silent
|
|
3265
3265
|
// capability hole in the other direction, and the one that shipped before. A seat that is never
|
|
3266
3266
|
// told a tool exists does not use it, and nothing records that it did not.
|
|
3267
3267
|
`DECLINATIONS: what you do not deliver, you decline BY NAME through the \`record_declination\` tool. A record that reached your findings surface leaves this stage as a finding in ${P.findings} or as a declination, and there is no third way out.`,
|
|
3268
3268
|
...(Array.isArray(findingsSurface) && findingsSurface.length ? [
|
|
3269
3269
|
`DECLINATIONS (MANDATORY): the register digest carried ${findingsSurface.length} record(s) onto your findings surface. Each one leaves this stage by one of two routes and there is no third: it becomes a finding in ${P.findings}, or you decline it BY NAME with a reason and a ground. A record you simply do not mention is reported as a defect of this run, named individually in its trace and shipped as an open doubt, so silence costs you more than a declination ever will.`,
|
|
3270
|
-
`Decline by calling the \`record_declination\` tool. Its schema names the fields it takes and what each is for — read them there, not here. The one thing to know before you call: you cite a record by its POSITION in the list below — there is no field for a mark name or a uri, so a record you were not handed cannot be expressed at all. The reason vocabulary is closed: ${DECLINATION_REASON_TOKENS.join(" / ")}, each an omission synthesis-rules.md already authorises, and if your ground is none of them the rules do not let you omit the record. The grounds you write are one or two lines in your OWN words on why THIS record does not earn a line — never machine-parsed, and what the reviewing lawyer reads. Send them in one batch where you can; a refused row never voids its neighbours, and the answer names what is still undecided so you can finish in this turn.`,
|
|
3270
|
+
`Decline by calling the \`record_declination\` tool. Its schema names the fields it takes and what each is for — read them there, not here. The one thing to know before you call: you cite a record by its POSITION in the list below — there is no field for a mark name or a uri, so a record you were not handed cannot be expressed at all. The reason vocabulary is closed: ${DECLINATION_REASON_TOKENS.join(" / ")}, each an omission synthesis-rules.md already authorises, and if your ground is none of them the rules do not let you omit the record. ONE OF THEM IS NOT AVAILABLE ON A LIVE RECORD IN AN INSTRUCTED CLASS: \`not-worth-the-line\` is a statement about the report's budget rather than about the mark, and a live registration inside one of the matter's own classes is never omitted for want of room — carry it, or decline it on something true of THAT MARK. The call is refused if you try, so it costs you a turn. The grounds you write are one or two lines in your OWN words on why THIS record does not earn a line — never machine-parsed, and what the reviewing lawyer reads. Send them in one batch where you can; a refused row never voids its neighbours, and the answer names what is still undecided so you can finish in this turn.`,
|
|
3271
3271
|
`A REFUSAL FROM THAT TOOL IS ABOUT BOOKKEEPING, NEVER ABOUT YOUR LEGAL JUDGMENT. There is exactly ONE case: declining a mark IDENTICAL to the applied-for mark, live, in one of the matter's own filed classes, on a discretionary ground — because synthesis-rules.md orders that an on-point identical mark in the relevant class is never dropped, "regardless of filer profile", so such a declination contradicts the instruction you are already following. Nothing else is refused. If that record really is the applicant's own, or already delivered under another record, say exactly that with own-right or duplicate-of-delivered and it is accepted. Whether goods are related, whether a name is off-field, whether a conflict is worth the line — those are your calls and the tool does not have an opinion about any of them.`,
|
|
3272
3272
|
`The records on your findings surface, by position:`,
|
|
3273
3273
|
...findingsSurface.map((r, i) => ` ${i}. ${r.mark ?? "(unnamed)"}${r.owner ? ` — ${r.owner}` : ""}${r.tier ? ` [${r.tier}]` : ""}${r.uri ? ` ${r.uri}` : ""}`),
|
|
@@ -3338,7 +3338,7 @@ export const STAGES = {
|
|
|
3338
3338
|
`among your inputs. The report states what was retrieved in code, from the run's own records. A`,
|
|
3339
3339
|
`sentence like "no registry certificate was obtained, so goods were compared from class numbers" is`,
|
|
3340
3340
|
`the exact claim this rule exists to stop, and it has already been shipped to a client once.`,
|
|
3341
|
-
// ── — SAME SEAT, DIFFERENT FAILURE, AND
|
|
3341
|
+
// ── — SAME SEAT, DIFFERENT FAILURE, AND the PROHIBITION DOES NOT REACH IT ──────────
|
|
3342
3342
|
//
|
|
3343
3343
|
// The rule above is about MACHINERY the seat cannot see. This one is about PARTIES it can. In the
|
|
3344
3344
|
// same refused report this seat described the client's own company: a named therapeutic pipeline
|
|
@@ -3506,7 +3506,7 @@ export const STAGES = {
|
|
|
3506
3506
|
},
|
|
3507
3507
|
"the section titled exactly \"PLAN-EXECUTION CHECK\"": {
|
|
3508
3508
|
class: "mechanical:code-rendered", tokens: ["plan_audit_missing"],
|
|
3509
|
-
why: "a heading a validator string-matches. This is
|
|
3509
|
+
why: "a heading a validator string-matches. This is that case in its purest form: read stages.mjs alone and the token is armed with no invitation anywhere. Code renders the section frame from the driver's own table; the model fills the audit",
|
|
3510
3510
|
},
|
|
3511
3511
|
"the plan-execution audit judgment — a clean claim resting on a MISSING slice is blocking; a crowd/incomplete descriptor is a signal for judgment, never a verdict input; a machine-manufactured conditional is flagged in either direction": {
|
|
3512
3512
|
class: "judgment", tokens: ["plan_audit_missing"],
|
|
@@ -3643,11 +3643,11 @@ export const STAGES = {
|
|
|
3643
3643
|
// anchor those two use is now matching the driver's own render rather than a seat's typing.
|
|
3644
3644
|
"actions.checks_we_ran[] candidate bullets — one per coverage row, derived from the typed coverage[] the run already holds": {
|
|
3645
3645
|
class: "mechanical:code-rendered", tokens: ["too_short"],
|
|
3646
|
-
why: "
|
|
3646
|
+
why: "the audit table rules this row 'J (selection) / M (from coverage rows)' with the move 'render candidate bullets from typed coverage[]; model edits'. The bullet SET is derivable from coverage[] — one candidate per coverage area — so producing the candidates is code's. Only the editing on top is the model's, and that is the sibling row below.",
|
|
3647
3647
|
},
|
|
3648
3648
|
"actions.checks_we_ran[] selection and edit — which candidate checks a client should read, and how each result is stated in plain English": {
|
|
3649
3649
|
class: "judgment", tokens: ["too_short"],
|
|
3650
|
-
why: "The judgment half of
|
|
3650
|
+
why: "The judgment half of the 'J (selection) / M (from coverage rows)' split: which of the rendered candidates earn a place in a client-facing Actions section, and how a result is worded for a lawyer to read. The audit keeps the model's edit pass — 'model edits' — and only the candidate generation moves.",
|
|
3651
3651
|
},
|
|
3652
3652
|
"actions.checks_we_ran[].source_link (the `([source](<url>))` URL in each bullet)": {
|
|
3653
3653
|
class: "mechanical:code-rendered", tokens: [],
|
|
@@ -3845,7 +3845,7 @@ export const STAGES = {
|
|
|
3845
3845
|
//
|
|
3846
3846
|
// The Source row is the sharpest: the seat was composing a URL from a host table it is not even
|
|
3847
3847
|
// given (providers/<name>.md is NOT in this stage's skillReads) plus a path on the record. That is
|
|
3848
|
-
// the transcription class in its purest form, and
|
|
3848
|
+
// the transcription class in its purest form, and the link-to-nowhere shipped from it once.
|
|
3849
3849
|
//
|
|
3850
3850
|
// The suppression rule did not vanish with its row — it moved to the ACCEPTANCE BOUNDARY, where a
|
|
3851
3851
|
// bullet carrying a registration number is refused in the turn rather than flagged at delivery.
|
|
@@ -4560,3 +4560,60 @@ export function assertTierSanity() {
|
|
|
4560
4560
|
if (bad.length) throw new Error(`tier sanity: haiku+adaptive forbidden → ${bad.join(", ")}. ${HAIKU_ADAPTIVE_WHY}`);
|
|
4561
4561
|
return true;
|
|
4562
4562
|
}
|
|
4563
|
+
|
|
4564
|
+
// ── WHO THE COMPLETION NOTICE IS FOR (tracker issue 289) ─────────────────────────────────────────────
|
|
4565
|
+
//
|
|
4566
|
+
// It went to whoever runs the agent, never to whoever asked. `AGENT_WHATSAPP` is keyed by AGENT ID, and
|
|
4567
|
+
// every user of this deployment shares the one agent, so on every run the operator was paged for work
|
|
4568
|
+
// somebody else ordered and the person who ordered it was told nothing. Owner ruling, 2026-09-07: route
|
|
4569
|
+
// to the requester where a number is held for them, and keep the operator's number as a copy the
|
|
4570
|
+
// operator can switch off.
|
|
4571
|
+
//
|
|
4572
|
+
// WHERE THE NUMBER IS READ FROM, stated plainly because it is contact data and the issue asks for it to
|
|
4573
|
+
// be stated: `CLEAROTRON_REQUESTER_WHATSAPP`, a JSON object of requester handle or email → number. THIS
|
|
4574
|
+
// IS A NEW CONFIG KEY and saying so is the point — no store in this product held a number for a
|
|
4575
|
+
// requester. A job carries `forwarder` and `forwarderEmail` and neither resolves to one.
|
|
4576
|
+
//
|
|
4577
|
+
// It is deliberately NOT `AGENT_WHATSAPP` with requesters added. That map is keyed by agent id, the two
|
|
4578
|
+
// namespaces are unrelated, and a requester whose handle collided with an agent id would be sent
|
|
4579
|
+
// somebody else's number — the kind of silent mis-delivery that is discovered by a person receiving mail
|
|
4580
|
+
// about a matter that is not theirs.
|
|
4581
|
+
//
|
|
4582
|
+
// EMPTY BY DEFAULT, and that is correct rather than lazy: a default roster of invented numbers is what
|
|
4583
|
+
// the agent map above carries for offline tests, and inventing one for REQUESTERS would mean a
|
|
4584
|
+
// deployment that never configured this quietly routing a client's completion notice at a fixture.
|
|
4585
|
+
export const REQUESTER_WHATSAPP = (() => {
|
|
4586
|
+
try {
|
|
4587
|
+
const m = JSON.parse(process.env.CLEAROTRON_REQUESTER_WHATSAPP || "");
|
|
4588
|
+
if (m && typeof m === "object" && !Array.isArray(m)) return m;
|
|
4589
|
+
} catch { /* no roster configured */ }
|
|
4590
|
+
return {};
|
|
4591
|
+
})();
|
|
4592
|
+
|
|
4593
|
+
// The operator's own copy, on by default and switchable per deployment. Off is spelled "0"/"false"/"no"
|
|
4594
|
+
// so an operator who wants out of everyone else's runs can say so without editing the requester roster —
|
|
4595
|
+
// the two halves the owner asked for, independently controlled.
|
|
4596
|
+
export const OPERATOR_WHATSAPP_COPY = !/^(0|false|no)$/i.test(String(process.env.CLEAROTRON_WHATSAPP_OPERATOR_COPY ?? "").trim());
|
|
4597
|
+
|
|
4598
|
+
/**
|
|
4599
|
+
* The chat routing for one delivery packet: who it is for, why it is nobody when it is, and the
|
|
4600
|
+
* operator's separate copy.
|
|
4601
|
+
*
|
|
4602
|
+
* ABSENCE IS STATED, NEVER FILLED IN. When no number is held for the requester, `whatsappTo` is null and
|
|
4603
|
+
* `whatsappToReason` says so — it does not silently fall back to the operator, which is the defect this
|
|
4604
|
+
* replaces. A null with a reason is a fact the integrator can act on; a silent substitution is one nobody
|
|
4605
|
+
* can see.
|
|
4606
|
+
*/
|
|
4607
|
+
export function whatsappRouting(job, agentId) {
|
|
4608
|
+
const email = String(job?.forwarderEmail ?? "").trim().toLowerCase();
|
|
4609
|
+
const handle = String(job?.forwarder ?? "").trim();
|
|
4610
|
+
const byEmail = email ? REQUESTER_WHATSAPP[email] : null;
|
|
4611
|
+
const byHandle = handle ? REQUESTER_WHATSAPP[handle] : null;
|
|
4612
|
+
const to = byEmail ?? byHandle ?? null;
|
|
4613
|
+
const who = email || handle || "the requester";
|
|
4614
|
+
return {
|
|
4615
|
+
whatsappTo: to,
|
|
4616
|
+
whatsappToReason: to ? null : `no chat number is held for ${who} — set one in CLEAROTRON_REQUESTER_WHATSAPP to notify them`,
|
|
4617
|
+
whatsappCcOperator: OPERATOR_WHATSAPP_COPY ? (AGENT_WHATSAPP[agentId] ?? null) : null,
|
|
4618
|
+
};
|
|
4619
|
+
}
|
|
@@ -72,10 +72,10 @@ export function dictatedPaths(P, { halves = GRID_SEATS, axes = [] } = {}) {
|
|
|
72
72
|
}
|
|
73
73
|
} catch { /* no half ledger on this run shape */ }
|
|
74
74
|
}
|
|
75
|
-
// —
|
|
75
|
+
// — the provenance sidecar, DECLARED. The perplexity server writes
|
|
76
76
|
// `<ledger>.provenance.json` beside whatever grid ledger it served (grid-provenance.mjs — which
|
|
77
77
|
// provider ran the grid, written because the ledger itself is saved verbatim and cannot carry it).
|
|
78
|
-
// Its reader is the run-dir AUDITOR, and that reader is real:
|
|
78
|
+
// Its reader is the run-dir AUDITOR, and that reader is real: its own header records the
|
|
79
79
|
// 2026-08-24 misread — a SerpAPI counter read across this lane, the lane mis-reported as
|
|
80
80
|
// quota-starved, with no artifact saying which provider served it. Derived from the SAME path
|
|
81
81
|
// function the writer uses, one per ledger the tool can serve (full + each half) — never a
|