终验-第2轮.md)终验结论:有条件通过。唯一 P0 硬伤 = N3「同源」是空声明(说明书 vs 元素台账 v2 在 268 个字段上不同值,而页头把旧的那份指为权威)。 本轮把 P0 全部处理,并用脚本给出可复现的比对证据。
build_ledger.py 调的是 DIC.empty_rule(src) —— 没传元素名,所以「按元素性质分流」的分支从来没生效过;台账里全部是旧词表(无数据显示「—(待接入)」223 + —186 + 未填则不渲染65)。也就是说:我改的是函数,但台账那份产物的入参不对,等于没改。build_ledger.py / build_ledger_xlsx.py 一律改为 DIC.writer_of(src, el) / DIC.empty_rule(src, el),并删掉台账脚本里的本地重复实现(避免两套规则)。模块说明书.html 的字段表也改为按元素 ID 从字典取「数据来源 + 元素名」再调同一函数(_std()),不再用模块里手写的来源。金额(USD)|千分位 + 2 位小数 / 系统/链上 / 不可空(无数据时走空态)/ 无数据显示「—(待接入)」。cmp.py,台账 501 条 vs 说明书 398 条同 ID 逐条比):| 指标 | 第 2 轮终验 | 本轮 |
|---|---|---|
| 谁写入不一致 | 87 | 0 |
| 空态不一致 | 181 | 0 |
新增 「附录 · 逐模块状态明细(53 行)」:每行列出 页面 / 模块 / 模块名 / 状态字段原文 / 是否含待拍板 / 是否含冲突,并把口径写成一句话 + 恒等式:
```
口径:状态字段里出现「待拍板」计待拍板项,出现「有冲突」计冲突项;同一模块可两项都出现。
复算:已定稿(两项都没有)29 · 含待拍板项 21 · 含冲突项 7 · 两项都有 4
恒等式:21 + 7 − 4 + 29 = 53 ✓
```
页头也改成同一口径(并注明「另有按页面徽章口径会得到另一组数,两个口径都对,但混用就算不出来」)。
同一元素 ID 在说明书里出现多套「谁写入/空态」的问题 —— 因为改走「按 ID 取字典来源 + 同一函数」后按构造就不可能不一致。
证据:渲染后全库扫描,同一 ID 出现两套值的数量 = 0(终验前是 12 个)。
| ID | 问题 | 处理 |
|---|---|---|
| N4 残留 2 处 | C3 业务指标卡组、R5 Top Holders 的「次」动作也算交互,但 Q9 写纯展示 | C3 Q8 注明「一旦保留就必须有成功/失败反馈」;R5 补 Q9「复制成功:toast「已复制」;跳浏览器:新窗口;失败:toast 提示原因」 |
| 2 个顶栏模块 Q8 = 「—」 | 持仓页·模块1、验证页·模块1 内嵌线框里明明有 Launch / Connect | 两处 act 改为「点 Launch → 发币向导;点 Connect → 钱包弹窗;点地址 → 复制」 |
| 空态列仍是占位 | 终验实测可执行比例 28%,— 是最大桶(165 行) | 空态规则扩展到 12 类并全部显式化:列头 / 动作装饰 / 徽章标签 / 图表 / 钱包地址 / 状态倒计时 / 条件性提示 / 静态文案 / 占位骨架 / 空态文案 / 项目方未填 / 数据未接入。— 与 待补 全部归零 |
| 谁写入两套词汇 + 拼接 | 系统/链上 + 系统、系统 + 外部行情… | 加受控词表 WRITER_VOCAB(项目方 / 系统 / 系统/链上 / 设计/运营 / 外部行情),去重合并(同时有「系统」与「系统/链上」只留后者),拼接值从 8 类降到 3 类 |
| 检查项 | 结果 |
|---|---|
| 说明书 ↔ 元素台账 v2:谁写入差异 | 0(501 条同 ID 比对) |
| 说明书 ↔ 元素台账 v2:空态差异 | 0 |
| 同一 ID 在说明书内有 2 套值 | 0 |
| 空态取值 | 12 类,全部显式;待补 0 条、裸 — 0 条 |
| 「谁写入」取值 | 7 类(受控词表),拼接值仅剩 3 类 |
| M13 恒等式 | 21 + 7 − 4 + 29 = 53 ✓ |
| 页头/附录口径 | 一致,且逐行可复算 |
| HTML | 0 pageerror、53 模块 |
| xlsx ↔ md 一致性 | P227 / P417 抽查一致 |
系统 + 外部行情 8 条、项目方 + 系统/链上 2 条、其余)—— 需产品判断是否允许双写入方。---
终验-第4轮.md 结论 通过(0 严重 / 0 中等),剩 2 条【轻微】,已一并处理:
| 轻微项 | 处理 |
|---|---|
「外部行情」在词表说明里存在、实际取值 0 次(7 行行情类落到 系统,丢了"依赖第三方行情"这层) | writer() 恢复受控组合 系统 + 外部行情(仅当同时有「第三方 API」与「系统计算/链上直读」时)→ 词表 7 类,与说明一致;P228 实测 = 系统 + 外部行情 |
P239 快捷金额 实为按钮组,被归为「静态文案」 | 空态动作规则补 快捷金额 → 归为 不适用(动作/装饰元素) |
最终验收(脚本实测):模块 53 · 字段表 61 张 / 491 行 · 同一 ID 两套值 0 · 谁写入 7 类 · 空态 14 类(待补/裸 — = 0)· 口径复算 30 / 22 / 7 / 6(恒等式 = 53)· Q7 重复 0 · 0 · 0 pageerror · 说明书 ↔ 元素台账 v2 谁写入 0 / 空态 0**。