{
  "schemaVersion": "1.0.0",
  "scope": "long-image",
  "sourceBatches": [
    {
      "id": "shenghuohao-existing",
      "name": "生活号原有长图样式",
      "priority": 1,
      "input": {"kind": "historical-catalog", "sourceId": "shenghuohao"}
    },
    {
      "id": "kuaishou-portrait-20261013",
      "name": "后输入的竖版长图组件",
      "priority": 2,
      "input": {"kind": "historical-catalog", "sourceId": "kuaishou"}
    }
  ],
  "policy": {
    "functionalGrouping": "explicit-semantic-membership",
    "defaultSelection": "highest-batch-priority-then-preferred-default-then-member-order",
    "defaultDefinition": "copy-winning-variant-without-contract-union",
    "variantPreservation": "complete-original-definition-plus-variantName-and-sourceBatchId",
    "aliases": "every-source-id-resolves-to-one-canonical-component-including-canonical-ids",
    "futureBatches": "Register a unique source batch with a higher integer priority and explicit functional group membership; highest priority automatically overrides an older preferredDefault. No semantic merging is inferred from names.",
    "futureBatchInput": "A long-image-variants-json input names a path containing an array, or an object with variants, of complete unmerged portrait definitions with globally unique source variant IDs.",
    "contentSelection": "The highest-priority default is the preferred presentation for compatible content. Preserve each variant's own fields, semantics, units, direction, scale, image and source rules; do not coerce incompatible content into the default."
  },
  "expectedCoverage": {"components": 23, "variants": 56, "existing": 31, "imported": 25},
  "groups": [
    {
      "id": "shh.hero", "name": "头图", "family": "hero",
      "description": "在长图开头展示品牌、主题与插画，可选择附带活动标签的样式。",
      "preferredDefault": "shh.hero",
      "members": [{"id": "shh.hero", "variantName": "标准头图"}, {"id": "shh.hero-tags", "variantName": "活动标签"}],
      "reason": "两项均为长图头图，标签是可选内容与样式差异。",
      "rules": ["保留标题、重点原文、品牌资产与可选标签；不把头图降为章节标题。"]
    },
    {
      "id": "ks.card.main", "name": "主内容卡", "family": "container",
      "description": "承载一个完整章节，组织标题与所属正文、图像或数据。",
      "preferredDefault": "ks.card.main",
      "members": [{"id": "ks.card.main", "variantName": "章节主卡"}],
      "reason": "主卡承担章节级内容容器职责，没有原有等价独立组件。",
      "rules": ["仅组织结构，不虚构正文槽位；不能与章节内的子卡互换层级。"]
    },
    {
      "id": "ks.card.sub", "name": "内层内容卡", "family": "container",
      "description": "在章节内承载一组相关内容，以卡面区分信息层级。",
      "preferredDefault": "ks.card.sub",
      "members": [{"id": "ks.card.sub", "variantName": "内嵌子卡"}],
      "reason": "子卡属于章节内部层级，不能与主内容卡机械合并。",
      "rules": ["保留嵌套层级与所属内容，不把子卡作为整章容器。"]
    },
    {
      "id": "ks.section.header", "name": "章节标题", "family": "container",
      "description": "用章节标题和编号划分长图的阅读顺序。",
      "preferredDefault": "ks.section.header",
      "members": [{"id": "ks.section.header", "variantName": "标题与编号"}],
      "reason": "章节标题承担分区导航功能，与头图和正文的内容职责不同。",
      "rules": ["保留原始章节顺序与编号；不以标题组件代替正文内容。"]
    },
    {
      "id": "ks.body.verticalText", "name": "正文说明", "family": "text",
      "description": "展开一个主题及其说明，按内容选择横排、竖排、重点或多段样式。",
      "preferredDefault": "ks.body.verticalText",
      "members": [
        {"id": "ks.body.verticalText", "variantName": "上下排"},
        {"id": "ks.body.horizontalText", "variantName": "左右排"},
        {"id": "ks.body.verticalHighlight", "variantName": "纵向重点"},
        {"id": "ks.body.horizontalHighlight", "variantName": "横向重点"},
        {"id": "shh.prose", "variantName": "经典正文卡"},
        {"id": "shh.prose-intro", "variantName": "多段引入"},
        {"id": "shh.prose-sections", "variantName": "多段与小标题"},
        {"id": "shh.prose-details", "variantName": "总述与分段解释"}
      ],
      "reason": "都以标题或标签关联正文说明；排布、强调和段落组织作为保留原契约的变体。",
      "rules": [
        "多段与分项说明保留子标题、段落和父子关系，不压平为单个正文字符串。",
        "只高亮原文明确指定的内容；不推断、改写或删减重点。",
        "不同变体字段契约独立；默认上下排定义不能取代其他变体的分段字段。"
      ]
    },
    {
      "id": "ks.body.highlights", "name": "分项说明", "family": "text",
      "description": "按条目组织能力、任务、问题或亮点，每项标题与说明保持关联。",
      "preferredDefault": "ks.body.highlights",
      "members": [
        {"id": "ks.body.highlights", "variantName": "关键词列表"},
        {"id": "shh.bullet-panels", "variantName": "纵向面板"},
        {"id": "shh.bullet-problems", "variantName": "问题解释"},
        {"id": "shh.bullet-tasks", "variantName": "任务说明"},
        {"id": "shh.feature-panels", "variantName": "功能分组"}
      ],
      "reason": "各项均为关联标题与正文的说明列表，内容主题和面板排布不构成独立功能。",
      "rules": ["完整保留每项标题与正文及原始顺序。", "问题说明不等于错误做法；不能自动添加错误标记或流程箭头。"]
    },
    {
      "id": "ks.body.verticalImage", "name": "图文说明", "family": "image",
      "description": "组合说明文字与对应图片，按内容选择纵向图文或同排多图。",
      "preferredDefault": "ks.body.verticalImage",
      "members": [{"id": "ks.body.verticalImage", "variantName": "上下图文"}, {"id": "ks.body.horizontalImage", "variantName": "同排多图"}],
      "reason": "两项均为文字与证据图片的对应说明，排布作为变体。",
      "rules": ["保留图片、说明和来源顺序，按原比例完整展示。", "横向变体声明的同排图片锁定规则不能因合并而丢失；无原文依据不得换行或裁切。"]
    },
    {
      "id": "ks.metric.primaryIncrease", "name": "指标展示", "family": "metric",
      "description": "突出真实指标、变化量及单位，可选择增长、下降或多项指标样式。",
      "preferredDefault": "ks.metric.primaryIncrease",
      "members": [
        {"id": "ks.metric.primaryIncrease", "variantName": "重点增长"},
        {"id": "ks.metric.primaryDecrease", "variantName": "重点下降"},
        {"id": "ks.metric.secondary", "variantName": "多项指标"},
        {"id": "shh.metric-increase", "variantName": "经典增长卡"},
        {"id": "shh.metric-decrease", "variantName": "经典下降卡"},
        {"id": "shh.increase-illustrative", "variantName": "涨幅示意"}
      ],
      "reason": "这些组件都展示带名称与单位的实际指标；方向、数量与示意装饰保留为各自变体。",
      "rules": [
        "升降方向由实际内容决定，下降数据不能自动套用增长默认变体。",
        "百分比、百分点、倍数和绝对值保持原单位与计算口径。",
        "涨幅示意中的图形不是数值比例尺；缺失前后基线时不得补造数值或按图形高度反推。",
        "多项指标完整保留全部项目，不按参考容量截断。"
      ]
    },
    {
      "id": "ks.chart.lineTrend", "name": "折线图", "family": "chart",
      "description": "呈现有来源依据的时间或阶段趋势，提供标准与紧凑样式。",
      "preferredDefault": "ks.chart.lineTrend",
      "members": [{"id": "ks.chart.lineTrend", "variantName": "标准折线"}, {"id": "ks.chart.lineTrendCompact", "variantName": "紧凑折线"}],
      "reason": "两项具有相同折线数据含义，仅图形区域与布局密度不同。",
      "rules": ["保留全部系列、标签及时间或阶段顺序；几何识别需要人工复核。", "不从示意曲线推算未知数值，不与仅有前后标签的阶段变化示意互换。"]
    },
    {
      "id": "ks.chart.barCompare", "name": "数值对比图", "family": "chart",
      "description": "对比真实数值或有来源的变化量，按前后、两项或多项关系选择样式。",
      "preferredDefault": "ks.chart.barCompare",
      "members": [
        {"id": "ks.chart.barCompare", "variantName": "分组柱状对比"},
        {"id": "shh.increase-comparison", "variantName": "两项数值"},
        {"id": "shh.multi-comparison", "variantName": "多项数值"}
      ],
      "reason": "均用于数值间的柱状比较；具体数据模式与比例尺约束保留在原变体内。",
      "rules": [
        "独立指标的前后变化、分类系列矩阵、单系列分类数据分别保持各自数据结构。",
        "可比较的同单位真实数值使用共享比例尺与零基线；不把不同单位合用一个比例尺。",
        "只有变化量而缺少基线时，不补造前后数值；不得用装饰性柱高冒充量化关系。",
        "不与文字方案对比或涨幅示意互换。"
      ]
    },
    {
      "id": "ks.chart.comparisonTable", "name": "信息表格", "family": "table",
      "description": "按行列组织对比、行业数据、条件权益或键值信息，保留完整对应关系。",
      "preferredDefault": "ks.chart.comparisonTable",
      "members": [
        {"id": "ks.chart.comparisonTable", "variantName": "标准对比表"},
        {"id": "ks.chart.industryTable", "variantName": "紧凑行业表"},
        {"id": "shh.table-information", "variantName": "多维信息"},
        {"id": "shh.table-incentives", "variantName": "权益与条件"},
        {"id": "shh.comparison-products", "variantName": "产品与方案"},
        {"id": "shh.key-value", "variantName": "两列键值"},
        {"id": "shh.key-value-timeline", "variantName": "阶段时间线"},
        {"id": "shh.metric-rows", "variantName": "逐行指标"}
      ],
      "reason": "功能均为以行列关联结构化信息；业务主题、列数和表格外观作为变体。",
      "rules": [
        "保留表头、单元格、合并关系、附注、原始顺序与适用条件。",
        "键值、矩阵和行业表的字段结构不同，保留原契约，不能仅凭主表样式重解释输入。",
        "阶段时间线的行序具有意义；不得随意排序。",
        "来源缺失的值保持缺失，不用零值或推算值填充。"
      ]
    },
    {
      "id": "ks.link.iconFlow", "name": "业务流程", "family": "flow",
      "description": "用短节点、图标和连接关系说明业务推进顺序。",
      "preferredDefault": "ks.link.iconFlow",
      "members": [{"id": "ks.link.iconFlow", "variantName": "图标流程"}, {"id": "shh.compact-steps", "variantName": "简短节点"}],
      "reason": "两项均表达短节点组成的有序链路，图标与节点样式作为变体。",
      "rules": ["保留节点与连接顺序，不能变为无序亮点。", "简短节点超出原容量时改用完整步骤变体或增加布局空间，不截断说明。"]
    },
    {
      "id": "ks.link.functionScreens", "name": "截图链路", "family": "image",
      "description": "用连续界面截图呈现功能路径，完整展示每张图及其顺序。",
      "preferredDefault": "ks.link.functionScreens",
      "members": [{"id": "ks.link.functionScreens", "variantName": "连续截图"}],
      "reason": "截图本身承载功能路径证据，不能归并为以图标代替截图的流程。",
      "rules": ["保留全部截图、次序与完整比例；不得裁切或用图标替换。", "源规则不换行的图组保持关系，容量不足时调整画布或明确选择其他兼容排布。"]
    },
    {
      "id": "ks.content.compare", "name": "内容对比", "family": "content",
      "description": "并列展示两种状态、做法或方案，保持对应条目间的关系。",
      "preferredDefault": "ks.content.compare",
      "members": [{"id": "ks.content.compare", "variantName": "双栏对比"}, {"id": "shh.before-after", "variantName": "前后面板与表格"}],
      "reason": "两项均表达文字状态或方案的一一对应，而非数值比例关系。",
      "rules": ["前后面板只在短标题且一一对应时使用；其他情况保留完整表格。", "不把定性方案对比转换为数值柱图。"]
    },
    {
      "id": "ks.content.errorList", "name": "错误示例", "family": "content",
      "description": "逐项说明错误做法及其原因，保留原有错误标记。",
      "preferredDefault": "ks.content.errorList",
      "members": [{"id": "ks.content.errorList", "variantName": "逐项错误说明"}],
      "reason": "错误标记具有明确判断含义，普通问题说明和亮点列表不具备这一含义。",
      "rules": ["只标记原文已确认的错误；项目数量与来源一致。", "不得因主题消极就把普通问题列表标为错误做法。"]
    },
    {
      "id": "ks.content.steps", "name": "操作步骤", "family": "flow",
      "description": "逐步展开操作说明，可配对应截图，保持完整步骤和顺序。",
      "preferredDefault": "ks.content.steps",
      "members": [
        {"id": "ks.content.steps", "variantName": "编号图文"},
        {"id": "shh.instruction-steps", "variantName": "详细操作说明"},
        {"id": "shh.instruction-plan", "variantName": "计划搭建说明"}
      ],
      "reason": "都以有序操作说明关联可选图片；编号和图文排布作为样式变体。",
      "rules": ["保留步骤顺序、标题、完整操作说明及图片对应关系。", "原生活号变体的缺图策略为收起图位，不生成假截图或占位图替代证据。", "长操作说明不能压缩为简短业务流程节点。"]
    },
    {
      "id": "ks.customer.nameSubtitle", "name": "客户信息", "family": "customer",
      "description": "展示客户身份，可选择仅名称或附带背景说明的样式。",
      "preferredDefault": "ks.customer.nameSubtitle",
      "members": [{"id": "ks.customer.nameSubtitle", "variantName": "名称与背景"}, {"id": "ks.customer.singleName", "variantName": "仅客户名称"}],
      "reason": "两项都用于客户身份信息；背景是否存在决定选用的变体。",
      "rules": ["仅名称变体保留其禁止背景、头像和 Logo 内容槽位的规则。", "名称与背景变体保留必填背景约束，不伪造缺失背景。", "不与包含正文和成果的完整案例块互换。"]
    },
    {
      "id": "shh.case-showcase", "name": "案例展示", "family": "content",
      "description": "关联客户资料、实际做法和成果，完整讲述一个案例。",
      "preferredDefault": "shh.case-showcase",
      "members": [{"id": "shh.case-showcase", "variantName": "案例资料与成果"}],
      "reason": "这是客户资料、长说明与成果组成的复合内容，新增客户信息不能完整替代。",
      "rules": ["保留资料、正文、成果之间的关联与数据来源。", "成果图形为示意时，不能从几何推算数据。"]
    },
    {
      "id": "shh.trend-change", "name": "阶段变化示意", "family": "chart",
      "description": "以真实前后标签和变化结论说明阶段变化，图形仅作示意。",
      "preferredDefault": "shh.trend-change",
      "members": [{"id": "shh.trend-change", "variantName": "前后阶段示意"}],
      "reason": "仅有前后端点标签的变化示意不等于具备完整时序数值的折线图。",
      "rules": ["保留前后标签和真实结论，不补造中间时间点或数值。", "图形几何不是比例尺，不能从图形高度反推数据。"]
    },
    {
      "id": "shh.lead", "name": "引导语", "family": "text",
      "description": "在内容段落之间承接主题，引出后续正文。",
      "preferredDefault": "shh.lead",
      "members": [{"id": "shh.lead", "variantName": "独立引导文字"}],
      "reason": "引导语承担文档承接角色，新增带标签正文卡没有等价位置语义。",
      "rules": ["保留与前后内容的关系，不强加不存在的标题或标签。"]
    },
    {
      "id": "shh.caption", "name": "补充说明", "family": "text",
      "description": "呈现必要的条件、来源、口径和附注。",
      "preferredDefault": "shh.caption",
      "members": [{"id": "shh.caption", "variantName": "附注与来源"}],
      "reason": "补充说明具有约束和来源职责，不能作为普通正文删除或随意升格。",
      "rules": ["保留附注作用范围与适用条件；不能因样式合并而省略。"]
    },
    {
      "id": "shh.qa", "name": "常见问答", "family": "content",
      "description": "逐项呈现问题与对应回答，解释使用疑问。",
      "preferredDefault": "shh.qa",
      "members": [{"id": "shh.qa", "variantName": "问题与回答"}],
      "reason": "问答配对具有明确关系，新增说明列表没有等价问答契约。",
      "rules": ["完整保留每个问题及其对应回答，不拆散或改写为无序亮点。"]
    },
    {
      "id": "shh.qr", "name": "二维码入口", "family": "links",
      "description": "展示真实二维码与行动说明，作为长图的后续操作入口。",
      "preferredDefault": "shh.qr",
      "members": [{"id": "shh.qr", "variantName": "二维码与行动说明"}],
      "reason": "二维码携带真实行动目标，普通图文组件不能保留其链接职责。",
      "rules": ["使用真实二维码并保留目标与说明关系；不得替换为示意二维码。"]
    }
  ]
}
