diff --git a/.planning/phases/09-minimum-browser-runnable/09-06-PLAN.md b/.planning/phases/09-minimum-browser-runnable/09-06-PLAN.md
index ff3ad6a..fea569f 100644
--- a/.planning/phases/09-minimum-browser-runnable/09-06-PLAN.md
+++ b/.planning/phases/09-minimum-browser-runnable/09-06-PLAN.md
@@ -254,7 +254,7 @@ Phase 9 · 任务 3 · 第 6 个计划 —— **book 怪物手册(列表 `book
纯新增文件;删除 / `git revert` 可整体回退。
- node -e "const fs=require('fs');const bad=[];const p='packages-user/client-modules/src/ui/book.tsx';if(!fs.existsSync(p)){bad.push('book.tsx missing')}else{const t=fs.readFileSync(p,'utf8').replace(/\r\n/g,'\n');const need=[['interface BookProps','props interface'],['props.state.enemyContext','bind enemyContext'],['iterateEnemy(','enumerate'],['getBaseEnemy(','base enemy'],['.code','dedup key code'],['calculateEnemyCritical(','base critical API'],['calculateViewCritical(','computed critical API'],['baseInfo','damage baseInfo'],['with(','scoped hero'],['0){console.error('BOOK GATE FAILED :: '+bad.join(' ; '));process.exit(1)}console.log('OK book: list UI present and bound to enemyContext')"
+ node -e "const fs=require('fs');const bad=[];const p='packages-user/client-modules/src/ui/book.tsx';if(!fs.existsSync(p)){bad.push('book.tsx missing')}else{const t=fs.readFileSync(p,'utf8').replace(/\r\n/g,'\n');const need=[['interface BookProps','props interface'],['props.state.enemyContext','bind enemyContext'],['iterateEnemy(','enumerate'],['getBaseEnemy(','base enemy'],['.code','dedup key code'],['calculateEnemyCritical(','base critical API'],['baseInfo','damage baseInfo'],['with(','scoped hero'],['0){console.error('BOOK GATE FAILED :: '+bad.join(' ; '));process.exit(1)}console.log('OK book: list UI present and bound to enemyContext')"
non-zero exit, 或 stderr 含 "BOOK GATE FAILED"(文件缺失 / 未绑定 `enemyContext` / 关键符号缺失 / 引入 `client` 单例 / `import type` / `?.`)
node -e "const fs=require('fs');const files=['packages-user/client-modules/src/ui/book.tsx','packages-user/client-modules/src/ui/bookDetail.tsx'];const bad=[];for(const f of files){if(!fs.existsSync(f)){bad.push('missing '+f);continue}const raw=fs.readFileSync(f,'utf8');if(/(?
non-zero exit, 或 stderr 含 "CRLF FAILED"(换行非 CRLF)
diff --git a/.planning/phases/09-minimum-browser-runnable/09-07-PLAN.md b/.planning/phases/09-minimum-browser-runnable/09-07-PLAN.md
index f276341..8eb1eaf 100644
--- a/.planning/phases/09-minimum-browser-runnable/09-07-PLAN.md
+++ b/.planning/phases/09-minimum-browser-runnable/09-07-PLAN.md
@@ -119,7 +119,7 @@ Phase 9 · 任务 3 · 第 7 个计划 —— **equipbox 装备界面**。
- 新增组件:`EquipBox`。
- 新增 `GameUI` 名称字符串:`'equipbox'`。
- 新增 props 接口:`EquipBoxProps`(含 `heroState: IHeroState`、`attributes: readonly IHeroAttrItem[]`,及 `IUIPropsBase` 的 `controller/instance/state`)。
- - 新增属性项类型:`IHeroAttrItem`(默认名,`{ readonly id: keyof IHeroAttr; readonly name: string }`;与 09-06 的同名提案如用户希望统一,可后续合并)。
+ - 新增属性项类型:`IHeroAttrItem`(默认名,`{ readonly id: keyof IHeroAttr; readonly name: string }`;**本计划独有的新命名**,与其它计划无同名提案)。
- 新增导出:`EquipBoxUI`(`new GameUI(...)`)。
- **不修改**任何既有命名 / 单例;不向 `src/ui/index.ts` 添加导出(保持与同 wave 计划互不冲突)。