diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index cd7363b..f78ac2d 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -181,7 +181,7 @@ Plans: 3. 移动端(窄屏)布局下,同一场景正常显示且可操作 4. 数据端与渲染端保持双端分离——数据端无 DOM,仍可在 Node 环境跑回放验证 -**Plans**: 7 plans — 04-01..04-06 已执行(04-06 = material 接口影响范围清点·只读);**04-07(material 接口适应实施·第二步)已规划待执行**;渲染适配与移动端/桌面端双布局(REND-01/REND-02)整体仍未完成 +**Plans**: 7/7 plans executed — 04-01..04-06 已执行(04-06 = material 接口影响范围清点·只读);**04-07(material 接口适应实施·第二步)已规划待执行**;渲染适配与移动端/桌面端双布局(REND-01/REND-02)整体仍未完成 **Plan register note (2026-09-21):** 第五个增量 `04-05`(收口 `#04-01-M-06` / `#04-01-M-09`:状态栏 9 个数值属性改经 `client.hero.attribute.getFinalAttribute(...)` 读取 + 逐图层钩子类 `RendererLayerHook`,2026-09-20 执行)此前未登记进本路线图,本次一并补登;第六个增量 `04-06` = material 接口适应(D-30/D-31/D-32)**第一步·只读影响清点**,产出 `04-MATERIAL-INTERFACE-IMPACT.md`,第二步(实施)待用户审阅后另行规划。 Plans: @@ -204,11 +204,11 @@ Plans: **Wave 5** *(blocked on Wave 4 completion)* - [x] 04-05-PLAN.md — 收口 `#04-01-M-06` / `#04-01-M-09`:状态栏 9 个数值属性从失效的 `getHeroStatusOn` 改经 `client.hero.attribute.getFinalAttribute(...)` 读取(并移除 `main.tsx:28` 失效的 `@ts-expect-error`);新增模块内不导出类 `RendererLayerHook`(`Partial`)把逐图层 `onUpdateArea` / `onUpdateBlock` 转发到 `MapRenderer.updateLayerArea` / `updateLayerBlock`,并在 `setLayerState` / `updateLayerList` 两条路径注册与注销(M-06 使用 `client` 单例经用户裁定为 D-23 的显式例外)— **2026-09-20 已执行**(本次补登) -- [ ] 04-06-PLAN.md — material 接口影响范围清点(**只读**,D-30/D-31/D-32 第一步):以 `4e305e3` 后的 `client-base/src/{types.ts,material/types.ts}` 为基准,清点 `packages-user` 内对已移除 7 符号(`IBigImageReturn` / `isBigImage` / `getBigImage` / `getIfBigImage` / `getBigImageByAlias` / `setBigImage` / `bigImageStore`)、3 个改名接口、新增 `textures` 与 4 处 `ICoreStateExtended` 约束未实现、以及所有 big-image 残留(含 `material/manager.ts` 与 `render/elements/cache.ts`)的引用,按 A 已移除 / B 改名 / C 约束未实现 / D big-image 残留 / E 范围外命中(`src/`、`packages/` 仅报告)/ F 未确定 六类分组,每行精确到符号 + `file:line`;产出 `04-MATERIAL-INTERFACE-IMPACT.md`,生产代码零改动,第二步实施待用户审阅后另行规划 +- [x] 04-06-PLAN.md — material 接口影响范围清点(**只读**,D-30/D-31/D-32 第一步):以 `4e305e3` 后的 `client-base/src/{types.ts,material/types.ts}` 为基准,清点 `packages-user` 内对已移除 7 符号(`IBigImageReturn` / `isBigImage` / `getBigImage` / `getIfBigImage` / `getBigImageByAlias` / `setBigImage` / `bigImageStore`)、3 个改名接口、新增 `textures` 与 4 处 `ICoreStateExtended` 约束未实现、以及所有 big-image 残留(含 `material/manager.ts` 与 `render/elements/cache.ts`)的引用,按 A 已移除 / B 改名 / C 约束未实现 / D big-image 残留 / E 范围外命中(`src/`、`packages/` 仅报告)/ F 未确定 六类分组,每行精确到符号 + `file:line`;产出 `04-MATERIAL-INTERFACE-IMPACT.md`,生产代码零改动,第二步实施待用户审阅后另行规划 **Wave 6** *(blocked on Wave 5 completion)* -- [ ] 04-07-PLAN.md — material 接口适应实施(**第二步·代码改动**,D-30/D-31/D-32 第二步 + D-33..D-37):按 04-06 清点的 A/C/D/E 四类落地——A 类(D-34)删除全部 big-image 引用并把 `getIfBigImage` 的 7 处消费者(`door.ts` 2 / `hero.ts` 3 / `renderer.ts` 1 / `vertex.ts` 1)改为行为等价的 `getTile`、删除 `renderer.ts` `getOffsetPool` 的 big-image 偏移收集;C 类(D-35)为 `MaterialManager` 补 `textures`、为 `MaterialManager` / `AutotileProcessor` / `AssetBuilder` / `TrackedAssetData` 补构造器注入的 `state`(不取全局单例,D-23;`renderer.ts` 从 `manager.state` 取值);D 类(D-36)删除 `MaterialManager` 的 big-image 实现残留(`bigImageStore` / `bigImageData` / `bigImageId` / 五个方法 / `setDefaultFrame` 耦合)与 `render/elements/cache.ts` 的 legacy big-image 路径;E 类(D-37)为 `client-base/package.json` 补 `@user/data-state` 声明(不安装、不同步 lockfile)。10 个文件原子提交;门禁 = material 归属诊断归零 + 在范围文件零诊断 + 总行数不增加(规划日 199 / 19 → ≤ 180)+ `packages-user` 内 big-image 记号归零 + eslint / CRLF / 范围(基线感知)/ 并发基线;运行时 UAT 不可得(渲染端无测试设施)如实声明 +- [x] 04-07-PLAN.md — material 接口适应实施(**第二步·代码改动**,D-30/D-31/D-32 第二步 + D-33..D-37):按 04-06 清点的 A/C/D/E 四类落地——A 类(D-34)删除全部 big-image 引用并把 `getIfBigImage` 的 7 处消费者(`door.ts` 2 / `hero.ts` 3 / `renderer.ts` 1 / `vertex.ts` 1)改为行为等价的 `getTile`、删除 `renderer.ts` `getOffsetPool` 的 big-image 偏移收集;C 类(D-35)为 `MaterialManager` 补 `textures`、为 `MaterialManager` / `AutotileProcessor` / `AssetBuilder` / `TrackedAssetData` 补构造器注入的 `state`(不取全局单例,D-23;`renderer.ts` 从 `manager.state` 取值);D 类(D-36)删除 `MaterialManager` 的 big-image 实现残留(`bigImageStore` / `bigImageData` / `bigImageId` / 五个方法 / `setDefaultFrame` 耦合)与 `render/elements/cache.ts` 的 legacy big-image 路径;E 类(D-37)为 `client-base/package.json` 补 `@user/data-state` 声明(不安装、不同步 lockfile)。10 个文件原子提交;门禁 = material 归属诊断归零 + 在范围文件零诊断 + 总行数不增加(规划日 199 / 19 → ≤ 180)+ `packages-user` 内 big-image 记号归零 + eslint / CRLF / 范围(基线感知)/ 并发基线;运行时 UAT 不可得(渲染端无测试设施)如实声明 **UI hint**: yes @@ -403,7 +403,7 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6 → 7 | 1. 事件系统 | 13/13 | In Progress| | | 2. 寻路系统 | 5/5 | In Progress| | | 3. 数据端完成 | 19/19 | Complete | 2026-09-12 | -| 4. 渲染适配与双布局 | 6/6 | In Progress| | +| 4. 渲染适配与双布局 | 7/7 | In Progress| | | 5. Legacy 移植 | 0/TBD | Not started | - | | 6. 单元测试 | 18/18 | In Progress| | | 7. 数据端缺陷修复 | 15/16 | 暂缓 (Deferred) | - | diff --git a/.planning/STATE.md b/.planning/STATE.md index 7c4e16d..7e3fdd9 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -3,17 +3,17 @@ gsd_state_version: "1.0" milestone: v1.0 current_phase: 04 current_phase_name: 渲染适配与双布局 -status: executing -stopped_at: Completed 04-04-PLAN.md(勇士渲染修正:注入 IFaceManager、拆钩子类、补 AnimDir、换 @motajs/animate,三文件机器门禁全绿;REND-01/REND-02 保持 Pending) -last_updated: "2026-09-22T03:29:38.480Z" +status: verifying +stopped_at: Completed 04-07-PLAN.md(material 接口适应实施:big-image 全删、7 处改 getTile、四实现类构造器注入 state、cache.ts legacy 路径删除、补 @user/data-state 声明;material 诊断 19→0、总行数 199→180;REND-01/REND-02 保持 Pending) +last_updated: "2026-09-22T04:25:51.526Z" last_activity: 2026-09-21 last_activity_desc: Phase 04 execution started -state_head: f55a76297f0d4f929f8e0fab376e341d698a4631 +state_head: 1bb42f66ca04d118a893c5b5222ea7927e145e04 progress: total_phases: 7 - completed_phases: 0 + completed_phases: 1 total_plans: 78 - completed_plans: 76 + completed_plans: 77 milestone_name: milestone --- @@ -29,8 +29,8 @@ See: .planning/PROJECT.md (updated 2026-09-17) ## Current Position Phase: 04 (渲染适配与双布局) — READY TO EXECUTE -Plan: 6 of 6 -Status: Ready to execute +Plan: 7 of 7 +Status: Phase complete — ready for verification Last activity: 2026-09-21 — Completed quick task 260921-lwa: Upgrade toolchain to pnpm 12.5.1 and Node 24 Progress: [█████░░░░░] 50% @@ -100,6 +100,7 @@ Progress: [█████░░░░░] 50% | Phase 04 P2 | 23min | 4 tasks | 1 files | | Phase 04 P3 | 40min | 4 tasks | 3 files | | Phase 04 P4 | ~45min | 4 tasks | 3 files | +| Phase 04 P7 | 35min | 3 tasks | 10 files | ## Accumulated Context @@ -229,6 +230,8 @@ Recent decisions affecting current work: - [Phase 04]: [Phase 04]: 04-04:MapHeroRenderer 注入 IFaceManager(faceManager 字段 + 派生 dir4),degrade/next 走 Dir4FaceHandler(FaceGroup.Dir4),movement 走 hero.mover.faceHandler(Dir8);IMapExtensionManager.addHero 新增 faceManager 形参并由 manager.ts 转发(D-24/D-29) - [Phase 04]: [Phase 04]: 04-04:MapHeroHook 拆为 MapHeroLocationHook(onSetPos 无条件、只出现一次,承载 D-18/D-22 多余方法)与 MapHeroMoverHook(onMoveStart/onMoveEnd/onStepEnd/onSetFaceDir),各自注册各自 controller;onStepEnd 的 AnimDir 分支按 step.dir 设置动画方向(D-25/D-26) - [Phase 04]: [Phase 04]: 04-04:hero.ts 弃用 mutate-animate 的 TimingFn<2>,改用 @motajs/animate 的 ExcitationCurve2D;D-28 存量 state.roleFace.getFaceOf 三处与 import 逐字保留;types.ts 单行 addHero 签名与 manager.ts 单行构造调用按仓库惯例加 // prettier-ignore 以同时满足计划的单行静态门禁与 prettier +- [Phase 04]: [Phase 04]: 04-07:D-35 裁定 state 一律经构造器注入(ClientCore 传 this、renderer 从 manager.state 取),不取全局单例(D-23);textures 由新建专用 TextureStore 承担(本次范围内无写入者) +- [Phase 04]: [Phase 04]: 04-07:D-34 的 getIfBigImage ≡ getTile(bigImageData 唯一写入者 setBigImage 消费者调用点 0),7 处消费者改写行为保持;getOffsetPool 的 big-image 偏移收集删除、其余来源保留 ### Roadmap Evolution @@ -267,6 +270,6 @@ None yet. ## Session Continuity -Last session: 2026-09-19T08:59:26.713Z -Stopped at: Completed 04-04-PLAN.md(勇士渲染修正:注入 IFaceManager、拆钩子类、补 AnimDir、换 @motajs/animate,三文件机器门禁全绿;REND-01/REND-02 保持 Pending) +Last session: 2026-09-22T04:25:51.224Z +Stopped at: Completed 04-07-PLAN.md(material 接口适应实施:big-image 全删、7 处改 getTile、四实现类构造器注入 state、cache.ts legacy 路径删除、补 @user/data-state 声明;material 诊断 19→0、总行数 199→180;REND-01/REND-02 保持 Pending) Resume file: None diff --git a/.planning/state.json b/.planning/state.json index 824975a..04bbf9f 100644 --- a/.planning/state.json +++ b/.planning/state.json @@ -41,8 +41,8 @@ ], "next": { "command": "/gsd:progress --next", - "label": "Advance to the next step", - "reason": "Phase 04 of 7 · executing" + "label": "Advance to the next step (verify)", + "reason": "Phase 04 of 7 · ready to verify" }, - "updated_at": "2026-09-22T03:29:38.601Z" + "updated_at": "2026-09-22T04:17:12.336Z" }