# integration(任务清单) > 目标:实现 `wrapText()` 统一入口并串联所有子模块,供 Home/Widget 使用。 ## 0. 对齐与准备 - [x] 阅读并对齐口径 - [x] 阅读 `spec_kit/Text Wrap/modules/integration/spec.md` - [x] 阅读 `spec_kit/Text Wrap/modules/integration/plan.md` - [x] 阅读 `spec_kit/Text Wrap/spec.md` 的对外接口定义 ## 1. 对外类型定义 - [x] 新建 `client/src/features/textWrap/types.ts` - [x] 定义 `WrapTextInput`(与大 spec 对齐) - [x] 定义 `WrapTextMeta`(包含 configVersion/fallback_type/overflow_type/reason/breaks/scoreTopTerms) - [x] 定义 `WrapTextOutput` ## 2. 实现 wrapText() 入口 - [x] 新建 `client/src/features/textWrap/wrapText.ts` - [x] normalizeWhitespace(固定策略 NORMALIZE) - [x] tokenize: - [x] EN:tokenizeEN - [x] TC:segmentGraphemes → Token[] - [x] generateBreakpoints(接入 forbiddenBreakRanges) - [x] 组装 scoring 的 lexicons: - [x] protectedPhrases 来自 constraints.protectedPhrases(若有) - [x] 搜索: - [x] APP:searchBestLayoutApp(测量 mockable;fontSpec 缺字段报错由 width-measurement 保证) - [x] WIDGET:searchBestLayoutWidget(默认 APPROX;可选 MEASURE) - [x] 搜索失败/未覆盖 N: - [x] 调用 applyOverflowFallback(overflowMode 默认:APP=CLIP,WIDGET=ELLIPSIS) - [x] 汇总输出 meta: - [x] configVersion - [x] breaks(若可得) - [x] scoreTopTerms(debug=true) - [x] fallback_type/overflow_type/reason ## 3. 导出 - [x] 新建 `client/src/features/textWrap/index.ts` - [x] 导出 types 与 `wrapText` ## 4. 调整 Golden Tests 入口 - [x] 将 `client/src/features/textWrap/golden/__tests__/golden.test.ts` 从测试 harness 切换为 `wrapText()` - [x] 保持现有 fixtures 期望不变 ## 5. 单测补充(最小) - [x] 新建 `client/src/features/textWrap/__tests__/wrapText.integration.test.ts` - [x] SYSTEM_DEFAULT:meta.fallback_type=SYSTEM_DEFAULT 且仍返回 lines/wrappedText ## 6. 收尾 - [x] `npm test` - [x] `npx tsc --noEmit` - [x] 将本 `tasks.md` 全部勾选完成 - [x] 更新 `spec_kit/overview.md` - [x] 标记 `integration` 已完成(阶段性) - [x] 写入变更文件清单