clearotron 0.3.2-beta.7 → 0.3.2-beta.9

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.
Files changed (272) hide show
  1. package/.env.example +58 -26
  2. package/CONTRIBUTING.md +8 -8
  3. package/INSTALL.md +148 -81
  4. package/README.md +3 -3
  5. package/SECURITY.md +3 -3
  6. package/bin/brandowner.mjs +3 -3
  7. package/bin/framework-preflight.mjs +1 -1
  8. package/bin/onboard.mjs +637 -216
  9. package/bin/start.mjs +151 -27
  10. package/bin/update.mjs +58 -11
  11. package/build-info.json +2 -2
  12. package/docs/DELIVERY.md +2 -1
  13. package/docs/INTAKE.md +1 -1
  14. package/docs/ONBOARDING.md +1 -1
  15. package/docs/architecture/03-run-lifecycle.md +6 -6
  16. package/docs/architecture/04-configuration-reference.md +32 -14
  17. package/docs/architecture/05-config-governance.md +23 -8
  18. package/docs/architecture/05-customer-profiles.md +2 -2
  19. package/docs/architecture/06-operations-runbook.md +3 -3
  20. package/docs/architecture/08-development-guide.md +6 -6
  21. package/docs/configuration.md +5 -5
  22. package/docs/decisions/0003-credential-model.md +1 -1
  23. package/docs/writing-standard.md +4 -0
  24. package/driver/CHANGELOG.md +124 -0
  25. package/driver/README.md +3 -3
  26. package/driver/band-size.mjs +59 -0
  27. package/driver/binding-layers.mjs +1 -1
  28. package/driver/citation-census.json +3 -3
  29. package/driver/{prelim-variants-record.mjs → clearance-variants-record.mjs} +24 -24
  30. package/driver/common-law-receipts.mjs +2 -2
  31. package/driver/company-bundle.mjs +3 -3
  32. package/driver/compose-read.mjs +8 -14
  33. package/driver/config-inventory.mjs +112 -9
  34. package/driver/consumption-ledger.mjs +2 -2
  35. package/driver/contract-arm2-baseline.json +2 -5
  36. package/driver/contract-dictation-registry.mjs +19 -19
  37. package/driver/contract-e3-backlog.mjs +43 -43
  38. package/driver/contract-e3-baseline.json +14 -14
  39. package/driver/contract-vocabulary.mjs +68 -27
  40. package/driver/deliver-trigger.sh +16 -16
  41. package/driver/demo-container.mjs +3 -3
  42. package/driver/dev-portal.mjs +3 -3
  43. package/driver/disposition-call.mjs +1 -1
  44. package/driver/door-gates.mjs +41 -7
  45. package/driver/doubt-ledger.mjs +2 -2
  46. package/driver/drainer-identity.mjs +34 -8
  47. package/driver/driver.config.mjs +367 -104
  48. package/driver/engine/CONTRACT.md +10 -3
  49. package/driver/engine/README.md +2 -2
  50. package/driver/engine/anthropic-agent.mjs +77 -21
  51. package/driver/engine/auth.mjs +129 -10
  52. package/driver/engine/jx-turn.mjs +7 -6
  53. package/driver/engine/mcp/README.md +1 -1
  54. package/driver/engine/mcp/dispositions-server.mjs +3 -3
  55. package/driver/engine/mcp/gather-config.mjs +9 -9
  56. package/driver/engine/mcp/perplexity-server.mjs +2 -2
  57. package/driver/engine/mcp/recording-server.mjs +18 -5
  58. package/driver/engine/openai-agent.mjs +4 -2
  59. package/driver/engine/probe.mjs +110 -23
  60. package/driver/enqueue-schema.mjs +6 -2
  61. package/driver/findings-model.mjs +6 -3
  62. package/driver/flag-snapshot.mjs +34 -8
  63. package/driver/form-neighbourhood.mjs +54 -7
  64. package/driver/framework.mjs +4 -4
  65. package/driver/gateway.mjs +36 -24
  66. package/driver/jx-lanes.mjs +23 -4
  67. package/driver/jx-units.mjs +7 -4
  68. package/driver/jx.mjs +34 -4
  69. package/driver/knockout-review-record.mjs +56 -4
  70. package/driver/known-conflicts.mjs +1 -1
  71. package/driver/matter-frame-record.mjs +90 -1
  72. package/driver/named-band.mjs +1 -1
  73. package/driver/ordinary-words.mjs +51 -0
  74. package/driver/outbox-backoff.mjs +31 -16
  75. package/driver/package.json +1 -1
  76. package/driver/partial-payload-baseline.json +2 -2
  77. package/driver/phase0.mjs +3 -3
  78. package/driver/pipeline-knockout.mjs +5 -5
  79. package/driver/pipeline.mjs +396 -81
  80. package/driver/placement-form.mjs +77 -1
  81. package/driver/placement-model.mjs +1 -1
  82. package/driver/portal-config-view.mjs +30 -1
  83. package/driver/portal-report.mjs +107 -6
  84. package/driver/portal-service.mjs +80 -14
  85. package/driver/portal-upstream.mjs +1 -1
  86. package/driver/predelivery-lint.mjs +12 -2
  87. package/driver/preserve-merge.mjs +3 -3
  88. package/driver/product-rows.mjs +2 -2
  89. package/driver/products.mjs +1 -1
  90. package/driver/profiles/README.md +3 -3
  91. package/driver/profiles/demo-brand-owner.json +2 -2
  92. package/driver/profiles.mjs +55 -17
  93. package/driver/progress.mjs +18 -8
  94. package/driver/provider-usage.mjs +8 -8
  95. package/driver/publish/index.mjs +154 -8
  96. package/driver/publish/knockout.mjs +39 -5
  97. package/driver/publish/pool-admin.mjs +1 -1
  98. package/driver/publish/publish-inputs.mjs +18 -2
  99. package/driver/publish/render-knockout.mjs +184 -31
  100. package/driver/publish/render.mjs +323 -93
  101. package/driver/publish/report-data.mjs +4 -1
  102. package/driver/publish/report-topbar.mjs +58 -0
  103. package/driver/publish/search-depth.mjs +133 -4
  104. package/driver/publish/templates/report.css +78 -4
  105. package/driver/publish/xlsx.mjs +20 -1
  106. package/driver/queue-order.mjs +2 -2
  107. package/driver/recording-agreement.mjs +1 -1
  108. package/driver/reference-score.mjs +1 -1
  109. package/driver/register-availability.mjs +2 -2
  110. package/driver/register-count.mjs +50 -5
  111. package/driver/register-coverage.mjs +161 -1
  112. package/driver/register-digest-record.mjs +236 -11
  113. package/driver/register-grant-vocabulary.mjs +1 -1
  114. package/driver/register-plan.mjs +189 -2
  115. package/driver/registry-fidelity.mjs +3 -3
  116. package/driver/repair-composers.mjs +1 -1
  117. package/driver/repair-contract.mjs +1 -1
  118. package/driver/replay-archive.mjs +6 -6
  119. package/driver/report-overview-record.mjs +2 -2
  120. package/driver/result-noun-fields.mjs +2 -2
  121. package/driver/run-economics.mjs +41 -10
  122. package/driver/run-requirements.mjs +173 -9
  123. package/driver/runner.mjs +5 -5
  124. package/driver/scope-facts.mjs +20 -5
  125. package/driver/scope-ledger.mjs +5 -5
  126. package/driver/search-policy.mjs +22 -12
  127. package/driver/skills/README.md +15 -15
  128. package/driver/skills/blind-frame/SKILL.md +2 -2
  129. package/driver/skills/case-law-citation/SKILL.md +4 -4
  130. package/driver/skills/case-law-citation/sources/eurlex.md +1 -1
  131. package/driver/skills/{prelim-common-law → clearance-common-law}/SKILL.md +22 -22
  132. package/driver/skills/{prelim-common-law → clearance-common-law}/perplexity-prompts.md +1 -1
  133. package/driver/skills/{prelim-register → clearance-register}/SKILL.md +10 -10
  134. package/driver/skills/{prelim-register → clearance-register}/digest.md +2 -2
  135. package/driver/skills/{prelim-register → clearance-register}/providers/README.md +1 -1
  136. package/driver/skills/{prelim-register → clearance-register}/providers/clarivate.md +37 -35
  137. package/driver/skills/{prelim-register → clearance-register}/providers/corsearch.md +20 -11
  138. package/driver/skills/{prelim-register → clearance-register}/providers/signa.md +5 -5
  139. package/driver/skills/{prelim-register → clearance-register}/register-recipes.md +3 -3
  140. package/driver/skills/{prelim-register → clearance-register}/status-rules.md +2 -2
  141. package/driver/skills/{prelim-register → clearance-register}/stealth-filer-indicators.md +1 -1
  142. package/driver/skills/{prelim-register → clearance-register}/unit.md +2 -2
  143. package/driver/skills/{prelim-search → clearance-search}/SKILL.md +31 -31
  144. package/driver/skills/{prelim-search → clearance-search}/delivery-contract.md +1 -1
  145. package/driver/skills/{prelim-search → clearance-search}/phase2-execution.md +18 -18
  146. package/driver/skills/{prelim-search → clearance-search}/synthesis-rules.md +7 -7
  147. package/driver/skills/{prelim-variants → clearance-variants}/SKILL.md +18 -18
  148. package/driver/skills/{prelim-variants → clearance-variants}/transliteration-scripts.md +5 -5
  149. package/driver/skills/frame-diff/SKILL.md +1 -1
  150. package/driver/skills/knockout-assess/SKILL.md +10 -7
  151. package/driver/skills/matter-frame/SKILL.md +3 -3
  152. package/driver/skills/narrative-refutation/SKILL.md +9 -9
  153. package/driver/skills/placement-inquiry/SKILL.md +5 -5
  154. package/driver/stage-context.mjs +1 -1
  155. package/driver/stages-knockout.mjs +4 -4
  156. package/driver/stages.mjs +65 -61
  157. package/driver/status-snapshot.mjs +2 -2
  158. package/driver/suite-census.json +340 -136
  159. package/driver/surface-exit-verdict.mjs +58 -0
  160. package/driver/systemd/README.md +9 -6
  161. package/driver/systemd/clearotron-worker.service +1 -1
  162. package/driver/terminal-clamp.mjs +109 -1
  163. package/driver/tokens.mjs +169 -3
  164. package/driver/unit-environment.mjs +42 -15
  165. package/driver/unit-inventory.mjs +19 -2
  166. package/driver/usage-ledger.mjs +1 -1
  167. package/driver/variant-manifest-model.mjs +4 -4
  168. package/driver/verify-knockout.mjs +27 -0
  169. package/driver/verify.mjs +94 -6
  170. package/driver/whatif-queue.mjs +1 -1
  171. package/driver/wordlists/en.txt +63906 -0
  172. package/mcp-server/CHANGELOG.md +8 -0
  173. package/mcp-server/README.md +1 -1
  174. package/mcp-server/lib/README.md +1 -1
  175. package/mcp-server/lib/options.mjs +8 -7
  176. package/mcp-server/lib/plan.mjs +18 -2
  177. package/mcp-server/lib/runs.mjs +1 -1
  178. package/mcp-server/lib/usage.mjs +3 -3
  179. package/mcp-server/lib/whatif.mjs +1 -1
  180. package/mcp-server/package.json +1 -1
  181. package/mcp-server/server.mjs +18 -1
  182. package/package.json +12 -11
  183. package/portal-ui/dist/assets/{index-CVOIvdhc.css → index-CtvwLCti.css} +207 -3
  184. package/portal-ui/dist/assets/{index-5UyqAyNM.js → index-EVaSo5-g.js} +1580 -527
  185. package/portal-ui/dist/index.html +2 -2
  186. package/portal-ui/package.json +1 -1
  187. package/providers/README.md +1 -1
  188. package/providers/_shared/enumerate.mjs +6 -6
  189. package/providers/_shared/execute-plan.mjs +3 -3
  190. package/providers/_shared/ledger.mjs +119 -5
  191. package/providers/_shared/provider-text.mjs +2 -2
  192. package/providers/_shared/screen.mjs +2 -2
  193. package/providers/_shared/script-form.mjs +3 -3
  194. package/providers/_shared/territory-codes.mjs +23 -3
  195. package/providers/clarivate/README.md +1 -1
  196. package/providers/clarivate/src/capabilities.js +12 -12
  197. package/providers/clarivate/src/core.js +37 -43
  198. package/providers/corsearch/README.md +1 -1
  199. package/providers/corsearch/src/capabilities.js +5 -5
  200. package/providers/corsearch/src/core.js +3 -3
  201. package/providers/jx/README.md +2 -1
  202. package/providers/jx/src/turn-envelope.mjs +8 -3
  203. package/providers/oauth-mcp-bridge/CHANGELOG.md +8 -0
  204. package/providers/oauth-mcp-bridge/package.json +1 -1
  205. package/providers/perplexity/src/core.js +1 -1
  206. package/providers/signa/README.md +1 -1
  207. package/providers/signa/src/capabilities.js +42 -49
  208. package/providers/signa/src/core.js +106 -29
  209. package/providers/uspto-local/README.md +1 -1
  210. package/providers/uspto-local/src/sync.js +1 -1
  211. package/scripts/README.md +1 -0
  212. package/scripts/ask-ai-render-check.mjs +127 -1
  213. package/scripts/authority-boundary-probe.mjs +8 -6
  214. package/scripts/backfill-started-at.mjs +2 -2
  215. package/scripts/census-merge-driver.mjs +33 -2
  216. package/scripts/citation-anchor-report.mjs +181 -0
  217. package/scripts/dead-names.mjs +1 -1
  218. package/scripts/deprecate-below.mjs +66 -8
  219. package/scripts/drain-preflight.mjs +1 -1
  220. package/scripts/e2e.mjs +174 -0
  221. package/scripts/env-audit.mjs +39 -6
  222. package/scripts/env-classify.mjs +20 -2
  223. package/scripts/freeze-example-run.mjs +61 -18
  224. package/scripts/generated-files-are-current.mjs +69 -4
  225. package/scripts/live-surface-check.mjs +124 -41
  226. package/scripts/markdown-link-check.mjs +1 -1
  227. package/scripts/merge-shape-check.mjs +242 -0
  228. package/scripts/mint-names-in-force.mjs +5 -5
  229. package/scripts/mint-offered-territories.mjs +72 -0
  230. package/scripts/mint-public-residue.mjs +2 -2
  231. package/scripts/mint-reference-strip-backlog.mjs +2 -2
  232. package/scripts/mint-suite-census.mjs +75 -2
  233. package/scripts/mint-writing-standard-backlog.mjs +2 -2
  234. package/scripts/purge-runs.mjs +7 -7
  235. package/scripts/reconcile-runs.mjs +2 -2
  236. package/scripts/release-approve-parked.mjs +20 -2
  237. package/scripts/release-await-cut.mjs +120 -1
  238. package/scripts/release-note-required.mjs +76 -8
  239. package/scripts/report-header-render-check.mjs +164 -0
  240. package/scripts/settings-render-check.mjs +75 -2
  241. package/scripts/test-full.mjs +96 -3
  242. package/scripts/test-run.mjs +10 -0
  243. package/shared/brand.mjs +27 -0
  244. package/shared/connect-clients.mjs +39 -11
  245. package/shared/deployment-box.mjs +7 -2
  246. package/shared/driver-dir.mjs +1 -1
  247. package/shared/env-aliases.mjs +1 -1
  248. package/shared/identifier-scan.mjs +65 -9
  249. package/shared/identifier-sentinels.mjs +22 -0
  250. package/shared/names-in-force.mjs +4 -2
  251. package/shared/offered-territories.json +738 -0
  252. package/shared/pre-rename-spellings.mjs +53 -0
  253. package/shared/reference-guard-classes.mjs +40 -2
  254. package/shared/stdio-connect.mjs +39 -4
  255. package/shared/tree-commit.mjs +48 -0
  256. /package/driver/skills/{prelim-register → clearance-register}/providers/euipo.md +0 -0
  257. /package/driver/skills/{prelim-register → clearance-register}/providers/free-tier.md +0 -0
  258. /package/driver/skills/{prelim-register → clearance-register}/providers/uspto-local.md +0 -0
  259. /package/driver/skills/{prelim-search → clearance-search}/field-doctrine-pharma.md +0 -0
  260. /package/driver/skills/{prelim-search → clearance-search}/firm-wide-reasoning.md +0 -0
  261. /package/driver/skills/{prelim-search → clearance-search}/report-prose.md +0 -0
  262. /package/driver/skills/{prelim-search → clearance-search}/risk-framework-demo.manifest.json +0 -0
  263. /package/driver/skills/{prelim-search → clearance-search}/risk-framework-demo.md +0 -0
  264. /package/driver/skills/{prelim-search → clearance-search}/risk-framework-triage.manifest.json +0 -0
  265. /package/driver/skills/{prelim-search → clearance-search}/risk-framework-triage.md +0 -0
  266. /package/driver/skills/{prelim-search → clearance-search}/risk-framework.manifest.json +0 -0
  267. /package/driver/skills/{prelim-search → clearance-search}/risk-framework.md +0 -0
  268. /package/driver/skills/{prelim-search → clearance-search}/template-formatting.md +0 -0
  269. /package/driver/skills/{prelim-search → clearance-search}/templates/email/generic.md +0 -0
  270. /package/driver/skills/{prelim-search → clearance-search}/templates/search-request-form.html +0 -0
  271. /package/driver/skills/{prelim-search → clearance-search}/worked-examples-demo.md +0 -0
  272. /package/driver/skills/{prelim-search → clearance-search}/worked-examples.md +0 -0
