diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 7bf65ccf..c42aa173 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -61,9 +61,9 @@ **Plans:** 3 plans Plans: -- [ ] 06-01-PLAN.md — 锁定引用提交契约与软失败链路(additional_kwargs.files) -- [ ] 06-02-PLAN.md — 实现 @ 候选 dropdown、chip 交互与上限控制 -- [ ] 06-03-PLAN.md — 补齐自动化验证并产出 style/logic/tests/docs 提交分组计划 +- [x] 06-01-PLAN.md — 锁定引用提交契约与软失败链路(additional_kwargs.files) +- [x] 06-02-PLAN.md — 实现 @ 候选 dropdown、chip 交互与上限控制 +- [x] 06-03-PLAN.md — 补齐自动化验证并产出 style/logic/tests/docs 提交分组计划 --- -*Next command:* `/gsd-plan-phase 1` +*Next command:* `/gsd-verify-work` diff --git a/.planning/STATE.md b/.planning/STATE.md index aadce455..eb9ea92f 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -3,13 +3,13 @@ gsd_state_version: 1.0 milestone: v1.0 milestone_name: milestone status: Executing Phase 06 -last_updated: "2026-04-15T02:13:10.002Z" +last_updated: "2026-04-15T03:07:32.408Z" progress: total_phases: 6 - completed_phases: 5 - total_plans: 9 - completed_plans: 6 - percent: 67 + completed_phases: 6 + total_plans: 10 + completed_plans: 10 + percent: 100 --- # STATE.md @@ -19,13 +19,13 @@ progress: See: .planning/PROJECT.md (updated 2026-04-07) **Core value:** Keep the frontend visually familiar while preserving and hardening new-system behavior end to end. -**Current focus:** Phase 06 — 在输入框输入@时,可引用已生成文件和已上传附件 +**Current focus:** Phase 06 — @引用文件与附件 ## Workflow State -- Current workflow: new-project completed -- Next workflow: plan-phase -- Next command: /gsd-plan-phase 1 +- Current workflow: execute-phase completed (phase 06) +- Next workflow: verify-work +- Next command: /gsd-verify-work ## Artifacts diff --git a/.planning/phases/06-/06-01-SUMMARY.md b/.planning/phases/06-/06-01-SUMMARY.md new file mode 100644 index 00000000..3bb81cfe --- /dev/null +++ b/.planning/phases/06-/06-01-SUMMARY.md @@ -0,0 +1,51 @@ +--- +phase: 06- +plan: 01 +subsystem: messaging +tags: [references, files, submit-payload, unit-test] +requires: + - phase: 05-test-hardening-and-commit-hygiene + provides: stable test baseline and commit hygiene +provides: + - PromptInputMessage references contract + - FileInMessage reference metadata compatibility + - stale reference soft-fail filtering in submit payload +affects: [input-box, thread-submit, e2e] +tech-stack: + added: [] + patterns: + - additional_kwargs.files as single submit envelope + - stale reference dropped without blocking submit +key-files: + created: + - .planning/phases/06-/06-01-SUMMARY.md + modified: + - frontend/src/components/ai-elements/prompt-input.tsx + - frontend/src/core/messages/utils.ts + - frontend/src/core/threads/hooks.ts + - frontend/src/core/threads/hooks.test.ts +key-decisions: + - "引用文件沿用 additional_kwargs.files,不引入并行字段结构。" + - "失效引用只剔除并 toast,文本发送继续。" +requirements-completed: [ATREF-03] +duration: 20 min +completed: 2026-04-15 +--- + +# Phase 06 Plan 01 Summary + +**完成引用提交契约与软失败链路,确保 uploads + references 统一进 `additional_kwargs.files`。** + +## Verification + +- `cd frontend && node --test src/core/threads/hooks.test.ts` + - 2 passed, 0 failed +- `cd frontend && pnpm -s typecheck` + - passed + +## Outcome + +- `PromptInputMessage` 已支持 `references` 字段。 +- `FileInMessage` 已支持 `ref_kind/ref_source` 可选元信息。 +- `buildFilesForSubmit` 对 stale 引用执行软剔除且不阻断发送。 + diff --git a/.planning/phases/06-/06-02-SUMMARY.md b/.planning/phases/06-/06-02-SUMMARY.md new file mode 100644 index 00000000..edffd387 --- /dev/null +++ b/.planning/phases/06-/06-02-SUMMARY.md @@ -0,0 +1,49 @@ +--- +phase: 06- +plan: 02 +subsystem: ui +tags: [mention, dropdown, chip, keyboard] +requires: + - phase: 06- + provides: reference payload contract and soft-fail behavior +provides: + - thread-scoped @ candidate aggregation + - dropdown filtering and keyboard navigation + - removable reference chips with max-limit enforcement +affects: [prompt-input, submit-payload, e2e] +tech-stack: + added: [] + patterns: + - current-thread-only reference candidates + - IME-safe keyboard handling for mention selection +key-files: + created: + - .planning/phases/06-/06-02-SUMMARY.md + modified: + - frontend/src/components/workspace/input-box.tsx + - frontend/src/components/ai-elements/prompt-input.tsx + - frontend/src/core/uploads/hooks.ts + - frontend/src/components/ui/dropdown-menu.tsx +key-decisions: + - "@候选严格限定在当前 thread 的 artifacts + uploads。" + - "引用上限固定为 10,超限 toast 并阻止新增。" +requirements-completed: [ATREF-01, ATREF-02] +duration: 25 min +completed: 2026-04-15 +--- + +# Phase 06 Plan 02 Summary + +**完成输入框 `@` 引用交互闭环:候选展示、过滤、选择、chip 渲染、删除、键盘操作与上限控制。** + +## Verification + +- `cd frontend && pnpm -s typecheck` + - passed + +## Outcome + +- 输入 `@` 可拉起 `DropdownMenu` 候选并按 query 过滤。 +- 选择候选后以 chip 展示,可删除且支持去重。 +- `ArrowUp/ArrowDown/Enter/Escape/Backspace` 与 `isComposing` 保护已落地。 + diff --git a/.planning/phases/06-/06-03-SUMMARY.md b/.planning/phases/06-/06-03-SUMMARY.md new file mode 100644 index 00000000..a2f86b2d --- /dev/null +++ b/.planning/phases/06-/06-03-SUMMARY.md @@ -0,0 +1,54 @@ +--- +phase: 06- +plan: 03 +subsystem: testing +tags: [e2e, unit-test, validation, commit-hygiene] +requires: + - phase: 06- + provides: mention UI + submit contract +provides: + - DF-INPUT-007/008 @reference e2e scenarios + - hooks unit coverage for stale reference behavior + - validation and commit-plan alignment for phase 06 +affects: [verify-work, release-readiness] +tech-stack: + added: [] + patterns: + - explainable environment failure recording + - e2e + unit combined evidence for risky paths +key-files: + created: + - .planning/phases/06-/06-03-SUMMARY.md + 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-PLAN.md +key-decisions: + - "E2E 环境未启动时保留失败证据,不伪造通过。" + - "以 hooks 单测对失效引用软失败逻辑做稳定兜底。" +requirements-completed: [ATREF-04] +duration: 20 min +completed: 2026-04-15 +--- + +# Phase 06 Plan 03 Summary + +**补齐 Phase 6 的验证与提交卫生材料,并记录了可复现的 E2E 环境阻塞证据。** + +## Verification + +- `cd frontend && pnpm -s test:e2e --grep "DF-INPUT-007|DF-INPUT-008"` + - failed: `ERR_CONNECTION_REFUSED` (`http://127.0.0.1:2026`) +- `cd frontend && node --test src/core/threads/hooks.test.ts` + - 2 passed, 0 failed +- `cd frontend && pnpm -s typecheck` + - passed + +## Outcome + +- `DF-INPUT-007/008` 用例存在并可执行,当前阻塞为本地服务未启动。 +- `06-VALIDATION.md` 与 `06-COMMIT-PLAN.md` 维持可审计验证和分组提交策略。 +- 单测已覆盖引用元信息提交与 stale 引用软失败关键链路。 + diff --git a/.planning/phases/06-/06-COMMIT-SUMMARY.md b/.planning/phases/06-/06-COMMIT-SUMMARY.md new file mode 100644 index 00000000..64a892a7 --- /dev/null +++ b/.planning/phases/06-/06-COMMIT-SUMMARY.md @@ -0,0 +1,44 @@ +--- +phase: 06- +plan: COMMIT +subsystem: docs +tags: [commit-plan, auditability, workflow] +requires: + - phase: 06- + provides: implementation and validation artifacts +provides: + - executable commit grouping guide for phase 06 + - summary coverage for all execution plans + - phase execution evidence ready for verify-work +affects: [git-history, code-review] +tech-stack: + added: [] + patterns: + - style -> logic -> tests -> docs concern grouping +key-files: + created: + - .planning/phases/06-/06-COMMIT-SUMMARY.md + modified: + - .planning/phases/06-/06-COMMIT-PLAN.md + - .planning/phases/06-/06-VALIDATION.md + - .planning/phases/06-/06-01-SUMMARY.md + - .planning/phases/06-/06-02-SUMMARY.md + - .planning/phases/06-/06-03-SUMMARY.md +key-decisions: + - "保留固定提交顺序,避免跨关注点混提。" + - "执行证据不满足时记录阻塞,不强行标绿。" +requirements-completed: [] +duration: 10 min +completed: 2026-04-15 +--- + +# Phase 06 Commit Plan Summary + +**Phase 06 的执行文档已闭环,提交顺序与验证证据可直接供后续 verify-work 与审阅使用。** + +## Outcome + +- `06-COMMIT-PLAN.md` 的 `style -> logic -> tests -> docs` 顺序可执行。 +- 四个计划均有对应 SUMMARY,满足阶段执行留痕要求。 +- 当前唯一外部阻塞是 E2E 本地服务未启动(`127.0.0.1:2026`)。 + diff --git a/.planning/phases/06-/06-SUMMARY.md b/.planning/phases/06-/06-SUMMARY.md new file mode 100644 index 00000000..6b5d679d --- /dev/null +++ b/.planning/phases/06-/06-SUMMARY.md @@ -0,0 +1,33 @@ +--- +phase: 06- +plan: summary +subsystem: phase-wrapup +tags: [phase-06, references, validation] +requires: + - phase: 06- + provides: 06-01/02/03 and commit summaries +provides: + - phase-level completion snapshot for verification routing + - consolidated evidence for @ reference feature delivery +affects: [verify-work, complete-milestone] +requirements-completed: [ATREF-01, ATREF-02, ATREF-03, ATREF-04] +completed: 2026-04-15 +--- + +# Phase 06 Summary + +**Phase 06 已完成 `@` 文件引用能力(artifacts + uploads)及提交契约收敛,并具备可审计验证材料。** + +## Plan Summaries + +- `06-01-SUMMARY.md`: 提交契约与软失败链路 +- `06-02-SUMMARY.md`: @候选 dropdown + chip + 键盘交互 +- `06-03-SUMMARY.md`: 自动化验证与提交卫生材料 +- `06-COMMIT-SUMMARY.md`: concern-based 提交顺序与执行留痕 + +## Verification Snapshot + +- Unit: `node --test src/core/threads/hooks.test.ts` 通过 +- Typecheck: `pnpm -s typecheck` 通过 +- E2E: `DF-INPUT-007/008` 存在,当前环境阻塞为 `127.0.0.1:2026` 未启动(`ERR_CONNECTION_REFUSED`) + diff --git a/.planning/phases/06-/SUMMARY.md b/.planning/phases/06-/SUMMARY.md new file mode 100644 index 00000000..114ed2b3 --- /dev/null +++ b/.planning/phases/06-/SUMMARY.md @@ -0,0 +1,4 @@ +# Phase 06 Summary Pointer + +See [`06-SUMMARY.md`](./06-SUMMARY.md) for the phase-level summary. +