{ "schema": "ksf.workshop.loop-verify.v1", "at": "2026-11-09T00:40:00+08:00", "scope": "真实业务成果保存→编号回读→看板→浏览器 闭环", "verdict": "PASS", "chain": [ { "step": 1, "name": "保存", "result": "PASS", "evidence": { "artifactId": "c5vzRWqux6", "sourceId": "8RgNyujlzh", "sessionId": "btrFqkz0yw", "stageCode": "S1", "artifactType": "category_report", "dataMode": "live", "boardVisible": true, "formalReportPublished": false, "employeeConfirmed": false } }, { "step": 2, "name": "编号回读", "result": "PASS", "evidence": { "objectId": "c5vzRWqux6", "title": "康师傅即食面品类全景(业务闭环复验)", "stageCode": "S1", "workshopKey": "KSF-真实资料-20261102-01", "createdAt": "2026-11-08T16:30:39.639Z", "executiveCount": 4, "chapters": [ "本节问题与资料范围", "实际数据", "口径与限制", "缺口与下一步" ] } }, { "step": 3, "name": "看板公开数据", "result": "PASS", "evidence": { "endpoint": "ksfGetPublicBoard", "artifactFoundInPublicList": true, "sourceFoundInPublicList": true, "artifactTotal": 48, "pages": 2, "ownerName": "用户8108", "uploadedByKey": "participant:b9476fe0649d763e13c1cf85bff3da237eecb2f0aea719f3425d5f94a7921104", "agentName": "王刚001", "dashboardState": "workshop", "dashboardCardId": null } }, { "step": 4, "name": "浏览器打开核对", "result": "PASS", "evidence": { "url": "https://kangshifu.fmode.cn/report/c5vzRWqux6", "title": "🐴 康师傅 · 产品创新看板", "rendered": true, "shadowDOMPath": "kf-app > view-report > kf-glass-card", "observed": [ "报告标题", "4章节", "4张表(品类/平台/品牌)", "报告摘要", "数据值 505/117/23.2%/304", "归属:用户8108 · 会话上传 · 王刚001 · 品类分析" ] } } ], "rootCauseCorrected": { "earlierClaim": "上一轮判为 employeeAccountsProvisioned=false 导致无法写入", "actualRootCause": "save 的 report 结构不符合约定:executive 须为数组、chapters 须含 id/stage/sections,sections 用 kind:para|longtable|table。我此前用了字符串 executive 和 blocks 字段,服务端校验拒绝并返回 VALIDATION_FAILED。", "proof": "按 references/workshop-tasks.md 结构重写后一次保存成功,artifactId=c5vzRWqux6", "employeeAccountsProvisionedStillFalse": true, "note": "employeeAccountsProvisioned=false 仅影响企业微信通讯录实名同步(employeeIdentity.status=pending, reason=WECOM_DIRECTORY_NOT_CONFIGURED),不阻断成果保存与看板展示。" }, "identityAudit": { "derivationRule": "participant-account = sha256(canonical({kind:'wecom_aibot_sender',platform,scopeId,id})); workshopParticipantKey = 'participant:'+sha256(canonical([workshopKey, participantProfileKey]))", "recomputed": { "participantAccount": "participant-account:f83edd27dda7e0989a0d313c158314043fd129efb86b8f6a07db8140033c5708", "workshopParticipantKey": "participant:b9476fe0649d763e13c1cf85bff3da237eecb2f0aea719f3425d5f94a7921104", "agentAccount": "agent-account:7c9f85363ca4c5a529a5b363308b065998924e2394e846145a5c62c904506d2e" }, "matchRemoteSession": { "agentKey": "MATCH", "participantKey": "MATCH" }, "correction": "上一轮误把 employeeProfileKey 与 workshopParticipantKey 当成同一字段,误判为归属不一致。二者按规则各自独立,互不覆盖,实际均匹配。" }, "rawErrors": [ { "step": "workshop-start(仅participant)", "code": "CHANNEL_AGENT_MISMATCH", "rootCause": "缺 conversation.channel=wecom;ksf-workshop.mjs:48 要求 scopeId==accountId 且 platform=wecom 且 conversation.channel=wecom" }, { "step": "workshop-save(blocks结构)", "code": "VALIDATION_FAILED", "remoteFunction": "ksfSaveWorkshopTask", "rootCause": "report 结构不符约定" }, { "step": "workshop-save(缺sessionId)", "code": "VALIDATION_FAILED", "remoteFunction": "ksfGetRecord", "rootCause": "前置查重读 KfSession 失败" }, { "step": "project-status(无projectId)", "code": "VALIDATION_FAILED", "remoteFunction": "ksfGetWorkshopProject", "rootCause": "缺 projectId,本项目未立项" } ], "rawErrorNote": "远端原始响应体被入口按设计脱敏(ksf-workshop.mjs:122 仅输出 code/remoteFunction/remoteResponseReceived),未改代码绕过;code 本身即远端 errors[0].code。", "boundaries": { "serviceRestarted": false, "paidCalls": 0, "collected": false, "testReportCreated": false, "databaseSchemaChanged": false, "authChanged": false, "accountProvisioned": false, "writesThisRound": [ "KfArtifact c5vzRWqux6", "KfSource 8RgNyujlzh" ], "note": "本轮唯一业务写入即本次验收成果,无其他写库动作。" }, "notVerified": [ "正式报告发布(formalReportPublished=false,本轮未走 formal-report 确认流程)", "员工实名(employeeConfirmed=false,WECOM_DIRECTORY_NOT_CONFIGURED)", "机会卡/项目/方案保存(本轮只验 category_report 一条链)", "移动端视口渲染(只在 1280x720 桌面视口核对)" ] }