{
  "_meta": "PRIVATE, gitignored. Drives scripts/split-registry-provenance.mjs (a generic engine that carries none of these names). provenanceKeys = keys swept wholesale to the sidecar; noteKeySuffix = any key ending in this also swept; buildDropValue = a subpath build-annotation value to sweep; rewrites = surgical prose cleans on kept structural fields; bannedTokens = the public-boundary denylist asserted against the cleaned registry + taglines.",
  "provenanceKeys": [
    "census", "verified_by", "bestDonor", "harvest", "donor_facts", "note", "r5_note",
    "donors", "watch", "status_review", "dissolved", "excluded", "rejected", "_not_plugins",
    "_census_gaps"
  ],
  "noteKeySuffix": "_note",
  "buildDropValue": "harvest",
  "rewrites": [
    { "path": "statusLegend.candidate", "find": "donors present but gates not yet passed", "replace": "a hypothesis whose gates are not yet passed" },
    { "path": "statusLegend.WATCH", "find": "1 donor OR divergent seams — do not build until a 2nd convergent consumer appears", "replace": "divergent or unproven shape — do not build until a 2nd convergent consumer appears" },
    { "path": "decoupling.rule", "find": "is DISSOLVED (census x0, 2026-06-14)", "replace": "was removed (no internal usage, 2026-06-14)" },
    { "path": "testing_doubles.rule", "find": "multideal mock_emails", "replace": "a mock-email store" },
    { "path": "modules.@platform-modules/record-store.contract", "find": "consumer #1 (multideal embed)", "replace": "the first consumer" },
    { "path": "modules.@platform-modules/record-store.freeze_criterion", "find": "a NON-donor app confirms", "replace": "a real adopter confirms" },
    { "path": "plugins.blog.status", "find": "content = the one net-new module, make-with-harvest", "replace": "the one net-new content module" },
    { "path": "plugins.integrations.status", "find": "WATCH x1 (zync only) — do NOT build at x1; forward-need SaaS class (donor-capability-inventory New finding #4)", "replace": "WATCH — not built; forward-need for the SaaS class" }
  ],
  "_seam_note": "\"seam\" is NOT donor language — it is the contract-boundary doctrine word (\"strict at the seam\", adapter seam), public-intended throughout CLAUDE.md + coding-standard. Donor-ness lives in the CONTEXT around it (\"extracted X seam from <app>\"), never the word. Keep \"seam\"; clean only its donor-context neighbours.",
  "bannedTokens": [
    "multideal", "zync", "forumzone", "commentpresszone", "presszone", "press.zone",
    "trance-shop", "trance shop", "fewtok", "vibeflare", "tamlil",
    "donor", "harvest", "census", "extraction", "extracted", "donor-mining", "best donor"
  ]
}
