---
phase: 06-
plan: 03
type: execute
wave: 3
depends_on:
  - 06-01
  - 06-02
files_modified:
  - frontend/tests/e2e/input-and-compose.spec.ts
  - frontend/tests/e2e/support/chat-helpers.ts
  - frontend/src/core/threads/hooks.test.ts
  - .planning/phases/06-/06-VALIDATION.md
  - .planning/phases/06-/06-COMMIT-GUIDE.md
autonomous: true
requirements:
  - ATREF-04
must_haves:
  truths:
    - "@ 引用主流程有自动化测试覆盖（候选、chip、上限、软失败）。"
    - "Phase 6 提交分组按 style / logic / tests / docs 顺序可直接执行。"
    - "Validation 文档的 Wave 0 缺口被关闭或显式替换为可执行命令。"
  artifacts:
    - path: "frontend/tests/e2e/input-and-compose.spec.ts"
      provides: "@ 引用交互 E2E 回归"
    - path: "frontend/src/core/threads/hooks.test.ts"
      provides: "提交 envelope 与软失败单测"
    - path: ".planning/phases/06-/06-COMMIT-GUIDE.md"
      provides: "按关注点提交分组与执行顺序"
  key_links:
    - from: "frontend/tests/e2e/input-and-compose.spec.ts"
      to: "frontend/src/components/workspace/input-box.tsx"
      via: "@ 引用交互断言"
      pattern: "@引用|chip|失效引用|上限"
    - from: ".planning/phases/06-/06-COMMIT-GUIDE.md"
      to: "git history"
      via: "concern-based commit order"
      pattern: "style -> logic -> tests -> docs"
---

<objective>
补齐 Phase 6 的自动化验证与提交卫生，使本阶段可审计、可回归、可合并。

Purpose: 避免“功能上线但无测试与提交策略”的交付风险。
Output: E2E/单测、更新后的验证矩阵、以及可执行的 commit 分组计划。
</objective>

<execution_context>
@/home/mt/.codex/get-shit-done/workflows/execute-plan.md
@/home/mt/.codex/get-shit-done/templates/summary.md
</execution_context>

<context>
@.planning/ROADMAP.md
@.planning/phases/06-/06-VALIDATION.md
@.planning/phases/06-/06-CONTEXT.md
@frontend/tests/e2e/input-and-compose.spec.ts
@frontend/tests/e2e/support/chat-helpers.ts
@frontend/src/core/threads/hooks.test.ts
</context>

<tasks>

<task type="auto" tdd="true">
  <name>Task 1: 增加 @ 引用 E2E 与 hooks 单测覆盖 D-01~D-08</name>
  <files>frontend/tests/e2e/input-and-compose.spec.ts, frontend/tests/e2e/support/chat-helpers.ts, frontend/src/core/threads/hooks.test.ts</files>
  <read_first>
    - frontend/tests/e2e/input-and-compose.spec.ts
    - frontend/tests/e2e/support/chat-helpers.ts
    - frontend/src/core/threads/hooks.test.ts
    - .planning/phases/06-/06-VALIDATION.md
    - .planning/phases/06-/06-CONTEXT.md
  </read_first>
  <behavior>
    - Test 1: 输入 `@` 后只展示当前线程候选并可过滤（per D-01, D-02）。
    - Test 2: 选择候选后显示 chip，超过 10 个不可继续添加（per D-03, D-08）。
    - Test 3: 失效引用被剔除且发送不阻断（per D-07）。
  </behavior>
  <action>在 `input-and-compose.spec.ts` 增加 `@引用` 场景用例（可用 `test.describe("聊天工作台 / @引用文件")` 分组）；必要时在 `chat-helpers.ts` 增加 thread 内 artifact/upload fixture 探测辅助；在 `hooks.test.ts` 增加引用元信息提交与失效软失败断言。若环境依赖不足，使用 `testInfo.skip` 并写明原因字符串，不允许静默跳过。</action>
  <acceptance_criteria>
    - `rg -n "@引用文件|chip|失效引用|上限" frontend/tests/e2e/input-and-compose.spec.ts` 命中新增场景。
    - `rg -n "ref_kind|ref_source|soft|stale|继续提交" frontend/src/core/threads/hooks.test.ts` 命中新增断言。
    - 新增/修改测试命令可执行且输出包含 pass 或 explainable skip。
  </acceptance_criteria>
  <verify>
    <automated>cd frontend && pnpm -s test:e2e -- input-and-compose.spec.ts && node --test src/core/threads/hooks.test.ts</automated>
  </verify>
  <done>自动化覆盖 D-01~D-08 的关键行为，并保留可解释 skip 机制。</done>
</task>

