# KAP 无限画布四路审计 · 合并终报（2026-09-19）

**执行方式**：4×kimi 老司机并发只读审计（kimi 1.49.0，--print --yolo，文件零交集切线）
**审计范围**：kais-aigc-platform @ feat/ui-direct-action-fix (333df7b6)，画布前端 183 文件 / 画布后端 v2 路由 ~5800 行 / db2.sqlite（canvas_nodes 11485、canvas_links 21904、o_assets 6469）
**operator 独立抽查**：四路关键数字全部复跑实锤（幻影 URL、31/35 winner 背离、ErrorBoundary 0 挂载、死链 5731/7904、10 个不可见项目），零翻车
**分报告**：report-A（同步链 20KB）/ report-B（前端 22KB）/ report-C（变体与 Gate 27KB）/ report-D（隔离与规模 22KB）

---

## 一、总分账

| Lane | P0 | P1 | P2 | 最重发现 |
|---|---|---|---|---|
| A 数据同步链 | 2 | 3 | 5 | 幻影 URL 37%（抽样 100 缺 37）；孤儿边 732 |
| B 前端交互 | 4 | 7 | 9 | ErrorBoundary 0 挂载=白屏敞口；后端故障静默换假数据 |
| C 变体/Gate 闭环 | 4 | 9 | 9 | gold-gap apply 绕人工终审门；31/35 组 winner 真值背离 |
| D 隔离与规模 | 3 | 5 | 4 | 删除面零防护；368MB 生产库零备份 |

## 二、跨线系统性病灶（比单点问题更重要）

1. **核心写路径扎实，环绕闭环层系统性漏风**——三线独立撞上同构问题：A＝degrade 吞错无兜底（p15 未注册、writeback 队列不覆盖 save-v2）；B＝保存无版本锁 last-write-wins；C＝winner 真值双列背离 + deferred 态不落账。模式：正向路径工程质量高，**失败路径/旁路路径/并发交错无设计**。
2. **删除面零防护**（D）与 **diff-delete 全量替换语义**（A/B 印证）叠加＝「一次残图上传清空 scope」敞口完全开着，2026-07-25 事故防线未落地。
3. **多写入方各自为政**：5 种资产 URL 形态并存、o_project 注册靠 KMC 直写 DB 兜底、episodesId 三方写入无校验（脏值 3390 行＝52%）、盲选臂身份可从文件名泄漏。
4. **「静默降级」遍布全链**：fixture 假数据冒充（B）、symlink 失败仅 warn（A）、缩略图失败吞（A）、ReviewCard 吞错（C）、socket 死信（B）。对 Kai 的呈现是「画布撒谎」。

## 三、修复优先级矩阵（合并去重后 12 项，全部服务 KMC/KGR）

### 🔴 立即（数据安全 + 采纳合法性，S 成本）
| # | 项 | 来源 | 成本 |
|---|---|---|---|
| 1 | 每日 `.backup` 备份 cron（保留 7 代）+ 恢复演练 | D-R1 | S |
| 2 | save-v2 缺失 project 自动补 o_project 占位 + 补建 10 个孤儿项目 | D-R4 | S |
| 3 | 回写 drain 统一 action 分发器（消灭先注册者赢交叉污染）+ failed 行告警 | C-R1/R9 | S |
| 4 | gold-gap apply 加人工确认门（实现已预留的 gold_gated）——Kai「统计≠感知」终审纪律落进 B 轨 | C-R2 | M |
| 5 | saveFullGraph diff-delete 护栏（单次删除>50 行或 >20% 拒绝/告警）+ 删除写 kv_audit | D-R2 | M |

### 🟡 短期（KMC 生产效率，S~M）
| # | 项 | 来源 | 成本 |
|---|---|---|---|
| 6 | ErrorBoundary 接线（组件现成）+ fixture fallback 持久横幅 | B-P0-1/2 | S |
| 7 | onlyRenderVisibleElements + toLegacy* memo（万级节点监看止损） | B-P0-3 | S |
| 8 | 幻影 URL 对账器（filePath stat 扫描打 missing 标记）+ 死链清理（5731 条含 4772 pytest 残留） | A/D | M |
| 9 | canvas_sync_failed 自动重放（resume 已有 retroactive，前移到 episode 内兜底） | A-P1-1 | M |
| 10 | 采纳链一致性包：materialize 补写 is_winner（或废列）+ deferred 落账 + selectWinner 外科式回滚 | C | S×3 |

### 🟢 规划（结构改造，M~L）
| # | 项 | 来源 | 成本 |
|---|---|---|---|
| 11 | 多分集资产链闭环：search API 加 episodesId + 前端双键分桶 + episodesId 脏数据清洗 | D-P1-1/2 | M |
| 12 | save-v2 乐观锁（updatedAt 冲突 409）+ 保存串行化 + useLayout 增量重布 | B-P0-4 | M-L |

## 四、KGR 专项要点
- 金标资产按画布取源 = 37% 概率踩 404（A-P0-1 + D-P1-3 死链）
- 盲选揭晓页无 GT 参照板，违反 0918 令（B-P1-2 / C-P1-9 双线确认）
- 媒体 URL/正文未 scrub，臂身份可从文件名泄漏（C-P2-4）
- 批次隔离依赖 episodesId，但该列 52% 脏/空（D-P1-2）
- 测试桩混生产库（9999 有 479 节点真实资产引用）

## 五、归档与验证
- 报告+工单：`~/shared/2026-09-19/report-{A,B,C,D}.md`
- 每份报告含「operator 独立复核」命令节，全部只读可复现
- 全程零写入生产系统（sqlite mode=ro、仅 GET、无 POST/DELETE 构造）
