{ "results": [ { "flow": "R01", "case": "page 列表(按版本维度)", "verdict": "✅", "evidence": "total=7 绑定数字段=无(符合注释契约)" }, { "flow": "R01", "case": "种子模板节点结构(末位固定节点 isFixed=1)", "verdict": "✅", "evidence": "节点 5 个 末位=OPP_STAGE_05" }, { "flow": "R01", "case": "save-draft 缺模板名", "verdict": "✅", "evidence": "被拒: code=64013 msg=模板名称不能为空" }, { "flow": "R01", "case": "applyScope=2 无部门", "verdict": "✅", "evidence": "被拒: code=64013 msg=指定部门模板须选择至少一个适用部门" }, { "flow": "R01", "case": "部门专用设默认", "verdict": "✅", "evidence": "被拒: code=64013 msg=仅所有商机范围的模板可设为默认" }, { "flow": "R01", "case": "固定节点手工配置(OPP_STAGE_05)", "verdict": "✅", "evidence": "被拒: code=64013 msg=「已转项目」为系统固定节点,不可在阶段列表中手工配置" }, { "flow": "R01", "case": "无节点草稿可暂存", "verdict": "✅", "evidence": "" }, { "flow": "R01", "case": "空模板 publish(除固定节点外至少一个)", "verdict": "✅", "evidence": "被拒: code=64017 msg=除固定节点外至少创建一个阶段节点" }, { "flow": "R01", "case": "新建草稿 V1.0 + 节点规范化(末位系统补固定节点)", "verdict": "✅", "evidence": "code=OPP_STAGE_TPL_08 v=V1.0 节点=3" }, { "flow": "R01", "case": "草稿原位编辑(版本编码不变、versions 仍 1 行)", "verdict": "✅", "evidence": "v=V1.0 versions=1" }, { "flow": "R01", "case": "publish → 发布中", "verdict": "✅", "evidence": "status=2" }, { "flow": "R01", "case": "copy → 独立新编码 V1.0 草稿(节点随复制)", "verdict": "✅", "evidence": "newCode=OPP_STAGE_TPL_09 节点=4" }, { "flow": "R01", "case": "disable 草稿(仅发布中可停用)", "verdict": "✅", "evidence": "被拒: code=64013 msg=仅发布中的模板可停用" }, { "flow": "R01", "case": "delete 草稿(级联删节点/部门)", "verdict": "✅", "evidence": "" }, { "flow": "R01", "case": "versions 出参(实体直出检查 ADR-0017)", "verdict": "⚠", "evidence": "内部字段泄露=['creatorId', 'deleted', 'updaterId'] keys=['applyScope', 'createTime', 'creatorId', 'deleted', 'id', 'isDefault', 'status', 'templateCode', 'templateDesc', 'templateName', 'updateTime', 'updaterId']" }, { "flow": "R01", "case": "编辑发布中 → 生新草稿 V1.1", "verdict": "❌", "evidence": "code=50001 msg=系统内部错误,请稍后重试" }, { "flow": "R01", "case": "publish V1.1 自我顶替(V1.0 转停用)", "verdict": "⚠", "evidence": "被上条 P1 阻断(新草稿无法生成);顶替语义旁证:票07 U02 发布禁领版时 seed 规则被顶替取消默认" }, { "flow": "R01", "case": "绑定锁版本:A1 商机阶段节点集不受新模板发布影响", "verdict": "✅", "evidence": "A1 progress 5 节点(种子 5)" }, { "flow": "R01", "case": "disable 种子模板(D-01 系统预设保护)", "verdict": "✅", "evidence": "被拒: code=64018 msg=系统预设商机阶段模板受保护,不可停用" }, { "flow": "R02", "case": "field-defs 系统字段库", "verdict": "✅", "evidence": "16 项 keys=['autofillSource', 'createTime', 'defaultValue', 'fieldKey', 'fieldName', 'fieldType', 'id', 'isDeletable', 'optionSource', 'refTarget', 'updateTime']" }, { "flow": "R02", "case": "page 列表", "verdict": "✅", "evidence": "total=10" }, { "flow": "R02", "case": "save-draft 缺模板名", "verdict": "✅", "evidence": "被拒: code=64018 msg=模板名称不能为空" }, { "flow": "R02", "case": "applyScope=2 无部门", "verdict": "✅", "evidence": "被拒: code=64018 msg=部门专用模板须选择至少一个适用部门" }, { "flow": "R02", "case": "伪造 fieldKey(快照防伪造)", "verdict": "✅", "evidence": "被拒: code=64022 msg=字段须引用系统字段定义:e2e_fake_field_no_exist" }, { "flow": "R02", "case": "空模板 publish(至少一个字段项)", "verdict": "✅", "evidence": "被拒: code=64022 msg=方案卡模板发布前至少配置一个字段" }, { "flow": "R02", "case": "字段项快照回显(fieldName/fieldType 服务层写入)", "verdict": "✅", "evidence": "fields=[('customer_name', 1, 1), ('customer_type', 1, 0), ('customer_contact', 0, 0)]" }, { "flow": "R02", "case": "关显示同步清必填(isVisible=0 → isRequired=0)", "verdict": "✅", "evidence": "hidden.isRequired=0" }, { "flow": "R02", "case": "publish → 发布中", "verdict": "✅", "evidence": "" }, { "flow": "R02", "case": "copy → 独立新编码 V1.0 草稿(字段随复制)", "verdict": "✅", "evidence": "" }, { "flow": "R02", "case": "disable 草稿", "verdict": "✅", "evidence": "被拒: code=64018 msg=仅发布中的模板可停用" }, { "flow": "R02", "case": "编辑发布中 → 生新草稿 V1.1", "verdict": "❌", "evidence": "code=50001 msg=系统内部错误,请稍后重试" }, { "flow": "R02", "case": "publish V1.1 自我顶替(V1.0 转停用)", "verdict": "⚠", "evidence": "被 P1 阻断;旁证=票07 U02 顶替副作用" }, { "flow": "R03", "case": "page 列表(seed 规则在场)", "verdict": "✅", "evidence": "total=16 seed=发布中" }, { "flow": "R03", "case": "save-draft 缺规则名", "verdict": "✅", "evidence": "被拒: code=64008 msg=规则名称不能为空" }, { "flow": "R03", "case": "开回收缺 recycleDays", "verdict": "✅", "evidence": "被拒: code=64008 msg=自动回收天数须 ≥ 1" }, { "flow": "R03", "case": "recycleDays=0", "verdict": "✅", "evidence": "被拒: code=64008 msg=自动回收天数须 ≥ 1" }, { "flow": "R03", "case": "remindDays ≥ recycleDays", "verdict": "✅", "evidence": "被拒: code=64008 msg=提前提醒天数须小于自动回收天数" }, { "flow": "R03", "case": "未开回收先开提醒", "verdict": "✅", "evidence": "被拒: code=64008 msg=未启用自动回收时不可开启回收提醒" }, { "flow": "R03", "case": "publish → 发布中(五配置项落库)", "verdict": "✅", "evidence": "回收=30天 提醒=7天 手动抛池=1 自由领取=1" }, { "flow": "R03", "case": "U03 配置层:部门专用规则发布 + deptIds 绑定回显", "verdict": "✅", "evidence": "deptIds=['744841292348915712'] deptNames=['广东保伦电子股份有限公司']" }, { "flow": "R03", "case": "U03 生效层:部门专用禁手动未拦截 release-pool(按缺陷预期放行)", "verdict": "⚠", "evidence": "owner_dept_id 空不命中部门索引 → 放行;根因已被缺陷覆盖" }, { "flow": "R03", "case": "编辑发布中 → 生新草稿 V1.1", "verdict": "❌", "evidence": "code=50001 msg=系统内部错误,请稍后重试" }, { "flow": "R03", "case": "publish V1.1 自我顶替(V1.0 转停用)", "verdict": "⚠", "evidence": "被 P1 阻断;旁证=票07 U02 顶替副作用" }, { "flow": "R01", "case": "清理后无发布中自建规则", "verdict": "✅", "evidence": "残留发布中=无" }, { "flow": "R02", "case": "清理后无发布中自建规则", "verdict": "✅", "evidence": "残留发布中=无" }, { "flow": "R03", "case": "清理后无发布中自建规则", "verdict": "✅", "evidence": "残留发布中=无" }, { "flow": "R03", "case": "seed 公海规则仍发布中(F14 前置未破坏)", "verdict": "✅", "evidence": "" } ], "defects": [ { "flow": "R01", "title": "versions 返回实体:出参泄露内部字段(违 ADR-0017 Entity 禁令/deleted 泄露)", "level": 2, "evidence": "['creatorId', 'deleted', 'updaterId']" }, { "flow": "R01", "title": "编辑发布中生成新草稿 50001 主键冲突(resolveDraft 新草稿 insert 携带源版本 id,版本推进 API 不可用)", "level": 1, "evidence": "日志: Duplicate entry for opportunity_stage_template.PRIMARY;三族同构(R02/R03 同现象)" }, { "flow": "R02", "title": "编辑发布中生成新草稿 50001 主键冲突(同 R01 同构缺陷)", "level": 1, "evidence": "同 R01 根因" }, { "flow": "R03", "title": "商机 owner_dept_id 恒空:创建/领取/分配/移交均不写部门快照 → 部门专用公海规则(applyScope=2)对任何商机永不命中,DataScope 部门天花板同源失效", "level": 1, "evidence": "DB 直查: opportunity 全表 13 行 owner_dept_id 非空仅 0 行(含 seed 与 F01 新建,历经 claim/assign/handover 仍空)" }, { "flow": "R03", "title": "编辑发布中生成新草稿 50001 主键冲突(同 R01 同构缺陷)", "level": 1, "evidence": "同 R01 根因" } ], "skips": [] }