clearotron 0.4.0-beta.0 → 0.4.0-beta.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 +9 -0
- package/INSTALL.md +4 -31
- package/README.md +5 -5
- package/bin/brandowner.mjs +1 -1
- package/bin/onboard.mjs +18 -74
- package/bin/start.mjs +58 -14
- package/bin/update.mjs +10 -2
- package/build-info.json +2 -2
- package/demo/full-country-search/run/_driver/search-policy.json +1 -1
- package/demo/full-country-search/run/status.json +1 -1
- package/demo/global-preliminary-search/run/_driver/search-policy.json +1 -1
- package/demo/global-preliminary-search/run/status.json +1 -1
- package/demo/knockout-search/run/_driver/search-policy.json +1 -1
- package/demo/knockout-search/run/status.json +1 -1
- package/demo/multi-country-focus-search/run/_driver/search-policy.json +1 -1
- package/demo/multi-country-focus-search/run/status.json +1 -1
- package/docs/README.md +1 -0
- package/docs/SECURITY-OWASP.md +298 -0
- package/docs/SECURITY.md +18 -13
- package/docs/architecture/02-architecture.md +5 -5
- package/docs/architecture/03-run-lifecycle.md +28 -29
- package/docs/architecture/04-configuration-reference.md +5 -10
- package/docs/architecture/05-config-governance.md +5 -7
- package/docs/architecture/06-operations-runbook.md +0 -12
- package/docs/architecture/07-quality-and-audit.md +12 -13
- package/docs/architecture/09-security-and-data.md +9 -4
- package/driver/CHANGELOG.md +70 -0
- package/driver/ask-ledger.mjs +4 -2
- package/driver/authority-trees.mjs +90 -8
- package/driver/band-shape.mjs +13 -13
- package/driver/blind-frame-model.mjs +1 -1
- package/driver/case-law-ledger.mjs +19 -3
- package/driver/claim-liveness.mjs +30 -1
- package/driver/clearance-variants-record.mjs +10 -3
- package/driver/common-law-receipts.mjs +64 -14
- package/driver/commonlaw-carry.mjs +2 -2
- package/driver/compare.mjs +2 -2
- package/driver/connotation-search.mjs +33 -104
- package/driver/contract-arm2-baseline.json +6 -5
- package/driver/contract-e3-backlog.mjs +62 -62
- package/driver/contract-vocabulary.mjs +38 -31
- package/driver/coverage-form-io.mjs +13 -1
- package/driver/coverage-form.mjs +42 -4
- package/driver/coverage-ledger.mjs +3 -5
- package/driver/cross-check-wait.mjs +43 -0
- package/driver/declination-call.mjs +34 -10
- package/driver/declination-tool.mjs +27 -15
- package/driver/deferral-row.mjs +139 -0
- package/driver/degraded-parts.mjs +377 -0
- package/driver/deliver-trigger.sh +1 -1
- package/driver/demo-container.mjs +4 -1
- package/driver/dev-portal.mjs +5 -5
- package/driver/dispatch-record.mjs +2 -2
- package/driver/driver.config.mjs +193 -96
- package/driver/e2e/README.md +1 -1
- package/driver/effective-scope.mjs +58 -2
- package/driver/engine/anthropic-agent.mjs +103 -27
- package/driver/engine/auth.mjs +2 -2
- package/driver/engine/child-record.mjs +11 -0
- package/driver/engine/cli-version.mjs +4 -3
- package/driver/engine/common.mjs +17 -2
- package/driver/engine/deny-authority-write.mjs +3 -1
- package/driver/engine/engine-env.mjs +174 -0
- package/driver/engine/engine-spawn.mjs +179 -0
- package/driver/engine/mcp/band-server.mjs +1 -1
- package/driver/engine/mcp/clarivate-server.mjs +2 -1
- package/driver/engine/mcp/codex-config.mjs +112 -3
- package/driver/engine/mcp/corsearch-server.mjs +1 -0
- package/driver/engine/mcp/declination-server.mjs +9 -8
- package/driver/engine/mcp/dispositions-server.mjs +2 -1
- package/driver/engine/mcp/euipo-server.mjs +1 -0
- package/driver/engine/mcp/fetch-server.mjs +14 -11
- package/driver/engine/mcp/free-tier-server.mjs +1 -1
- package/driver/engine/mcp/gather-config.mjs +23 -11
- package/driver/engine/mcp/perplexity-server.mjs +97 -17
- package/driver/engine/mcp/probe-server.mjs +43 -21
- package/driver/engine/mcp/public-fetch.mjs +195 -0
- package/driver/engine/mcp/recording-server.mjs +79 -14
- package/driver/engine/mcp/signa-server.mjs +1 -0
- package/driver/engine/mcp/supplemental.mjs +14 -14
- package/driver/engine/mcp/unit-note-server.mjs +50 -1
- package/driver/engine/mcp/uspto-local-server.mjs +1 -0
- package/driver/engine/openai-agent.mjs +109 -28
- package/driver/engine/probe.mjs +152 -19
- package/driver/enqueue-schema.mjs +5 -5
- package/driver/feedback-issues.mjs +1 -1
- package/driver/feedback-store.mjs +1 -1
- package/driver/findings-model.mjs +67 -16
- package/driver/flag-snapshot.mjs +1 -1
- package/driver/floor-duty.mjs +23 -7
- package/driver/form-neighbourhood.mjs +52 -17
- package/driver/frame-diff-model.mjs +3 -3
- package/driver/framework-method.mjs +304 -0
- package/driver/gateway.mjs +49 -21
- package/driver/hand-off-exits.mjs +129 -0
- package/driver/jx-lanes.mjs +1 -1
- package/driver/jx.mjs +8 -5
- package/driver/knockout-assess-record.mjs +7 -1
- package/driver/knockout-frame-record.mjs +96 -34
- package/driver/knockout-review-record.mjs +7 -2
- package/driver/log.mjs +2 -2
- package/driver/matter-frame-record.mjs +31 -2
- package/driver/methodology-witness.mjs +6 -3
- package/driver/named-band.mjs +1 -1
- package/driver/owner-use-check.mjs +45 -10
- package/driver/package.json +1 -1
- package/driver/partial-payload-baseline.json +4 -0
- package/driver/phase0.mjs +2 -2
- package/driver/pipeline-knockout.mjs +256 -129
- package/driver/pipeline.mjs +417 -614
- package/driver/placement-carry.mjs +22 -3
- package/driver/placement-form-io.mjs +18 -4
- package/driver/placement-form.mjs +53 -4
- package/driver/placement-union.mjs +32 -5
- package/driver/portal-report.mjs +3 -3
- package/driver/portal-service.mjs +6 -5
- package/driver/portal-static.mjs +11 -18
- package/driver/predelivery-lint.mjs +10 -10
- package/driver/profile-page.html +5 -5
- package/driver/profiles.mjs +5 -5
- package/driver/progress.mjs +6 -4
- package/driver/provider-usage.mjs +25 -2
- package/driver/publish/index.mjs +97 -25
- package/driver/publish/knockout.mjs +136 -14
- package/driver/publish/profiles-page.mjs +2 -0
- package/driver/publish/publish-inputs.mjs +10 -4
- package/driver/publish/render-knockout.mjs +48 -21
- package/driver/publish/render.mjs +13 -8
- package/driver/publish/report-data.mjs +2 -0
- package/driver/publish/search-depth.mjs +77 -4
- package/driver/publish/templates/report.css +1 -1
- package/driver/publish/xlsx.mjs +34 -15
- package/driver/reasoning-tripwires.mjs +2 -160
- package/driver/recall-receipt.mjs +27 -0
- package/driver/recall-reconciliation.mjs +1 -1
- package/driver/record-carry.mjs +14 -14
- package/driver/recording-agreement.mjs +2 -2
- package/driver/reference-score.mjs +169 -47
- package/driver/register-count.mjs +61 -4
- package/driver/register-digest-record.mjs +14 -1
- package/driver/register-plan.mjs +161 -80
- package/driver/register-records.mjs +37 -4
- package/driver/registration-scripts.mjs +22 -0
- package/driver/registry-fidelity.mjs +4 -4
- package/driver/repair-composers.mjs +23 -7
- package/driver/repair-contract.mjs +1 -1
- package/driver/repairs.mjs +5 -2
- package/driver/reviewer-open-points.mjs +33 -0
- package/driver/rule-shape.mjs +8 -8
- package/driver/run-economics.mjs +3 -3
- package/driver/run-integrity.mjs +2 -2
- package/driver/runner.mjs +17 -5
- package/driver/scope-facts.mjs +89 -12
- package/driver/score-redaction.mjs +247 -0
- package/driver/screen-gate.mjs +1 -1
- package/driver/search-policy.mjs +17 -0
- package/driver/skills/README.md +2 -2
- package/driver/skills/blind-frame/SKILL.md +2 -2
- package/driver/skills/clearance-common-law/SKILL.md +29 -36
- package/driver/skills/clearance-common-law/perplexity-prompts.md +8 -30
- package/driver/skills/clearance-register/SKILL.md +15 -16
- package/driver/skills/clearance-register/digest.md +15 -31
- package/driver/skills/clearance-register/register-recipes.md +14 -56
- package/driver/skills/clearance-register/unit.md +37 -48
- package/driver/skills/clearance-search/SKILL.md +6 -8
- package/driver/skills/clearance-search/delivery-contract.md +0 -7
- package/driver/skills/clearance-search/firm-wide-reasoning.md +5 -4
- package/driver/skills/clearance-search/phase2-execution.md +5 -6
- package/driver/skills/clearance-search/report-prose.md +5 -5
- package/driver/skills/clearance-search/risk-framework-triage.md +2 -2
- package/driver/skills/clearance-search/synthesis-rules.md +9 -9
- package/driver/skills/clearance-search/template-formatting.md +2 -2
- package/driver/skills/clearance-variants/SKILL.md +8 -8
- package/driver/skills/clearance-variants/transliteration-scripts.md +2 -2
- package/driver/skills/frame-diff/SKILL.md +2 -2
- package/driver/skills/knockout-assess/SKILL.md +40 -10
- package/driver/skills/knockout-frame/SKILL.md +42 -10
- package/driver/skills/matter-frame/SKILL.md +12 -5
- package/driver/skills/matter-frame/watchlist-reference.md +1 -1
- package/driver/skills/narrative-refutation/SKILL.md +5 -3
- package/driver/skills/placement-inquiry/SKILL.md +5 -1
- package/driver/stage-context.mjs +27 -6
- package/driver/stages-knockout.mjs +92 -79
- package/driver/stages.mjs +111 -68
- package/driver/stray-artifacts.mjs +9 -5
- package/driver/suite-census.json +696 -150
- package/driver/synthesis-record.mjs +26 -4
- package/driver/systemd/README.md +5 -6
- package/driver/systemd/clearotron-client-mcp.service +24 -0
- package/driver/systemd/clearotron-mcp-face.service +24 -0
- package/driver/systemd/clearotron-portal.service +24 -0
- package/driver/systemd/clearotron-worker.service +29 -0
- package/driver/tokens.mjs +10 -9
- package/driver/turnaround-bands.mjs +1 -1
- package/driver/unit-inventory.mjs +24 -43
- package/driver/variant-manifest-model.mjs +22 -3
- package/driver/verify-knockout.mjs +163 -4
- package/driver/verify.mjs +42 -16
- package/driver/web-grid.mjs +150 -0
- package/driver/whatif-memo-run.mjs +1 -1
- package/driver/withheld-families.mjs +113 -4
- package/driver/worker-heartbeat.mjs +13 -2
- package/mcp-server/CHANGELOG.md +8 -0
- package/mcp-server/README.md +1 -1
- package/mcp-server/lib/knockout.mjs +1 -1
- package/mcp-server/lib/ops.mjs +10 -10
- package/mcp-server/lib/scrub.mjs +1 -1
- package/mcp-server/lib/trace.mjs +3 -2
- package/mcp-server/package.json +1 -1
- package/mcp-server/server.mjs +3 -3
- package/package.json +1 -1
- package/portal-ui/dist/assets/{index-DVtz44vH.js → index-BPAUjcI0.js} +3 -2
- package/portal-ui/dist/assets/{index-5CCwiJG7.css → index-D2wrw9cH.css} +18 -2
- package/portal-ui/dist/assets/plus-jakarta-sans-BUCHxqJ-.woff2 +0 -0
- package/portal-ui/dist/index.html +2 -15
- package/portal-ui/package.json +1 -1
- package/providers/_shared/README.md +1 -1
- package/providers/_shared/answer-memory.mjs +199 -0
- package/providers/_shared/enumerate.mjs +155 -50
- package/providers/_shared/execute-plan.mjs +62 -16
- package/providers/_shared/ledger-path.mjs +1 -1
- package/providers/_shared/ledger.mjs +48 -6
- package/providers/_shared/plan-guards.mjs +7 -0
- package/providers/_shared/script-form.mjs +24 -5
- package/providers/_shared/term-shape.mjs +5 -5
- package/providers/clarivate/src/capabilities.js +11 -0
- package/providers/clarivate/src/core.js +193 -18
- package/providers/corsearch/README.md +1 -2
- package/providers/corsearch/src/core.js +2 -2
- package/providers/jx-subclass/lookup.mjs +1 -1
- package/providers/oauth-mcp-bridge/CHANGELOG.md +8 -0
- package/providers/oauth-mcp-bridge/README.md +8 -7
- package/providers/oauth-mcp-bridge/bridge.mjs +21 -5
- package/providers/oauth-mcp-bridge/package.json +1 -1
- package/providers/oauth-mcp-bridge/systemd/courtlistener-mcp.service +1 -1
- package/providers/oauth-mcp-bridge/warm-server.mjs +16 -5
- package/providers/perplexity/src/core.js +246 -21
- package/providers/signa/src/capabilities.js +24 -0
- package/providers/signa/src/core.js +93 -25
- package/scripts/README.md +2 -1
- package/scripts/added-reference-check.mjs +2 -1
- package/scripts/backup-recall-stores.mjs +5 -5
- package/scripts/demo-evidence.mjs +2 -1
- package/scripts/deprecate-below.mjs +114 -2
- package/scripts/drive-env-check.mjs +2 -1
- package/scripts/e2e-first-time.mjs +469 -0
- package/scripts/e2e-scenario-ops.mjs +441 -0
- package/scripts/e2e.mjs +104 -16
- package/scripts/env-audit.mjs +8 -0
- package/scripts/freeze-example-run.mjs +7 -7
- package/scripts/generated-files-are-current.mjs +2 -1
- package/scripts/hand-off-exits-probe.mjs +75 -0
- package/scripts/import-cycle-check.mjs +2 -1
- package/scripts/merge-shape-check.mjs +2 -1
- package/scripts/package-size-budget.mjs +2 -1
- package/scripts/record-carry-probe.mjs +1 -1
- package/scripts/release-entry-catch-up.mjs +77 -8
- package/scripts/release-install-check.mjs +4 -1
- package/scripts/release-note-required.mjs +139 -9
- package/scripts/release-rehearsal-version.mjs +60 -0
- package/scripts/release-sbom.mjs +104 -0
- package/scripts/release-visible-check.mjs +7 -5
- package/scripts/render-check.mjs +5 -2
- package/scripts/report-offline-render-check.mjs +169 -0
- package/scripts/score.mjs +79 -8
- package/scripts/strip-titles-and-attributions.mjs +2 -1
- package/scripts/strip-tracker-citations.mjs +2 -1
- package/scripts/test-full.mjs +2 -1
- package/scripts/test-run.mjs +10 -3
- package/scripts/third-party-notices.mjs +3 -1
- package/scripts/travelling-predicates.mjs +1 -1
- package/scripts/writing-standard-check.mjs +2 -1
- package/shared/brand-fonts.mjs +59 -0
- package/shared/brand.mjs +6 -6
- package/shared/browser-temp-root.mjs +3 -2
- package/shared/doctrine-overlay.mjs +1 -1
- package/shared/driver-dir.mjs +47 -11
- package/shared/fonts/OFL-fira-code.txt +93 -0
- package/shared/fonts/OFL-plus-jakarta-sans.txt +93 -0
- package/shared/fonts/README.md +37 -0
- package/shared/fonts/fira-code.woff2 +0 -0
- package/shared/fonts/plus-jakarta-sans.woff2 +0 -0
- package/shared/names-in-force.mjs +2 -0
- package/shared/npm-cli.mjs +23 -0
- package/shared/os-advice.mjs +14 -2
- package/shared/path-seps.mjs +42 -0
- package/shared/process-table.mjs +71 -3
- package/shared/reference-guard-classes.mjs +30 -6
- package/shared/root-doc-commands.mjs +6 -2
- package/shared/running-start.mjs +24 -7
- package/shared/scope.mjs +2 -2
- package/shared/wsl.mjs +1 -1
- package/driver/known-conflicts.mjs +0 -327
|
@@ -106,7 +106,7 @@ export const E3_BACKLOG = [
|
|
|
106
106
|
// Two `literal-json-skeleton` and two `exactly-these-keys`, all four stamped "NOTHING ON THE PLAN
|
|
107
107
|
// REMOVES THIS". The conversion removed them:
|
|
108
108
|
//
|
|
109
|
-
// stages.mjs:
|
|
109
|
+
// stages.mjs:926 the dispatch dictated variant-manifest.json key by key and enum by enum;
|
|
110
110
|
// `record_clearance_variants`'s schema IS that shape now, so the key-set and
|
|
111
111
|
// enum families are unreachable from a typed call rather than caught after
|
|
112
112
|
// the file is written.
|
|
@@ -151,7 +151,7 @@ export const E3_BACKLOG = [
|
|
|
151
151
|
kind: "literal-json-skeleton",
|
|
152
152
|
where: "driver/skills/blind-frame/SKILL.md:62-83",
|
|
153
153
|
surface: "skill-file",
|
|
154
|
-
evidence: "A JSON OBJECT with EXACTLY these keys:\\n```json\\n{\\n \"schema_version\": 1,\\n \"dominant_element\": \"the spine, verbatim\",\\n \"variants\": [{\"value\": \"
|
|
154
|
+
evidence: "A JSON OBJECT with EXACTLY these keys:\\n```json\\n{\\n \"schema_version\": 1,\\n \"dominant_element\": \"the spine, verbatim\",\\n \"variants\": [{\"value\": \"KORPHI\", \"direction\": \"drop\", \"rationale\": \"…\"}],\\n \"fields\": […],\\n \"sources\": […],\\n \"ranking_basis\": \"goods-overlap\"\\n}\\n``` … `direction` is EXACTLY on",
|
|
155
155
|
reparsedBy: "driver/verify.mjs validators.blindFrame — emits invalid_file:…:blindframe_* on an off-enum or missing key (stages.mjs:952-957 doc block)",
|
|
156
156
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
157
157
|
},
|
|
@@ -171,7 +171,7 @@ export const E3_BACKLOG = [
|
|
|
171
171
|
{
|
|
172
172
|
stage: "common-law",
|
|
173
173
|
kind: "dictated-line-shape",
|
|
174
|
-
where: "driver/stages.mjs:
|
|
174
|
+
where: "driver/stages.mjs:1085 (emitted at 1032, 1061, 1147, 1276)",
|
|
175
175
|
surface: "stage-message",
|
|
176
176
|
evidence: "CROSS-CHECK HAND-OFF: … record it on its OWN line in EXACTLY the form \"CROSS-CHECK REQUIRED: <what> — <why>\" (that exact prefix; an em-dash between what and why; name the mark in CAPS in <what>). The driver parses ONLY this exact line shape…",
|
|
177
177
|
reparsedBy: "driver/doubt-ledger.mjs:183 CROSS_CHECK_RE = /^(?:[-*]\\s+)?CROSS-CHECK REQUIRED:\\s*(.+?)\\s+—\\s+(.+?)\\s*$/ → mintCrossCheckDoubts",
|
|
@@ -183,9 +183,9 @@ export const E3_BACKLOG = [
|
|
|
183
183
|
// CONSOLIDATED 2026-08-16 from THREE rows (common-law stages.mjs:1031, common-law-half :1112 and
|
|
184
184
|
// :1146). Those three existed because the dictation was AUTHORED at three sites in stages.mjs. M1 made
|
|
185
185
|
// it one: authored once in renderConnotationObligations, and reaching the seat through the perplexity
|
|
186
|
-
// MCP server (driver/engine/mcp/perplexity-server.mjs
|
|
186
|
+
// MCP server (`tellObligations` in driver/engine/mcp/perplexity-server.mjs) rather than a stage message. Three rows
|
|
187
187
|
// pointing at one block would fabricate two authored sites the surface does not have.
|
|
188
|
-
where: "driver/connotation-search.mjs:
|
|
188
|
+
where: "driver/connotation-search.mjs:1403-1416, renderConnotationObligations() in connotation-search.mjs (delivered to the seat via `tellObligations` in driver/engine/mcp/perplexity-server.mjs — a TOOL RESPONSE, no longer a stage message)",
|
|
189
189
|
surface: "tool-response",
|
|
190
190
|
// ── (a) THE ORIGINAL SUBJECT WAS DELETED BY DESIGN — DISCHARGED, NOT FAILED ────────────────────
|
|
191
191
|
// The old rows dictated `receipt_id` (an 8-char token the seat copied) and `quote`. Both are gone:
|
|
@@ -256,7 +256,7 @@ export const E3_BACKLOG = [
|
|
|
256
256
|
{
|
|
257
257
|
stage: "register-unit",
|
|
258
258
|
kind: "literal-json-skeleton",
|
|
259
|
-
where: "driver/stages.mjs:
|
|
259
|
+
where: "driver/stages.mjs:2286 (the non-supplemental-lane branch)",
|
|
260
260
|
surface: "stage-message",
|
|
261
261
|
evidence: "BAND ARTIFACT (MANDATORY): ALSO write the COMPLETE NAMED BAND for this axis to <path> — a JSON ARRAY, one block per register_enumerate / count-probe call, in the named-band contract: {\"state\":\"enumerated\",\"query\":\"<what was searched>\",\"total_hits\":N,\"records\":[{record_id, mark_text, classes, status,",
|
|
262
262
|
reparsedBy: "driver/named-band.mjs parseNamedBand / bandRecords / bandCrowds / mergeNamedBands (named in driver/skills/clearance-register/unit.md:60-62); validators.registerUnit",
|
|
@@ -265,7 +265,7 @@ export const E3_BACKLOG = [
|
|
|
265
265
|
{
|
|
266
266
|
stage: "register-unit",
|
|
267
267
|
kind: "exactly-these-keys",
|
|
268
|
-
where: "driver/stages.mjs:
|
|
268
|
+
where: "driver/stages.mjs:2249",
|
|
269
269
|
surface: "stage-message",
|
|
270
270
|
evidence: "Every block you append MUST carry \"state\":\"enumerated\" (ONLY if you paged it to has_more:false) or \"state\":\"incomplete\" — EXACTLY those two strings; there is no \"verified\"/\"checked\"/\"complete\"/\"clean\" state, and any other value fails the stage.",
|
|
271
271
|
reparsedBy: "driver/named-band.mjs parseNamedBand (off-enum state fails validators.registerUnit)",
|
|
@@ -274,7 +274,7 @@ export const E3_BACKLOG = [
|
|
|
274
274
|
{
|
|
275
275
|
stage: "register-unit",
|
|
276
276
|
kind: "literal-json-skeleton",
|
|
277
|
-
where: "driver/skills/clearance-register/unit.md:
|
|
277
|
+
where: "driver/skills/clearance-register/unit.md:120-134",
|
|
278
278
|
surface: "skill-file",
|
|
279
279
|
evidence: "Two block shapes (no third):\\n```json\\n[\\n { \"state\":\"enumerated\", \"query\":\"…\", \"total_hits\": 12, \"records\": [ { \"record_id\":\"/mark/eu/018…\", \"mark_text\":\"…\", … } ] },\\n { \"state\":\"incomplete\", \"query\":\"…\", \"total_hits\": 2416, \"fetched\": 1, \"sample\":[ … ], \"reason\":\"…\" }\\n]\\n```",
|
|
280
280
|
reparsedBy: "driver/named-band.mjs parseNamedBand — named in the skill file itself at unit.md:60-62",
|
|
@@ -283,7 +283,7 @@ export const E3_BACKLOG = [
|
|
|
283
283
|
{
|
|
284
284
|
stage: "register-unit",
|
|
285
285
|
kind: "exactly-these-keys",
|
|
286
|
-
where: "driver/stages.mjs:
|
|
286
|
+
where: "driver/stages.mjs:4241 (the frame-reopen / scoped-retry message builder). A second number stood here and had been stale for some time: it pointed at a contract-element description rather than a builder, at its old line and at every mechanical shift of it. Two candidate builders sit beside 4157 and picking one would be a guess, so the wrong pointer is removed rather than moved a third time — one accurate citation beats one accurate and one invented.",
|
|
287
287
|
surface: "stage-message",
|
|
288
288
|
evidence: "Every block you append MUST carry \"state\":\"enumerated\" (ONLY if paged to has_more:false) or \"state\":\"incomplete\" — EXACTLY those two strings … (re-dispatch builders, which REPLACE def.message)",
|
|
289
289
|
reparsedBy: "driver/named-band.mjs parseNamedBand. Scope warning: these builders replace def.message on every escalation / envelope-close / frame-reopen dispatch, so an E3 lint that walks STAGES[*].message only never sees them",
|
|
@@ -292,7 +292,7 @@ export const E3_BACKLOG = [
|
|
|
292
292
|
{
|
|
293
293
|
stage: "placement-inquiry",
|
|
294
294
|
kind: "literal-json-skeleton",
|
|
295
|
-
where: "driver/stages.mjs:
|
|
295
|
+
where: "driver/stages.mjs:2351-2353",
|
|
296
296
|
surface: "stage-message",
|
|
297
297
|
evidence: "PLACEMENT FORM (MANDATORY): record every placement in <path> — {\"rows\":[…]} … · A REGISTER candidate: {\"select\":\"<one record URI it holds>\",\"tier\":\"…\",\"reason\":\"…\"} (+ optional \"borderline\":true) … · A COMMON-LAW candidate …: {\"kind\":\"seat\",\"mark\",\"owner\",\"jurisdiction\",\"records\":[],\"tier\",\"reason\"}",
|
|
298
298
|
reparsedBy: "driver/placement-form.mjs (SELECT_ROW_FIELDS at placement-form.mjs:93, the seat-row contract at 97-105, formRowKey/rowIsSettled/renderEntry at 117-141) via validators.placement. The same field list is ALSO carried in the driver-written form's own seat_row_contract, so the shape exists twice",
|
|
@@ -301,7 +301,7 @@ export const E3_BACKLOG = [
|
|
|
301
301
|
{
|
|
302
302
|
stage: "placement-inquiry",
|
|
303
303
|
kind: "exactly-these-keys",
|
|
304
|
-
where: "driver/stages.mjs:
|
|
304
|
+
where: "driver/stages.mjs:2447",
|
|
305
305
|
surface: "stage-message",
|
|
306
306
|
evidence: "· tier EXACTLY one of headline-candidate / sheet-2 / watchlist-annex / out-of-scope-filtered.",
|
|
307
307
|
reparsedBy: "driver/placement-form.mjs / driver/placement-model.mjs via validators.placement",
|
|
@@ -313,7 +313,7 @@ export const E3_BACKLOG = [
|
|
|
313
313
|
where: "driver/skills/placement-inquiry/SKILL.md:58-66",
|
|
314
314
|
surface: "skill-file",
|
|
315
315
|
evidence: "**2. The structured mirror** `…/placements.json` … `{\"schema_version\":1,\"placements\":[...]}`, ONE object per placed candidate, keys EXACTLY `{\"mark\",\"owner\",\"jurisdiction\",\"records\",\"tier\",\"reason\"}` plus the optional `\"borderline\"` … `tier` — EXACTLY one of `headline-candidate` / `sheet-2` / `watch",
|
|
316
|
-
reparsedBy: "driver/placement-model.mjs. AND IT IS STALE: #562 made placements.json driver-rendered, and stages.mjs:
|
|
316
|
+
reparsedBy: "driver/placement-model.mjs. AND IT IS STALE: #562 made placements.json driver-rendered, and stages.mjs:2409 says \"DO NOT WRITE placements.json (the driver renders it from this form)\" — the skill file the stage is ordered to \"read and follow exactly\" dictates the key set of a file the message forbids it to write. Two contracts in one dispatch",
|
|
317
317
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
318
318
|
},
|
|
319
319
|
{
|
|
@@ -322,13 +322,13 @@ export const E3_BACKLOG = [
|
|
|
322
322
|
where: "driver/skills/placement-inquiry/SKILL.md:42",
|
|
323
323
|
surface: "skill-file",
|
|
324
324
|
evidence: "Use these section headings, in this order: **Band reconciliation** …, the four placement tiers (**Headline candidates**, **Sheet 2 / register watch**, **Watchlist annex**, **Out-of-scope / filtered**), **Disagreements / flags surfaced to downstream**, **Coverage rulings & open questions** …, and **O",
|
|
325
|
-
reparsedBy: "driver/pipeline.mjs — the PLACEMENT RULINGS TAIL block handed to register-digest is lifted from these named sections (stages.mjs:
|
|
325
|
+
reparsedBy: "driver/pipeline.mjs — the PLACEMENT RULINGS TAIL block handed to register-digest is lifted from these named sections (stages.mjs:2561 references it); driver/skills/clearance-register/digest.md:342-352 re-parses the Disagreements section into its own table",
|
|
326
326
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
327
327
|
},
|
|
328
328
|
// RETIRED 2026-08-16 — register-digest's no-form arm. M6 DELETED THE DICTATION ON 2026-08-14 AND THIS
|
|
329
329
|
// ROW OUTLIVED IT BY TWO DAYS. Verified at source rather than from the epitaph: the arm is absent from
|
|
330
330
|
// the composed message, `git grep "NO coverage form"` on origin/main returns exactly ONE hit and it is
|
|
331
|
-
// the COMMENT recording the deletion (stages.mjs:
|
|
331
|
+
// the COMMENT recording the deletion (stages.mjs:2195), and skill-contract-enumerations.test.mjs
|
|
332
332
|
// composes the dispatch under both stamp states and asserts the two texts are equal.
|
|
333
333
|
//
|
|
334
334
|
// The surviving prose arms in verify.mjs are NOT dead code and must not be tidied away with it: they
|
|
@@ -346,7 +346,7 @@ export const E3_BACKLOG = [
|
|
|
346
346
|
// (coverage-form.mjs coverageFormBrief) and the tool schema, with every row receiver-validated at
|
|
347
347
|
// call time. Same dictated vocabulary, same authored site, new route — this row's evidence follows
|
|
348
348
|
// the dictation so the row keeps describing something that exists.
|
|
349
|
-
where: "driver/stages.mjs:
|
|
349
|
+
where: "driver/stages.mjs:2656 (the digest message) + driver/coverage-form.mjs (coverageFormBrief — the dispatch block carrying the enum and the row shape)",
|
|
350
350
|
surface: "stage-message",
|
|
351
351
|
evidence: "Record a \"status\" and a \"reason\" on EVERY row ONLY by calling the … 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",
|
|
352
352
|
reparsedBy: "driver/coverage-call.mjs validateCoverageCall (receiver-validated at call time, the same predicates the gate judges with) + driver/coverage-form.mjs rowIsSettled via validators.registerFindings over the _driver/ accumulator",
|
|
@@ -408,7 +408,7 @@ export const E3_BACKLOG = [
|
|
|
408
408
|
{
|
|
409
409
|
stage: "register-digest",
|
|
410
410
|
kind: "exactly-these-keys",
|
|
411
|
-
where: "driver/skills/clearance-register/SKILL.md:
|
|
411
|
+
where: "driver/skills/clearance-register/SKILL.md:235-236",
|
|
412
412
|
surface: "skill-file",
|
|
413
413
|
evidence: "**The status vocabulary is CLOSED: EXACTLY one bare token of: `confirmed-clean` / `coverage-limited` / `deferred` / `withheld-by-judgment`.** Qualifiers never go in a status cell; they go in the reason.",
|
|
414
414
|
reparsedBy: "driver/coverage-form.mjs / driver/coverage-ledger.mjs. Since the typed-transport conversion the STAGE MESSAGE no longer restates the enum; the surviving copies are SKILL.md (here), digest.md:207, the dispatch brief (coverage-form.mjs coverageFormBrief), the record_coverage schema (coverage-server.mjs) and gateway.mjs's repair hints — still one enum spelled at five sites",
|
|
@@ -429,7 +429,7 @@ export const E3_BACKLOG = [
|
|
|
429
429
|
{
|
|
430
430
|
stage: "frame-diff",
|
|
431
431
|
kind: "exactly-these-keys",
|
|
432
|
-
where: "driver/stages.mjs:
|
|
432
|
+
where: "driver/stages.mjs:2836",
|
|
433
433
|
surface: "stage-message",
|
|
434
434
|
evidence: "For each blind-model variant / field / source the run did NOT scope or search, emit one directive {layer, item, observation, severity} … severity = dominant-element (the omission is ON the spine) | material (a real omission worth a targeted sweep) | minor (already covered, or presentation only).",
|
|
435
435
|
reparsedBy: "driver/verify.mjs validators.frameDiff + driver/pipeline.mjs runSupplementalSweeps (the parser REFUSES a firing variant directive that dictates nothing dispatchable)",
|
|
@@ -446,17 +446,17 @@ export const E3_BACKLOG = [
|
|
|
446
446
|
kind: "literal-json-skeleton",
|
|
447
447
|
where: "driver/skills/frame-diff/SKILL.md:44-48",
|
|
448
448
|
surface: "skill-file",
|
|
449
|
-
evidence: "A directive may carry a structured `remedy`:\\n```json\\n\"remedy\": { \"terms\": [\"TROPICAL
|
|
450
|
-
reparsedBy: "driver/pipeline.mjs runSupplementalSweeps — the remedy lint refuses a label-shaped term; stages.mjs:
|
|
449
|
+
evidence: "A directive may carry a structured `remedy`:\\n```json\\n\"remedy\": { \"terms\": [\"TROPICAL WAVO\", \"ISLAND WAVO\"], \"nice_classes\": [\"5\", \"32\"], \"regions\": [] }\\n```",
|
|
450
|
+
reparsedBy: "driver/pipeline.mjs runSupplementalSweeps — the remedy lint refuses a label-shaped term; stages.mjs:2827 restates the same shape in the message (\"THE ASK CONTRACT, stated at BOTH levels\")",
|
|
451
451
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
452
452
|
},
|
|
453
453
|
{
|
|
454
454
|
stage: "synthesis",
|
|
455
455
|
kind: "literal-json-skeleton",
|
|
456
|
-
where: "driver/stages.mjs:
|
|
456
|
+
where: "driver/stages.mjs:3218",
|
|
457
457
|
surface: "stage-message",
|
|
458
458
|
evidence: "MACHINE FINDINGS (MANDATORY): … a JSON OBJECT {\"schema_version\":<FINDINGS_SCHEMA_VERSION>,\"rated_under_framework\":\"…\",\"findings\":[...],\"coverage\":[...],\"context_notes\":[...],\"actions\":[...],\"ask_answers\":[...]} … Each finding object has EXACTLY these keys: {\"ordinal\",\"mark\",\"owner\",\"band\",\"net\",\"bor",
|
|
459
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
459
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson via validators.narrative",
|
|
460
460
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
461
461
|
},
|
|
462
462
|
// RETIRED 2026-08-16 — synthesis's dictated disposition list, and I am the one who left it standing.
|
|
@@ -467,7 +467,7 @@ export const E3_BACKLOG = [
|
|
|
467
467
|
{
|
|
468
468
|
stage: "synthesis",
|
|
469
469
|
kind: "exactly-these-keys",
|
|
470
|
-
where: "driver/stages.mjs:
|
|
470
|
+
where: "driver/stages.mjs:3254",
|
|
471
471
|
surface: "stage-message",
|
|
472
472
|
evidence: "- off_field_ground (MANDATORY on every off-field finding, FORBIDDEN on every other disposition): EXACTLY one bare token of: ${OFF_FIELD_GROUNDS.join(\" / \")}",
|
|
473
473
|
reparsedBy: "driver/findings-model.mjs validateOffFieldGround — the enum is imported from findings-model.mjs and interpolated back into the prompt, so code already holds the list it asks the model to type",
|
|
@@ -476,52 +476,52 @@ export const E3_BACKLOG = [
|
|
|
476
476
|
{
|
|
477
477
|
stage: "synthesis",
|
|
478
478
|
kind: "literal-json-skeleton",
|
|
479
|
-
where: "driver/stages.mjs:
|
|
479
|
+
where: "driver/stages.mjs:3255",
|
|
480
480
|
surface: "stage-message",
|
|
481
481
|
evidence: "- manageable …: {\"category\":\"<EXACTLY one of large-competitor / commercial-partner / troll / well-known-enforcer>\",\"reason\":\"<one-two lines…>\"}",
|
|
482
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
482
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson",
|
|
483
483
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
484
484
|
},
|
|
485
485
|
{
|
|
486
486
|
stage: "synthesis",
|
|
487
487
|
kind: "literal-json-skeleton",
|
|
488
|
-
where: "driver/stages.mjs:
|
|
488
|
+
where: "driver/stages.mjs:3271",
|
|
489
489
|
surface: "stage-message",
|
|
490
490
|
evidence: "- meters: {\"mark_similarity\":{...},\"goods_proximity\":{...},\"use\":{...},\"enforcer\":{...}} — all four present, each {\"token\",\"basis\",\"source\"}. … mark_similarity = high | medium | low. goods_proximity = high | medium | low. enforcer = high | medium | low | unknown. use = confirmed | not-confirmed | un",
|
|
491
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
491
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson; driver/verify.mjs:1171 checkFindingsSibling gates meters.*.source; finding_basis_source_missing",
|
|
492
492
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
493
493
|
},
|
|
494
494
|
{
|
|
495
495
|
stage: "synthesis",
|
|
496
496
|
kind: "literal-json-skeleton",
|
|
497
|
-
where: "driver/stages.mjs:
|
|
497
|
+
where: "driver/stages.mjs:3272",
|
|
498
498
|
surface: "stage-message",
|
|
499
499
|
evidence: "- quadrant: {\"x\",\"y\"} numbers in [0,1]. x = goods/services proximity (0 = distant, 1 = identical). y = mark similarity (0 = distinct, 1 = identical).",
|
|
500
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
500
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson",
|
|
501
501
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
502
502
|
},
|
|
503
503
|
{
|
|
504
504
|
stage: "synthesis",
|
|
505
505
|
kind: "literal-json-skeleton",
|
|
506
|
-
where: "driver/stages.mjs:
|
|
506
|
+
where: "driver/stages.mjs:3273",
|
|
507
507
|
surface: "stage-message",
|
|
508
508
|
evidence: "- source: {\"source_type\",\"resolved_link\"}. source_type EXACTLY one of: register-vendor / register-euipo / common-law-marketplace / common-law-web / case-law",
|
|
509
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
509
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson",
|
|
510
510
|
removedByMove: "M1 removes the opaque `resolved_link` URI (ordinal / record-handle selection); the object shape and the source_type enum survive",
|
|
511
511
|
},
|
|
512
512
|
{
|
|
513
513
|
stage: "synthesis",
|
|
514
514
|
kind: "exactly-these-keys",
|
|
515
|
-
where: "driver/stages.mjs:
|
|
515
|
+
where: "driver/stages.mjs:3274",
|
|
516
516
|
surface: "stage-message",
|
|
517
517
|
evidence: "coverage[]: ONE object per coverage AREA, EXACTLY {\"area\",\"state\",\"note\"}. … state EXACTLY one of: confirmed-clean / coverage-limited / open / not-searched / note.",
|
|
518
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
518
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson; the render owns the coverage panel from these typed states",
|
|
519
519
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
520
520
|
},
|
|
521
521
|
{
|
|
522
522
|
stage: "synthesis",
|
|
523
523
|
kind: "literal-json-skeleton",
|
|
524
|
-
where: "driver/stages.mjs:
|
|
524
|
+
where: "driver/stages.mjs:3283",
|
|
525
525
|
surface: "stage-message",
|
|
526
526
|
evidence: "use_check = {\"source\",\"quality\"}: … quality: OPTIONAL, EXACTLY one of owner-site / independent / register-mirror … own_rights = {\"source\"}",
|
|
527
527
|
reparsedBy: "driver/verify.mjs:988 checkFindingsSibling (finding_use_check_missing); driver/own-rights.mjs:19-22",
|
|
@@ -530,43 +530,43 @@ export const E3_BACKLOG = [
|
|
|
530
530
|
{
|
|
531
531
|
stage: "synthesis",
|
|
532
532
|
kind: "literal-json-skeleton",
|
|
533
|
-
where: "driver/stages.mjs:
|
|
533
|
+
where: "driver/stages.mjs:3340",
|
|
534
534
|
surface: "stage-message",
|
|
535
535
|
evidence: "MARK ASSESSMENT … STRUCTURED FORM …: either field may instead be an OBJECT {\"read\":\"…\",\"spectrum\":\"…\",\"per_class\":[{\"class\":\"5\",\"note\":\"…\"}],\"per_market\":[{\"market\":\"CN\",\"note\":\"…\"}],\"counter_registrations\":[{\"mark\":\"…\",\"uri\":\"/mark/…\",\"note\":\"…\"}],\"acquired\":\"<optional>\",\"note\":\"<optional residual>",
|
|
536
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
536
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson; the report collapses the rows behind toggles and the audit workbook renders them",
|
|
537
537
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
538
538
|
},
|
|
539
539
|
{
|
|
540
540
|
stage: "synthesis",
|
|
541
541
|
kind: "literal-json-skeleton",
|
|
542
|
-
where: "driver/stages.mjs:
|
|
542
|
+
where: "driver/stages.mjs:3346",
|
|
543
543
|
surface: "stage-message",
|
|
544
544
|
evidence: "FOUR ANSWERS …: \"four_answers\": {\"third_party_rights\":{...},\"objection_likelihood\":{...},\"registrability\":{...},\"client_enforceability\":{...}} … Each answer … is {\"read\":\"…\",\"token\":\"…\",\"basis\":\"…\",\"ordinals\":[…]}. Tokens (closed enums …): third_party_rights = strong|moderate|weak; objection_likelih",
|
|
545
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
545
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson",
|
|
546
546
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
547
547
|
},
|
|
548
548
|
{
|
|
549
549
|
stage: "synthesis",
|
|
550
550
|
kind: "literal-json-skeleton",
|
|
551
|
-
where: "driver/stages.mjs:
|
|
551
|
+
where: "driver/stages.mjs:3223",
|
|
552
552
|
surface: "stage-message",
|
|
553
553
|
evidence: "ACTIONS REGISTER …: emit \"actions\": [...] — ONE object per forward step …, each EXACTLY {\"id\",\"kind\",\"text\",\"ordinals\"} plus an OPTIONAL \"deadline\" and an OPTIONAL \"condition\". … kind: EXACTLY one of — consent / coexistence-agreement / territorial-delimitation / goods-amendment / mark-modification /",
|
|
554
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
554
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson; pipeline applyCoverageFloor legalActions arm derives the delivered disposition from the closed kind enum",
|
|
555
555
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
556
556
|
},
|
|
557
557
|
{
|
|
558
558
|
stage: "synthesis",
|
|
559
559
|
kind: "exactly-these-keys",
|
|
560
|
-
where: "driver/stages.mjs:
|
|
560
|
+
where: "driver/stages.mjs:3353",
|
|
561
561
|
surface: "stage-message",
|
|
562
562
|
evidence: "COVERAGE JUDGMENT …: emit \"coverage_judgment\": {\"sufficient\":<bool>, \"reason\":\"<one line…>\"} — EXACTLY those two keys. Do NOT emit \"rows\": the driver writes that register itself … anything you type there is replaced wholesale.",
|
|
563
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
563
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson. The \"Do NOT emit rows\" clause is the purest E3 case in the tree — the prompt names a field, dictates its shape and states in the same breath that code overwrites it",
|
|
564
564
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
565
565
|
},
|
|
566
566
|
{
|
|
567
567
|
stage: "synthesis",
|
|
568
568
|
kind: "literal-json-skeleton",
|
|
569
|
-
where: "driver/stages.mjs:
|
|
569
|
+
where: "driver/stages.mjs:3196",
|
|
570
570
|
surface: "stage-message",
|
|
571
571
|
// RE-QUOTED, NOT PARKED. The writer's conversion reworded this dictation — the
|
|
572
572
|
// ask answers ride the findings RECORD now and the driver renders the labelled line into both the
|
|
@@ -575,7 +575,7 @@ export const E3_BACKLOG = [
|
|
|
575
575
|
// in E3_EVIDENCE_UNRESOLVED instead would have grown the not-checked slice for a row that is
|
|
576
576
|
// perfectly checkable, which is the avoidable coverage loss conversion 9's note names one row up.
|
|
577
577
|
evidence: "SEND ONE \"ask_answers\" ENTRY PER ASK, as a TOP-LEVEL field of the findings record you hand to the call (never as a narrative section — the driver renders the labelled line",
|
|
578
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
578
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson (finding_ask_answer_answer_missing); assembleReportMd · buildAskAnswersSection joins on the retyped ask string",
|
|
579
579
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
580
580
|
},
|
|
581
581
|
// DELETED at conversion 10, recorded rather than absorbed — E3's own rule for a
|
|
@@ -590,7 +590,7 @@ export const E3_BACKLOG = [
|
|
|
590
590
|
{
|
|
591
591
|
stage: "synthesis",
|
|
592
592
|
kind: "dictated-line-shape",
|
|
593
|
-
where: "driver/stages.mjs:
|
|
593
|
+
where: "driver/stages.mjs:3115 (restated at driver/skills/clearance-search/synthesis-rules.md:428)",
|
|
594
594
|
surface: "stage-message",
|
|
595
595
|
evidence: "END that finding's actual-use line with a literal \"- **Use-check source:** <result URL | \"perplexity_research — no result\">\" line",
|
|
596
596
|
reparsedBy: "driver/verify.mjs validators.narrative (spec-11 hard reject); the repair hint re-dictates the literal at driver/gateway.mjs:2153",
|
|
@@ -599,46 +599,46 @@ export const E3_BACKLOG = [
|
|
|
599
599
|
{
|
|
600
600
|
stage: "synthesis",
|
|
601
601
|
kind: "dictated-line-shape",
|
|
602
|
-
where: "driver/stages.mjs:
|
|
602
|
+
where: "driver/stages.mjs:3128 (restated at driver/skills/clearance-search/synthesis-rules.md:475)",
|
|
603
603
|
surface: "stage-message",
|
|
604
604
|
evidence: "END that finding's reasoning with a literal \"- **Own-rights source:** <record URI(s) | \"no applicant-owned registrations in the searched register material\">\" line",
|
|
605
|
-
reparsedBy: "driver/own-rights.mjs:19-22 — \"This module only requires the 'Own-rights source:' line to exist\"; repair hint at driver/gateway.mjs:
|
|
605
|
+
reparsedBy: "driver/own-rights.mjs:19-22 — \"This module only requires the 'Own-rights source:' line to exist\"; repair hint at driver/gateway.mjs:2370 (the `own_rights_missing` branch; re-verified 2026-08-29 — the old :1736 predated this branch and pointed into the A4 repeat-signature block)",
|
|
606
606
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
607
607
|
},
|
|
608
608
|
{
|
|
609
609
|
stage: "synthesis",
|
|
610
610
|
kind: "exactly-these-keys",
|
|
611
|
-
where: "driver/stages.mjs:
|
|
611
|
+
where: "driver/stages.mjs:3332",
|
|
612
612
|
surface: "stage-message",
|
|
613
613
|
evidence: "add it to the top-level \"context_notes\" array — each object EXACTLY {\"type\":\"famous-neighbour-ungrounded\",\"mark\",\"owner\",\"context\"}",
|
|
614
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
614
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson",
|
|
615
615
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
616
616
|
},
|
|
617
617
|
{
|
|
618
618
|
stage: "synthesis",
|
|
619
619
|
kind: "literal-json-skeleton",
|
|
620
|
-
where: "driver/stages.mjs:
|
|
620
|
+
where: "driver/stages.mjs:3220",
|
|
621
621
|
surface: "stage-message",
|
|
622
622
|
evidence: "- owner: {\"name\",\"country\",\"registrations\":[...]}. … Each registration: {\"uri\", optionally \"classes\":[\"9\",\"41\"],\"status\",\"filed\",\"expiry\",\"jurisdiction\"}. The \"uri\" is the ONLY field that matters: the driver BINDS classes/status/filed/expiry/jurisdiction AND the owner name from the FETCHED record ke",
|
|
623
|
-
reparsedBy: "driver/findings-model.mjs:
|
|
623
|
+
reparsedBy: "driver/findings-model.mjs:848 parseFindingsJson + the record-binding join. Six of the seven keys are stated in the prompt and overwritten by code in the same sentence",
|
|
624
624
|
removedByMove: "M1 removes the opaque `uri` (ordinal / record-handle selection against the band); the object skeleton and the five overwritten keys survive",
|
|
625
625
|
},
|
|
626
626
|
{
|
|
627
627
|
stage: "case-law",
|
|
628
628
|
kind: "literal-json-skeleton",
|
|
629
|
-
where: "driver/stages.mjs:
|
|
629
|
+
where: "driver/stages.mjs:3502",
|
|
630
630
|
surface: "stage-message",
|
|
631
|
-
evidence: "ALSO write the RETRIEVAL RECORD to <path> — a JSON OBJECT with EXACTLY these keys: {\"schema_version\":
|
|
632
|
-
reparsedBy: "driver/verify.mjs validators.caseLaw — the ledger arm, armed by the stage-contract marker `citations` (stages.mjs:
|
|
631
|
+
evidence: "ALSO write the RETRIEVAL RECORD to <path> — a JSON OBJECT with EXACTLY these keys: {\"schema_version\":2,\"queries\":[{\"query\":\"<the search you dispatched, verbatim>\",\"jurisdiction\":\"…\",\"results\":<how many hits it returned, or null when the query never reached a source — never 0 for a query you could not send>}, …],\"citations\":[{\"proceeding\":\"…\",\"forum\":\"…\",\"jurisdiction\":\"…\",\"decided\":\"…\"",
|
|
632
|
+
reparsedBy: "driver/verify.mjs validators.caseLaw — the ledger arm, armed by the stage-contract marker `citations` (stages.mjs:1822)",
|
|
633
633
|
removedByMove: "M5 moves `queries[]` to the call log (and is itself blocked: tool-calls.jsonl records no arguments); the envelope, schema_version, `read` enum and `citations[]` skeleton survive M5 entirely",
|
|
634
634
|
},
|
|
635
635
|
{
|
|
636
636
|
stage: "case-law",
|
|
637
637
|
kind: "dictated-line-shape",
|
|
638
|
-
where: "driver/stages.mjs:
|
|
638
|
+
where: "driver/stages.mjs:3510",
|
|
639
639
|
surface: "stage-message",
|
|
640
640
|
evidence: "EVERY \"Grounded profile\" section MUST start its body with the line \"- ord: <N>\" naming which finding it grounds (use the ordinal from this list; a profile that grounds no listed finding omits the line)",
|
|
641
|
-
reparsedBy: "driver/publish/parse.mjs:339, parseCaseLawProfiles() in parse.mjs (\"the optional '- ord: <N>' first body line … gives an EXACT join\"); driver/findings-model.mjs:
|
|
641
|
+
reparsedBy: "driver/publish/parse.mjs:339, parseCaseLawProfiles() in parse.mjs (\"the optional '- ord: <N>' first body line … gives an EXACT join\"); driver/findings-model.mjs:274 /^-\\s*ord:\\s*(\\d+)\\s*$/m; driver/publish/index.mjs:778 runOrigins",
|
|
642
642
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
643
643
|
},
|
|
644
644
|
{
|
|
@@ -669,7 +669,7 @@ export const E3_BACKLOG = [
|
|
|
669
669
|
{
|
|
670
670
|
stage: "narrative-refutation",
|
|
671
671
|
kind: "dictated-line-shape",
|
|
672
|
-
where: "driver/stages.mjs:
|
|
672
|
+
where: "driver/stages.mjs:3644",
|
|
673
673
|
surface: "stage-message",
|
|
674
674
|
// RE-QUOTED BY CONVERSION 9. The LINE-TOKEN half is gone — no "anywhere on the line", no "[kind: …]
|
|
675
675
|
// token", no "a line with no token is treated as fact", because a kind is a typed field now and an
|
|
@@ -690,20 +690,20 @@ export const E3_BACKLOG = [
|
|
|
690
690
|
{
|
|
691
691
|
stage: "narrative-refutation",
|
|
692
692
|
kind: "dictated-line-shape",
|
|
693
|
-
where: "driver/skills/narrative-refutation/SKILL.md:
|
|
693
|
+
where: "driver/skills/narrative-refutation/SKILL.md:73",
|
|
694
694
|
surface: "skill-file",
|
|
695
695
|
// RE-QUOTED BY CONVERSION 9. The dictation survives and its CHANNEL changed: `on` is an array of
|
|
696
696
|
// ordinals the seat sends, and the bracketed forms are now labelled as what the DRIVER renders. The
|
|
697
697
|
// `[on: -]` case went from a value to an ABSENCE — you omit the field — which is the one part a
|
|
698
698
|
// reader could get wrong from the old wording, since there is no value meaning "no finding".
|
|
699
699
|
evidence: "**AND EVERY FLAG CARRIES WHICH FINDING IT IS ABOUT** — the `on` field, an array of ordinals. Same rule as `kind`: you send the values, the driver renders the token.",
|
|
700
|
-
reparsedBy: "driver/verify.mjs:864 CORRECTION_ON_RE = /\\[on:\\s*([0-9,\\s-]*?)\\s*\\]/i. SKILL-FILE ONLY — the stage message at stages.mjs:
|
|
700
|
+
reparsedBy: "driver/verify.mjs:864 CORRECTION_ON_RE = /\\[on:\\s*([0-9,\\s-]*?)\\s*\\]/i. SKILL-FILE ONLY — the stage message at stages.mjs:1844-1877 never mentions `[on:]`. This is #850's \"the element shape is in the skill file, not the stage message\" in its purest form: an E3 lint reading stages.mjs alone sees the [kind:] token and misses its twin",
|
|
701
701
|
removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
|
|
702
702
|
},
|
|
703
703
|
{
|
|
704
704
|
stage: "narrative-refutation",
|
|
705
705
|
kind: "dictated-line-shape",
|
|
706
|
-
where: "driver/stages.mjs:
|
|
706
|
+
where: "driver/stages.mjs:1871 and driver/skills/narrative-refutation/SKILL.md:41-50",
|
|
707
707
|
// RE-QUOTED 2026-08-16. The dictated SENTENCE survives in narrative-refutation's SKILL.md — it is the
|
|
708
708
|
// `evidence` below, verbatim. What changed is that the four kinds moved from an inline list after the
|
|
709
709
|
// colon onto their own `- [kind: …]` bullet lines. Measured, not assumed: the old anchor matched 59 of
|
|
@@ -768,7 +768,7 @@ export const E3_BACKLOG = [
|
|
|
768
768
|
{
|
|
769
769
|
stage: "report-card",
|
|
770
770
|
kind: "literal-json-skeleton",
|
|
771
|
-
where: "driver/stages.mjs:
|
|
771
|
+
where: "driver/stages.mjs:3953",
|
|
772
772
|
surface: "stage-message",
|
|
773
773
|
evidence: "The finding's OWN record — the ONLY source for this card …:\\n```json\\n<JSON.stringify(finding, null, 2)>\\n```",
|
|
774
774
|
reparsedBy: "none — this is the INPUT side, and that is why it belongs in the survey: a full JSON object rendered into the prompt is exactly the mechanism #850 proves produced R-RECEIPT (the model pattern-matches a shown shape). E3's clause 1 as written (\"a code fence or inline example showing the exact object shape the model must emit\") does not reach an injected record, so the lint needs an explicit rule for shown-but-not-owed structure",
|
|
@@ -858,7 +858,7 @@ export const E3_EVIDENCE_UNRESOLVED = [
|
|
|
858
858
|
// absorbed. It was the narrative "## Answers to your instructions" row deleted above: its dictation is
|
|
859
859
|
// gone, so there is no un-anchorable quote left to be unresolved. The one that REMAINS is a live row
|
|
860
860
|
// whose quote spans a template line. Measured before deleting, not predicted — two rows shared
|
|
861
|
-
// `where: "driver/stages.mjs:
|
|
861
|
+
// `where: "driver/stages.mjs:3075"`, so which one occupied this slot could not be read off the strings.
|
|
862
862
|
"synthesis|driver/stages.mjs",
|
|
863
863
|
];
|
|
864
864
|
|
|
@@ -878,7 +878,7 @@ export const E3_EVIDENCE_UNRESOLVED = [
|
|
|
878
878
|
* Seeded 2026-08-18: 46 of the 51 rows had exactly one witnessed surface and were derived. Three
|
|
879
879
|
* multi-witness rows were settled by the site their anchor resolves at (narrative-refutation to its
|
|
880
880
|
* SKILL.md, two synthesis rows to stages.mjs). Two were decided by reading the delivering call site:
|
|
881
|
-
* common-law-half is `tool-response` (perplexity-server.mjs
|
|
881
|
+
* common-law-half is `tool-response` (`tellObligations` in perplexity-server.mjs), register-digest is `stage-message`
|
|
882
882
|
* (pipeline.mjs, where coverageFormBrief is appended to the dispatch).
|
|
883
883
|
*/
|
|
884
884
|
// 35 -> 32 stage-message. The three rows that left were the send stages' dictated line shapes
|