{
  "generated_at": "2026-04-19T00:17:17.880Z",
  "report_type": "importer",
  "project_id": "col-901831",
  "entity_id": "358048d9-7051-4e68-a31d-6122150352ce",
  "summary": {
    "p0": 12,
    "p1": 15,
    "p2": 18,
    "fail": 1,
    "warn": 3,
    "gate": "CONDITIONAL"
  },
  "groups": {
    "preview": [
      {
        "severity": "P0",
        "status": "pass",
        "title": "Preview fob_total_usd 与 fob_by_year 求和一致",
        "detail": "9780 vs 9780",
        "recommendation": "年度求和与总 FOB 打架时，应优先回查 Step 3 的 yearly aggregation。"
      },
      {
        "severity": "P0",
        "status": "pass",
        "title": "Preview latest_vs_peak_ratio 可从 fob_by_year 回算",
        "detail": "1 vs 1",
        "recommendation": "latest_vs_peak_ratio 是情景判断关键指标，不允许页面消费值和原始年度序列不一致。"
      },
      {
        "severity": "P0",
        "status": "pass",
        "title": "Preview china_penetration 在 [0,1] 范围内",
        "detail": "1",
        "recommendation": "渗透率越界会直接污染 penetration tier、scenario 和 priority。"
      },
      {
        "severity": "P1",
        "status": "warn",
        "title": "Preview priority_score_v2 与 decision_summary.priority_score 一致",
        "detail": "4.1 vs NaN",
        "recommendation": "评分展示和决策摘要必须吃同一个 final score。decision_summary 缺失时通常是 AI 路径未回填，不影响报告数据质量。"
      },
      {
        "severity": "P0",
        "status": "pass",
        "title": "Preview scenario.route 与 market_context.route 一致",
        "detail": "— vs —",
        "recommendation": "Importer route 默认必须继承 market_context.route；若有偏离，必须显式使用 route_override 并写明原因。"
      },
      {
        "severity": "P0",
        "status": "pass",
        "title": "Preview shared_aggregator_checksum anchors 与 snapshot truth 对齐",
        "detail": "FOB 9780 / suppliers 1 / china 1 / rank 127",
        "recommendation": "shared aggregator anchors 是 market/importer 共用 truth 的锚点，任一漂移都说明两边没有读同一份 importer truth。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Preview HHI / Top1 边界正确",
        "detail": "HHI 10000 · Top1 1",
        "recommendation": "HHI 应在 0-10000，Top1 share 应在 0-100%。"
      },
      {
        "severity": "P2",
        "status": "warn",
        "title": "Preview scenario / opportunity 已进入 decision_summary",
        "detail": "— / —",
        "recommendation": "如果 capability 声明 scenario 可用，decision_summary 里就必须有场景和机会类型。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Preview supplier_count 不小于 top supplier cards 数",
        "detail": "1 vs 1",
        "recommendation": "供应结构模块至少应覆盖 facts pack 已展示的 top suppliers。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Preview pricing/logistics render_status 符合 report mode",
        "detail": "mode=enriched · pricing=rendered · logistics=rendered",
        "recommendation": "Baseline 默认应标记为 computed_not_rendered；account/enriched 可按页面模块决定是否 rendered。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Preview metrics.top_supplier_name 与 facts_pack.top_suppliers[0] 同步",
        "detail": "XUYI WEBEST IMPORT & EXPORT CO., LTD vs XUYI WEBEST IMPORT & EXPORT CO., LTD",
        "recommendation": "top supplier 名称不同不一定是错，但应先确认是否因为 group rollup 或排序口径不同。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Preview priority_score_v2 有完整 score breakdown",
        "detail": "score breakdown present",
        "recommendation": "新版 v1.5 评分要求总分可解释，子分缺失会削弱可复核性。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Preview price_analysis capability 有实际指标支撑",
        "detail": "price_gap=— · band_count=1",
        "recommendation": "若 capability 声明 price_analysis 可用，至少应有 supplier_price_gap 或 price_band_count。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Preview procurement_rhythm 有原始日期区间支撑",
        "detail": "2010-05-12 → 2010-05-12",
        "recommendation": "采购节奏判断至少需要原始 shipment date 范围。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Preview market_benchmark capability 已写入 market context",
        "detail": "114599053.77000012",
        "recommendation": "如果要做 market benchmark，对应的 market total_fob 也要跟着写入 snapshot。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Preview facts / analysis artifacts 已生成",
        "detail": "facts=yes · analysis=yes",
        "recommendation": "Importer QA 时最好同时保留 facts.json 和 analysis-basis.json，方便对照模板消费层。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Preview contract / shared aggregator version 已写入 snapshot",
        "detail": "v1.0 / shared-aggregator-v1",
        "recommendation": "Importer artifacts 应显式写入 contract 与 shared aggregator 版本，便于后续定位 schema 或计算逻辑变化。"
      },
      {
        "severity": "P0",
        "status": "pass",
        "title": "Preview top_suppliers 无重复规范名",
        "detail": "1 suppliers listed",
        "recommendation": "在 step2 归一化阶段把 alias 指向同一 canonical supplier，避免 importer 报告里把同一家显示两次。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Preview share 字段在 [0, 1] 范围内",
        "detail": "china_penetration=1.000 · top_supplier_pct=1.000",
        "recommendation": "统一所有 share 字段为 0-1 浮点；渲染层 ×100 展示，避免同一报告里 \"0% → 94%\" 与 \"46% → 94%\" 两种口径同时出现。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Preview raw shipment 行数接近唯一 acceptation 数",
        "detail": "缺 unique acceptation 统计",
        "recommendation": "若 ratio > 1.05 说明 JOIN 放大了行数。raw shipment 表在导出时按 (acceptation_number) DISTINCT 去重。"
      }
    ],
    "live": [
      {
        "severity": "P0",
        "status": "pass",
        "title": "Live fob_total_usd 与 fob_by_year 求和一致",
        "detail": "9780 vs 9780",
        "recommendation": "年度求和与总 FOB 打架时，应优先回查 Step 3 的 yearly aggregation。"
      },
      {
        "severity": "P0",
        "status": "pass",
        "title": "Live latest_vs_peak_ratio 可从 fob_by_year 回算",
        "detail": "1 vs 1",
        "recommendation": "latest_vs_peak_ratio 是情景判断关键指标，不允许页面消费值和原始年度序列不一致。"
      },
      {
        "severity": "P0",
        "status": "pass",
        "title": "Live china_penetration 在 [0,1] 范围内",
        "detail": "1",
        "recommendation": "渗透率越界会直接污染 penetration tier、scenario 和 priority。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Live priority_score_v2 与 decision_summary.priority_score 一致",
        "detail": "4.1 vs 4.1",
        "recommendation": "评分展示和决策摘要必须吃同一个 final score。decision_summary 缺失时通常是 AI 路径未回填，不影响报告数据质量。"
      },
      {
        "severity": "P0",
        "status": "pass",
        "title": "Live scenario.route 与 market_context.route 一致",
        "detail": "retention vs retention",
        "recommendation": "Importer route 默认必须继承 market_context.route；若有偏离，必须显式使用 route_override 并写明原因。"
      },
      {
        "severity": "P0",
        "status": "pass",
        "title": "Live shared_aggregator_checksum anchors 与 snapshot truth 对齐",
        "detail": "FOB 9780 / suppliers 1 / china 1 / rank 130",
        "recommendation": "shared aggregator anchors 是 market/importer 共用 truth 的锚点，任一漂移都说明两边没有读同一份 importer truth。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Live HHI / Top1 边界正确",
        "detail": "HHI 10000 · Top1 1",
        "recommendation": "HHI 应在 0-10000，Top1 share 应在 0-100%。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Live scenario / opportunity 已进入 decision_summary",
        "detail": "样本不足 · 待核验 / 待核验型",
        "recommendation": "如果 capability 声明 scenario 可用，decision_summary 里就必须有场景和机会类型。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Live supplier_count 不小于 top supplier cards 数",
        "detail": "1 vs 1",
        "recommendation": "供应结构模块至少应覆盖 facts pack 已展示的 top suppliers。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Live pricing/logistics render_status 符合 report mode",
        "detail": "mode=baseline · pricing=computed_not_rendered · logistics=computed_not_rendered",
        "recommendation": "Baseline 默认应标记为 computed_not_rendered；account/enriched 可按页面模块决定是否 rendered。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Live metrics.top_supplier_name 与 facts_pack.top_suppliers[0] 同步",
        "detail": "XUYI WEBEST IMPORT & EXPORT CO., LTD vs XUYI WEBEST IMPORT & EXPORT CO., LTD",
        "recommendation": "top supplier 名称不同不一定是错，但应先确认是否因为 group rollup 或排序口径不同。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Live priority_score_v2 有完整 score breakdown",
        "detail": "score breakdown present",
        "recommendation": "新版 v1.5 评分要求总分可解释，子分缺失会削弱可复核性。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Live price_analysis capability 有实际指标支撑",
        "detail": "price_gap=— · band_count=1",
        "recommendation": "若 capability 声明 price_analysis 可用，至少应有 supplier_price_gap 或 price_band_count。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Live procurement_rhythm 有原始日期区间支撑",
        "detail": "2010-05-12 → 2010-05-12",
        "recommendation": "采购节奏判断至少需要原始 shipment date 范围。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Live market_benchmark capability 已写入 market context",
        "detail": "99375254.12000006",
        "recommendation": "如果要做 market benchmark，对应的 market total_fob 也要跟着写入 snapshot。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Live facts / analysis artifacts 已生成",
        "detail": "facts=yes · analysis=yes",
        "recommendation": "Importer QA 时最好同时保留 facts.json 和 analysis-basis.json，方便对照模板消费层。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Live contract / shared aggregator version 已写入 snapshot",
        "detail": "v1.0 / shared-aggregator-v1",
        "recommendation": "Importer artifacts 应显式写入 contract 与 shared aggregator 版本，便于后续定位 schema 或计算逻辑变化。"
      },
      {
        "severity": "P0",
        "status": "pass",
        "title": "Live top_suppliers 无重复规范名",
        "detail": "1 suppliers listed",
        "recommendation": "在 step2 归一化阶段把 alias 指向同一 canonical supplier，避免 importer 报告里把同一家显示两次。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Live share 字段在 [0, 1] 范围内",
        "detail": "china_penetration=1.000 · top_supplier_pct=1.000",
        "recommendation": "统一所有 share 字段为 0-1 浮点；渲染层 ×100 展示，避免同一报告里 \"0% → 94%\" 与 \"46% → 94%\" 两种口径同时出现。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Live raw shipment 行数接近唯一 acceptation 数",
        "detail": "缺 unique acceptation 统计",
        "recommendation": "若 ratio > 1.05 说明 JOIN 放大了行数。raw shipment 表在导出时按 (acceptation_number) DISTINCT 去重。"
      }
    ],
    "cross_mode": [
      {
        "severity": "P1",
        "status": "pass",
        "title": "Preview / Live total_fob 一致",
        "detail": "9780 vs 9780",
        "recommendation": "preview 和 live 总量漂移通常说明 publish 复制了旧 artifacts。"
      },
      {
        "severity": "P1",
        "status": "pass",
        "title": "Preview / Live priority score 一致",
        "detail": "4.1 vs 4.1",
        "recommendation": "priority score 不应在 publish 后悄悄换版本。"
      },
      {
        "severity": "P1",
        "status": "fail",
        "title": "Preview / Live scenario label 一致",
        "detail": "— vs 样本不足 · 待核验",
        "recommendation": "场景标签变化会直接影响 verdict 和 resource boundary。"
      },
      {
        "severity": "P2",
        "status": "warn",
        "title": "Preview / Live latest_vs_peak_ratio 一致",
        "detail": "— vs —",
        "recommendation": "趋势核心指标漂移时，要优先回查 publish 复制链路。"
      },
      {
        "severity": "P2",
        "status": "pass",
        "title": "Preview / Live supplier_count 一致",
        "detail": "1 vs 1",
        "recommendation": "供应商计数变化会连带影响 HHI、Top1、机会判断。"
      }
    ]
  },
  "findings": [
    {
      "severity": "P0",
      "status": "pass",
      "title": "Preview fob_total_usd 与 fob_by_year 求和一致",
      "detail": "9780 vs 9780",
      "recommendation": "年度求和与总 FOB 打架时，应优先回查 Step 3 的 yearly aggregation。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Preview latest_vs_peak_ratio 可从 fob_by_year 回算",
      "detail": "1 vs 1",
      "recommendation": "latest_vs_peak_ratio 是情景判断关键指标，不允许页面消费值和原始年度序列不一致。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Preview china_penetration 在 [0,1] 范围内",
      "detail": "1",
      "recommendation": "渗透率越界会直接污染 penetration tier、scenario 和 priority。"
    },
    {
      "severity": "P1",
      "status": "warn",
      "title": "Preview priority_score_v2 与 decision_summary.priority_score 一致",
      "detail": "4.1 vs NaN",
      "recommendation": "评分展示和决策摘要必须吃同一个 final score。decision_summary 缺失时通常是 AI 路径未回填，不影响报告数据质量。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Preview scenario.route 与 market_context.route 一致",
      "detail": "— vs —",
      "recommendation": "Importer route 默认必须继承 market_context.route；若有偏离，必须显式使用 route_override 并写明原因。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Preview shared_aggregator_checksum anchors 与 snapshot truth 对齐",
      "detail": "FOB 9780 / suppliers 1 / china 1 / rank 127",
      "recommendation": "shared aggregator anchors 是 market/importer 共用 truth 的锚点，任一漂移都说明两边没有读同一份 importer truth。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Preview HHI / Top1 边界正确",
      "detail": "HHI 10000 · Top1 1",
      "recommendation": "HHI 应在 0-10000，Top1 share 应在 0-100%。"
    },
    {
      "severity": "P2",
      "status": "warn",
      "title": "Preview scenario / opportunity 已进入 decision_summary",
      "detail": "— / —",
      "recommendation": "如果 capability 声明 scenario 可用，decision_summary 里就必须有场景和机会类型。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Preview supplier_count 不小于 top supplier cards 数",
      "detail": "1 vs 1",
      "recommendation": "供应结构模块至少应覆盖 facts pack 已展示的 top suppliers。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Preview pricing/logistics render_status 符合 report mode",
      "detail": "mode=enriched · pricing=rendered · logistics=rendered",
      "recommendation": "Baseline 默认应标记为 computed_not_rendered；account/enriched 可按页面模块决定是否 rendered。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Preview metrics.top_supplier_name 与 facts_pack.top_suppliers[0] 同步",
      "detail": "XUYI WEBEST IMPORT & EXPORT CO., LTD vs XUYI WEBEST IMPORT & EXPORT CO., LTD",
      "recommendation": "top supplier 名称不同不一定是错，但应先确认是否因为 group rollup 或排序口径不同。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Preview priority_score_v2 有完整 score breakdown",
      "detail": "score breakdown present",
      "recommendation": "新版 v1.5 评分要求总分可解释，子分缺失会削弱可复核性。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Preview price_analysis capability 有实际指标支撑",
      "detail": "price_gap=— · band_count=1",
      "recommendation": "若 capability 声明 price_analysis 可用，至少应有 supplier_price_gap 或 price_band_count。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Preview procurement_rhythm 有原始日期区间支撑",
      "detail": "2010-05-12 → 2010-05-12",
      "recommendation": "采购节奏判断至少需要原始 shipment date 范围。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Preview market_benchmark capability 已写入 market context",
      "detail": "114599053.77000012",
      "recommendation": "如果要做 market benchmark，对应的 market total_fob 也要跟着写入 snapshot。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Preview facts / analysis artifacts 已生成",
      "detail": "facts=yes · analysis=yes",
      "recommendation": "Importer QA 时最好同时保留 facts.json 和 analysis-basis.json，方便对照模板消费层。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Preview contract / shared aggregator version 已写入 snapshot",
      "detail": "v1.0 / shared-aggregator-v1",
      "recommendation": "Importer artifacts 应显式写入 contract 与 shared aggregator 版本，便于后续定位 schema 或计算逻辑变化。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Preview top_suppliers 无重复规范名",
      "detail": "1 suppliers listed",
      "recommendation": "在 step2 归一化阶段把 alias 指向同一 canonical supplier，避免 importer 报告里把同一家显示两次。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Preview share 字段在 [0, 1] 范围内",
      "detail": "china_penetration=1.000 · top_supplier_pct=1.000",
      "recommendation": "统一所有 share 字段为 0-1 浮点；渲染层 ×100 展示，避免同一报告里 \"0% → 94%\" 与 \"46% → 94%\" 两种口径同时出现。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Preview raw shipment 行数接近唯一 acceptation 数",
      "detail": "缺 unique acceptation 统计",
      "recommendation": "若 ratio > 1.05 说明 JOIN 放大了行数。raw shipment 表在导出时按 (acceptation_number) DISTINCT 去重。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Live fob_total_usd 与 fob_by_year 求和一致",
      "detail": "9780 vs 9780",
      "recommendation": "年度求和与总 FOB 打架时，应优先回查 Step 3 的 yearly aggregation。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Live latest_vs_peak_ratio 可从 fob_by_year 回算",
      "detail": "1 vs 1",
      "recommendation": "latest_vs_peak_ratio 是情景判断关键指标，不允许页面消费值和原始年度序列不一致。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Live china_penetration 在 [0,1] 范围内",
      "detail": "1",
      "recommendation": "渗透率越界会直接污染 penetration tier、scenario 和 priority。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Live priority_score_v2 与 decision_summary.priority_score 一致",
      "detail": "4.1 vs 4.1",
      "recommendation": "评分展示和决策摘要必须吃同一个 final score。decision_summary 缺失时通常是 AI 路径未回填，不影响报告数据质量。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Live scenario.route 与 market_context.route 一致",
      "detail": "retention vs retention",
      "recommendation": "Importer route 默认必须继承 market_context.route；若有偏离，必须显式使用 route_override 并写明原因。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Live shared_aggregator_checksum anchors 与 snapshot truth 对齐",
      "detail": "FOB 9780 / suppliers 1 / china 1 / rank 130",
      "recommendation": "shared aggregator anchors 是 market/importer 共用 truth 的锚点，任一漂移都说明两边没有读同一份 importer truth。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Live HHI / Top1 边界正确",
      "detail": "HHI 10000 · Top1 1",
      "recommendation": "HHI 应在 0-10000，Top1 share 应在 0-100%。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Live scenario / opportunity 已进入 decision_summary",
      "detail": "样本不足 · 待核验 / 待核验型",
      "recommendation": "如果 capability 声明 scenario 可用，decision_summary 里就必须有场景和机会类型。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Live supplier_count 不小于 top supplier cards 数",
      "detail": "1 vs 1",
      "recommendation": "供应结构模块至少应覆盖 facts pack 已展示的 top suppliers。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Live pricing/logistics render_status 符合 report mode",
      "detail": "mode=baseline · pricing=computed_not_rendered · logistics=computed_not_rendered",
      "recommendation": "Baseline 默认应标记为 computed_not_rendered；account/enriched 可按页面模块决定是否 rendered。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Live metrics.top_supplier_name 与 facts_pack.top_suppliers[0] 同步",
      "detail": "XUYI WEBEST IMPORT & EXPORT CO., LTD vs XUYI WEBEST IMPORT & EXPORT CO., LTD",
      "recommendation": "top supplier 名称不同不一定是错，但应先确认是否因为 group rollup 或排序口径不同。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Live priority_score_v2 有完整 score breakdown",
      "detail": "score breakdown present",
      "recommendation": "新版 v1.5 评分要求总分可解释，子分缺失会削弱可复核性。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Live price_analysis capability 有实际指标支撑",
      "detail": "price_gap=— · band_count=1",
      "recommendation": "若 capability 声明 price_analysis 可用，至少应有 supplier_price_gap 或 price_band_count。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Live procurement_rhythm 有原始日期区间支撑",
      "detail": "2010-05-12 → 2010-05-12",
      "recommendation": "采购节奏判断至少需要原始 shipment date 范围。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Live market_benchmark capability 已写入 market context",
      "detail": "99375254.12000006",
      "recommendation": "如果要做 market benchmark，对应的 market total_fob 也要跟着写入 snapshot。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Live facts / analysis artifacts 已生成",
      "detail": "facts=yes · analysis=yes",
      "recommendation": "Importer QA 时最好同时保留 facts.json 和 analysis-basis.json，方便对照模板消费层。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Live contract / shared aggregator version 已写入 snapshot",
      "detail": "v1.0 / shared-aggregator-v1",
      "recommendation": "Importer artifacts 应显式写入 contract 与 shared aggregator 版本，便于后续定位 schema 或计算逻辑变化。"
    },
    {
      "severity": "P0",
      "status": "pass",
      "title": "Live top_suppliers 无重复规范名",
      "detail": "1 suppliers listed",
      "recommendation": "在 step2 归一化阶段把 alias 指向同一 canonical supplier，避免 importer 报告里把同一家显示两次。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Live share 字段在 [0, 1] 范围内",
      "detail": "china_penetration=1.000 · top_supplier_pct=1.000",
      "recommendation": "统一所有 share 字段为 0-1 浮点；渲染层 ×100 展示，避免同一报告里 \"0% → 94%\" 与 \"46% → 94%\" 两种口径同时出现。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Live raw shipment 行数接近唯一 acceptation 数",
      "detail": "缺 unique acceptation 统计",
      "recommendation": "若 ratio > 1.05 说明 JOIN 放大了行数。raw shipment 表在导出时按 (acceptation_number) DISTINCT 去重。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Preview / Live total_fob 一致",
      "detail": "9780 vs 9780",
      "recommendation": "preview 和 live 总量漂移通常说明 publish 复制了旧 artifacts。"
    },
    {
      "severity": "P1",
      "status": "pass",
      "title": "Preview / Live priority score 一致",
      "detail": "4.1 vs 4.1",
      "recommendation": "priority score 不应在 publish 后悄悄换版本。"
    },
    {
      "severity": "P1",
      "status": "fail",
      "title": "Preview / Live scenario label 一致",
      "detail": "— vs 样本不足 · 待核验",
      "recommendation": "场景标签变化会直接影响 verdict 和 resource boundary。"
    },
    {
      "severity": "P2",
      "status": "warn",
      "title": "Preview / Live latest_vs_peak_ratio 一致",
      "detail": "— vs —",
      "recommendation": "趋势核心指标漂移时，要优先回查 publish 复制链路。"
    },
    {
      "severity": "P2",
      "status": "pass",
      "title": "Preview / Live supplier_count 一致",
      "detail": "1 vs 1",
      "recommendation": "供应商计数变化会连带影响 HHI、Top1、机会判断。"
    }
  ]
}