feat(canvas): draftFromContextPack —— UC-7.2 AI 起草与留白,契约已签、缺后端实现
- Dominant language
- TypeScript
- Stars
- 0
- Forks
- 0
- Avg merge
- 1h 7m
- Merged PRs (30d)
- 969
Description
## 背景
夜间调查(见 #988 关联的 fabric-markdown 能力现状梳理)确认:`packages/contracts/src/canvas.ts` 已经声明了 `draftFromContextPack` / `rollbackAiRound` / `setAiWriteMode` / `acceptSuggestion` 等 UC-7.2「AI 起草与留白」操作,且束级 `design-signoff.md` 状态是 `confirmed`(2026-07-31)。**契约已签,不需要新签核。**
缺的是后端实现:`apps/api/src/interface/controllers/canvas-template.controller.ts`(或新建 controller)没有挂对应路由,`apps/api/src/application/canvas/` 下没有对应 use case。domain 层已有 `apps/api/src/domain/canvas/ai-round-rollback.ts` 可复用。
前端 `apps/web/components/canvas/ai-draft-panel.tsx` 目前是纯 mock 原型(`useState(MOCK_CONST)`,import `@/lib/mock/canvas`),且在 `/canvas` hub 六屏注册表(`lib/canvas-screens.ts`)里未接到任何真实数据源。
## ⚠️ 实现前必须先裁决的开放点(KNOWN_CONTRACT_GAPS,不能代裁)
- **C_CANVAS_1**:三粒度 AI 写权限(分区级/项目级/画布级)的求交语义未定——`SectionDef` 契约里没有 AI 权限字段,是刻意留白还是遗漏,需要人类先看一眼再动手,不要在实现时顺手发明一个字段。
- **I-25**(`WhitespaceWarning` 相关):「AI 只填六成、留四成给人」这条产品行为的具体阈值/规则来源,是否已有权威定义,实现前确认。
## 任务
1. 先解决上面的开放点(可能只需要人类简单确认「按契约字面量实现即可,不需要额外权限维度」,也可能需要一次小的 design-delta)。
2. 后端:application use case + controller 路由 + repository 方法(复用 `ai-round-rollback.ts` domain 逻辑)。
3. 前端:`ai-draft-panel.tsx` 去 mock,接真实端点。
4. 真栈 e2e 覆盖起草→留白告警→回滚全链路。
## 验收
- `draftFromContextPack` 真实调用起草,`WhitespaceWarning` 非空时接口仍成功返回(I-25)。
- `ai-draft-panel.tsx` 整棵依赖树里没有 `lib/mock/canvas` 边(同 `canvas-template-routes-no-mock.test.ts` 的既有纪律,需要更新该测试文件里"如实钉住"的 mock 边清单)。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Contributor guide
No contributing guide indexed for this repository
Research direction
First review packages/contracts/src/canvas.ts, design-signoff.md, and the C_CANVAS_1 and I-25 gaps before implementation. Then trace apps/api/src/interface/controllers/canvas-template.controller.ts, apps/api/src/application/canvas/, and domain/canvas/ai-round-rollback.ts, alongside ai-draft-panel.tsx and canvas-template-routes-no-mock.test.ts. Done means the real draft, warning, rollback flow is covered by true-stack E2E tests and the panel has no mock-canvas dependency.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- backend, frontend, full-stack, testing
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100