@@ -101,17 +101,17 @@ export const E3_DATA_INPUT_EXEMPTIONS = [
101
101
  ];
102
102
 
103
103
  export const E3_BACKLOG = [
104
- // ── prelim-variants: FOUR ROWS RETIRED BY CONVERSION 3 ──────────────────────────────────────────
104
+ // ── clearance-variants: FOUR ROWS RETIRED BY CONVERSION 3 ──────────────────────────────────────────
105
105
  //
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
109
  // stages.mjs:922 the dispatch dictated variant-manifest.json key by key and enum by enum;
110
- // `record_prelim_variants`'s schema IS that shape now, so the key-set and
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.
113
113
  // stages.mjs:774-808 the same skeleton's category enum, same fate.
114
- // prelim-variants SKILL.md the `### Scope ledger` markdown table and its column contract. The rows
114
+ // clearance-variants SKILL.md the `### Scope ledger` markdown table and its column contract. The rows
115
115
  // arrive typed; the driver renders the table AND serialises
116
116
  // scope-ledger.json from them through one shared function.
117
117
  //
@@ -185,14 +185,14 @@ export const E3_BACKLOG = [
185
185
  // it one: authored once in renderConnotationObligations, and reaching the seat through the perplexity
186
186
  // MCP server (driver/engine/mcp/perplexity-server.mjs:111) 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:1480-1493 (renderConnotationObligations; delivered to the seat via driver/engine/mcp/perplexity-server.mjs:111 — a TOOL RESPONSE, no longer a stage message)",
188
+ where: "driver/connotation-search.mjs:1480-1493, renderConnotationObligations() in connotation-search.mjs (delivered to the seat via driver/engine/mcp/perplexity-server.mjs:111 — 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:
192
192
  // receipt_id — M1 LANDED. stages.mjs states it outright: "No seat-facing text displays an id shape
193
193
  // any more", and connotation-search.mjs carries " M1, FINISHED" over the retired text. The
194
194
  // seat now gives `receipt_index`, a POSITION, and the driver resolves position to id.
195
- // quote — M2 LANDED. The live field is `anchor` (prelim-common-law/SKILL.md:197).
195
+ // quote — M2 LANDED. The live field is `anchor` (clearance-common-law/SKILL.md:197).
196
196
  // Neither was reworded. Both were removed, and this row is discharged of them.
197
197
  //
198
198
  // ── (b) THE NEW, NARROWER CLAIM — RE-EVIDENCED for B (the form path is DELETED, ruling
@@ -209,7 +209,7 @@ export const E3_BACKLOG = [
209
209
  {
210
210
  stage: "common-law",
211
211
  kind: "literal-json-skeleton",
212
- where: "driver/skills/prelim-common-law/SKILL.md:123-170",
212
+ where: "driver/skills/clearance-common-law/SKILL.md:123-170",
213
213
  surface: "skill-file",
214
214
  evidence: "### Format\\n```markdown\\n# Common-law findings — Dawn: Legends of Thornmantle (2026-05-11)\\n\\n## Summary\\n\\n- Perplexity calls executed: 4 …",
215
215
  reparsedBy: "driver/publish/audit-from-spine.mjs:14 parseTables → parseSpineFindingBlocks (audit-from-spine.mjs:123) re-parses the common-law finding tables into audit.md",
@@ -218,7 +218,7 @@ export const E3_BACKLOG = [
218
218
  {
219
219
  stage: "common-law",
220
220
  kind: "dictated-line-shape",
221
- where: "driver/skills/prelim-common-law/SKILL.md:192 (restated at driver/skills/prelim-search/synthesis-rules.md:394)",
221
+ where: "driver/skills/clearance-common-law/SKILL.md:192 (restated at driver/skills/clearance-search/synthesis-rules.md:394)",
222
222
  surface: "skill-file",
223
223
  evidence: "A clean PR/connotation row MUST cite its search — add a `**Connotation-search source:** <URL | \"perplexity_research — no result\">` line.",
224
224
  reparsedBy: "driver/connotation-search.mjs — validators.commonLaw rejects a clean claim with no such line (connotation_search_missing); the hint is re-dictated by correctionHint() in gateway.mjs",
@@ -259,7 +259,7 @@ export const E3_BACKLOG = [
259
259
  where: "driver/stages.mjs:2253 (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
- reparsedBy: "driver/named-band.mjs parseNamedBand / bandRecords / bandCrowds / mergeNamedBands (named in driver/skills/prelim-register/unit.md:60-62); validators.registerUnit",
262
+ reparsedBy: "driver/named-band.mjs parseNamedBand / bandRecords / bandCrowds / mergeNamedBands (named in driver/skills/clearance-register/unit.md:60-62); validators.registerUnit",
263
263
  removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
264
264
  },
265
265
  {
@@ -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/prelim-register/unit.md:83-97",
277
+ where: "driver/skills/clearance-register/unit.md:83-97",
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:4191 (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.",
286
+ where: "driver/stages.mjs:4195 (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",
@@ -322,7 +322,7 @@ 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:2559 references it); driver/skills/prelim-register/digest.md:342-352 re-parses the Disagreements section into its own table",
325
+ reparsedBy: "driver/pipeline.mjs — the PLACEMENT RULINGS TAIL block handed to register-digest is lifted from these named sections (stages.mjs:2559 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
@@ -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:2618 (the digest message) + driver/coverage-form.mjs (coverageFormBrief — the dispatch block carrying the enum and the row shape)",
349
+ where: "driver/stages.mjs:2622 (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",
@@ -370,7 +370,7 @@ export const E3_BACKLOG = [
370
370
  {
371
371
  stage: "register-digest",
372
372
  kind: "dictated-line-shape",
373
- where: "driver/skills/prelim-register/digest.md:164 (Dominant-element reconciliation — the crowd row's `unit` grammar)",
373
+ where: "driver/skills/clearance-register/digest.md:164 (Dominant-element reconciliation — the crowd row's `unit` grammar)",
374
374
  surface: "skill-file",
375
375
  evidence: "`<axis> / dominant-element crowd (<N> members): <one-line label for the residual class>`",
376
376
  reparsedBy: "driver/coverage-ledger.mjs crowdRulingCount reads `<N>` back out of the `unit` cell, and driver/recall-reconciliation.mjs parseCrowdRulings turns it into the residual denominator the delivery gate blocks on",
@@ -379,7 +379,7 @@ export const E3_BACKLOG = [
379
379
  {
380
380
  stage: "register-digest",
381
381
  kind: "exactly-these-keys",
382
- where: "driver/skills/prelim-register/digest.md:233-241",
382
+ where: "driver/skills/clearance-register/digest.md:233-241",
383
383
  surface: "skill-file",
384
384
  evidence: "- `axis` — EXACTLY one bare token of: `saturation-probe` / `primary-sweep` / `transliteration-numeric` / `incumbent-class`. **That vocabulary is CLOSED** and a row whose axis is outside it is refused.",
385
385
  reparsedBy: "driver/coverage-form.mjs (seat-row contract; SEAT_ROW_CONTRACT rides the accumulator) — and, since the typed-transport conversion, driver/coverage-call.mjs validateCoverageCall refuses an off-vocabulary axis AT CALL TIME (axis_invalid), so the dictation is receiver-checked in the same turn it is obeyed",
@@ -399,7 +399,7 @@ export const E3_BACKLOG = [
399
399
  // closed vocabulary sent through the `record_coverage` typed call (the transport conversion, B's
400
400
  // pattern). The seat opens no file and writes no table; the dictated shape is the call's own two
401
401
  // values, receiver-validated as they arrive.
402
- where: "driver/skills/prelim-register/digest.md:216-218",
402
+ where: "driver/skills/clearance-register/digest.md:216-218",
403
403
  surface: "skill-file",
404
404
  evidence: "- `status` — EXACTLY one bare token: `confirmed-clean` / `coverage-limited` / `deferred`. Qualifiers never go in the status; they go in the reason.",
405
405
  reparsedBy: "driver/coverage-call.mjs validateCoverageCall (status_invalid at call time) + driver/coverage-form.mjs rowIsSettled via validators.registerFindings; the archived-era prose-table reader (coverage-ledger.mjs parseCoverageLedgerFull) survives for replay only",
@@ -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/prelim-register/SKILL.md:198-199",
411
+ where: "driver/skills/clearance-register/SKILL.md:198-199",
412
412
  surface: "skill-file",
413
413
  evidence: "**The status vocabulary is CLOSED: EXACTLY one bare token of: `confirmed-clean` / `coverage-limited` / `deferred`.** 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",
@@ -417,7 +417,7 @@ export const E3_BACKLOG = [
417
417
  // ── DISCHARGED 2026-08-17 by (skeptic's conversion) ───────────────────────────────────────────
418
418
  //
419
419
  // It read: stage "skeptic", kind "dictated-line-shape", where
420
- // "driver/skills/prelim-search/phase2-execution.md:96-98", evidence "`## Escalation decisions` section the
420
+ // "driver/skills/clearance-search/phase2-execution.md:96-98", evidence "`## Escalation decisions` section the
421
421
  // driver parses verbatim: one `ESCALATE: <axis> — <reason>` line per register axis …", reparsedBy
422
422
  // "pipeline.mjs (same regex) — **the shape is dictated twice, in the message and in the skill file**",
423
423
  // removedByMove "NOTHING ON THE PLAN REMOVES THIS".
@@ -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:2798",
432
+ where: "driver/stages.mjs:2802",
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)",
@@ -453,7 +453,7 @@ export const E3_BACKLOG = [
453
453
  {
454
454
  stage: "synthesis",
455
455
  kind: "literal-json-skeleton",
456
- where: "driver/stages.mjs:3178",
456
+ where: "driver/stages.mjs:3182",
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
459
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson via validators.narrative",
@@ -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:3214",
470
+ where: "driver/stages.mjs:3218",
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,7 +476,7 @@ export const E3_BACKLOG = [
476
476
  {
477
477
  stage: "synthesis",
478
478
  kind: "literal-json-skeleton",
479
- where: "driver/stages.mjs:3215",
479
+ where: "driver/stages.mjs:3219",
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
482
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson",
@@ -485,7 +485,7 @@ export const E3_BACKLOG = [
485
485
  {
486
486
  stage: "synthesis",
487
487
  kind: "literal-json-skeleton",
488
- where: "driver/stages.mjs:3231",
488
+ where: "driver/stages.mjs:3235",
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
491
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson; driver/verify.mjs:1171 checkFindingsSibling gates meters.*.source; finding_basis_source_missing",
@@ -494,7 +494,7 @@ export const E3_BACKLOG = [
494
494
  {
495
495
  stage: "synthesis",
496
496
  kind: "literal-json-skeleton",
497
- where: "driver/stages.mjs:3232",
497
+ where: "driver/stages.mjs:3236",
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
500
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson",
@@ -503,7 +503,7 @@ export const E3_BACKLOG = [
503
503
  {
504
504
  stage: "synthesis",
505
505
  kind: "literal-json-skeleton",
506
- where: "driver/stages.mjs:3233",
506
+ where: "driver/stages.mjs:3237",
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
509
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson",
@@ -512,7 +512,7 @@ export const E3_BACKLOG = [
512
512
  {
513
513
  stage: "synthesis",
514
514
  kind: "exactly-these-keys",
515
- where: "driver/stages.mjs:3234",
515
+ where: "driver/stages.mjs:3238",
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
518
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson; the render owns the coverage panel from these typed states",
@@ -521,7 +521,7 @@ export const E3_BACKLOG = [
521
521
  {
522
522
  stage: "synthesis",
523
523
  kind: "literal-json-skeleton",
524
- where: "driver/stages.mjs:3243",
524
+ where: "driver/stages.mjs:3247",
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,7 +530,7 @@ export const E3_BACKLOG = [
530
530
  {
531
531
  stage: "synthesis",
532
532
  kind: "literal-json-skeleton",
533
- where: "driver/stages.mjs:3300",
533
+ where: "driver/stages.mjs:3304",
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
536
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson; the report collapses the rows behind toggles and the audit workbook renders them",
@@ -539,7 +539,7 @@ export const E3_BACKLOG = [
539
539
  {
540
540
  stage: "synthesis",
541
541
  kind: "literal-json-skeleton",
542
- where: "driver/stages.mjs:3306",
542
+ where: "driver/stages.mjs:3310",
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
545
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson",
@@ -548,7 +548,7 @@ export const E3_BACKLOG = [
548
548
  {
549
549
  stage: "synthesis",
550
550
  kind: "literal-json-skeleton",
551
- where: "driver/stages.mjs:3217",
551
+ where: "driver/stages.mjs:3221",
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
554
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson; pipeline applyCoverageFloor legalActions arm derives the delivered disposition from the closed kind enum",
@@ -557,7 +557,7 @@ export const E3_BACKLOG = [
557
557
  {
558
558
  stage: "synthesis",
559
559
  kind: "exactly-these-keys",
560
- where: "driver/stages.mjs:3313",
560
+ where: "driver/stages.mjs:3317",
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
563
  reparsedBy: "driver/findings-model.mjs:813 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",
@@ -566,7 +566,7 @@ export const E3_BACKLOG = [
566
566
  {
567
567
  stage: "synthesis",
568
568
  kind: "literal-json-skeleton",
569
- where: "driver/stages.mjs:3156",
569
+ where: "driver/stages.mjs:3160",
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
@@ -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:3077 (restated at driver/skills/prelim-search/synthesis-rules.md:428)",
593
+ where: "driver/stages.mjs:3081 (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,7 +599,7 @@ export const E3_BACKLOG = [
599
599
  {
600
600
  stage: "synthesis",
601
601
  kind: "dictated-line-shape",
602
- where: "driver/stages.mjs:3090 (restated at driver/skills/prelim-search/synthesis-rules.md:475)",
602
+ where: "driver/stages.mjs:3094 (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
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:2361 (the `own_rights_missing` branch; re-verified 2026-08-29 — the old :1736 predated this branch and pointed into the A4 repeat-signature block)",
@@ -608,7 +608,7 @@ export const E3_BACKLOG = [
608
608
  {
609
609
  stage: "synthesis",
610
610
  kind: "exactly-these-keys",
611
- where: "driver/stages.mjs:3292",
611
+ where: "driver/stages.mjs:3296",
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
614
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson",
@@ -617,7 +617,7 @@ export const E3_BACKLOG = [
617
617
  {
618
618
  stage: "synthesis",
619
619
  kind: "literal-json-skeleton",
620
- where: "driver/stages.mjs:3180",
620
+ where: "driver/stages.mjs:3184",
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
623
  reparsedBy: "driver/findings-model.mjs:813 parseFindingsJson + the record-binding join. Six of the seven keys are stated in the prompt and overwritten by code in the same sentence",
@@ -626,7 +626,7 @@ export const E3_BACKLOG = [
626
626
  {
627
627
  stage: "case-law",
628
628
  kind: "literal-json-skeleton",
629
- where: "driver/stages.mjs:3462",
629
+ where: "driver/stages.mjs:3466",
630
630
  surface: "stage-message",
631
631
  evidence: "ALSO write the RETRIEVAL RECORD to <path> — a JSON OBJECT with EXACTLY these keys: {\"schema_version\":1,\"queries\":[{\"query\":\"<the search you dispatched, verbatim>\",\"jurisdiction\":\"…\",\"results\":<how many hits it returned>}, …],\"citations\":[{\"proceeding\":\"…\",\"forum\":\"…\",\"jurisdiction\":\"…\",\"decided\":\"…\"",
632
632
  reparsedBy: "driver/verify.mjs validators.caseLaw — the ledger arm, armed by the stage-contract marker `citations` (stages.mjs:1820)",
@@ -635,10 +635,10 @@ export const E3_BACKLOG = [
635
635
  {
636
636
  stage: "case-law",
637
637
  kind: "dictated-line-shape",
638
- where: "driver/stages.mjs:3470",
638
+ where: "driver/stages.mjs:3474",
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 (\"the optional '- ord: <N>' first body line … gives an EXACT join\"); driver/findings-model.mjs:273 /^-\\s*ord:\\s*(\\d+)\\s*$/m; driver/publish/index.mjs:778 runOrigins",
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:273 /^-\\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:3602",
672
+ where: "driver/stages.mjs:3606",
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
@@ -684,7 +684,7 @@ export const E3_BACKLOG = [
684
684
  // because an un-anchorable row lands in the NOT-CHECKED slice, and that is coverage lost rather than
685
685
  // a pass.
686
686
  evidence: "is ONE of coverage-disposition | fact | rating | narrative — pick the one your own legal read says the correction IS: coverage-disposition (a coverage row / disposition placement is wrong or dishonest)",
687
- reparsedBy: "driver/verify.mjs:847 CORRECTION_KIND_RE = /\\[kind:\\s*([a-z][a-z-]*)\\s*\\]/i → parseCorrectionKinds (verify.mjs:1070), consumed in pipelineInner() in pipeline.mjs for the run.jsonl `correction-kinds` histogram, which since #1558 also carries `kindChannelOk` — the counts are DERIVED from the parsed rows, and that key states whether the reviewer's kind channel produced anything at all rather than leaving a reader to infer it by comparing untyped against total. Telemetry only today",
687
+ reparsedBy: "driver/verify.mjs CORRECTION_KIND_RE = /\\[kind:\\s*([a-z][a-z-]*)\\s*\\]/i → parseCorrectionKinds (verify.mjs), consumed in pipelineInner() in pipeline.mjs for the run.jsonl `correction-kinds` histogram, which since #1558 also carries `kindChannelOk` — the counts are DERIVED from the parsed rows, and that key states whether the reviewer's kind channel produced anything at all rather than leaving a reader to infer it by comparing untyped against total. Telemetry only today",
688
688
  removedByMove: "NOTHING ON THE #850 PLAN REMOVES THIS",
689
689
  },
690
690
  {
@@ -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:3911",
771
+ where: "driver/stages.mjs:3915",
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",
@@ -822,7 +822,7 @@ export const E3_UNPLANNED = E3_BACKLOG.filter((e) => e.removedByMove === "NOTHIN
822
822
  * ── TRIAGED 2026-08-16. NOT ONE ROW WAS STALE. ────────────────────────────────────────────
823
823
  *
824
824
  * All 15 were read against their sites. Every one described a dictation that still exists; what failed was
825
- * always the QUOTE. Three are re-quoted in this commit and clear: prelim-variants (its evidence was a
825
+ * always the QUOTE. Three are re-quoted in this commit and clear: clearance-variants (its evidence was a
826
826
  * DESCRIPTION OF the site rather than text FROM it, so no matcher could ever have resolved it),
827
827
  * narrative-refutation (the sentence survives; its four kinds moved onto their own bullet lines), and
828
828
  * report-card (the dictation moved FILE, into the second path this row already named).
@@ -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:3045"`, so which one occupied this slot could not be read off the strings.
861
+ // `where: "driver/stages.mjs:3049"`, so which one occupied this slot could not be read off the strings.
862
862
  "synthesis|driver/stages.mjs",
863
863
  ];
864
864
 
@@ -5,7 +5,7 @@
5
5
  "exactly-these-keys": 0,
6
6
  "dictated-line-shape": 0
7
7
  },
8
- "prelim-variants": {
8
+ "clearance-variants": {
9
9
  "literal-json-skeleton": 0,
10
10
  "exactly-these-keys": 0,
11
11
  "dictated-line-shape": 0
@@ -97,12 +97,12 @@
97
97
  "exactly-these-keys": 0,
98
98
  "dictated-line-shape": 1
99
99
  },
100
- "skills/prelim-variants/SKILL.md": {
100
+ "skills/clearance-variants/SKILL.md": {
101
101
  "literal-json-skeleton": 0,
102
102
  "exactly-these-keys": 0,
103
103
  "dictated-line-shape": 1
104
104
  },
105
- "skills/prelim-variants/transliteration-scripts.md": {
105
+ "skills/clearance-variants/transliteration-scripts.md": {
106
106
  "literal-json-skeleton": 0,
107
107
  "exactly-these-keys": 0,
108
108
  "dictated-line-shape": 1
@@ -112,17 +112,17 @@
112
112
  "exactly-these-keys": 2,
113
113
  "dictated-line-shape": 0
114
114
  },
115
- "skills/prelim-common-law/SKILL.md": {
115
+ "skills/clearance-common-law/SKILL.md": {
116
116
  "literal-json-skeleton": 0,
117
117
  "exactly-these-keys": 1,
118
118
  "dictated-line-shape": 2
119
119
  },
120
- "skills/prelim-register/SKILL.md": {
120
+ "skills/clearance-register/SKILL.md": {
121
121
  "literal-json-skeleton": 0,
122
122
  "exactly-these-keys": 0,
123
123
  "dictated-line-shape": 4
124
124
  },
125
- "skills/prelim-register/unit.md": {
125
+ "skills/clearance-register/unit.md": {
126
126
  "literal-json-skeleton": 5,
127
127
  "exactly-these-keys": 0,
128
128
  "dictated-line-shape": 6
@@ -132,12 +132,12 @@
132
132
  "exactly-these-keys": 3,
133
133
  "dictated-line-shape": 1
134
134
  },
135
- "skills/prelim-register/digest.md": {
135
+ "skills/clearance-register/digest.md": {
136
136
  "literal-json-skeleton": 1,
137
137
  "exactly-these-keys": 1,
138
138
  "dictated-line-shape": 4
139
139
  },
140
- "skills/prelim-search/phase2-execution.md": {
140
+ "skills/clearance-search/phase2-execution.md": {
141
141
  "literal-json-skeleton": 0,
142
142
  "exactly-these-keys": 0,
143
143
  "dictated-line-shape": 3
@@ -147,27 +147,27 @@
147
147
  "exactly-these-keys": 2,
148
148
  "dictated-line-shape": 0
149
149
  },
150
- "skills/prelim-search/synthesis-rules.md": {
150
+ "skills/clearance-search/synthesis-rules.md": {
151
151
  "literal-json-skeleton": 1,
152
152
  "exactly-these-keys": 1,
153
153
  "dictated-line-shape": 2
154
154
  },
155
- "skills/prelim-search/firm-wide-reasoning.md": {
155
+ "skills/clearance-search/firm-wide-reasoning.md": {
156
156
  "literal-json-skeleton": 0,
157
157
  "exactly-these-keys": 0,
158
158
  "dictated-line-shape": 0
159
159
  },
160
- "skills/prelim-search/risk-framework.md": {
160
+ "skills/clearance-search/risk-framework.md": {
161
161
  "literal-json-skeleton": 0,
162
162
  "exactly-these-keys": 0,
163
163
  "dictated-line-shape": 0
164
164
  },
165
- "skills/prelim-search/worked-examples.md": {
165
+ "skills/clearance-search/worked-examples.md": {
166
166
  "literal-json-skeleton": 0,
167
167
  "exactly-these-keys": 0,
168
168
  "dictated-line-shape": 1
169
169
  },
170
- "skills/prelim-search/report-prose.md": {
170
+ "skills/clearance-search/report-prose.md": {
171
171
  "literal-json-skeleton": 0,
172
172
  "exactly-these-keys": 0,
173
173
  "dictated-line-shape": 0
@@ -182,7 +182,7 @@
182
182
  "exactly-these-keys": 2,
183
183
  "dictated-line-shape": 1
184
184
  },
185
- "skills/prelim-search/delivery-contract.md": {
185
+ "skills/clearance-search/delivery-contract.md": {
186
186
  "literal-json-skeleton": 0,
187
187
  "exactly-these-keys": 1,
188
188
  "dictated-line-shape": 1