diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md
index edf787c..bdac378 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/12 | Planned | - |
+| 10. 文档重构 | 0/20 | 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:用户人工审阅 + 链接全部有效 + 构建通过)
+**Goal:** 重构过老、结构不佳、新人难懂的项目文档,面向多背景读者(完全新手 / 不懂代码的作者 / 有基础的作者 / AI Agent)提供分层指南。本阶段采用「伞阶段 + 增量派发」:每次只规划执行一个已派发的具体小任务。**第一批已派发 = 中级教程(`docs/intermediate/`,24 篇中文 markdown)+ 在 VitePress 站点注册它们 + 旧内容清空(D-04 并入本批)**(D-01..D-44)。**第二批已派发 = 高级教程 I(`docs/advanced/`,7 篇数据端文档)+ 站点注册 + 独立读者人格审阅 + 用户主导修订循环**(D-53..D-57)。
+**Requirements**: (无专属需求 ID;以 `10-CONTEXT.md` 的 D-01..D-57 为需求基线,验收锚在 D-09:用户人工审阅 + 链接全部有效 + 构建通过)
**Depends on:** Phase 9
-**Plans:** 12 plans(第一批:中级教程 24 篇 + 站点注册 + D-09 复审修订)
+**Plans:** 20 plans(第一批:中级教程 24 篇 + 站点注册 + D-09 复审修订;第二批:高级 I 7 篇 + 注册 + 读者审阅 + 用户修订循环)
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)
@@ -569,5 +569,15 @@ Plans:
- [ ] 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-13-PLAN.md — 高级 I 第一篇:声明式 vs 命令式接口(地基;旧样板命令式 vs 新样板声明式 + 通用模板)
+- [ ] 10-14-PLAN.md — 高级 I 第二篇:插件系统(自定义插件、插件互调、依赖排序、生命周期、id 稳定性与迁移)
+- [ ] 10-15-PLAN.md — 高级 I 第三篇:可存档内容(`ISaveableContent`、三级压缩、注册、存档顺序 / 执行器、跨对象引用、structured-cloneable)
+- [ ] 10-16-PLAN.md — 高级 I 第四、五篇:录像一致性(`@shouldReplay` / `@ignoreReplay`)+ data-common 的 Store(内容层原始数据、运行时只读)
+- [ ] 10-17-PLAN.md — 高级 I 第六篇:钩子深入(多对象 / 身份校验 / 复用 / 注册移除 / 异步钩子)
+- [ ] 10-18-PLAN.md — 高级 I 导览 + 站点注册(`docs/advanced/index.md`、`config.ts` 的 nav / sidebar、六篇互链收口 + 全量构建)
+- [ ] 10-19-PLAN.md — 高级 I 独立读者人格审阅(不同于中级人格)→ 问题清单 → 迭代修正(≤3 轮)→ 复审清零
+- [ ] 10-20-PLAN.md — 高级 I 用户主导修订循环 → 用户确认 → 最终格式 / 构建 / SUMMARY 收尾
**说明:** 每篇中级教程遵循 `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 "..."` 执行。
+
+**高级 I 说明:** 第二批(10-13..10-20)只写**数据端**内容,不含渲染端;七篇文件名与侧边栏显示名以各计划 Task 0 的用户确认为准(D-13)。指向高级 II / III 的内容一律使用代码 span 或 HTML 注释占位,不写真实链接(D-47)。每篇保留「怎么验证」小节,并按 D-48 六步 / D-49 改内置优先 / D-50 模板独立 / D-51 落点与副作用 / D-52 加粗边界执行。构建命令同上;10-18 负责站点注册与全量链接收口,10-19 / 10-20 分别执行独立读者人格审阅与用户主导修订循环,**用户明确确认后方可收尾**(D-46 第 2 阶段 / D-57)。
diff --git a/.planning/phases/10-docs-restructure/10-13-PLAN.md b/.planning/phases/10-docs-restructure/10-13-PLAN.md
new file mode 100644
index 0000000..dd1dadb
--- /dev/null
+++ b/.planning/phases/10-docs-restructure/10-13-PLAN.md
@@ -0,0 +1,147 @@
+---
+phase: 10-docs-restructure
+plan: 13
+type: execute
+wave: 1
+depends_on: []
+files_modified:
+ - docs/advanced/declarative-vs-imperative.md
+autonomous: false
+requirements: []
+user_setup: []
+estimate:
+ tokens: 24000
+ raw_tokens: 16000
+ tasks: 3
+ confidence: low
+must_haves:
+ truths:
+ - "`docs/advanced/declarative-vs-imperative.md` 存在,kebab-case、CRLF、单 H1"
+ - "正文用旧样板命令式与新样板声明式并排对照,讲清「谁决定执行时机」,并给出对照表(执行时机 / 执行次数 / 副作用 / 存档与录像 / 组合方式)"
+ - "声明式例子全部落在当前源码事实上:怪物特殊属性与光环、伤害计算器、道具效果、可存档对象、钩子;不把某个具体效果当作通用模板"
+ - "含独立的「模板:声明式扩展的通用骨架」小节,与示例分开;示例用 class + new,并写明「不懂代码优先改内置」"
+ - "含「怎么验证」小节;数据端 only(正文不出现 `src/client`);指向高级 II/III 的内容只用非断链代码 span 或 HTML 注释占位,不产生真实链接"
+ artifacts:
+ - "docs/advanced/declarative-vs-imperative.md"
+ - ".planning/phases/10-docs-restructure/10-13-SUMMARY.md"
+ key_links:
+ - "回指中级教程的 `../intermediate/enemy-specials.md`、`combat-overview.md`、`enemy-calculator.md`、`data-vs-render.md`、`hooks.md`(这些页面已存在,链接可解析)"
+ - "本篇是 10-14..10-17 的概念基础:插件、存档、录像、钩子都建立在「声明规则、引擎在合适时机执行」之上"
+ - "不新增文件之外的任何配置;不改站点 `config.ts`、不改生产代码"
+---
+
+
+新建 `docs/advanced/` 并写下高级 I 的第一篇:`declarative-vs-imperative.md`(声明式 vs 命令式接口)。本篇必须把「旧样板写一行即生效」与「新样板声明规则、引擎在合适时机执行」讲透,作为高级 I 其余六篇的共同基础。
+
+Purpose: 高级教程后续的插件、存档、录像、钩子都要求读者先理解「执行时机由谁决定」。如果这一层没讲透,后面每篇都会变成死记接口(D-54:面向使用者,讲怎么用、怎么改、怎么自定义)。
+Output: 1 个新 markdown 文件。
+
+
+
+@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
+@docs/intermediate/enemy-specials.md
+@docs/intermediate/combat-overview.md
+@docs/intermediate/enemy-calculator.md
+@docs/intermediate/data-vs-render.md
+@docs/intermediate/hooks.md
+
+**写作规范(本计划全部适用):**
+- 受众是**使用者**,不是引擎编写者(D-54):每个机制都要回答「我能拿它做什么、我该改哪里、我怎么验证」。
+- 实操按 D-48 六步:目标 → 改哪里 → 复制什么(不含 `import`)→ 改什么 → 怎么验证 → 注意。系统/原理讲解可以保留,但实操必须能分步照抄。
+- 示例用 class 再 `new`,不写 plain object(D-49);主体讲「改内置」,末尾再讲「何时自己写」,并写明「如果你不怎么懂代码,建议直接改内置」。
+- 通用模板单独成节,用 `[模板]` / `[需改]` 标注,与具体示例分开(D-50)。
+- 落点优先写进已有文件,不建议读者新建文件;需要 `#region` 时说明用途;「副作用」要用通俗语言解释(D-51)。
+- `**加粗**` 不以标点开头或结尾(D-52);提交前按 flanking 规则自检。
+- 数据端 only:不写渲染端内容,正文不出现 `src/client`。
+- 指向高级 II / III 的内容只写代码 span(如 `高级教程 II · 自定义录像行为`)或 ``,不写真实链接(D-47)。
+
+**源码事实(写作时逐条核对,勿凭记忆):**
+- 怪物特殊属性:`src/data/enemy/special.ts`(`ISpecial23Value`、`createSpecials`、`map.set`);数据里 `src/content/enemy.jsonc` 的 `special` 字段;光环转换器/视图在 `src/data/enemy/aura.ts`;注册在 `src/data/enemy/initialize.ts`。
+- 计算后怪物:`packages-user/data-system/src/combat/types.ts` 的 `IEnemyContext.buildup` 四阶段说明;中级导读见 `docs/intermediate/combat-overview.md`。
+- 伤害计算:`src/data/enemy/calculator.ts`(`MainDamageCalculator`、`calculate`、`getCriticalLimit`);接口 `IDamageCalculator` 在 `packages-user/data-system/src/combat/types.ts`;计算器会被临界/显示/战斗反复调用,因此必须无副作用。
+- 道具效果:`packages-user/data-common/src/store/types.ts` 的 `IItemEffect`(`useEffect(item, state)`);内容层实现 `src/content/item.ts`。
+- 可存档对象:`packages-user/data-common/src/save/types.ts` 的 `ISaveableContent`;注册与调用在 `packages-user/data-state/src/core.ts`。
+- 钩子:`packages/common/src/hook.ts` 的 `addHook` / `forEachHook`;中级用法见 `docs/intermediate/hooks.md`。
+- 旧样板命令式例子只作对比:用注释明确标注「旧样板示意」,不把旧接口名混进新样板示例;若无法核实某个旧接口名,就用行为描述,不臆造 API。
+
+
+
+
+
+ Task 0: 向用户汇报本计划并等待「可以执行」
+ 向用户汇报:**要做什么**(新建 `docs/advanced/` 并编写 `declarative-vs-imperative.md`,即「声明式 vs 命令式接口」)、**为什么**(这是高级 I 的地基,后续插件、存档、录像、钩子都依赖「执行时机由谁决定」这一层理解)、**大致怎么做**(先用旧样板命令式与新样板声明式并排对照,再用怪物特殊属性/光环、伤害计算器、道具效果、可存档对象、钩子五组事实说明「声明什么、引擎何时执行」,最后给通用模板、常见误区与「怎么验证」)、**影响范围**(仅新增 1 个 `docs/advanced/*.md`;不改 `config.ts`、不改生产代码、不新增外链)。同时请用户确认两个新名称:文件名 `declarative-vs-imperative.md`、页面标题「声明式 vs 命令式接口」(D-13:文档目录/文件名与显示名须先获批)。停下等待用户明确回复「可以执行」四个字;未收到前不得创建目录或写任何文件。
+ 本计划内容:高级 I 第一篇「声明式 vs 命令式接口」。
+ 阅读上面的「要做什么 / 为什么 / 大致怎么做 / 影响范围」四段,并确认文件名与页面标题;如不同意请直接给出替代名称。
+ 回复「可以执行」以继续;其它回复视为未批准,本计划停在此处。
+
+ 用户已回复「可以执行」,且未对文件名 / 页面标题提出替代。
+
+ 用户回复「可以执行」。
+
+
+
+ Task 1: 编写 declarative-vs-imperative.md 正文
+ docs/advanced/declarative-vs-imperative.md
+ (1) 创建 `docs/advanced/` 并写 `declarative-vs-imperative.md`,单 H1 为「声明式 vs 命令式接口」。(2) 正文按下列顺序组织:①两种写法的一句话区别——命令式是「你写一步、代码走到就执行一步」,声明式是「你声明规则/数据/对象,引擎在定义好的时机调用」;明确「声明式不是不写代码,而是把做什么与什么时候做分开」。②旧样板命令式:用一段明确标注「旧样板示意」的短例子(例如在某段事件脚本里直接循环改周围怪物的攻击,或直接改勇士血量),说明它的后果:只在执行到的那一瞬间生效、要重算只能重跑、每次状态改动都要自己保证记录与一致。旧接口名无法核实就不要写具体名字,用行为描述。③新样板声明式,至少覆盖五组事实:怪物特殊属性与光环(数据里声明 `special`,`special.ts` 定义属性,`aura.ts` 提供转换器/视图,引擎在构建计算后怪物时执行);伤害计算器(`MainDamageCalculator.calculate` 声明 f(enemy, hero),引擎为显示、临界、战斗反复调用,所以必须无副作用);道具效果(`src/content/item.ts` 的 `useEffect` 由引擎在使用/拾取时调用);可存档对象(声明 `saveState` / `loadState`,引擎在存档/读档时调用);钩子(声明钩子类并注册,引擎在事件发生时调用)。每组都要说清「你声明什么」「引擎在哪个时机执行」「为什么这比命令式更稳」。④对照表:行至少含你写什么、何时执行、执行次数、副作用、存档一致性、录像、组合方式、常见错误;列是旧样板命令式与新样板声明式。⑤为什么这样设计:时机集中、从模板重算避免叠加、按优先级/注册表组合、录像只记录玩家入口动作而派生结果重算、计算器被反复调用。⑥「副作用」用通俗话解释:除了返回结果之外还改了外部状态;计算器有副作用会导致临界/显示/战斗结果互相污染。⑦地图伤害按「计算后怪物」计算的说明(D-51):光环若给怪物新增领域类属性,该怪物确实会有领域效果;旧样板无法动态加特殊属性。⑧什么时候仍然用命令式:玩家直接产生的一次性动作(移动、使用道具、一次性脚本)仍调用命令式接口,但这些入口必须计入录像;持续生效的规则用声明式。⑨独立小节「模板:声明式扩展的通用骨架」:给一段 class 骨架,用 `[模板]` / `[需改]` 标出「实现策略接口、注册一次、由引擎调用」的通用形状,与前面的具体示例分开;写明示例是 class 再 `new`,不建议 plain object。⑩「改内置还是自己写」:优先改 `src/data/enemy/*`、`src/data/hook/*` 等已有实现;只有需要独立成组时才自写类;写明「如果你不怎么懂代码,建议直接改内置」。⑪常见误区:把声明式当成「不用写逻辑」、在计算器里改状态、在声明式规则里依赖调用顺序、把一次性动作也硬做成声明式。⑫「怎么验证」:给读者可操作的检查——改一处声明(例如给怪物加一条光环属性或改转换器参数)后不改编排代码,观察结果是否随声明变化;把计算器连续调用两次,确认第二次结果一致且没有额外状态变化;存档后改状态再读档,确认恢复。(3) 适当加 3–5 处链接,只链已存在的页面:`../intermediate/enemy-specials.md`、`../intermediate/combat-overview.md`、`../intermediate/enemy-calculator.md`、`../intermediate/data-vs-render.md`、`../intermediate/hooks.md`。高级 II/III 的内容用代码 span 或 HTML 注释,不写真实链接。(4) 全文 CRLF、单 H1、数据端 only、加粗符合 flanking。完成后运行 `node node_modules/prettier/bin/prettier.cjs --write "docs/advanced/declarative-vs-imperative.md"`。Commit:`docs(10-13): 编写声明式与命令式接口`。
+
+ $ErrorActionPreference='Stop'; $p='docs/advanced/declarative-vs-imperative.md'; if(-not(Test-Path -LiteralPath $p)){ Write-Error "MISSING $p" }; $raw=[IO.File]::ReadAllText((Resolve-Path -LiteralPath $p)); if($raw -match "(?
+ non-zero exit, or output contains "MISSING", "LF-ONLY", "H1-COUNT", "MISSING-CONTENT", "RENDERER-CONTENT", "BOLD-FLANK", or "DEAD-LINK"; or output lacks "STATIC-OK"
+
+ 文件存在、CRLF、单 H1;五组声明式事实、对照表、副作用解释、地图伤害说明、独立模板节、改内置提示、常见误区与「怎么验证」齐全;无渲染端内容;无死链;加粗符合 flanking。
+
+
+
+ Task 2: 源码核对、格式与构建收口
+ docs/advanced/declarative-vs-imperative.md
+ 逐条对照源码核对正文中的接口名、字段名、文件路径与行为描述:`src/data/enemy/special.ts`、`src/content/enemy.jsonc`、`src/data/enemy/aura.ts`、`src/data/enemy/initialize.ts`、`src/data/enemy/calculator.ts`、`packages-user/data-system/src/combat/types.ts`(`IEnemyContext.buildup`、`IDamageCalculator`)、`packages-user/data-common/src/store/types.ts`(`IItemEffect`)、`src/content/item.ts`、`packages-user/data-common/src/save/types.ts`、`packages-user/data-state/src/core.ts`、`packages/common/src/hook.ts`。发现不符就改正文,不凭记忆保留。确认「旧样板示意」没有被误写成可照抄的新接口;确认没有把某个具体效果(如某种光环)当通用模板;确认没有出现渲染端内容;确认高级 II/III 只有代码 span 或 HTML 注释。再跑一次 prettier `--write` 与构建门禁 `cmd /c "pnpm exec tsx docs/.vitepress/init.ts && pnpm docs:build"`,确认 green、`build complete`、dead link = 0。Commit:`docs(10-13): 核对源码并收口声明式文档`。
+
+ $ErrorActionPreference='Continue'; $pf = cmd /c "node node_modules/prettier/bin/prettier.cjs --check docs/advanced/declarative-vs-imperative.md" 2>&1; $pfe=$LASTEXITCODE; $out = cmd /c "pnpm exec tsx docs/.vitepress/init.ts && pnpm docs:build" 2>&1; $ec=$LASTEXITCODE; $ErrorActionPreference='Stop'; if($pfe -ne 0){ $pf | Write-Output; Write-Error "PRETTIER-FAIL" }; if($ec -ne 0){ $out | Write-Output; Write-Error "BUILD-FAIL" }; $txt=($out | ForEach-Object { $_.ToString() }) -join "`n"; if($txt -notmatch 'build complete'){ Write-Error "NO-BUILD-COMPLETE" }; if($txt -match 'dead link'){ Write-Error "DEAD-LINK" }; Write-Output 'GATE-OK'
+ non-zero exit, or output contains "PRETTIER-FAIL", "BUILD-FAIL", "NO-BUILD-COMPLETE", or "DEAD-LINK"; or output lacks "GATE-OK"
+
+ 正文逐条与源码一致;prettier 检查通过;构建 green、`build complete`、dead link = 0。
+
+
+
+
+
+## Trust Boundaries
+
+| Boundary | Description |
+|----------|-------------|
+| 构建期 markdown → 静态站点 | 正文由构建期静态渲染,无运行时输入 |
+| 站点 → 浏览器读者 | 站内链接是唯一可点击指向面 |
+
+## STRIDE Threat Register
+
+| Threat ID | Category | Component | Severity | Disposition | Mitigation Plan |
+|-----------|----------|-----------|----------|-------------|-----------------|
+| T-10-37 | Tampering / XSS | `declarative-vs-imperative.md` | low | mitigate | 只写文本、代码块、表格;不引入原始 `