diff --git a/.planning/phases/10-docs-restructure/10-33-PLAN.md b/.planning/phases/10-docs-restructure/10-33-PLAN.md
new file mode 100644
index 0000000..e6d3aee
--- /dev/null
+++ b/.planning/phases/10-docs-restructure/10-33-PLAN.md
@@ -0,0 +1,191 @@
+---
+phase: 10-docs-restructure
+plan: 33
+type: execute
+wave: 5
+depends_on: [10-32]
+files_modified:
+ - docs/advanced/index.md
+ - docs/advanced/i/index.md
+ - docs/advanced/i/declarative-vs-imperative.md
+ - docs/advanced/i/plugin-system.md
+ - docs/advanced/i/saveable-content.md
+ - docs/advanced/i/replay-consistency.md
+ - docs/advanced/i/data-stores.md
+ - docs/advanced/i/hooks-in-depth.md
+ - docs/advanced/i/mover.md
+ - docs/advanced/i/face-handler.md
+ - docs/advanced/ii/index.md
+ - docs/advanced/ii/custom-replay-command.md
+ - docs/advanced/ii/static-vs-dynamic-tiles.md
+ - docs/.vitepress/config.ts
+ - .planning/phases/10-docs-restructure/10-33-SUMMARY.md
+autonomous: false
+requirements: []
+user_setup: []
+estimate:
+ tokens: 42000
+ raw_tokens: 28000
+ tasks: 3
+ confidence: low
+must_haves:
+ truths:
+ - "高级 I 的导览与八篇正文全部位于 `docs/advanced/i/`,`docs/advanced/` 下不再残留这九个旧文件(D-53 分层落位)"
+ - "`docs/advanced/index.md` 被重建为「高级教程总导览」:说明 I / II / III 三层、各自定位与入口;I 与 II 用真实相对链接,III 只写层名与主题、暂不放链接(页面尚未创建,任何链接都会成为死链)"
+ - "`docs/.vitepress/config.ts` 的 `nav` 仍指向 `/advanced/`;`sidebar['/advanced/']` 的 I 组九项改指 `/advanced/i/...`,并在组前新增一条指向 `/advanced/` 的总导览入口;II 组十项与 III 组 `items: []` 原样不动"
+ - "移动后所有相对链接仍可解析:I 内页 `../intermediate/x.md` 改为 `../../intermediate/x.md`、`./ii/x.md` 改为 `../ii/x.md`;II 内页引用 I 的九处改为 `../i/x.md`;`ii/index.md` 的返回导览改为 `../i/index.md`"
+ - "任一计划边界处都不存在死链:配置里每个 `/advanced/...` 目标都能映射到实际文件(`x.md` 或 `x/index.md`);III 组仍为空、总导览不含 `./iii/` 链接"
+ - "prettier `--check` 通过;构建 green、输出 `build complete`、无 `dead link`;九个 I 页与总导览仍是 CRLF、单 H1、kebab-case 文件名"
+ - "不改 `src/`、`packages*/`、`docs/advanced/ii/` 的正文内容(除链接路径外)、`docs/intermediate/` 与其它站点配置;越界问题只记录、不实施(D-14)"
+ artifacts:
+ - "docs/advanced/i/index.md"
+ - "docs/advanced/i/declarative-vs-imperative.md"
+ - "docs/advanced/i/plugin-system.md"
+ - "docs/advanced/i/saveable-content.md"
+ - "docs/advanced/i/replay-consistency.md"
+ - "docs/advanced/i/data-stores.md"
+ - "docs/advanced/i/hooks-in-depth.md"
+ - "docs/advanced/i/mover.md"
+ - "docs/advanced/i/face-handler.md"
+ - "docs/advanced/index.md(新建,高级教程总导览)"
+ - "docs/.vitepress/config.ts(I 组改指 `/advanced/i/`,新增总导览项,III 组保持空)"
+ - ".planning/phases/10-docs-restructure/10-33-SUMMARY.md"
+ key_links:
+ - "采用 `git mv` 移动而不是复制重写:保住 9 个文件的 CRLF 与 git 历史(dev.md:116 要求 CRLF)"
+ - "移动与「新总导览 + config 改写」必须在同一任务内完成:中间态下 `nav: '/advanced/'` 与 I 组链接都会指向不存在的页面,任何构建都会失败"
+ - "III 组的 `items: []` 与总导览的 III 行保持无链接,是保证「每个计划边界都无死链」的关键;由 10-39 在页面齐备后统一注册"
+---
+
+
+把高级教程改成三层目录结构的第一半:用 `git mv` 把高级 I 的导览与八篇正文移入 `docs/advanced/i/`,把 `docs/advanced/index.md` 重建为「高级教程总导览」,同步改写 `config.ts` 的 I 组链接并新增总导览入口,最后修掉全站因移动而失效的相对链接并跑通构建。
+
+Purpose: 高级 III 需要与高级 I / II 同级的位置(`docs/advanced/iii/`),而当前高级 I 的九篇直接摊在 `docs/advanced/` 根目录、其导览又占用了 `/advanced/` 这个总入口。不先分层,「高级教程」这个 nav 会一直指向某一层的导览,III 也没有可并列的落点。
+Output: `docs/advanced/i/` 下的九个既有页面、重建的总导览、更新后的侧边栏、修好的互链、`10-33-SUMMARY.md`。
+
+
+
+@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-ADVANCED-III-RESEARCH.md
+@docs/advanced/index.md
+@docs/advanced/ii/index.md
+@docs/.vitepress/config.ts
+@AGENTS.md
+@dev.md
+
+**现状(已核实):**
+- `docs/advanced/` 根目录有 9 个 I 页:`index.md`(高级 I 导览)与八个正文,全部 CRLF、单 H1。
+- `docs/advanced/ii/` 有 10 个文件;其中 `ii/index.md` 有 6 处「`../` + 高级 I 页文件名」与 1 处 `../index.md`(返回高级 I 导览),`ii/custom-replay-command.md` 有 2 处 `../replay-consistency.md`,`ii/static-vs-dynamic-tiles.md` 有 1 处 `../mover.md`。这是**全部**跨层入链,`docs/intermediate/` 内只有 HTML 注释占位、没有真实链接。
+- I 页内部:`../intermediate/x.md` 与 `./ii/x.md` 两类跨层相对链接,规划时实测为 16 处与 7 处(数量会随页面增补变化,执行时以 grep 实测为准),**一律全部改写**,不按固定条数核对;八篇正文各有 `返回[高级 I 导览](./index.md)。`(移动后同层不变,勿改)。
+- `config.ts`:`nav` 已是 `{ text: '高级教程', link: '/advanced/' }`;`sidebar['/advanced/']` 含 I 组 9 项(首项 `高级 I 导览` → `/advanced/`,其余 8 项 → `/advanced/文件名`)、II 组 10 项、III 组 `items: []`。
+
+**硬约束:**
+- 只动 `files_modified` 列出的文件;不改 II 的正文语义(仅链接路径)、不改 `intermediate/`、不改生产代码。
+- 移动用 `git mv`;改链接只替换行内路径文本,不重写整行、不动行尾,保持 CRLF。
+- 新总导览不写「模板」「[需改]」,不写源码叙述(D-80),不写「渲染端以后讲」式元叙述(D-16);边界单列文末(D-61);加粗遵守 flanking(D-52)。高级教程不设模板章节:D-83 在本层取代 D-50 / D-63 / D-64 的模板要求,因此「模板顺序」「模板 vs 纯接口」的取舍不适用于高级 I / II / III。
+- 命令一律经 `cmd /c "..."` 执行(本机 PowerShell 禁止 `pnpm.ps1`)。
+- research 文件是权威事实源,但行号可能漂移;涉及事实以当前源码/文档为准。注释与实现不一致的条目(research 的 C1–C8)**只在对话中报告**(D-72),不写进文档。
+
+**研究开放问题处置(Q1–Q6,本批统一口径;research 文件本身不修改,以本表为准):**
+- Q1「目录 / 文件名是否批准」→ 已按用户派发批准:`docs/advanced/iii/` + 8 个 kebab-case 文件名,见各计划 `files_modified`(D-13 的批准即本批派发范围)。
+- Q2「高级 I 是否同批移动」→ 同批,由本计划执行;因此 III 页一律使用 `../i/...`,不使用 `../...`。
+- Q3「`anon-tokyo` 是否独立成页」→ 独立成页(10-36);若成稿明显偏短,只向用户提出,不自行合并。
+- Q4「`plugin-internals` 是否独立成页」→ 独立成页(10-38);与 `core-state` 的边界是「排序 / 失败 / 状态」对「装配顺序」。
+- Q5「渲染端加载小节写到什么深度」→ 只写接口级消费(10-34),不写场景结构与 UI 生命周期。
+- Q6「C1–C8 是否要修」→ 本批不修、不写入文档;只在各计划 Task 0 汇报(D-72)。
+
+
+
+
+
+ Task 0: 向用户汇报目录重构计划并等待「可以执行」
+ .planning/phases/10-docs-restructure/10-CONTEXT.md(D-12、D-13、D-53、D-60、D-61、D-82)、.planning/phases/10-docs-restructure/10-ADVANCED-III-RESEARCH.md(Page Split、Pitfall 7)、docs/.vitepress/config.ts
+ 向用户汇报四段并等待批准(D-12):**要做什么**——把高级 I 的导览与八篇正文用 `git mv` 移入 `docs/advanced/i/`,把 `docs/advanced/index.md` 重建为「高级教程总导览」,把 `config.ts` 的 I 组九项改指 `/advanced/i/...`、在组前加一条指向 `/advanced/` 的总导览入口,并修掉全部因移动而失效的相对链接(两类路径全部改写,条数以执行时实测为准),最后格式化 + 全量构建。**为什么**——高级 III 需要与 I / II 并列的落点;当前 `/advanced/` 被 I 导览占用,「高级教程」这个 nav 没有真正的总入口,III 也无处安放。**大致怎么做**——Task 1 原子地完成「移动 + 新总导览 + config 改写 + 链接修正 + prettier --write」(中间态必然死链,故不单独构建);Task 2 跑 prettier `--check` 与全量构建并写 SUMMARY。**影响范围**——9 个文件换目录(内容除链接外不变)、新增 1 个总导览、`config.ts` 的 I 组与新增一项、3 个 II 文件的链接路径;不动 II 正文语义、不动 intermediate、不动生产代码。汇报中明确:**III 组此刻仍保持 `items: []`、总导览的 III 行不放链接**,页面齐备后由 10-39 统一注册,因此本轮不会出现死链;同时列出 research 的 C1–C8 注释/实现疑点(只对话报告,不写入文档,D-72),并说明本计划的修改方式为**派发子代理执行**,范围严格限定在 `files_modified` 与 SUMMARY。停下等待用户明确回复「可以执行」四个字;未收到前不得移动文件、不得改配置、不得派发修改子代理。
+ 本计划内容:高级 I 九页移入 `docs/advanced/i/`、重建高级教程总导览、侧边栏改指与全站互链修正。
+ 阅读上面的四段说明,确认移动范围、总导览结构(含 III 行刻意无链接)与 config 改动;如不同意请给出替代。
+ 回复「可以执行」以继续;其它回复视为未批准,本计划停在此处。
+ 用户已回复「可以执行」;若对总导览标题、总导览在侧边栏的显示名或 I 组顺序提出替代,已按用户意见修正计划。
+
+ 用户已回复「可以执行」,且未对目录名(`docs/advanced/i/`)、总导览标题或侧边栏顺序提出替代。
+
+ 用户回复「可以执行」。
+
+
+
+ Task 1: 移动九页、重建总导览、改写 config 与全部互链
+ docs/advanced/i/*.md(9 个)、docs/advanced/index.md、docs/.vitepress/config.ts、docs/advanced/ii/index.md、docs/advanced/ii/custom-replay-command.md、docs/advanced/ii/static-vs-dynamic-tiles.md
+ docs/advanced/index.md(现有 I 导览全文)、docs/advanced/ii/index.md:31-48 与 :128、docs/advanced/ii/custom-replay-command.md:3-5、docs/advanced/ii/static-vs-dynamic-tiles.md:149、docs/.vitepress/config.ts:20-23 与 :154-240、docs/advanced/mover.md:52-73,456、docs/advanced/face-handler.md:112
+ (1) **移动**:先 `New-Item -ItemType Directory -Path docs/advanced/i -Force`,再对 `index.md`、`declarative-vs-imperative.md`、`plugin-system.md`、`saveable-content.md`、`replay-consistency.md`、`data-stores.md`、`hooks-in-depth.md`、`mover.md`、`face-handler.md` 逐个执行 `git mv docs/advanced/文件名 docs/advanced/i/文件名`(一次一个,便于核对)。移动后 `docs/advanced/` 根目录**不再有**这 9 个旧文件。
+(2) **修链接(只改路径文本)**:在 `docs/advanced/i/` 的九个文件里把 `](../intermediate/` **全部**改为 `](../../intermediate/`,把 `](./ii/` **全部**改为 `](../ii/`(两类的实际条数以执行时 grep 实测为准,不要按固定数字核对);`返回[高级 I 导览](./index.md)。` 保持不变(同层仍指向 `i/index.md`)。改完逐文件确认仍是 CRLF、单 H1,且没有把 `i/index.md` 的自身标题改成总导览标题。
+(3) **新建总导览**:用 Write 重写 `docs/advanced/index.md`(原文件已移走,这是新建)。要求:单 H1 `# 高级教程总导览`;引言说明高级教程面向有高度定制需求、需要理解引擎设计的作者,按**难度**分 I / II / III 三层(不是领域分类);`## 三层结构` 用表格给三层定位与主题,I 行链接 `[高级 I · 扩展基础](./i/)`、II 行链接 `[高级 II · 深入定制](./ii/)`、III 行**只写层名与主题、不放链接**;`## 怎么选阅读路径` 给「先 I 后 II、III 按需」与「按目标跳读」两条建议;`## 前置` 链接中级三篇(`../intermediate/data-vs-render.md`、`../intermediate/code-basics.md`、`../intermediate/data-plugins.md`);`## 与中级教程的分工` 一段说明中级讲「怎么用」、高级讲「怎么扩展」;`## 边界与注意` 放文末,写渲染端与编辑器内容为占位、不重复中级已讲内容、III 的入口随该层页面就绪开放。不要出现「模板」「[需改]」,不要出现 `src/client`,不要写「源码第 X 行」这类叙述。
+(4) **改 config**:`sidebar['/advanced/']` 的第一项改为 `{ text: '高级教程总导览', link: '/advanced/' }`(置于三个分组之前,作为键内的首项);I 组的 `高级 I 导览` 改指 `/advanced/i/`,其余八项改指 `/advanced/i/declarative-vs-imperative` 等;**新增**九项的总导览项后 I 组仍是 9 项;II 组 10 项逐字不动;III 组保持 `collapsed: true` 与 `items: []`;`nav` 不动。
+(5) **改 II 入链**:`ii/index.md` 六处「`../` + 高级 I 页文件名」改为「`../i/` + 同名」,末尾 `../index.md` → `../i/index.md`(语义仍是「返回高级 I 导览」);`ii/custom-replay-command.md` 两处 `../replay-consistency.md` → `../i/replay-consistency.md`;`ii/static-vs-dynamic-tiles.md` 一处 `../mover.md` → `../i/mover.md`。不改这些文件的其它文字。
+(6) 跑 `node node_modules/prettier/bin/prettier.cjs --write` 覆盖:新总导览、`docs/advanced/i/*.md`、`docs/advanced/ii/index.md`、`docs/advanced/ii/custom-replay-command.md`、`docs/advanced/ii/static-vs-dynamic-tiles.md`、`docs/.vitepress/config.ts`。格式化后重新确认 CRLF 未被改写为 LF。Commit:`docs(10-33): 高级 I 移入 i/ 并重建总导览与侧边栏`。
+ 九个 I 页在 `docs/advanced/i/` 下且 `docs/advanced/` 根目录无旧文件;总导览为单 H1、含三层表(I/II 有链接、III 无链接)、前置链接与文末边界;config 中 I 组 9 个目标全为 `/advanced/i/...`、存在总导览项、II 组 10 项未变、III 组为空;II 的九处跨层链接与一处返回导览全部改指 `../i/...`;所有相对 `.md` 链接与目录链接可解析;prettier 已格式化。
+
+ $ErrorActionPreference='Stop'; if(-not(Test-Path -LiteralPath 'docs/advanced/i')){ Write-Error 'MISSING-DIR' }; if(-not(Test-Path -LiteralPath 'docs/advanced/i/index.md')){ Write-Error 'MISSING i/index.md' }; $moved=@('declarative-vs-imperative','plugin-system','saveable-content','replay-consistency','data-stores','hooks-in-depth','mover','face-handler'); foreach($n in $moved){ if(-not(Test-Path -LiteralPath "docs/advanced/i/$n.md")){ Write-Error "MISSING i/$n.md" }; if(Test-Path -LiteralPath "docs/advanced/$n.md"){ Write-Error "STALE-ROOT $n.md" } }; if(-not(Test-Path -LiteralPath 'docs/advanced/index.md')){ Write-Error 'MISSING-ROOT-INDEX' }; $iGuide=[IO.File]::ReadAllText((Resolve-Path -LiteralPath 'docs/advanced/i/index.md')); if($iGuide -notmatch '# 高级 I 导览'){ Write-Error 'NO-I-GUIDE-TITLE' }; $rootGuide=[IO.File]::ReadAllText((Resolve-Path -LiteralPath 'docs/advanced/index.md')); if($rootGuide -match '(?m)^# 高级 I 导览'){ Write-Error 'STALE-I-GUIDE-AT-ROOT' }; $files=Get-ChildItem -LiteralPath 'docs/advanced' -Recurse -File -Filter '*.md'; foreach($f in $files){ $raw=[IO.File]::ReadAllText($f.FullName); if($raw -match "(? $($m.Groups[1].Value)" } }; foreach($m in [regex]::Matches($raw,'\]\((\.{1,2}/[^)#]*/)\)')){ $t=Join-Path $f.DirectoryName $m.Groups[1].Value; if(-not(Test-Path -LiteralPath $t)){ Write-Error "DEAD-DIR $($f.Name) -> $($m.Groups[1].Value)" } } }; $iRaw=Get-ChildItem -LiteralPath 'docs/advanced/i' -File -Filter '*.md' | ForEach-Object { [IO.File]::ReadAllText($_.FullName) }; $iAll=$iRaw -join "`n"; if($iAll -match '\]\(\.\./intermediate/'){ Write-Error 'STALE-INTERMEDIATE-PATH' }; if($iAll -match '\]\(\./ii/'){ Write-Error 'STALE-II-PATH' }; $cfg=[IO.File]::ReadAllText((Resolve-Path -LiteralPath 'docs/.vitepress/config.ts')); $links=[regex]::Matches($cfg,"link:\s*'(/advanced/[^']*)'") | ForEach-Object { $_.Groups[1].Value } | Sort-Object -Unique; foreach($l in $links){ $rel=$l.TrimEnd('/'); $p1="docs/$rel.md"; $p2="docs/$rel/index.md"; if(-not(Test-Path -LiteralPath $p1) -and -not(Test-Path -LiteralPath $p2)){ Write-Error "CFG-DEAD $l" } }; $iLinks=[regex]::Matches($cfg,"link:\s*'(/advanced/i/[^']*)'") | ForEach-Object { $_.Groups[1].Value } | Sort-Object -Unique; if($iLinks.Count -ne 9){ Write-Error ("I-LINK-COUNT " + $iLinks.Count) }; if($links -notcontains '/advanced/'){ Write-Error 'NO-ROOT-ENTRY' }; if(([regex]::Matches($cfg,"link:\s*'/advanced/ii/[^']*'")).Count -ne 10){ Write-Error 'II-LINKS-CHANGED' }; if($cfg -notmatch "text:\s*'高级 III · 原理与架构'"){ Write-Error 'NO-III-GROUP' }; $idx=[IO.File]::ReadAllText((Resolve-Path -LiteralPath 'docs/advanced/index.md')); foreach($needle in @('# 高级教程总导览','./i/','./ii/','../intermediate/data-vs-render.md','边界与注意')){ if($idx -notmatch [regex]::Escape($needle)){ Write-Error "INDEX-MISSING $needle" } }; if($idx -match '\]\(\./iii'){ Write-Error 'INDEX-HAS-III-LINK' }; if($idx -match 'src/client'){ Write-Error 'INDEX-RENDERER' }; if($idx -match '\[需改\]|模板'){ Write-Error 'INDEX-TEMPLATE-MARK' }; Write-Output 'RESTRUCTURE-OK'
+ non-zero exit, or output contains "MISSING", "STALE-ROOT", "LF-ONLY", "H1-COUNT", "DEAD-LINK", "DEAD-DIR", "STALE-INTERMEDIATE-PATH", "STALE-II-PATH", "CFG-DEAD", "I-LINK-COUNT", "NO-ROOT-ENTRY", "II-LINKS-CHANGED", "NO-III-GROUP", "INDEX-MISSING", "MISSING-ROOT-INDEX", "NO-I-GUIDE-TITLE", "STALE-I-GUIDE-AT-ROOT", "INDEX-HAS-III-LINK", "INDEX-RENDERER", or "INDEX-TEMPLATE-MARK"; or output lacks "RESTRUCTURE-OK"
+
+ 九个 I 页就位、根目录无旧文件;总导览成立且 III 无链接;config I 组 9 项 + 总导览项、II 组与 III 组未变;全部相对链接与目录链接可解析;CRLF 与单 H1 保持。
+
+
+
+ Task 2: 格式检查、全量构建与 SUMMARY
+ .planning/phases/10-docs-restructure/10-33-SUMMARY.md
+ docs/.vitepress/init.ts(确认 apiSidebar 生成入口)、.planning/phases/10-docs-restructure/10-30-SUMMARY.md(SUMMARY 写法)
+ (1) 格式门禁:对 `docs/advanced/index.md`、`docs/advanced/i/*.md`、`docs/advanced/ii/index.md`、`docs/advanced/ii/custom-replay-command.md`、`docs/advanced/ii/static-vs-dynamic-tiles.md`、`docs/.vitepress/config.ts` 跑 `node node_modules/prettier/bin/prettier.cjs --check`,必须全通过;若 `config.ts` 因既有格式基线报错,先单独 `--write` 该文件再 `--check`,并在 SUMMARY 记录「仅格式化、无语义改动」。
+(2) 构建门禁:`cmd /c "pnpm exec tsx docs/.vitepress/init.ts && pnpm docs:build"`,要求退出码 0、输出含 `build complete`、输出不含 `dead link`(VitePress 会打印 `[vitepress] Dead link found` 一类信息)。若因既有无关文件(工作区里 `packages-user/client-base` 的改动)导致失败,先判断是否与本计划修改无关,再决定是否停下向用户汇报——**不得**为了让构建过而改动本计划范围外的文件。
+(3) 人工点检:浏览器或产物目录确认 `/advanced/` 为总导览、`/advanced/i/` 为高级 I 导览、九个 I 页均可从侧边栏进入、`/advanced/ii/` 十篇仍可进入且返回导览指向 `i/index.md`。
+(4) 写 `.planning/phases/10-docs-restructure/10-33-SUMMARY.md`:移动清单(git mv 的 9 条,均为仅移动、内容不变)、链接修正的分类与数量(执行时实测,不写死条数)、总导览结构与它刻意不含的 III 链接、config 改动点(I 组 9 项 + 总导览项 + III 组保持为空)、prettier 与构建结论、侧边栏目标清单、遗留事项(III 注册与总导览 III 入口留给 10-39)。Commit:`docs(10-33): 目录重构收口与构建验证`。
+ prettier `--check` 对 six 个目标文件(组)全通过;构建退出码 0、含 `build complete`、无 `dead link`;SUMMARY 记录移动/链接/配置/格式/构建与遗留事项。
+
+ $ErrorActionPreference='Stop'; $sum='.planning/phases/10-docs-restructure/10-33-SUMMARY.md'; if(-not(Test-Path -LiteralPath $sum)){ Write-Error "MISSING $sum" }; $s=[IO.File]::ReadAllText((Resolve-Path -LiteralPath $sum)); foreach($needle in @('git mv','总导览','config','构建','10-39')){ if($s -notmatch [regex]::Escape($needle)){ Write-Error "SUMMARY-MISSING $needle" } }; $ErrorActionPreference='Continue'; $pf = cmd /c "node node_modules/prettier/bin/prettier.cjs --check docs/advanced/index.md docs/advanced/i docs/advanced/ii/index.md docs/advanced/ii/custom-replay-command.md docs/advanced/ii/static-vs-dynamic-tiles.md docs/.vitepress/config.ts" 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|dead link'){ Write-Error 'DEAD-LINK' }; Write-Output 'BUILD-OK'
+ non-zero exit, or output contains "MISSING", "SUMMARY-MISSING", "PRETTIER-FAIL", "BUILD-FAIL", "NO-BUILD-COMPLETE", or "DEAD-LINK"; or output lacks "BUILD-OK"
+
+ 格式与构建双绿;SUMMARY 完整;无越界改动。
+
+
+
+
+
+## Trust Boundaries
+
+| Boundary | Description |
+|----------|-------------|
+| 配置文件 → 站点结构 | `sidebar` / `nav` 决定哪些页面可被浏览;写错即产生死链 |
+| 构建期 markdown → 静态站点 | 正文与相对链接在构建期解析,无运行时输入 |
+| 读者 → 站点 | 站内链接是唯一可点击指向面 |
+
+## STRIDE Threat Register
+
+| Threat ID | Category | Component | Severity | Disposition | Mitigation Plan |
+|-----------|----------|-----------|----------|-------------|-----------------|
+| T-10-97 | Tampering | `config.ts` 的 `/advanced/` 链接集合 | medium | mitigate | 静态断言每个 `/advanced/...` 目标能映射到实际文件或目录 index;I 组必须恰好 9 个 `/advanced/i/...` 目标 |
+| T-10-98 | Spoofing | 移动后的返回导览链接 | low | mitigate | 断言 I 内页 `./index.md` 仍指向 `i/index.md`;II 的返回导览改指 `../i/index.md` |
+| T-10-99 | Information Disclosure | 总导览与 SUMMARY | low | mitigate | 只引用仓库已公开路径与接口;不写密钥、账号 |
+| T-10-SC | Tampering | npm/pip/cargo installs | low | accept | 本阶段不安装任何包,无供应链安装面 |
+
+
+
+- 结构门禁:`docs/advanced/i/` 恰有 9 个 I 页,`docs/advanced/` 根目录无这 9 个旧文件。
+- 链接门禁:`docs/advanced/**` 内每个相对 `.md` 链接与目录链接目标存在;config 内每个 `/advanced/...` 目标存在。
+- 配置门禁:I 组 9 个 `/advanced/i/...` 目标 + 一条 `/advanced/` 总导览项;II 组 10 项逐字不变;III 组 `items: []`。
+- 内容门禁:总导览单 H1、三层表(I/II 有链接、III 无链接)、文末边界、无渲染端内容、无模板标记。
+- 格式门禁:prettier `--check` 通过。
+- 构建门禁:`build complete` 且无 `dead link`。
+- 越界门禁:`git status` 只含本计划 `files_modified` 内的改动与 SUMMARY。
+
+
+
+- 高级教程在站点上有了真正的总入口,高级 I 完整落在 `docs/advanced/i/`,高级 II 未受影响。
+- 任一计划边界处都没有死链,III 仍可在 10-39 一次性接入。
+- 构建与格式双绿,无越界改动。
+
+
+
diff --git a/.planning/phases/10-docs-restructure/10-34-PLAN.md b/.planning/phases/10-docs-restructure/10-34-PLAN.md
new file mode 100644
index 0000000..04a2daf
--- /dev/null
+++ b/.planning/phases/10-docs-restructure/10-34-PLAN.md
@@ -0,0 +1,158 @@
+---
+phase: 10-docs-restructure
+plan: 34
+type: execute
+wave: 6
+depends_on: [10-33]
+files_modified:
+ - docs/advanced/iii/loading-system.md
+ - .planning/phases/10-docs-restructure/10-34-SUMMARY.md
+autonomous: false
+requirements: []
+user_setup: []
+estimate:
+ tokens: 30000
+ raw_tokens: 20000
+ tasks: 3
+ confidence: low
+must_haves:
+ truths:
+ - "`docs/advanced/iii/loading-system.md` 先讲系统模型(`LoadTask` → `LoadManager` → `MotaDataLoader` 三层,`ILoadTaskStarter` 作为环境适配点),再讲阶段顺序、配置与处理器、扩展点(D-82)"
+ - "阶段顺序写对且完整:核心配置 → `onCoreConfigLoaded` → 额外配置 → `onExtraConfigLoaded` → 自定义任务 → 完成;并说明 `CoreState.load()` 把插件 `initialize` 放在 `loader.start()` 之前、`afterLoad` 放在之后"
+ - "扩展点覆盖三类且各自完整:新增配置文件(`addCoreConfig` / `addExtraConfig`)、新增资源类型(`LoadTask` + processor + starter + `addCustomTask`)、替换环境(实现 `ILoadTaskStarter`);本地数据包只作为设计能力说明、不给实现代码"
+ - "渲染端内容只出现在独立的接口级小节内(`RenderLoaderHooks` 追加配置、渲染端迭代同一个 `loader.start()` 读进度),不写渲染管线、场景与 `ClientCore` 生命周期;全文除该小节外不出现 `src/client`"
+ - "文末有单一的「边界与注意」小节(D-61),覆盖配置 id 冲突、`addCustomTask` 调用时机、JSONC 前缀缺失、DEV 与构建后路径差异、自定义 starter 的返回契约、字节进度在总量未知时可能不准"
+ - "不写 `getTotalByte` 的「总字节」语义、不承诺 `loading` / `dataLoaded` 守卫只加载一次、不写重复配置 id 稳定告警(D-72:这些疑点只在对话中报告);不写源码行号叙述(D-80);无「模板」「[需改]」标记(D-83)"
+ - "page 仍是 kebab-case、CRLF、单 H1;相对链接全部可解析且至少一条指向 `../i/` 或 `../ii/`;prettier `--check` 通过;构建 green、`build complete`、无 `dead link`"
+ artifacts:
+ - "docs/advanced/iii/loading-system.md"
+ - ".planning/phases/10-docs-restructure/10-34-SUMMARY.md"
+ key_links:
+ - "研究文件的 §1「加载系统」是事实源;执行前必须按当前源码复核接口名与行为,行号可能已漂移"
+ - "本页是 III 唯一允许出现渲染端内容的页面(仅加载小节);这条边界由 10-39 的互链与 10-40 的读者审阅共同复核"
+ - "加载三阶段与插件时机的关系必须链接到 `../i/plugin-system.md`,否则读者会把 `initialize` / `afterLoad` 与加载阶段混为一谈"
+---
+
+
+写出高级 III 的第一篇数据端原理页《加载系统》:讲清「单任务 → 聚合器 → 阶段编排」的模型、四个阶段的顺序、配置文件与处理器的约定、三类扩展点,以及一段严格限定在接口层的渲染端消费说明,最后把边界集中到文末。
+
+Purpose: 加载是所有数据端内容的入口。读者真正会做的扩展只有三件——加一份配置、加一种资源、换一个环境(例如本地数据包);不理解阶段顺序就会把「配置在加载前才可追加」这类约束踩成运行时怪象。
+Output: `docs/advanced/iii/loading-system.md` 与 `10-34-SUMMARY.md`。
+
+
+
+@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-ADVANCED-III-RESEARCH.md
+@docs/advanced/index.md
+@docs/advanced/i/plugin-system.md
+@docs/.vitepress/config.ts
+
+**写作规范(本批统一,逐条自检):**
+- 库文档风格(D-59),简洁优先(D-60);先模型后接口(D-82);使用 vs 自定义按内容性质分配重心(D-77)——本页两者各半,自定义集中在「加配置 / 加资源 / 换环境」。
+- 边界、特殊情况一律文末单列(D-61);纯内部实现章节要写「此章节讲解一下 XXX 的内部实现」并尽量后置(D-69)。
+- 代码块给完整类 / 函数上下文(D-62 / D-70),示例注释尽量充分(D-65);不写「模板」「[需改]」(D-83)。
+- 不写源码叙述与行号(D-80);不把用户提问或「为解决问题所以这样写」写进正文(D-81)。
+- 编辑器与 `.jsonc` 内容配置只按「需要编辑器」占位(D-73);序列化事件注册、地图事件 id 绑定不在本篇范围。
+- 引用其它文档的具体章节用 `./x.md#标题` 或 `../i/x.md#标题`(D-74)。
+- research 是权威事实源但行号会漂移:**执行前必须打开当前源码复核**每个接口名、方法与行为;发现注释与实现不一致按 D-72 以注释为准,并在汇报中列出,不写进正文。
+- 本页(且仅本页)允许出现 `src/client`,但只允许出现在「渲染端如何消费加载进度」一节内。
+
+
+
+
+
+ Task 0: 向用户汇报本篇计划并等待「可以执行」
+ .planning/phases/10-docs-restructure/10-CONTEXT.md(D-12、D-53、D-60、D-61、D-77、D-80、D-82)、.planning/phases/10-docs-restructure/10-ADVANCED-III-RESEARCH.md(§1 加载系统、§2 页切分 loading-system 行、Pitfall 1/4)
+ 向用户汇报四段并等待批准(D-12):**要做什么**——新建 `docs/advanced/iii/loading-system.md`,按「模型 → 阶段顺序 → 配置与处理器 → 三类扩展点 → 进度 → 渲染端接口级小节 → 边界与注意」组织。**为什么**——加载是数据端入口,读者最容易踩的是「配置只能在加载前追加」「换环境要换 starter」这两条;同时它是本层唯一允许出现渲染端内容的页面,边界必须写死。**大致怎么做**——Task 1 先复核源码事实再落稿并跑 prettier;Task 2 跑全量构建与结构门禁、写 SUMMARY。**影响范围**——只新增这一篇与 SUMMARY;不动 config(III 组由 10-39 注册)、不动既有 I / II 页面、不动源码。汇报中明确:页面标题为《加载系统》、文件名为 `loading-system.md`(D-13 已由用户批准,若用户当场改名按用户意见执行);渲染端只写接口级消费、不写 `ClientCore` 生命周期;不写 `getTotalByte` 的总字节语义、不承诺只加载一次、不写重复配置 id 告警(research C1/C4/C5,只对话报告,D-72)。汇报中说明本计划的修改方式为**派发子代理执行**,范围严格限于本页与 SUMMARY。停下等待用户明确回复「可以执行」四个字;未收到前不得建文件、不得派发写作子代理。
+ 本计划内容:新建《加载系统》一页(含严格限定的渲染端接口小节)。
+ 确认页面范围、渲染端小节深度,以及刻意不写的内容(总字节语义 / 只加载一次 / 重复 id 告警 / FSA 实现);如需调整请说明。
+ 回复「可以执行」以继续;其它回复视为未批准,本计划停在此处。
+ 用户已回复「可以执行」;若对标题、渲染端小节深度或「本地数据包」写法提出意见,已并入后续任务。
+
+ 用户已回复「可以执行」,且未否决页面标题 / 文件 / 渲染端小节范围。
+
+ 用户回复「可以执行」。
+
+
+
+ Task 1: 复核加载事实并落稿 loading-system.md
+ docs/advanced/iii/loading-system.md
+ packages/loader/src/task.ts、packages/loader/src/manager.ts、packages/loader/src/types.ts、packages/loader/src/starter.ts、packages-user/data-state/src/loader/loader.ts、packages-user/data-state/src/loader/types.ts、packages-user/data-state/src/loader/jsoncProcessor.ts、packages-user/data-state/src/core.ts(load 管线)、src/data/loader/hook.ts、packages-user/client-modules/src/loader/hook.ts、src/client/ui/load.tsx(仅渲染端小节用)、docs/advanced/i/plugin-system.md(时机章节)、docs/intermediate/data-plugins.md
+ (1) 建目录 `docs/advanced/iii/`(若不存在),用 Write 新建 `docs/advanced/iii/loading-system.md`(CRLF、单 H1)。
+(2) 结构(按此顺序,不写源码行号):
+- `# 加载系统` + 2–3 段引言:一次加载解决的问题、三层组成、本页只讲接口与扩展点。
+- `## 系统模型`:先讲三层职责——`LoadTask`(一个资源:取响应 → 处理 → 产出结果)、`LoadManager`(聚合任务、累计进度、以异步迭代方式推进)、`MotaDataLoader`(按阶段编排核心配置、额外配置与自定义任务);再讲 `ILoadTaskStarter` 是「怎么取响应」的环境适配点,网页端用 `fetch` 实现,换环境只需换 starter。给一段 `text` 数据流示意(阶段顺序),不要画渲染端。
+- `## 一次加载的阶段`:核心配置 → `onCoreConfigLoaded`(可继续追加)→ 额外配置 → `onExtraConfigLoaded` → 自定义任务 → 全部完成;补一句 `CoreState.load()` 的包裹关系:插件 `initialize` 在 `loader.start()` 之前、`afterLoad` 在之后(链接 `../i/plugin-system.md`)。
+- `## 配置文件与处理器`:配置按系统前缀切分后再解析为 JSON,前缀缺失或 JSON 解析失败会被报错丢弃;`addCoreConfig` / `addExtraConfig` 的差别(核心配置决定内容清单,额外配置在内容清单之后加载);额外配置的 `url` 相对于内容目录;DEV 与构建后路径前缀不同,由加载器统一处理。
+- `## 扩展点:加一份配置`:给出完整函数示例(含注释),说明在插件 `initialize` 或 `onCoreConfigLoaded` 里追加,且**必须在对应阶段之前**;配置文件本身由编辑器产出(D-73 占位)。
+- `## 扩展点:加一种资源`:完整示例:构造任务(标识、地址、数据类型:`ArrayBuffer` / `Uint8Array` / `Blob` / `Text` / `JSON` 五选一)、设置处理器、必要时设置 starter、`addCustomTask`;说明返回的 Promise 在该任务完成后兑现。代码块必须是完整函数/类上下文并带解释性注释。
+- `## 扩展点:换一个加载环境`:实现 starter 的 `start` 返回 `IResponseLike`,传给创建数据端 / 客户端主对象的入口;本地数据包(文件系统访问)只作为**设计能力**一句话说明,**不给实现代码**。
+- `## 进度`:`LoadManager` 是异步迭代器,进程内可读已加载任务数、已加入任务数、任务比例与字节比例;写清「读进度不参与业务逻辑」,并链接 `../../intermediate/data-vs-render.md` 说明数据端不依赖进度。
+- `## 渲染端如何消费加载进度`(**本节是全文唯一允许出现 `src/client` 的地方,控制在 1 屏内**):渲染端复用同一套配置与同一个加载器;它自己追加渲染侧配置(`RenderLoaderHooks`),并在加载场景里迭代同一个 `loader.start()`、读取聚合器的计数器画进度。只写接口消费,**不写**场景结构、UI 生命周期、`ClientCore` 初始化顺序。编辑器/渲染端未定稿内容不展开。
+- `## 边界与注意`(文末单列):配置 id 冲突时的处理(后到的同 id 配置不会被重复登记,加载器按 id 去重;**不要**写成「会稳定告警某个码」)、`addCustomTask` 只能在加载前或两个 hook 中调用、前缀缺失与解析失败的表现、DEV 与构建后的路径差异由加载器统一处理(自定义 starter 要自己处理路径)、starter 的返回必须符合 `IResponseLike`、总大小未知时字节进度可能不精确。
+(3) 全文自检:至少一条 `../i/` 或 `../ii/` 链接(建议 `../i/plugin-system.md`)与一条 `../../intermediate/` 链接;`src/client` 只出现在渲染端小节内;`src/client` 之外不出现渲染端叙述;无 `**` 紧贴中文标点的加粗(D-52);无「模板」/「[需改]」;无「源码第 X 行」。
+(4) 跑 `node node_modules/prettier/bin/prettier.cjs --write docs/advanced/iii/loading-system.md`,再确认文件仍是 CRLF。Commit:`docs(10-34): 新增加载系统原理页`。
+ 文件存在、单 H1、CRLF;八个主体小节齐备且顺序为「模型 → 阶段 → 配置 → 三个扩展点 → 进度 → 渲染端 → 边界」;三类扩展点各有完整可解析代码块并带注释;`src/client` 仅出现在渲染端小节;扩展点覆盖配置/资源/starter 三类;至少一条 `../i/` 或 `../ii/` 链接;无模板标记、无源码行号叙事。
+
+ $ErrorActionPreference='Stop'; $p='docs/advanced/iii/loading-system.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", "NO-TITLE", "NO-SECTION", "NO-LOADTASK", "NO-LOADMANAGER", "NO-STARTER", "NO-CUSTOMTASK", "NO-COREHOOK", "NO-RENDERHOOKS", "NO-RENDER-SECTION", "RENDERER-OUTSIDE-SECTION", "TEMPLATE-MARK", "TEMPLATE-HEADING", "DEAD-LINK", "NO-I-II-LINK", "NO-INTERMEDIATE-LINK", or "WARN68-CLAIM"; or output lacks "PAGE-OK"
+
+ 页面结构与事实要点齐备;渲染端内容限定在专用小节;链接可解析;CRLF、单 H1、无模板标记。
+
+
+
+ Task 2: 格式与构建门禁、写 SUMMARY
+ .planning/phases/10-docs-restructure/10-34-SUMMARY.md
+ .planning/phases/10-docs-restructure/10-32-SUMMARY.md(SUMMARY 体例)
+ (1) 格式:`node node_modules/prettier/bin/prettier.cjs --check docs/advanced/iii/loading-system.md`,必须通过;未通过先 `--write` 再 `--check`。(2) 构建:`cmd /c "pnpm exec tsx docs/.vitepress/init.ts && pnpm docs:build"`,退出码 0、含 `build complete`、无 `dead link`。此时 III 组仍为空、总导览也未链接本页,构建不应出现与本页相关的新死链。(3) 复核页面渲染结果:标题层级、代码块高亮正常、表格未错列。(4) 写 `.planning/phases/10-docs-restructure/10-34-SUMMARY.md`:页面结构清单、事实来源(复核了哪些文件、与 research 是否一致)、三类扩展点与代码块、刻意未写的内容(`getTotalByte` 语义 / 只加载一次 / 重复 id 告警 / FSA 实现 / UI 生命周期)、prettier 与构建结论、留给 10-39 的注册与互链事项。若发现新的注释/实现不一致,只写「已在对话报告」一句,不写细节(D-72)。Commit:`docs(10-34): 加载系统原理页收口`。
+ prettier `--check` 通过;构建退出码 0、含 `build complete`、无 `dead link`;SUMMARY 记录结构、事实复核、刻意未写内容与遗留事项。
+
+ $ErrorActionPreference='Stop'; $sum='.planning/phases/10-docs-restructure/10-34-SUMMARY.md'; if(-not(Test-Path -LiteralPath $sum)){ Write-Error "MISSING $sum" }; $s=[IO.File]::ReadAllText((Resolve-Path -LiteralPath $sum)); foreach($needle in @('加载系统','扩展点','构建','10-39')){ if($s -notmatch [regex]::Escape($needle)){ Write-Error "SUMMARY-MISSING $needle" } }; $ErrorActionPreference='Continue'; $pf = cmd /c "node node_modules/prettier/bin/prettier.cjs --check docs/advanced/iii/loading-system.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|dead link'){ Write-Error 'DEAD-LINK' }; Write-Output 'GATE-OK'
+ non-zero exit, or output contains "MISSING", "SUMMARY-MISSING", "PRETTIER-FAIL", "BUILD-FAIL", "NO-BUILD-COMPLETE", or "DEAD-LINK"; or output lacks "GATE-OK"
+
+ 格式与构建双绿;SUMMARY 完整。
+
+
+
+
+
+## Trust Boundaries
+
+| Boundary | Description |
+|----------|-------------|
+| 构建期 markdown → 静态站点 | 正文静态渲染,无运行时输入 |
+| 读者 → 站点 | 站内链接是唯一可点击指向面 |
+| 文档 → 读者对渲染端的预期 | 渲染端不稳定,多写一句都可能变成误导 |
+
+## STRIDE Threat Register
+
+| Threat ID | Category | Component | Severity | Disposition | Mitigation Plan |
+|-----------|----------|-----------|----------|-------------|-----------------|
+| T-10-100 | Tampering / XSS | `loading-system.md` 正文 | low | mitigate | 只写文本、代码块、表格;不引入原始 `