<task type="auto">
  <name>Task 2: 更新验证矩阵并关闭 Wave 0 缺口</name>
  <files>.planning/phases/06-/06-VALIDATION.md</files>
  <read_first>
    - .planning/phases/06-/06-VALIDATION.md
    - .planning/phases/06-/06-RESEARCH.md
    - .planning/phases/06-/06-CONTEXT.md
  </read_first>
  <action>把 `06-VALIDATION.md` 中 Wave 0 缺口替换为本阶段已落地的真实测试文件与命令；将 `nyquist_compliant` 更新为 `true`（前提是所有任务都具备自动化验证命令）；在 Per-Task Verification Map 中加入 D-01~D-09 对应条目与 threat 引用。</action>
  <acceptance_criteria>
    - `rg -n "nyquist_compliant:\\s*true" .planning/phases/06-/06-VALIDATION.md` 命中。
    - `rg -n "D-0[1-9]|ATREF" .planning/phases/06-/06-VALIDATION.md` 命中需求映射。
    - `rg -n "Wave 0" .planning/phases/06-/06-VALIDATION.md` 不再包含未完成占位项。
  </acceptance_criteria>
  <verify>
    <automated>cd /home/mt/Project/deerflow2 && rg -n "nyquist_compliant:\\s*true|D-0[1-9]|ATREF" .planning/phases/06-/06-VALIDATION.md</automated>
  </verify>
  <done>验证策略与实现状态一致，且 Nyquist 检查可通过。</done>
</task>

<task type="auto">
  <name>Task 3: 产出 Phase 6 Git 提交分组计划（style/logic/tests/docs）</name>
  <files>.planning/phases/06-/06-COMMIT-GUIDE.md</files>
  <read_first>
    - .planning/phases/05-test-hardening-and-commit-hygiene/05-SUMMARY.md
    - .planning/phases/06-/06-01-PLAN.md
    - .planning/phases/06-/06-02-PLAN.md
    - .planning/phases/06-/06-VALIDATION.md
  </read_first>
  <action>新增 `06-COMMIT-GUIDE.md`，明确提交顺序与分组：`1) style`（仅样式/展示类变更，如 chip 外观、dropdown 样式类），`2) logic`（候选聚合、提交结构、软失败逻辑），`3) tests`（hooks/e2e 用例与 helper），`4) docs`（VALIDATION/SUMMARY/ROADMAP 更新）；每组列出建议 `git add` 文件清单与规范 commit message 模板，禁止跨组混提。tests 组最小 E2E 验证必须覆盖 `DF-INPUT-007|DF-INPUT-008|DF-INPUT-009`，满足 DF-INPUT-009 hygiene 缺口。</action>
  <acceptance_criteria>
    - `06-COMMIT-GUIDE.md` 包含固定顺序文本 `style -> logic -> tests -> docs`。
    - 文档内每个分组都有文件清单与 commit message 示例。
    - 文档包含“禁止跨组混提”规则。
  </acceptance_criteria>
  <verify>
    <automated>cd /home/mt/Project/deerflow2 && rg -n "style -> logic -> tests -> docs|禁止跨组混提|DF-INPUT-009|commit message" .planning/phases/06-/06-COMMIT-GUIDE.md</automated>
  </verify>
  <done>提交卫生方案可直接执行，满足用户的分组与顺序约束。</done>
</task>

</tasks>

<threat_model>
## Trust Boundaries

| Boundary | Description |
|----------|-------------|
| test fixtures→真实线程环境 | 自动化测试依赖 thread fixtures 与后端可用性 |
| commit grouping doc→实际提交动作 | 文档规范需要转化为可执行提交步骤 |

## STRIDE Threat Register

| Threat ID | Category | Component | Disposition | Mitigation Plan |
|-----------|----------|-----------|-------------|-----------------|
| T-06-03-01 | R | `06-COMMIT-GUIDE.md` | mitigate | 提供固定顺序与文件清单，确保提交可追踪与可审计。 |
| T-06-03-02 | D | E2E 测试执行 | mitigate | 环境不足时显式 skip 并给原因，避免反复失败阻塞整个阶段。 |
| T-06-03-03 | T | 验证矩阵 | mitigate | 将验证命令与需求映射写死到 VALIDATION，避免后续手工偏离。 |
</threat_model>

<verification>
- `cd frontend && pnpm -s test:e2e -- input-and-compose.spec.ts`
- `cd frontend && node --test src/core/threads/hooks.test.ts`
- `cd /home/mt/Project/deerflow2 && rg -n "style -> logic -> tests -> docs|DF-INPUT-009" .planning/phases/06-/06-COMMIT-GUIDE.md`
</verification>

<success_criteria>
- Phase 6 关键行为有自动化回归（单测 + E2E）。
- 验证文档与代码状态一致，不留 Wave 0 未闭合缺口。
- Git 提交计划明确 style/logic/tests/docs 分组与执行顺序。
</success_criteria>

<output>
After completion, create `.planning/phases/06-/06-03-SUMMARY.md`
</output>
