You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
4.9 KiB

2 days ago
# 05 Demo 基线策略(fork 演化 vs 参照重写)
Type: task
Status: resolved
Blocked by: 01
## Question
brief 要求「生成单文件 Demo,**参考** `crm-e2e/demo/index.html` 形态」。基于 01 号矩阵的缺口结论决断:
- **方案 A fork 演化**:复制现有 2264 行 index.html 到本 effort 目录作为基线,按矩阵补缺口;
- **方案 B 参照重写**:复用其 fetch 层/登录/页签骨架的模式,按矩阵从零组织页面结构。
产出决策 + 理由 + 复用/重写边界清单 + 文件落点(建议 `assets/../demo/index.html` 或本 effort 目录下 `demo/index.html`)+ 迁移风险清单(如现有 demo 的 stub 按钮 F6 工商更新如何处置)。
## Pointers
- 矩阵:`assets/coverage-matrix.md`(01 号产出)。
- 现有 demo 体量与结构侦察结论见本 effort `map.md` Notes 与 01 号票 Pointers。
- 注意现有 demo 已含图谱视图等 contact-graph effort 成果,重写的沉没成本要计入。
## Answer
(2026-09-11,AFK 决断。依据 = assets/coverage-matrix.md「对 05 号票的输入要点」+ GR §一 端点面结论。)
### 决断:方案 A fork 演化
基线 = `.scratch/customer-e2e/demo/index.html`(2264 行)**原样复制**到 `.scratch/customer-demo-ref/demo/index.html`,fork 头部加注释标记来源与日期(行号引用可平移对照矩阵),此后一切演化只发生在 fork 内,原文件不动。
**理由**:
1. **端点级零缺口已实证**:矩阵 69 入口中 33 条无缺口;GR 实测 demo 59 唯一路径全部落在 85 端点内、零幻影端点。骨架(fetch 层/登录/页签/弹窗件)与图谱修订⑧、批量编辑/快速添加、联系人导入六端点、协议五端点、双导入三段式、交割两段式、规则双单例均为**已验证实现**——重写等于把这些验证过的行为重新赌一遍。
2. **缺口全部在呈现层**(9 新增 + 16 改造),是增量叠加不是结构翻新,fork 天然承载;方案 B 的收益只剩「代码组织更干净」,brief 明示低保真、无此要求。
3. **沉没成本计入**:图谱视图(contact-graph 修订⑧)、联系人导入(该 effort 票 05)都是后续 effort 的成果,重写会把两轮 effort 的交付物清零重做。
4. 风险清单可枚举且可控(见下),无不可逆决策点。
### 复用 / 改动边界清单
| 边界 | 内容 |
|---|---|
| **原样复用(不动)** | apiGet/apiPost/apiDownload fetch 层;`?api=` 覆盖;debug token 登录;五页签骨架(客户/图谱/导入/交割/设置);图谱视图;联系人批量编辑/快速添加/导入;协议五端点弹窗;客户导入三段式;交割两段式;设置页双单例 + 查重试玩三按钮;dlgCreate/dlgEdit/dlgContact 等全部弹窗件 |
| **改造 16 项** | 矩阵「改造入口」表逐条执行(#2 视图选项、#5 列筛选、#6 归档态、#10 分屏/卡片、#11 列表补列、#12 汇总卡口径、#24 工商联想、#29 金额卡、#30/#31/#44 字段级挂 07、#40/#45/#63 筛选器接线、#15+#16 分配弹窗整批化、#41 商机页签列) |
| **新增 9 项** | #7 saved-view 下拉(JSON 例外)、#8 形态偏好切换、#9 看板视图、#16 批量分配按钮、#42 页签5 占位、#47/#48 商机侧演示入口(形态按 03 票)、#50 联系人独立菜单、#51+#53 联系人详情/日志空态 |
| **豁免 14 项** | 不实现;UI 上不出现或按 06 票设计摆现象 |
### 迁移风险清单(实施票必读)
- (a) **#12 汇总卡挪用**:现 loadSummary 把 board/summary 当汇总卡且字段名错(demo 读 count/name/key,DTO 实为 cnt/groupValue)且未传 groupColumn——看板视图落地时拆开:汇总条修字段名 + 显式 `groupColumn=stage`(或随看板合并),pool 下该调用吃 67001 须改为不调。
- (b) **#15 分配弹窗整批化**:dlgAssign 改接 assign-batch 时保留原 BatchResult 呈现与 toast 通道,勿破坏 #17 批量三件套的既有结果展示。
- (c) **#2 视图选项**:pool 越界视图(ASSIGNED 等)是 SQL 空集不硬拒,UI 不做禁用特判;RECENT 不接 savedViewId。
- (d) **F6 工商更新 stub 按钮**:按「只测不修」保留,按钮文案/结果明示 stub 恒 NO_HIT 现象(06 票给文案)。
- (e) **fork 搬运原样**:API_BASE 默认值、`?api=` 覆盖、debug token 登录逻辑零改动平移。
- (f) **I-06 漂移**:04 票已定口径——pool 不给看板入口;形态偏好 save 允许存 board(实测 code=0)但数据端点 67001,只摆「记忆成功 + 数据拒绝」双现象,UI 不断言文档的拒绝行为。
- (g) **枚举硬编码**:demo 内置 STAGE/follow_way/contact_source 等硬编码先照搬,07 票核对字典后统一改(核对前不自行"修正")。
### 文件落点
- `demo/index.html`(本 effort 目录下,brief 建议、矩阵建议一致)。
- 冒烟脚本 `demo/smoke.py`、报告 `demo/smoke-report.json`(形态随 08 票)。