线框
三色 diff 标记
| 类型 | 颜色 | 判定 | 影响 Unit |
|---|---|---|---|
| added | emerald | 新 section data-rev 等于当前 rev | 可能新增多个 Unit |
| changed | amber | section data-rev 旧但被新需求隐含修改 | 需要 Architect 标注 + 影响 contract_hash 时才 reset |
| removed | red | 新 PRD 不再包含的 section(罕见) | 对应 Unit 整体归档到 history/removed/ |
| unchanged | 灰底 | 正文不变 | 不动 |
怎么实现 diff
客户端用 diff-dom,section 粒度。算法:
- 对 newHtml 和 oldHtml 分别用
DOMParser.parseFromString - 枚举每个
section[data-rev]在双方的存在性 + textContent hash - 三态分类:only-new = added · only-old = removed · 同 id 不同 hash = changed
- 渲染时为每条 section 包一层 wrapper 标记色
选 section 级而非 token 级,是为了贴合 PM Agent 的写入约束 — 它的修改本来就是 section 粒度。
切 rev 控件
顶部默认 "rev N vs rev N-1",可下拉切换:
- "rev 3 vs rev 0" — 看从 init 到现在的累积
- "rev 3 vs rev 2" — 默认
- "rev 3 only" — 单看本 rev 新增
影响 Unit 提示
每个 diff section 下方一行 → 影响 Unit: ...。来源:
unitRegistry.diffWithSDD(pid) // → { added: ['oauth-be','oauth-fe'], changed: [], removed: [] }
把 added/changed/removed 列表渲染在对应 diff 行下面,让人类一眼知道「这个反馈引发了哪几个 Unit 入队」。