FinClaw V1 Sub-Packet: Save Thread Sheet 确认流程
状态:Pending 日期:2026-05-16 Lane:Engineering / Frontend Owner:Frontend Agent D + Engineering Agent A Parent Packet:v1-engineering-implementation-task-packet.md 对齐 Action Item:AL-6
1. 目标
把 v1-ui-ux-interaction-design.md §5 Save Thread Flow 与 v1-user-journey-and-interaction-flow.md §7 落地为可运行的「保存为线程」确认 sheet,覆盖:
- 完整字段展示:标题 / 关注对象 / 用户关注理由 / 初始主判断 / 反方 / watch questions / refresh conditions / invalidators / 是否保存用户自述上下文;
- 4 类用户动作:保存为线程 / 修改标题或关注理由 / 只保存快照 / 放弃保存;
- 与 sub-1 ProfileConsent 的联动:保存用户自述金融上下文必须 explicit confirm。
2. 允许读取
见 frontmatter must_read / reference_only。
3. 禁止范围
- 不在 Sheet 中收集任何超出 Thread schema 的字段;
- 不强制要求用户填写 user_focus_reason(可留空,但默认建议填写);
- 不让 Save 动作绕过 Thread proposal logic(即非 thread_proposal 的 snapshot 不应弹出 Sheet);
- 不在 Sheet 中暴露 buy / sell / 订单 CTA。
4. Acceptance Criteria
| AC ID | 验收项 |
|---|---|
| AC-1 | SaveThreadSheet 渲染 9 个字段 + 4 个动作按钮 |
| AC-2 | Thread proposal 仅在 snapshot 满足 product-object-and-advisor-design.md §1.3 创建规则 时弹出 |
| AC-3 | 「只保存快照」action 触发 snapshot_saved 事件,不触发 thread_created |
| AC-4 | 「放弃保存」action 触发 thread_save_declined 事件 + decline_reason 选择 |
| AC-5 | 用户金融上下文(持仓 / 成本 / 资金规模)保存到线程前必须二次确认(依赖 sub-1) |
| AC-6 | 后端 POST /v1/threads 创建线程;linked_snapshots 字段引用源 snapshot;不覆盖 |
| AC-7 | 单测:4 个用户动作 + 2 个金融上下文确认 case + 1 个 thread proposal 不弹出 case |
| AC-8 | 与 sub-4 联动:保存成功后跳转 Thread 主视图,且后续 refresh 可触发 sub-4 的 Diff View |
5. 回写位置
- 代码 → 工程仓库
fin-claw; - v1-governance-engineering-alignment.md §5 / §9.AL-6 状态由
missing→aligned-initial; - Hand-off anchor →
handoff-anchors/v1-eng-impl-sub-5-save-thread-sheet.yaml; - 解除依赖:trial sub-2(trial 任务 1 → 任务 2 路径需要 Save Thread)。
6. 风险与裁决项
- 风险 R-1:Sheet 字段过多导致摩擦 → mobile 单列折叠 + 默认折叠次要字段(保留主判断 / 反方 / watch questions 默认展开);
- 风险 R-2:Thread proposal 频繁误触 → 优先以 user 主动「保存」为入口;系统 proposal 仅作 hint chip;
- 裁决项 J-1:default decline_reason 选项集(just_reading / not_relevant / unsure / other)trial 后再细化。
7. 与其他 Sub-Packet 的关系
- 依赖:sub-1(ProfileConsent 用于金融上下文保存确认);
- 解除:trial sub-2、sub-4 联动;
- 共享文件需协调:
server/api/thread_routes.py(与 sub-4 协调)。