diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md
index 673ea90..edf787c 100644
--- a/.planning/ROADMAP.md
+++ b/.planning/ROADMAP.md
@@ -547,14 +547,14 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 →
| 7. 数据端缺陷修复 | 15/16 | Complete(07-16 superseded) | - |
| 8. 测试重构与接口对齐 | 11/11 | Complete | 2026-10-08 |
| 9. 最小浏览器可运行版本 | 15/16 | In Progress| |
-| 10. 文档重构 | 0/6 | Planned | - |
+| 10. 文档重构 | 0/12 | Planned | - |
### Phase 10: 文档重构
**Goal:** 重构过老、结构不佳、新人难懂的项目文档,面向多背景读者(完全新手 / 不懂代码的作者 / 有基础的作者 / AI Agent)提供分层指南。本阶段采用「伞阶段 + 增量派发」:每次只规划执行一个已派发的具体小任务。**第一批已派发 = 中级教程(`docs/intermediate/`,24 篇中文 markdown)+ 在 VitePress 站点注册它们 + 旧内容清空(D-04 并入本批)**(D-01..D-44)。
**Requirements**: (无专属需求 ID;以 `10-CONTEXT.md` 的 D-01..D-44 为需求基线,验收锚在 D-09:用户人工审阅 + 链接全部有效 + 构建通过)
**Depends on:** Phase 9
-**Plans:** 6 plans(第一批:中级教程 24 篇 + 站点注册)
+**Plans:** 12 plans(第一批:中级教程 24 篇 + 站点注册 + D-09 复审修订)
Plans:
- [ ] 10-01-PLAN.md — Wave 0:旧内容清空 + 站点注册(删除 `docs/guide`、`docs/dev`、`docs/logger`、`docs/api` 与首页 `docs/index.md`;清理 `config.ts` 旧 nav/sidebar 键并解除 apiSidebar/api 依赖;`api.ts` 加缺失目录守卫;新增 nav 入口 + `sidebar['/intermediate/']` 4 组/24 条;报告并等待 checkpoint)
@@ -563,5 +563,11 @@ Plans:
- [ ] 10-04-PLAN.md — 战斗 9 篇(`combat-overview` + 8 篇子系统;N-1/N-2/N-3/N-7 留余地)
- [ ] 10-05-PLAN.md — 其他 3 篇(`events` / `replay-commands` / `data-plugins`)
- [ ] 10-06-PLAN.md — 全批验收(构建通过 + 链接有效 + 交付 D-09 人工审阅)
+- [ ] 10-07-PLAN.md — 目标性修正:D-09 复审 finding 1/3/4(讲清 `state` 获取、清除 legacy 泄漏 + 全批扫描、纠正修饰器定位;仅改 4 篇)
+- [ ] 10-08-PLAN.md — 战斗组引导式·入门友好重写 finding 2/5(`combat-overview` 讲清「计算后怪物 / 为什么要 buildup / 为什么分阶段」+ 7 篇子系统;8 篇)
+- [ ] 10-09-PLAN.md — 概念组 + 「其他」组引导式重写 finding 5(`src-tour`/`code-basics`/`hooks`/`events`/`replay-commands`/`data-plugins`;6 篇)
+- [ ] 10-10-PLAN.md — 基础接口组引导式重写 finding 5(`hero-items`/`hero-equipment`/`hero-location`/`map-structure`/`map-tiles`/`flags`;6 篇)
+- [ ] 10-11-PLAN.md — 读者视角审阅(persona 子代理)→ 问题清单 → 迭代修正(≤3 轮)→ 复审清零
+- [ ] 10-12-PLAN.md — 最终验收:修订后重跑全批验收 + D-09 复审(重跑 10-06 Task 2 门禁)
**说明:** 每篇中级教程遵循 `10-CONTEXT.md` D-21..D-44 的逐篇要点与阅读顺序(4/8/9/3)。**旧内容删除已并入本批(D-04,Wave 0 / 10-01)**:删除 `docs/guide/*`、`docs/dev/*`、`docs/logger/*`、`docs/api/*` 与首页 `docs/index.md`,并清理 `docs/.vitepress/config.ts` 的旧 `nav`/`sidebar` 键。文档改动为 `docs/intermediate/*.md`(新增)、`docs/.vitepress/config.ts` 与 `docs/.vitepress/api.ts`(缺失目录守卫,保留按包生成机制)。构建命令 `cmd /c "pnpm exec tsx docs/.vitepress/init.ts && pnpm docs:build"`;`init.ts` 在 `docs/api/` 缺失时安全跳过。本机 PowerShell 禁止 `pnpm.ps1`,命令经 `cmd /c "..."` 执行。
diff --git a/.planning/phases/10-docs-restructure/10-07-PLAN.md b/.planning/phases/10-docs-restructure/10-07-PLAN.md
new file mode 100644
index 0000000..959732c
--- /dev/null
+++ b/.planning/phases/10-docs-restructure/10-07-PLAN.md
@@ -0,0 +1,152 @@
+---
+phase: 10-docs-restructure
+plan: 07
+type: execute
+wave: 7
+depends_on: [10-06]
+gap_closure: true
+files_modified:
+ - docs/intermediate/data-state-overview.md
+ - docs/intermediate/data-vs-render.md
+ - docs/intermediate/hero-attribute.md
+ - docs/intermediate/enemy-map-damage.md
+autonomous: false
+requirements: []
+user_setup: []
+estimate:
+ tokens: 24000
+ raw_tokens: 16000
+ tasks: 4
+ confidence: low
+must_haves:
+ truths:
+ - "`data-state-overview` 用平实语言解释主对象 `state` 是什么,并列出获取 `state` 的常见方式:框架作为参数传入(道具效果 `useEffect(item, state)`、插件 `awake(state, ...)` / `initialize` / `afterLoad`、事件环境 `env.state`)、从处理对象上取(`handler.state`)、存到自身对象上(`this.state`);不假定读者已懂「主对象」"
+ - "`data-vs-render` 不再出现 legacy 全局包裹接口的名称与示例(那段 `:::info` 被移除,或改写为不含该 legacy 接口名的表述,指引改为指向 `state` 与数据端本身)"
+ - "`enemy-map-damage` 不再出现旧主对象全局前缀的对象访问(第 52 行 `BetweenDamageView` 读取全局 flag `betweenAttackMax` 的表述改为不含旧全局前缀,仅保留 flag 名或改指 `state.flags`)"
+ - "全 24 篇经 legacy 扫描:除已修正处外,无其它 legacy 全局包裹接口(`Mota`)或旧主对象全局前缀对象访问;`core.jsonc` 等文件名不计入"
+ - "`hero-attribute` 的修饰器小节不再把修饰器框定为『临时』:标题与正文明确修饰器既可用于临时、也可用于永久加成;临时效果的做法是『不再需要时移除该修饰器』;保留原有正确的永久示例"
+ - "4 个被改文件仍为 kebab-case、CRLF、单 H1;构建通过且 dead-link 为 0"
+ artifacts:
+ - "docs/intermediate/data-state-overview.md"
+ - "docs/intermediate/data-vs-render.md"
+ - "docs/intermediate/hero-attribute.md"
+ - "docs/intermediate/enemy-map-damage.md"
+ key_links:
+ - "本计划是对 D-09 人工审阅 5 条 finding 中第 1、3、4 条的目标性修正(10-06 Task 2 未通过)"
+ - "`state` 获取方式的统一表述是本计划新增的口径,后续 10-08/10-09/10-10 的引导式重写须沿用,不得与之冲突"
+ - "保留 10-CONTEXT.md D-21(data-vs-render 不提反向推送)与 D-26(hero-attribute 的修饰器、save 语义)等已锁定内容"
+---
+
+
+修正 D-09 人工审阅提出的第 1、3、4 条问题(`state` 获取方式未讲清、legacy 内容泄漏、修饰器被误框定为「临时」),并对这 4 个文件顺带做一次引导式表述调整,避免后续重写计划重复触碰。
+
+Purpose: 让读者能真正看懂「`state` 从哪来」;清除 `docs/intermediate` 中的 legacy 痕迹;把修饰器的定位纠正为「临时与永久皆可」。这三条是**目标性**修正,不改变 D-21..D-44 锁定的内容范围。
+Output: 4 个修正后的 `docs/intermediate/*.md`;legacy 扫描结论。
+
+
+
+@C:/Users/13194/.config/opencode/gsd-core/workflows/execute-plan.md
+@C:/Users/13194/.config/opencode/gsd-core/templates/summary.md
+
+
+
+@.planning/phases/10-docs-restructure/10-CONTEXT.md
+@.planning/phases/10-docs-restructure/10-RESEARCH.md
+@.planning/phases/10-docs-restructure/10-PATTERNS.md
+
+**修正来源(D-09 复审 5 条 finding,本计划负责第 1、3、4 条):**
+- **finding 1(`state` 获取)**:`data-state-overview` 未说清「数据端主对象 `state` 如何获取」;不同地方获得 `state` 的方式不同(函数参数传入 / `this.state` / `handler.state`)。必须用平实语言讲清常见获取方式,且不假定读者理解「主对象」是什么。
+- **finding 3(legacy 泄漏)**:`data-vs-render` 第 46 行写了 legacy 的全局包裹接口示例;该接口属 legacy,**不得出现在教程中**。并须扫描其它页面,清除任何其它 legacy 全局包裹接口或旧主对象全局前缀的对象访问。
+- **finding 4(修饰器被误标「临时」)**:`hero-attribute` 的标题「修饰器:临时的加减与百分比」与「如果只想施加一段**临时**的加成,应使用修饰器」表述有误——修饰器**既可用于临时、也可用于永久**;想实现临时效果,应在不再需要时**移除**该修饰器。保留原有正确的永久示例。
+
+**写作约定与前置:**
+- 骨架、kebab-case、CRLF、单 H1、无元叙述(D-16)、跳转链接 2–5 处/篇,沿用 10-PATTERNS 的约定。
+- 只改 `docs/intermediate/*.md`;**不**触碰 `docs/.vitepress/config.ts`(侧边栏已正确)与任何 `src/`、`packages/`、`packages-user/` 生产代码。
+- 本计划只处理这 4 个文件;其余文件由 10-08/10-09/10-10 处理,互不重叠。
+- 命令一律经 `cmd /c "..."` 执行(本机 PowerShell 禁止 `pnpm.ps1`)。
+- 越界项只记录、不实施(D-14)。
+
+
+
+
+
+ Task 0: 向用户汇报本修正计划并等待「可以执行」
+ 向用户汇报:**要做什么**(对 D-09 复审第 1、3、4 条做目标性修正:讲清 `state` 获取方式、清除 legacy 泄漏、纠正修饰器定位)、**为什么**(10-06 Task 2 的 D-09 审阅未通过,这三条是明确缺陷)、**大致怎么做**(在 `data-state-overview` 用平实语言补「state 从哪来」;在 `data-vs-render` 移除 legacy 全局包裹接口示例并全批扫描其它 legacy 痕迹;在 `hero-attribute` 改写修饰器小节标题与表述;`enemy-map-damage` 去除旧主对象全局前缀引用;四篇顺带做引导式表述调整)、**影响范围**(仅改这 4 个 `docs/intermediate/*.md`,不改站点配置与生产代码)。停下等待用户明确回复「可以执行」四个字;未收到前不得改任何文件。
+ 本计划内容:修正 D-09 复审第 1、3、4 条(state 获取 / legacy 泄漏 / 修饰器定位),仅改动 4 个 `docs/intermediate/*.md`。
+ 阅读上面的「要做什么 / 为什么 / 大致怎么做 / 影响范围」四段,确认修正范围与做法无异议。
+ 回复「可以执行」以继续;其它回复视为未批准,本计划停在此处。
+
+ 用户已回复「可以执行」。
+
+ 用户回复「可以执行」。
+
+
+
+ Task 1: 讲清 state 获取方式(data-state-overview)
+ docs/intermediate/data-state-overview.md
+ 重写/扩写 `data-state-overview.md`,落实 finding 1。要点:(1) 用平实语言解释「主对象 `state`」是什么——不要假定读者懂「主对象」这个概念,先说明它就像游戏的一个总开关/总目录,勇士、地图、怪物、战斗、Flag 等都挂在它下面。(2) 明确列出「`state` 从哪来」的常见方式,至少覆盖三类:① **框架作为参数传入**——道具效果 `useEffect(item, state)`、数据插件 `awake(state, ...)` / `initialize(state, ...)` / `afterLoad(state, ...)`、事件的 `env.state`;② **从处理对象上取**——如 `handler.state`(怪物/战斗上下文里的 handler 带 `state`);③ **存到自己的对象上**——自己写的类在构造函数里接收并保存 `state`,之后用 `this.state`。(3) 明确一句:教程后续代码示例里的 `state` 都假设它已在当前作用域中(由上述任一方式获得),因此示例不再重复来源。(4) 保留原有「常用对象与获取方式」表与 L0–L3 轻量分组标注(D-25)。顺带做引导式表述调整(finding 5 的手法:概念引导式书写,而非罗列)。遵守 kebab-case、CRLF、单 H1、无元叙述。Commit:`docs(10-07): 讲清 state 获取方式`。
+
+ $ErrorActionPreference='Stop'; $p='docs/intermediate/data-state-overview.md'; if(-not(Test-Path $p)){ Write-Error "MISSING $p" }; $raw=[IO.File]::ReadAllText((Resolve-Path $p)); if($raw -match "(?
+ non-zero exit, or output contains "MISSING", "LF-ONLY", "H1-COUNT", "NO-STATE-ACQ", or "NO-STATE"
+
+ `data-state-overview` 用平实语言解释 `state` 并列出三条常见获取方式(参数传入 / `handler.state` / `this.state`,含 `env.state` 与插件参数);保留对象表与 L0–L3 标注;CRLF、单 H1。
+
+
+
+ Task 2: 清除 legacy 泄漏(data-vs-render、enemy-map-damage)+ 全批扫描
+ docs/intermediate/data-vs-render.md, docs/intermediate/enemy-map-damage.md
+ 落实 finding 3。(1) `data-vs-render.md`:移除第 46 行附近那段 `:::info`(内容为「数据端需调用渲染端时要用某个 legacy 全局包裹接口包裹」的提示)。该 legacy 接口名**不得出现在正文任何位置**。改写方式:删掉该提示,或改为一句不含 legacy 接口名的平实说明(例如「数据端代码不应依赖渲染端内容;两端各自独立」),并保持 D-21(**不提**「渲染端不能反向推送」)。(2) `enemy-map-damage.md`:第 52 行 `BetweenDamageView` 读取全局 flag `betweenAttackMax` 的表述里带有旧主对象全局前缀(旧全局对象名以字母 `c` 开头);改为不含该前缀的表述——仅以 flag 名 `betweenAttackMax` 描述该行为,或改述为「读取全局 flag `betweenAttackMax`」。全句语义与 D-39 一致,不臆造新行为。(3) **全批 legacy 扫描**:对 `docs/intermediate/` 全部 24 篇逐篇扫描,找出任何其它 legacy 全局包裹接口名(`M` 开头的旧全局)与旧主对象全局前缀对象访问;文件名性质的出现(如 `core.jsonc`、`ICoreState`)**不算** legacy。发现的其它命中**只记录、报告给用户**(D-14),不在本计划擅自改写。两篇顺带做引导式表述调整。遵守 kebab-case、CRLF、单 H1、无元叙述。Commit:`docs(10-07): 清除 legacy 泄漏`。
+
+ $ErrorActionPreference='Stop'; foreach($p in @('docs/intermediate/data-vs-render.md','docs/intermediate/enemy-map-damage.md')){ if(-not(Test-Path $p)){ Write-Error "MISSING $p" }; $raw=[IO.File]::ReadAllText((Resolve-Path $p)); if($raw -match "(?
+ non-zero exit, or output contains "MISSING", "LF-ONLY", "H1-COUNT", "LEGACY-MOTA", "LEGACY-COREFLAGS", or "LOST-FLAG"
+
+ `data-vs-render` 无 legacy 全局包裹接口名;`enemy-map-damage` 无旧主对象全局前缀、保留 flag 名 `betweenAttackMax`;全 24 篇 legacy 扫描结论已记录;两篇 CRLF、单 H1。
+
+
+
+ Task 3: 纠正修饰器定位(hero-attribute)
+ docs/intermediate/hero-attribute.md
+ 修正 `hero-attribute.md` 的 finding 4。(1) 标题 `## 修饰器:临时的加减与百分比` 改为不把修饰器等同于「临时」的表述(例如 `## 修饰器:属性加成` 或 `## 修饰器:数值与百分比加成`)。(2) 把「如果只想施加一段**临时**的加成,应使用**修饰器**」这句改写为正确表述:**修饰器既可用于永久加成、也可用于临时加成**(是否临时取决于你何时移除它);直接改基础属性会永久改变数值,而修饰器把加成独立出来、便于随时挂上或移除。(3) 明确「想要临时效果」的做法:先 `addModifier(...)`,在不再需要时用 `deleteModifier(...)` 移除,效果即消失。(4) **保留**原有正确的**永久示例**(攻击永久 +5 的 `ValueModifier`)。(5) 保留 D-26 的既有内容:`ValueModifier` / `PercentageModifier`、`getModifiableAttribute()`、`addModifier` / `deleteModifier`、`save` 参数与读档一致性 `:::warning`、`getAttribute()` / `getIsolatedAttribute()`、回指 `./hooks.md`。示例区那句「防御 -20% 临时:挂一个百分比修饰器,战斗结束后再删除」可保留为**临时用法**的示例(它是移除式临时的正例),但需与新表述一致。顺带做引导式表述调整。遵守 kebab-case、CRLF、单 H1、无元叙述。Commit:`docs(10-07): 纠正修饰器定位`。
+
+ $ErrorActionPreference='Stop'; $p='docs/intermediate/hero-attribute.md'; if(-not(Test-Path $p)){ Write-Error "MISSING $p" }; $raw=[IO.File]::ReadAllText((Resolve-Path $p)); if($raw -match "(?
+ non-zero exit, or output contains "MISSING", "LF-ONLY", "H1-COUNT", "BAD-MODIFIER-HEADING", "BAD-TEMP-FRAMING", or "NO-"
+
+ `hero-attribute` 不再把修饰器框定为「临时」;明确修饰器临时/永久皆可,临时效果靠移除修饰器实现;保留永久示例与 `save` 语义;CRLF、单 H1。
+
+
+
+
+
+## Trust Boundaries
+
+| Boundary | Description |
+|----------|-------------|
+| 构建期 markdown → 静态站点 | 正文由构建期静态渲染,无运行时输入 |
+| 站点 → 浏览器读者 | 外链是唯一对外指向面(本篇不引入新外链) |
+
+## STRIDE Threat Register
+
+| Threat ID | Category | Component | Severity | Disposition | Mitigation Plan |
+|-----------|----------|-----------|----------|-------------|-----------------|
+| T-10-19 | Tampering / XSS | 4 篇 markdown 正文 | low | mitigate | 只写文本、代码块、表格;不引入原始 `