loop-receipt.json 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. {
  2. "schema": "ksf.workshop.loop-verify.v1",
  3. "at": "2026-11-09T00:40:00+08:00",
  4. "scope": "真实业务成果保存→编号回读→看板→浏览器 闭环",
  5. "verdict": "PASS",
  6. "chain": [
  7. {
  8. "step": 1,
  9. "name": "保存",
  10. "result": "PASS",
  11. "evidence": {
  12. "artifactId": "c5vzRWqux6",
  13. "sourceId": "8RgNyujlzh",
  14. "sessionId": "btrFqkz0yw",
  15. "stageCode": "S1",
  16. "artifactType": "category_report",
  17. "dataMode": "live",
  18. "boardVisible": true,
  19. "formalReportPublished": false,
  20. "employeeConfirmed": false
  21. }
  22. },
  23. {
  24. "step": 2,
  25. "name": "编号回读",
  26. "result": "PASS",
  27. "evidence": {
  28. "objectId": "c5vzRWqux6",
  29. "title": "康师傅即食面品类全景(业务闭环复验)",
  30. "stageCode": "S1",
  31. "workshopKey": "KSF-真实资料-20261102-01",
  32. "createdAt": "2026-11-08T16:30:39.639Z",
  33. "executiveCount": 4,
  34. "chapters": [
  35. "本节问题与资料范围",
  36. "实际数据",
  37. "口径与限制",
  38. "缺口与下一步"
  39. ]
  40. }
  41. },
  42. {
  43. "step": 3,
  44. "name": "看板公开数据",
  45. "result": "PASS",
  46. "evidence": {
  47. "endpoint": "ksfGetPublicBoard",
  48. "artifactFoundInPublicList": true,
  49. "sourceFoundInPublicList": true,
  50. "artifactTotal": 48,
  51. "pages": 2,
  52. "ownerName": "用户8108",
  53. "uploadedByKey": "participant:b9476fe0649d763e13c1cf85bff3da237eecb2f0aea719f3425d5f94a7921104",
  54. "agentName": "王刚001",
  55. "dashboardState": "workshop",
  56. "dashboardCardId": null
  57. }
  58. },
  59. {
  60. "step": 4,
  61. "name": "浏览器打开核对",
  62. "result": "PASS",
  63. "evidence": {
  64. "url": "https://kangshifu.fmode.cn/report/c5vzRWqux6",
  65. "title": "🐴 康师傅 · 产品创新看板",
  66. "rendered": true,
  67. "shadowDOMPath": "kf-app > view-report > kf-glass-card",
  68. "observed": [
  69. "报告标题",
  70. "4章节",
  71. "4张表(品类/平台/品牌)",
  72. "报告摘要",
  73. "数据值 505/117/23.2%/304",
  74. "归属:用户8108 · 会话上传 · 王刚001 · 品类分析"
  75. ]
  76. }
  77. }
  78. ],
  79. "rootCauseCorrected": {
  80. "earlierClaim": "上一轮判为 employeeAccountsProvisioned=false 导致无法写入",
  81. "actualRootCause": "save 的 report 结构不符合约定:executive 须为数组、chapters 须含 id/stage/sections,sections 用 kind:para|longtable|table。我此前用了字符串 executive 和 blocks 字段,服务端校验拒绝并返回 VALIDATION_FAILED。",
  82. "proof": "按 references/workshop-tasks.md 结构重写后一次保存成功,artifactId=c5vzRWqux6",
  83. "employeeAccountsProvisionedStillFalse": true,
  84. "note": "employeeAccountsProvisioned=false 仅影响企业微信通讯录实名同步(employeeIdentity.status=pending, reason=WECOM_DIRECTORY_NOT_CONFIGURED),不阻断成果保存与看板展示。"
  85. },
  86. "identityAudit": {
  87. "derivationRule": "participant-account = sha256(canonical({kind:'wecom_aibot_sender',platform,scopeId,id})); workshopParticipantKey = 'participant:'+sha256(canonical([workshopKey, participantProfileKey]))",
  88. "recomputed": {
  89. "participantAccount": "participant-account:f83edd27dda7e0989a0d313c158314043fd129efb86b8f6a07db8140033c5708",
  90. "workshopParticipantKey": "participant:b9476fe0649d763e13c1cf85bff3da237eecb2f0aea719f3425d5f94a7921104",
  91. "agentAccount": "agent-account:7c9f85363ca4c5a529a5b363308b065998924e2394e846145a5c62c904506d2e"
  92. },
  93. "matchRemoteSession": {
  94. "agentKey": "MATCH",
  95. "participantKey": "MATCH"
  96. },
  97. "correction": "上一轮误把 employeeProfileKey 与 workshopParticipantKey 当成同一字段,误判为归属不一致。二者按规则各自独立,互不覆盖,实际均匹配。"
  98. },
  99. "rawErrors": [
  100. {
  101. "step": "workshop-start(仅participant)",
  102. "code": "CHANNEL_AGENT_MISMATCH",
  103. "rootCause": "缺 conversation.channel=wecom;ksf-workshop.mjs:48 要求 scopeId==accountId 且 platform=wecom 且 conversation.channel=wecom"
  104. },
  105. {
  106. "step": "workshop-save(blocks结构)",
  107. "code": "VALIDATION_FAILED",
  108. "remoteFunction": "ksfSaveWorkshopTask",
  109. "rootCause": "report 结构不符约定"
  110. },
  111. {
  112. "step": "workshop-save(缺sessionId)",
  113. "code": "VALIDATION_FAILED",
  114. "remoteFunction": "ksfGetRecord",
  115. "rootCause": "前置查重读 KfSession 失败"
  116. },
  117. {
  118. "step": "project-status(无projectId)",
  119. "code": "VALIDATION_FAILED",
  120. "remoteFunction": "ksfGetWorkshopProject",
  121. "rootCause": "缺 projectId,本项目未立项"
  122. }
  123. ],
  124. "rawErrorNote": "远端原始响应体被入口按设计脱敏(ksf-workshop.mjs:122 仅输出 code/remoteFunction/remoteResponseReceived),未改代码绕过;code 本身即远端 errors[0].code。",
  125. "boundaries": {
  126. "serviceRestarted": false,
  127. "paidCalls": 0,
  128. "collected": false,
  129. "testReportCreated": false,
  130. "databaseSchemaChanged": false,
  131. "authChanged": false,
  132. "accountProvisioned": false,
  133. "writesThisRound": [
  134. "KfArtifact c5vzRWqux6",
  135. "KfSource 8RgNyujlzh"
  136. ],
  137. "note": "本轮唯一业务写入即本次验收成果,无其他写库动作。"
  138. },
  139. "notVerified": [
  140. "正式报告发布(formalReportPublished=false,本轮未走 formal-report 确认流程)",
  141. "员工实名(employeeConfirmed=false,WECOM_DIRECTORY_NOT_CONFIGURED)",
  142. "机会卡/项目/方案保存(本轮只验 category_report 一条链)",
  143. "移动端视口渲染(只在 1280x720 桌面视口核对)"
  144. ]
  145. }