{
  "_doc": "INFRA-F58 文档依赖映射 + 跨文件 staleness 事实。真源关系总表见 docs/STATUS.md §SoT 归属表。",
  "_usage": "改了 whenYouEdit 里的东西 → 必须复查 recheck 列表里的文档。audit:doc-sync 校验：(1) 所有路径存在（防 map 自身 stale）(2) crossFileFacts 里登记的事实在所有引用点一致。",
  "edges": [
    {
      "whenYouEdit": "src/canonical/ButtonBridge.vue (defineProps)",
      "recheck": [
        "docs/GETTING_STARTED.md",
        "README.md",
        "docs/MIGRATION_TO_V1.md",
        "src/web-components/components.config.ts"
      ],
      "why": "Button 公开 API（prop 名 / 取值 / 默认值）；文档示例必须与 SFC 一致（F58 实证曾漂移到不存在的 variant='fill-green' / canonical-style）"
    },
    {
      "whenYouEdit": "package.json version（发版）",
      "recheck": ["docs/STATUS.md", "CHANGELOG.md"],
      "why": "npm 版本字面真源只在 STATUS §当前版本；de-mirror 闸禁止其余耐久文档写字面版本"
    },
    {
      "whenYouEdit": "figma-data/render-verification-manifest.json（重生成 / 增删 entry）",
      "recheck": [
        "docs/FIGMA_AS_SOURCE_OF_TRUTH.md",
        "docs/PROJECT_GOAL.md",
        "docs/STATUS.md"
      ],
      "why": "manifest entry 计数在多份文档被引用（F58 实证 908 vs 930 漂移）；crossFileFacts.manifestEntryCount 机械核"
    },
    {
      "whenYouEdit": "5 能力的成熟度 / 状态",
      "recheck": ["docs/STATUS.md (§能力×成熟度表)", "docs/PROJECT_GOAL.md (§一句话目标)"],
      "why": "能力定义真源 = PROJECT_GOAL；成熟度真源 = STATUS 能力表。承诺-vs-实现落差（assessment §5）易 stale"
    },
    {
      "whenYouEdit": "plugin 版本 / skill 清单",
      "recheck": ["docs/PLUGIN.md"],
      "why": "plugin 版本真源 = PLUGIN.md（与 npm 版本独立）"
    }
  ],
  "crossFileFacts": [
    {
      "id": "manifestEntryCount",
      "authority": {
        "type": "json-array-length",
        "path": "figma-data/render-verification-manifest.json"
      },
      "referencedIn": [
        "docs/FIGMA_AS_SOURCE_OF_TRUTH.md",
        "docs/PROJECT_GOAL.md",
        "docs/STATUS.md"
      ],
      "pattern": "(\\d{3,5})\\s*(?:entries|条)",
      "note": "任何 docs 里 'N entries' / 'N 条' 靠近 manifest 语境的数字必须等于 manifest 真实长度。允许多处引用，但都必须匹配真值。"
    }
  ]
}
