From 11aaafeaeff449e7421836a837fda5a792987c61 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Sun, 11 Oct 2026 13:46:24 +0800 Subject: [PATCH] docs(09-06): complete book enemy handbook plan - bookDetail.tsx: independent detail UI (base/computed, special list, critical table) - book.tsx: handbook list UI (enemyContext, dedupe by code, 9 columns, open detail) - static symbol + CRLF + scope gates all pass; OI-4..OI-6 recorded --- .../09-06-SUMMARY.md | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 .planning/phases/09-minimum-browser-runnable/09-06-SUMMARY.md diff --git a/.planning/phases/09-minimum-browser-runnable/09-06-SUMMARY.md b/.planning/phases/09-minimum-browser-runnable/09-06-SUMMARY.md new file mode 100644 index 0000000..f2e7285 --- /dev/null +++ b/.planning/phases/09-minimum-browser-runnable/09-06-SUMMARY.md @@ -0,0 +1,155 @@ +--- +phase: 09-minimum-browser-runnable +plan: 6 +subsystem: ui +tags: [ui, book, enemy-handbook, data-system, damage-critical, client-modules] + +# Dependency graph +requires: + - phase: 09-minimum-browser-runnable + provides: 09-05 (post-migration UI fixes; statusBar/toolbar baseline stable) +provides: + - 独立怪物详情 UI bookDetail.tsx(BookDetail/BookDetailUI),入参 IEnemy | IEnemyView,基础/计算后切换、特殊列表、临界表 + - 怪物手册列表 UI book.tsx(Book/BookUI),绑定 current EnemyContext、按 code 去重、9 项数值、滚动、点击开详情 +affects: [book, equipbox, toolbox, shop] + +actuals: + tokens: 4600 + tasks: 3 + commits: 2 + +# Tech tracking +tech-stack: + added: [] + patterns: + - 新 UI 组件以 props.state.enemyContext / props.state.hero 读数据端(无 client 单例) + - 基础属性临界走 calculateEnemyCritical(enemy,'atk',locator|null);计算后走 calculateViewCritical(view,'atk') + - 「1 防」= getIsolatedAttribute().add('def',1) + damage.with(isolated).calculateEnemyCritical(...) 求差 + +key-files: + created: + - packages-user/client-modules/src/ui/bookDetail.tsx + - packages-user/client-modules/src/ui/book.tsx + modified: [] + +key-decisions: + - "OI-4:数字格式化沿用 core.formatBigNumber(as-is)" + - "OI-5:命名照准 book.tsx/bookDetail.tsx、Book/BookDetail、GameUI 'book'/'book-detail'、BookProps/BookDetailProps、BookUI/BookDetailUI" + - "OI-6:「1 防」以基础属性路径计算——getIsolatedAttribute().add('def',1) + with(...).calculateEnemyCritical(...) 求差" + - "详情为独立 UI,不 import book.tsx;列表通过 controller.open(BookDetailUI, { enemy: view }) 打开详情" + - "按 base.code 去重时仅收集 IEnemyView,不新增内部命名接口" + +patterns-established: + - "详情/列表两文件独立:详情入参 IEnemy|IEnemyView 结构判别('getBaseEnemy' in enemy),列表传 IEnemyView 以启用切换" + +requirements-completed: [] + +coverage: + - id: D1 + description: "bookDetail.tsx 独立敌人详情 UI:基础/计算后属性切换、特殊属性列表、临界表、左下切换/右下返回" + verification: + - kind: automated_ui + ref: "node -e BOOKDETAIL GATE (interface BookDetailProps / getBaseEnemy/getComputedEnemy / iterateSpecials / getSpecialName/getDescription / calculateEnemyCritical / calculateViewCritical / BookDetailUI)" + status: pass + - kind: automated_ui + ref: "node -e CRLF GATE bookDetail.tsx" + status: pass + human_judgment: true + rationale: "本计划验证仅为静态源码断言(无 pnpm check:type / build / 浏览器运行);渲染与交互行为未经机器或人工运行验证,需 verifier 按 UAT 确认" + - id: D2 + description: "book.tsx 怪物手册列表 UI:绑定 enemyContext、按 code 去重、9 项数值(含「1 防」)、滚动、点击开详情、右下退出" + verification: + - kind: automated_ui + ref: "node -e BOOK GATE (interface BookProps / props.state.enemyContext / iterateEnemy / getBaseEnemy / .code / calculateEnemyCritical / baseInfo / with( / | IEnemyView`;结构判别(`'getBaseEnemy' in props.enemy`)区分视图;基础/计算后属性经 `getBaseEnemy()`/`getComputedEnemy()` 切换;特殊列表经 `iterateSpecials()` + `getSpecialName()`/`getDescription()`;临界表基础模式 `calculateEnemyCritical(base,'atk',locator)`、计算模式 `calculateViewCritical(view,'atk')`;左下角切换按钮文案随模式变化,右下角「返回上一级」调用 `close(props.instance)`。 +- 新增 `book.tsx`:绑定 `props.state.enemyContext`,按 `base.code` 去重;纵向 `` 平铺行;每行 `` + 名称 + 特殊名 + 生命/攻击/防御/金币/经验 + 伤害/临界/减伤/「1 防」;伤害/临界/减伤经基础路径 `calculateEnemyCritical`,「1 防」经 `with(隔离属性 add('def',1))` 求差;点击行 `controller.open(BookDetailUI, { enemy: view })`;右下「退出」`controller.close(props.instance)`。 +- 两文件均通过静态符号门禁 + CRLF 门禁 + 范围守卫;未改 `package.json`、未改任何既有文件、未触碰用户并发改动。 + +## Task Commits + +Each task was committed atomically: + +1. **Task 0: 预执行汇报关卡(checkpoint:decision, gate=blocking-human)** - 无提交(纯汇报/只读;用户已在父会话回复「可以执行」并采纳默认处置,见 OI-4..OI-6) +2. **Task 1: 新建 bookDetail.tsx(独立详情 UI)** - `04fc4ff` (feat) +3. **Task 2: 新建 book.tsx(列表 UI + 最终静态门禁)** - `0f0b277` (feat) + +**Plan metadata:** 见本 SUMMARY 提交 + +## Files Created/Modified + +- `packages-user/client-modules/src/ui/bookDetail.tsx` - 独立怪物详情 UI(BookDetail/BookDetailUI/BookDetailProps),基础/计算后切换、特殊列表、临界表、左下切换/右下返回 +- `packages-user/client-modules/src/ui/book.tsx` - 怪物手册列表 UI(Book/BookUI/BookProps),enemyContext 绑定、code 去重、9 项数值、滚动、开详情、右下退出 + +## Decisions Made + +- OI-4:数字格式化沿用 `core.formatBigNumber`(as-is,无新等价 API)。 +- OI-5:命名照准(文件名 `book.tsx`/`bookDetail.tsx`;组件 `Book`/`BookDetail`;GameUI `'book'`/`'book-detail'`;props 接口 `BookProps`/`BookDetailProps`;导出 `BookUI`/`BookDetailUI`)。未向 `src/ui/index.ts` 添加导出。 +- OI-6:「1 防」以基础属性路径计算——`getIsolatedAttribute()` 取隔离属性并 `add('def',1)`,用 `damage.with(isolated).calculateEnemyCritical(base,'atk',locator)` 与当前 `baseInfo.damage` 求差。 +- 详情独立(不 import `book.tsx`);列表传 `IEnemyView` 使详情可切换基础/计算后。 +- 去重时仅收集 `IEnemyView`(`Map`),避免引入未在 Task 0 呈报的额外命名接口。 + +## Deviations from Plan + +None - plan executed exactly as written. + +(说明:GSD 执行器规范建议将本计划 `book.tsx` 的空值 TODO 记入跨阶段 `.planning/WINDOWS.md`;但本计划执行约束明确「仅暂存/提交两个新文件 + SUMMARY」,故已回退该账本写入,改为记入下方「Known Stubs」。) + +## Known Stubs + +- `packages-user/client-modules/src/ui/book.tsx:62` — `// TODO: 伤害系统未绑定或已达临界上界时,伤害 / 临界 / 减伤 / 「1 防」留空`。此为**计划明确要求**的优雅降级(`getDamageSystem()` 返回 `null` 或 `next().done === true` 时对应数值留空),非阻碍本计划目标的桩;数据端绑定后自动显示。非本计划范围,无需后续计划解决。 + +## Issues Encountered + +None. + +## Threat Flags + +None(仅读取 `props.state.enemyContext` / `props.state.hero`,不写数据端;无新增网络/文件/信任边界)。 + +## Next Phase Readiness + +- book 列表与独立详情均已落地并通过静态门禁,位于 `packages-user/client-modules/src/ui/`。 +- 未接线「如何从地图打开 book」(D-27 明确不在本计划范围);`book.tsx`/`bookDetail.tsx` 未向 `src/ui/index.ts` 添加导出(保持与同 wave 计划互不冲突)。 +- 若需浏览器/交互层验证,须另行走 UAT(本计划仅静态断言)。 + +## Self-Check: PASSED + +- `packages-user/client-modules/src/ui/book.tsx` 存在(9777 bytes) +- `packages-user/client-modules/src/ui/bookDetail.tsx` 存在(8670 bytes) +- 提交 `04fc4ff`、`0f0b277` 存在于 `refine/data-client` +- 计划级验收符号门禁:两文件均通过 +- CRLF 门禁:两文件均通过 +- 范围守卫 `git status --porcelain`:无越界改动 + +--- +*Phase: 09-minimum-browser-runnable* +*Completed: 2026-10-11*