boardx / boardx/workspacex

feat(canvas): draftFromContextPack —— UC-7.2 AI 起草与留白,契约已签、缺后端实现

Open
#1,464 0 comments 0 reactions 0 assignees View on GitHub
backlog
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.