mirror of
https://github.com/motajs/template.git
synced 2026-09-27 05:30:16 +08:00
fix(04-06): reconcile type-gate aggregates to measured split (19 material / 180 non-material)
This commit is contained in:
parent
dbc733637c
commit
a5bb5550d3
@ -23,14 +23,14 @@ must_haves:
|
||||
truths:
|
||||
- "**计划号冲突(必须在 Task 0 原样汇报)**:`packages-user`/phase 目录下**已存在** `.planning/phases/04-render-adaptation/04-05-PLAN.md` 与 `04-05-SUMMARY.md`(第五个增量·`#04-01-M-06` / `#04-01-M-09` 收口,2026-09-20 已执行且改动在工作树中:`RendererLayerHook`、`getFinalAttribute`),故本增量按顺序号落为 **04-06**(`depends_on` 仍列 04-01..04-04 以保持 `wave: 5`,与编排给定的 wave 一致;04-05 的已完成改动属本计划的**基线**,不是本计划的产出)。`04-05-PLAN.md` / `04-05-SUMMARY.md` 一律**不得改写、不得覆盖、不得改号**;Task 0 必须把该冲突原样汇报并请用户确认编号(若用户要求改号,须先裁决 04-05 存量产物的归属,再由用户指定文件名,不得自行覆盖)。"
|
||||
- "**本计划的第一个 block 点是 Task 0 的 `blocking-human` 汇报关卡**:先向用户汇报「要解决的问题(material 接口在 `4e305e3` 后的影响面未清点,剩余实现/消费者仍在引用已删除或已改名的成员,且新增约束未实现)、大致解决方案(只读清点,唯一交付物 `04-MATERIAL-INTERFACE-IMPACT.md`,11 节结构 / A–F 六类分列 / 每行精确到符号 + file:line)、`4e305e3` 基准的三类差异(移除 7 个符号、改名 3 个接口、新增 `textures` 与 4 处 `ICoreStateExtended` 约束)、范围与禁令、**计划号冲突(04-05 已被占用 → 本计划为 04-06)**、验证方式与只读证明」,然后必须**停下等待**用户明确回复「可以执行」四个字;收到该回复前不得执行任何任务、不得派发任何执行子代理。无论触发方式(`/gsd-execute-phase`、`/gsd-manager`、`/gsd-autonomous`、子代理/执行器派发)或配置模式(`.planning/config.json` 的 `mode: yolo`、`workflow.auto_advance`)如何,均不得自动放行(AGENTS.md)"
|
||||
- "**只读硬约束(生产代码零改动)**:本 run 生产源码改动为 **0**——`git status --porcelain -- packages packages-user src` 在 Task 1 步骤 (0a) 起始逐行原样记录进 `## 方法`(规划日 2026-09-21 实测为「(无)」),Task 1 / Task 3 门禁断言其后**逐条一致**(不新增、不消失、状态码不变);`pnpm exec vue-tsc --noEmit` 的**错误总行数**与 **material 相关错误行数**在 Task 1 步骤 (0b) 记录(规划日实测 **199 / 20**),Task 3 门禁重跑并断言两个数字**完全一致**。`files_modified` 只含 `04-MATERIAL-INTERFACE-IMPACT.md` 一个交付物;本 PLAN 与 `04-06-SUMMARY.md` 属计划/执行簿记,不算生产改动。"
|
||||
- "**只读硬约束(生产代码零改动)**:本 run 生产源码改动为 **0**——`git status --porcelain -- packages packages-user src` 在 Task 1 步骤 (0a) 起始逐行原样记录进 `## 方法`(规划日 2026-09-21 实测为「(无)」),Task 1 / Task 3 门禁断言其后**逐条一致**(不新增、不消失、状态码不变);`pnpm exec vue-tsc --noEmit` 的**错误总行数**与 **material 相关错误行数**在 Task 1 步骤 (0b) 记录(规划日实测 **199 / 19**,其中 material 19 = `client-base` 7 + `client-modules` 12,非 material 180),Task 3 门禁重跑并断言两个数字**完全一致**。`files_modified` 只含 `04-MATERIAL-INTERFACE-IMPACT.md` 一个交付物;本 PLAN 与 `04-06-SUMMARY.md` 属计划/执行簿记,不算生产改动。"
|
||||
- "**A 类(已移除符号的剩余引用·引用侧)**:必须逐一登记 D-31 点名的 **7 个已移除符号** `IBigImageReturn` / `isBigImage` / `getBigImage` / `getIfBigImage` / `getBigImageByAlias` / `setBigImage` / `bigImageStore`,每个符号给出**引用侧 `file:line`**;`client-modules` 侧 9 处调用点一条不漏——`getIfBigImage` 7 处(`render/map/extension/door.ts:36,46`;`render/map/extension/hero.ts:239,364,428`;`render/map/renderer.ts:1250`;`render/map/vertex.ts:546`)、`bigImageStore` 1 处(`render/map/renderer.ts:652`)、`getBigImage` 1 处(`render/map/renderer.ts:653`);无调用点的 `setBigImage` / `isBigImage` / `getBigImageByAlias` 必须**显式登记为「调用点 0 处」**(不遗漏、不臆造);`IBigImageReturn` 的引用侧为 `client-base/src/material/manager.ts:20`(import 自 `./types`,该符号已不在基准导出中)。"
|
||||
- "**B 类(改名的剩余引用)必须给出机器证据的「0 命中」结论**:`IMaterialManager` → `ITextureManager`、`IMaterialGetter` → `ITextureGetter`、`IMaterialAliasGetter` → `ITextureAliasGetter`,三个旧名在**源码面**(`packages`、`packages-user`、`src`,排除 `node_modules`)的当日命中数必须为 **0**,并原样记录核对命令 `git grep -n -E \"IMaterialManager|IMaterialGetter|IMaterialAliasGetter\" -- packages packages-user src` 的输出;`.planning/graphs/graph.json` 与 `.planning/graphs/.last-build-snapshot.json` 中仍存在的 `IMaterialManager` / `IMaterialGetter` 标签属**过期工装态**(快照时间戳 2026-09-07,早于 `4e305e3` 的 2026-09-21),只作 E 类登记,**不得**算作源码命中、**不得**作为基准。"
|
||||
- "**C 类(新增与收紧约束的未实现)必须逐实现类登记 5 项,并带当日实测错误码**:① `ITextureManager.textures`(基准 `client-base/src/material/types.ts:262-263`)未实现于 `MaterialManager`(`material/manager.ts:38`,成员停在 `tileStore`/`tilesetStore`/`imageStore`/`assetStore`/`bigImageStore`,无 `textures`)→ 实测 `client.ts:84` 报 TS2739;②③④⑤ `ICoreStateExtended`(定义源 `packages-user/data-state/src/types.ts:45-49`)被 `ITextureManager`(`material/types.ts:261`)、`IAutotileProcessor`(`:104`)、`IAssetBuilder`(`:430`)、`ITrackedAssetData`(`:462-463`)四处 `extends`,而四个实现类 `MaterialManager`(`manager.ts:38`)、`AutotileProcessor`(`autotile.ts:42`)、`AssetBuilder`(`builder.ts:12`)、`TrackedAssetData`(`builder.ts:99`)**均无 `state` 成员** → 实测 `manager.ts:38`/`autotile.ts:42`/`builder.ts:12`/`builder.ts:99` 报 TS2420,构造点 `manager.ts:86`(`new AssetBuilder(this)`)、`builder.ts:91`(`TrackedAssetData`)、`client.ts:85`(`new AutotileProcessor(this.materials)`)、`render/map/renderer.ts:234`(`new AutotileProcessor(manager)`)报 TS2741。`state` 的语义来源与注入方式**不在本步裁定**(进 F 类)。"
|
||||
- "**D 类(big-image 实现残留)必须逐成员给 `file:line`,且与 A 类分列、互相引用**:`MaterialManager` 上的 `bigImageStore`(`material/manager.ts:43`)、`bigImageData`(`:56`)、`bigImageId`(`:77`)、`setDefaultFrame` 对 `bigImageData` 的耦合(`:233-235`)、`setBigImage`(`:552-573`)、`isBigImage`(`:575-577`)、`getBigImage`(`:579-581`)、`getBigImageByAlias`(`:583-587`)、`getIfBigImage`(`:589-593`)、`IBigImageReturn` 类型引用(`:20`、`:556`、`:568`);以及**不走 `ITextureManager` 的 legacy 概念残留** `client-modules/src/render/elements/cache.ts`(`:36`、`:48`、`:144`、`:153`、`:157`、`:159-160`、`:190`、`:215`、`:243`、`:276`,经 `core.material.images.images[bigImage]` 与 `enemys[id].bigImage` 读旧全局)。分列规则写死:**A 记「消费者调用点」,D 记「client-base 内已不属接口的实现残留」**;同一成员两侧都有时两条都记并互相引用。"
|
||||
- "**E 类(范围外命中·仅报告)与 in-scope 严格分开**:`src/types/declaration/enemy.d.ts:65`(`bigImage?: ImageIds`)、`core.d.ts:1286`(同)、`map.d.ts:354`(`bigImage: HTMLImageElement`)与 `:1443`(`_getBigImageInfo`)、`status.d.ts:391`(`bigImage: HTMLImageElement`)——只登记事实,**不得**写成待修改项、不得提出修改建议;`packages/` 为**零命中**(须附核对命令与结论,与 D-32「`packages` 不纳入、理应不受影响」一致);`.planning/graphs/{graph.json,.last-build-snapshot.json}` 的过期标签;`packages-user/client-base/package.json` **未声明** `@user/data-state` 依赖而 `material/types.ts:9` 与 `client-base/src/types.ts:3` 已 `import`(登记为事实,是否算问题**交由用户判断**)。"
|
||||
- "**F 类(未能从阅读确定·未猜测)非空且只登记不判定**,至少覆盖:① `getIfBigImage` 的语义替代是否成立(新基准只提供 `getTile` / `getRenderable` / `getImage`,`door.ts` 的大图开门帧数语义、`hero.ts` 的贴图取值、`vertex.ts` 的顶点裁剪是否可由 `getTile` 等价承接);② `ITextureManager.textures`(`types.ts:262`)应由哪个现有 store(`tileStore` 还是新建)承担;③ 四个实现类缺失的 `state` 从何处注入(`ClientCore extends CoreState`,构造点是否传 `this`);④ `cache.ts` 的 legacy bigImage 路径属本 material 增量还是 Phase 5 legacy 清退边界;⑤ `setDefaultFrame` 与 `bigImageData` 的耦合在新概念下是否有对位;⑥ `.planning/graphs/*` 是否需要重建。**不得**把本类任何一条写成错配、缺失或残留。"
|
||||
- "**`## 基准变更(4e305e3)` 与 `## 类型门禁实测基线` 两节必须齐备**:前者逐条记录三类差异(移除 7 符号 / 改名 3 接口 / 新增 `textures` 与 4 处 `ICoreStateExtended` 约束)并点名定义源 `packages-user/data-state/src/types.ts:45-49`,核对方式为 `git show 4e305e3 -- packages-user/client-base/src/types.ts packages-user/client-base/src/material/types.ts` 与当日工作树逐条比对;后者逐字记录 `pnpm exec vue-tsc --noEmit` 的 `- **错误总行数**:<n>` 与 `- **material 相关错误行数**:<n>`(规划日实测 199 / 20,执行日以实测为准)并逐行列出 material 相关错误,同时单列与本改动无关的既有错误(data-state / data-base / data-system 的测试与寻路、`client-base/src/load/loader.ts` 与 `client-modules/src/{core.ts,render/ui/load.tsx}` 的加载系统重构结果)——**不得**把它们算作本次 material 改动的后果。"
|
||||
- "**`## 基准变更(4e305e3)` 与 `## 类型门禁实测基线` 两节必须齐备**:前者逐条记录三类差异(移除 7 符号 / 改名 3 接口 / 新增 `textures` 与 4 处 `ICoreStateExtended` 约束)并点名定义源 `packages-user/data-state/src/types.ts:45-49`,核对方式为 `git show 4e305e3 -- packages-user/client-base/src/types.ts packages-user/client-base/src/material/types.ts` 与当日工作树逐条比对;后者逐字记录 `pnpm exec vue-tsc --noEmit` 的 `- **错误总行数**:<n>` 与 `- **material 相关错误行数**:<n>`(规划日实测 199 / 19,执行日以实测为准)并逐行列出 material 相关错误,同时单列与本改动无关的既有错误(data-state / data-base / data-system 的测试与寻路、`client-base/src/load/loader.ts` 与 `client-modules/src/{core.ts,render/ui/load.tsx}` 的加载系统重构结果)——**不得**把它们算作本次 material 改动的后果。"
|
||||
- "**第二步(修改工作)不被规划**:文档只清点、分类、分组,**不含**修复方案、不含代码改动建议、不产出 `04-07-PLAN.md` 或任何新 `*-PLAN.md`;`## 处置` 明写「第一步只读清点完成;第二步(material 接口适应实施)待用户审阅本文件后另行规划」(D-32),并保留第一条清点步骤与第六条材料的原话口径。"
|
||||
- "**REND-01 / REND-02 在本 run 后仍保持 Pending**:本计划只清点 material 接口的影响面,既未实施 material 适应,也未实施移动端 / 桌面端双布局(见 assumptions 的两条 FLAGGED ASSUMPTION)。"
|
||||
- "**验证可运行且不臆造通过**:本计划的「运行结果」= 只读门禁(porcelain 基线逐条一致 + 类型错误总数与 material 子集一致)+ 静态内容门禁(11 节结构、A–F 六类行数下限与关键词、每行 ≥2 个 `file:line` 锚点、B 类 0 命中、E 类只报告口径)+ 既有计划保护门禁(`04-05-PLAN.md` / `04-05-SUMMARY.md` porcelain 为空)+ 计划文件范围门禁(不得出现 `04-07+`)+ CRLF 门禁 + 人工代码复核;本步为只读清点,**无运行时行为可观察**,故不得以任何无法运行的门禁冒充通过。"
|
||||
@ -44,13 +44,13 @@ must_haves:
|
||||
- "`client-modules` 的消费者调用点(`render/map/extension/door.ts:36,46`、`render/map/extension/hero.ts:239,364,428`、`render/map/renderer.ts:652,653,1250`、`render/map/vertex.ts:546`)↔ 基准 `ITextureManager` 上已不存在的成员 → 实测 9 条 `error TS2339` / `TS2551`"
|
||||
- "构造 / 接线面(`client-modules/src/client.ts:84` 的 `new MaterialManager()`、`client.ts:85` 的 `new AutotileProcessor(this.materials)`、`render/map/renderer.ts:234` 的 `new AutotileProcessor(manager)`、`manager.ts:86` 的 `new AssetBuilder(this)`、`builder.ts:28` 的 `new TrackedAssetData(materials, this)`)—— `state` 与 `textures` 的注入/实现面必须在本清点文件中登记,本步不作裁定"
|
||||
- "`git status --porcelain -- packages packages-user src`(Task 1 步骤 (0a) 逐行记录)↔ Task 1 / Task 3 门禁的逐条一致断言 ↔ 只读(生产代码零改动)证明"
|
||||
- "`pnpm exec vue-tsc --noEmit` 的错误总行数与 material 相关子集(Task 1 步骤 (0b) 记录、规划日实测 199 / 20)↔ Task 3 门禁的重跑一致断言 ↔ 只读证明"
|
||||
- "`pnpm exec vue-tsc --noEmit` 的错误总行数与 material 相关子集(Task 1 步骤 (0b) 记录、规划日实测 199 / 19)↔ Task 3 门禁的重跑一致断言 ↔ 只读证明"
|
||||
assumptions:
|
||||
- "**FLAGGED ASSUMPTION(specless fallback)— REND-01 edge unresolved:** 未提供 REND-01(渲染端适配新数据层接口)的验收边界;本计划**不发明**阈值,只交付 material 接口影响的只读清点(D-30 / D-31 / D-32 第一步)。用户须在推进第二步与其余渲染适配前补齐 REND-01 的边界判据。"
|
||||
- "**FLAGGED ASSUMPTION(specless fallback)— REND-02 edge unresolved:** 未提供 REND-02(移动端与桌面端双布局)的验收边界;本计划不涉及双布局,也不发明其验收阈值。"
|
||||
- "**计划号冲突(未确定项,不猜):** `.planning/phases/04-render-adaptation/04-05-PLAN.md` 与 `04-05-SUMMARY.md` 已存在(第五个增量·`#04-01-M-06` / `#04-01-M-09`,2026-09-20 已执行:其改动 `RendererLayerHook`(`render/map/renderer.ts:435,1775`)与 `client.hero.attribute.getFinalAttribute`(`render/ui/main.tsx:103+`)在工作树中)。编排给定的「04-05」与该存量冲突,故本计划按顺序号落为 **04-06**。用户若要求其它编号,须先裁决存量 04-05 产物的归属再改名,不得覆盖。"
|
||||
- "**执行前必须复核(未确定项,不猜):** Task 1 步骤 (0a)/(0b) 必须在动手前打开当日 HEAD 的工作树逐条核对:① 7 个已移除符号确不在 `material/types.ts` 的现行导出/成员集合中;② 三个改名后的名称 `ITextureManager` / `ITextureGetter` / `ITextureAliasGetter` 与新增 `readonly textures: ITextureStore`、四处 `extends ICoreStateExtended` 的现行位置;③ `ICoreStateExtended` 的定义源(`data-state/src/types.ts:45-49`);④ 四个实现类(及其所在行)确实缺 `state`、`MaterialManager` 确实缺 `textures`;⑤ `client-modules` 侧 9 处调用点的**当日行号**(`door.ts` / `hero.ts` / `renderer.ts` / `vertex.ts`);⑥ `cache.ts` 与 `src/types/declaration/*` 的命中行号;⑦ `packages/` 的零命中结论;⑧ `pnpm exec vue-tsc --noEmit` 的当日总数与 material 子集。**任一与规划日数值不同即以当日实测为准**写入文档并在 SUMMARY 中说明差异,不得按本计划的规划日数值硬写(规划日 2026-09-21、HEAD = `4e305e3`)。"
|
||||
- "**material / 非 material 错误划分口径须用户确认:** 规划日把 `client-base/src/load/loader.ts` 的 6 条(`LoadAudioProcessor` / `LoadFontProcessor` / `LoadImageProcessor` / `LoadTextProcessor` / `LoadZipProcessor` / `IMotaDataLoader` 未导出)与 `client-modules/src/core.ts:6` 的 1 条、`render/ui/load.tsx` 的 8 条判为**非 material**(属加载系统重构 `cc434a6` 的结果),其余 20 条判为 material 相关。该口径是**规划日的人工归类**,须用户在审阅时确认;若用户判定其中某条应归 material,执行者按裁定重新归类并同步两个数字与 `## 处置` 的口径说明,不得改动其它事实。"
|
||||
- "**material / 非 material 错误划分口径须用户确认:** 规划日把 `client-base/src/load/loader.ts` 的 6 条(`LoadAudioProcessor` / `LoadFontProcessor` / `LoadImageProcessor` / `LoadTextProcessor` / `LoadZipProcessor` / `IMotaDataLoader` 未导出)与 `client-modules/src/core.ts:6` 的 1 条、`render/ui/load.tsx` 的 9 条判为**非 material**(属加载系统重构 `cc434a6` 的结果,三者合计 16 条),其余 19 条判为 material 相关。该口径是**规划日的人工归类**,须用户在审阅时确认;若用户判定其中某条应归 material,执行者按裁定重新归类并同步两个数字与 `## 处置` 的口径说明,不得改动其它事实。"
|
||||
- "**无运行时验证可得(诚实降级):** 本步为只读清点,不产生任何运行时行为(不启动渲染、不改代码、不新增测试),因此承载体是「只读门禁 + 类型门禁一致性 + 静态内容门禁 + 人工代码复核」。**不得**以任何无法运行的门禁冒充通过。"
|
||||
- "**用户可能有执行日的并发未提交改动:** 一律以 Task 1 步骤 (0a) 当日实测为基线(含 `04-CONTEXT.md` 的既有未提交改动,须逐字保留),**不得回滚 / 暂存 / 提交 / 修改**用户的任何未提交改动;若基线中出现 `packages`/`packages-user`/`src` 下的条目,属于本次清点范围内的既有改动,须一并记录并原样保留。"
|
||||
- "**`.planning/graphs/*` 是过期工装态:** 快照时间戳为 2026-09-07(早于 `4e305e3` 的 2026-09-21),其中仍标注 `IMaterialManager` / `IBigImageReturn` / `getBigImage` 等已被删除的符号;该文件**不得**作为基准或命中依据,只作 E 类登记(是否重建由用户决定,见 F 类)。"
|
||||
@ -102,11 +102,11 @@ Phase 4 第六个增量(用户裁定 2026-09-21 · D-30 / D-31 / D-32 **第一
|
||||
| 基准变更 | 移除 7 符号;改名 3 接口;新增 `readonly textures: ITextureStore` 与 4 处 `extends ICoreStateExtended` |
|
||||
| A(移除引用) | `client-modules` 侧 **9** 处调用点(`getIfBigImage` 7、`bigImageStore` 1、`getBigImage` 1)+ `manager.ts:20` 的 `IBigImageReturn` import |
|
||||
| B(改名) | 源码面 **0** 命中(仅 `.planning/graphs/*` 过期标签) |
|
||||
| C(约束未实现) | **5** 项:`textures` 1 项 + `state` 4 个实现类;实测 `client-base` 7 条 + `client-modules` 13 条 = **20** 条 material 相关类型错误 |
|
||||
| C(约束未实现) | **5** 项:`textures` 1 项 + `state` 4 个实现类;实测 `client-base` 7 条 + `client-modules` 12 条 = **19** 条 material 相关类型错误 |
|
||||
| D(big-image 残留) | `MaterialManager` **10** 项 + `cache.ts` legacy 路径 1 项 |
|
||||
| E(范围外) | `src/types/declaration/*` **5** 处;`packages/` **0** 命中;`.planning/graphs/*` 过期标签;`client-base/package.json` 未声明 `@user/data-state` |
|
||||
| F(未确定) | ≥ 6 项(见 must_haves) |
|
||||
| 类型门禁 | `pnpm exec vue-tsc --noEmit` 错误总行数 **199**(其中 material 相关 **20**,非 material 既有 **179**) |
|
||||
| 类型门禁 | `pnpm exec vue-tsc --noEmit` 错误总行数 **199**(其中 material 相关 **19** = `client-base` 7 + `client-modules` 12,非 material 既有 **180**) |
|
||||
|
||||
**范围与硬边界:** 被查对象为 `packages-user` 全量(含新包 `packages-user/client-system`);基准为 `client-base/src/material/types.ts` 与 `client-base/src/types.ts`;`packages/` **不纳入**(D-32,理应不受本改动影响,本次实测零命中);`src/` 命中**仅报告**;`data-*` 仅作基准(D-04),但 `ICoreStateExtended` 的定义源 `data-state/src/types.ts:45-49` + 须点名(它由 `4e305e3` 首次加入)。生产源码零改动;本步不规划第二步。
|
||||
|
||||
@ -121,7 +121,7 @@ Phase 4 第六个增量(用户裁定 2026-09-21 · D-30 / D-31 / D-32 **第一
|
||||
| REQ | REND-02 | 渲染端同时支持移动端与桌面端布局 | 04-06 | COVERED(不涉及) | 本 run 范围不含双布局;REND-02 验收边界未提供 → assumptions 的 FLAGGED ASSUMPTION |
|
||||
| RESEARCH | — | (本阶段无 `04-RESEARCH.md`) | — | N/A | Phase 4 未产出 RESEARCH.md;等价输入为 04-01 / 04-02 账本与 `4e305e3` 的接口改动 |
|
||||
| CONTEXT | D-30 | 下一个任务 = 完成 material 相关的接口适应(用户已改接口,剩余未适应的实现与消费者由本任务处理) | 04-06 | COVERED(第一步) | Task 1/2/3 清点剩余未适应的实现与消费者;实施属第二步(未规划) |
|
||||
| CONTEXT | D-31 | 根因:重写 Texture 底层管理器、删除 `big-image` 概念;已删 7 符号、改名 3 接口、新增 `textures` 与 `ICoreStateExtended`;影响面可能很大 | 04-06 | COVERED | `## 基准变更(4e305e3)` 逐条记录三类差异;A/C/D 三类逐条登记影响,并实测 20 条 material 相关类型错误 |
|
||||
| CONTEXT | D-31 | 根因:重写 Texture 底层管理器、删除 `big-image` 概念;已删 7 符号、改名 3 接口、新增 `textures` 与 `ICoreStateExtended`;影响面可能很大 | 04-06 | COVERED | `## 基准变更(4e305e3)` 逐条记录三类差异;A/C/D 三类逐条登记影响,并实测 19 条 material 相关类型错误 |
|
||||
| CONTEXT | D-32 | 分两步:第一步收集影响范围(只读清点,产出 `04-MATERIAL-INTERFACE-IMPACT.md`);第二步再规划。边界:范围限 `packages-user`,`packages` 不纳入;基准为 `client-base` 的 `types.ts` / `material/types.ts`;发现其余 big-image 残留必须报告;`src/` / `packages/` 命中仅报告不修改 | 04-06 | COVERED | 只读、唯一交付物、D 类报告全部 big-image 残留、E 类只报告;第二步明写未规划 |
|
||||
| CONTEXT | D-07 | 每条记录精确到接口名 + 所属文件 + 问题描述 + 影响 | 04-06 | COVERED(粒度) | 固定列序 + 每行 ≥2 个 `file:line` 锚点 + 门禁机器判定 |
|
||||
| CONTEXT | D-09 | 允许派只读子代理扫描(不得修改任何文件) | 04-06 | COVERED | Task 2 允许只读子代理回传事实表;子代理不得写文件;最终由主执行者门禁统一验证 |
|
||||
@ -186,7 +186,7 @@ Phase 4 第六个增量(用户裁定 2026-09-21 · D-30 / D-31 / D-32 **第一
|
||||
- **改名 3 个接口**:`IMaterialManager` → `ITextureManager`、`IMaterialGetter` → `ITextureGetter`、`IMaterialAliasGetter` → `ITextureAliasGetter`。
|
||||
- **新增 / 收紧约束**:`ITextureManager` 新增 `readonly textures: ITextureStore`(`material/types.ts:262-263`),且由 `ITextureManager`(`:261`)、`IAutotileProcessor`(`:104`)、`IAssetBuilder`(`:430`)、`ITrackedAssetData`(`:462-463`)四处 `extends ICoreStateExtended`(定义源 `packages-user/data-state/src/types.ts:45-49`:`readonly state: ICoreState`)。
|
||||
|
||||
③ **规划日实测的影响面(作为起点与门禁下限)**:`pnpm exec vue-tsc --noEmit` 当前 **199** 条错误,其中 **20** 条由本次 material 接口改动直接造成(`client-base` 7 条 + `client-modules` 13 条);其余 179 条属用户既有的加载系统重构 / 寻路 / 测试等,**不算**本改动的后果(该划分口径须用户确认)。具体:A 类 `client-modules` 侧 **9** 处调用点(`getIfBigImage` 7 处:`door.ts:36,46`、`hero.ts:239,364,428`、`renderer.ts:1250`、`vertex.ts:546`;`bigImageStore` 1 处:`renderer.ts:652`;`getBigImage` 1 处:`renderer.ts:653`)+ `manager.ts:20` 的 `IBigImageReturn` import;B 类源码面 **0** 命中;C 类 **5** 项(`textures` 未实现 + 4 个实现类缺 `state`);D 类 `MaterialManager` **10** 项 + `cache.ts` legacy 路径 1 项;E 类 `src/types/declaration/*` **5** 处、`packages/` **0** 命中、`.planning/graphs/*` 过期标签、`client-base/package.json` 未声明 `@user/data-state`。
|
||||
③ **规划日实测的影响面(作为起点与门禁下限)**:`pnpm exec vue-tsc --noEmit` 当前 **199** 条错误,其中 **19** 条由本次 material 接口改动直接造成(`client-base` 7 条 + `client-modules` 12 条);其余 180 条属用户既有的加载系统重构 / 寻路 / 测试等,**不算**本改动的后果(该划分口径须用户确认)。具体:A 类 `client-modules` 侧 **9** 处调用点(`getIfBigImage` 7 处:`door.ts:36,46`、`hero.ts:239,364,428`、`renderer.ts:1250`、`vertex.ts:546`;`bigImageStore` 1 处:`renderer.ts:652`;`getBigImage` 1 处:`renderer.ts:653`)+ `manager.ts:20` 的 `IBigImageReturn` import;B 类源码面 **0** 命中;C 类 **5** 项(`textures` 未实现 + 4 个实现类缺 `state`);D 类 `MaterialManager` **10** 项 + `cache.ts` legacy 路径 1 项;E 类 `src/types/declaration/*` **5** 处、`packages/` **0** 命中、`.planning/graphs/*` 过期标签、`client-base/package.json` 未声明 `@user/data-state`。
|
||||
|
||||
④ **大致解决方案**:只读清点,唯一交付物 `.planning/phases/04-render-adaptation/04-MATERIAL-INTERFACE-IMPACT.md`;11 节结构(`背景` / `方法` / `基准变更(4e305e3)` / `类型门禁实测基线` / `A 已移除符号的剩余引用` / `B 改名的剩余引用` / `C 新增与收紧约束的未实现` / `D big-image 残留(实现与消费者)` / `E 范围外命中(仅报告)` / `F 未能从阅读确定(未猜测)` / `处置`);A–E 每节固定列序表(`ID | 接口/成员名 | 命中处 | 基准侧锚点 | 问题描述 | 影响 | 置信`),每行 ≥2 个 `file:line` 锚点;**分列规则**:A = 消费者调用点、D = `client-base` 内已不属接口的实现残留与 `cache.ts` 的 legacy 概念路径(二者分列并互相引用);F 类只登记不判定。重型整文件读取可按 **D-09** 派**只读**子代理(仅回传事实表,不得写文件)。
|
||||
|
||||
@ -194,7 +194,7 @@ Phase 4 第六个增量(用户裁定 2026-09-21 · D-30 / D-31 / D-32 **第一
|
||||
|
||||
⑥ **计划号冲突(必须原样告知用户)**:phase 目录下**已存在** `04-05-PLAN.md` 与 `04-05-SUMMARY.md`(第五个增量·`#04-01-M-06` / `#04-01-M-09` 收口,2026-09-20 已执行;其改动 `RendererLayerHook`(`render/map/renderer.ts:435,1775`)与 `client.hero.attribute.getFinalAttribute`(`render/ui/main.tsx:103+`)在工作树中)。编排给定的「04-05」与该存量冲突,故本计划按顺序号落为 **04-06**,`depends_on` 列 04-01..04-04 以保持 `wave: 5`;**04-05 一律不得改写 / 覆盖 / 改号**。请用户确认 04-06 这一编号(或指定其它编号,但须先裁决 04-05 存量产物的归属)。
|
||||
|
||||
⑦ **验证方式与只读证明(须原样告知)**:本步为只读清点,**无运行时行为可观察**。证明方式 = ①**只读门禁**:`git status --porcelain -- packages packages-user src` 在 Task 1 起始逐行记录(规划日实测为「(无)」),Task 1 / Task 3 断言其后逐条一致;②**类型门禁一致性**:`pnpm exec vue-tsc --noEmit` 的错误总行数与 material 子集(规划日 199 / 20)记录后,Task 3 重跑断言完全一致;③**静态内容门禁**:11 节结构、A–F 行数下限与关键词、每行 ≥2 个 `file:line` 锚点、B 类 0 命中、E 类只报告口径;④**既有计划保护门禁**:`04-05-PLAN.md` / `04-05-SUMMARY.md` 的 porcelain 为空;⑤**计划范围门禁**:不得出现 `04-07+`;⑥**CRLF 门禁**;⑦**人工代码复核**。**不冒充任何无法运行的门禁。**
|
||||
⑦ **验证方式与只读证明(须原样告知)**:本步为只读清点,**无运行时行为可观察**。证明方式 = ①**只读门禁**:`git status --porcelain -- packages packages-user src` 在 Task 1 起始逐行记录(规划日实测为「(无)」),Task 1 / Task 3 断言其后逐条一致;②**类型门禁一致性**:`pnpm exec vue-tsc --noEmit` 的错误总行数与 material 子集(规划日 199 / 19)记录后,Task 3 重跑断言完全一致;③**静态内容门禁**:11 节结构、A–F 行数下限与关键词、每行 ≥2 个 `file:line` 锚点、B 类 0 命中、E 类只报告口径;④**既有计划保护门禁**:`04-05-PLAN.md` / `04-05-SUMMARY.md` 的 porcelain 为空;⑤**计划范围门禁**:不得出现 `04-07+`;⑥**CRLF 门禁**;⑦**人工代码复核**。**不冒充任何无法运行的门禁。**
|
||||
|
||||
⑧ **第二步不被规划**:本 run **不含**修复方案、不含代码改动建议、不产出 `04-07+`;第二步(material 接口适应实施)待用户审阅本清点文件后另行规划(D-32)。
|
||||
|
||||
@ -231,7 +231,7 @@ Phase 4 第六个增量(用户裁定 2026-09-21 · D-30 / D-31 / D-32 **第一
|
||||
</verify>
|
||||
<acceptance_criteria>
|
||||
- 用户回复中明确包含「可以执行」四个字
|
||||
- 汇报内容涵盖:要解决的问题(D-30/D-31/D-32 第一步)、`4e305e3` 的三类差异(移除 7 符号 / 改名 3 接口 / 新增 `textures` 与 4 处 `ICoreStateExtended`)、规划日实测的影响面(20 条 material 相关类型错误与 A–F 六类的具体命中)、大致解决方案(11 节结构 + 固定列序 + A/D 分列规则 + F 只登记不判定)、范围与硬边界(`packages-user` 限界、`packages/` 不纳入、`src/` 仅报告、生产代码零改动)、唯一交付物与两步走
|
||||
- 汇报内容涵盖:要解决的问题(D-30/D-31/D-32 第一步)、`4e305e3` 的三类差异(移除 7 符号 / 改名 3 接口 / 新增 `textures` 与 4 处 `ICoreStateExtended`)、规划日实测的影响面(19 条 material 相关类型错误与 A–F 六类的具体命中)、大致解决方案(11 节结构 + 固定列序 + A/D 分列规则 + F 只登记不判定)、范围与硬边界(`packages-user` 限界、`packages/` 不纳入、`src/` 仅报告、生产代码零改动)、唯一交付物与两步走
|
||||
- 汇报中已原样告知**计划号冲突**:`04-05-PLAN.md` / `04-05-SUMMARY.md` 已存在且已执行,本计划编号为 04-06,04-05 不得改写/覆盖/改号,并请用户确认编号
|
||||
- 汇报中已原样告知**验证方式与只读证明**(只读门禁 / 类型门禁一致性 / 静态内容门禁 / 既有计划保护门禁 / 计划范围门禁 / CRLF / 人工复核),并声明无运行时行为可观察
|
||||
- 汇报中已原样告知**关卡性质**:执行者/子代理必须停下等待,不因触发方式或 `yolo` / `auto_advance` 模式自动放行
|
||||
@ -258,7 +258,7 @@ Phase 4 第六个增量(用户裁定 2026-09-21 · D-30 / D-31 / D-32 **第一
|
||||
<action>
|
||||
(0a) **起始基线快照(只读前置,先做这一步)**:执行 `git status --porcelain -- packages packages-user src`,把输出**原样逐行**记为「只读起始基线」写入 `## 方法`:先写 bullet `- **只读起始基线(packages / packages-user / src)**:`,其后逐行抄录输出(每条一行,行首为两字符状态码;输出为空则写 `(无)`)。规划日 2026-09-21 实测该输出为**空**(工作树内唯一的未提交改动是 `.planning/phases/04-render-adaptation/04-CONTEXT.md`,不在该路径集合内)。**不得回滚、暂存、提交或修改**任何既有改动;若当日实测出现 `packages` / `packages-user` / `src` 下的条目,逐条记录并原样保留(属本次清点范围内的既有改动,需在 `## 方法` 注明)。同时记下 `git rev-parse HEAD` 的当日值写入元信息块。
|
||||
|
||||
(0b) **类型门禁实测基线(只读前置,与 (0a) 同批完成)**:执行 `pnpm exec vue-tsc --noEmit`,把完整输出的**错误总行数**与**material 相关错误行数**两个数字写入 `## 类型门禁实测基线`:bullet 逐字写 `- **错误总行数**:<N>` 与 `- **material 相关错误行数**:<M>`,其中 N = `node -e "const{execSync}=require('child_process');let o='';try{o=execSync('pnpm exec vue-tsc --noEmit',{encoding:'utf8',maxBuffer:1<<28,stdio:['ignore','pipe','pipe']})}catch(e){o=(e.stdout||'')+(e.stderr||'')}console.log((o.match(/error TS\d+/g)||[]).length)"` 的输出值(与 Task 3 门禁使用**同一正则**,保证可逐字比对)。规划日 2026-09-21 实测 **N = 199**、**M = 20**。同时在该节**逐行列出全部 material 相关错误**(`file:line` + `error TSxxxx` + 原文摘要)并按以下规划日归类核对:`client-base` 7 条 —— `material/autotile.ts:42` TS2420、`material/builder.ts:12` TS2420、`material/builder.ts:91` TS2741、`material/builder.ts:99` TS2420、`material/manager.ts:20` TS2305、`material/manager.ts:38` TS2420、`material/manager.ts:86` TS2741;`client-modules` 13 条 —— `client.ts:84` TS2739、`client.ts:85` TS2741、`render/map/extension/door.ts:36` 与 `:46` TS2339、`render/map/extension/hero.ts:239` / `:364` / `:428` TS2339、`render/map/renderer.ts:234` TS2741、`render/map/renderer.ts:652` TS2551、`render/map/renderer.ts:653` TS2551、`render/map/renderer.ts:1250` TS2339、`render/map/vertex.ts:546` TS2339。**单列**与本改动无关的 179 条既有错误(`data-state` / `data-base` / `data-system` 的测试与寻路、`client-base/src/load/loader.ts` 6 条与 `client-modules/src/core.ts:6` / `render/ui/load.tsx` 8 条属用户加载系统重构),并明写该「material / 非 material」划分口径**须用户确认**(见 assumptions)。**以当日实测为准**,与规划日数值不同即按实测写入并在 `## 处置` 说明差异,不得按规划日数值硬写。
|
||||
(0b) **类型门禁实测基线(只读前置,与 (0a) 同批完成)**:执行 `pnpm exec vue-tsc --noEmit`,把完整输出的**错误总行数**与**material 相关错误行数**两个数字写入 `## 类型门禁实测基线`:bullet 逐字写 `- **错误总行数**:<N>` 与 `- **material 相关错误行数**:<M>`,其中 N = `node -e "const{execSync}=require('child_process');let o='';try{o=execSync('pnpm exec vue-tsc --noEmit',{encoding:'utf8',maxBuffer:1<<28,stdio:['ignore','pipe','pipe']})}catch(e){o=(e.stdout||'')+(e.stderr||'')}console.log((o.match(/error TS\d+/g)||[]).length)"` 的输出值(与 Task 3 门禁使用**同一正则**,保证可逐字比对)。规划日 2026-09-21 实测 **N = 199**、**M = 19**(material 19 = `client-base` 7 条 + `client-modules` 12 条;非 material 180 条,其中 `client-base/src/load/loader.ts` 6 + `client-modules/src/core.ts` 1 + `render/ui/load.tsx` 9 = 16 条加载系统重构所致)。同时在该节**逐行列出全部 material 相关错误**(`file:line` + `error TSxxxx` + 原文摘要)并按以下规划日归类核对:`client-base` 7 条 —— `material/autotile.ts:42` TS2420、`material/builder.ts:12` TS2420、`material/builder.ts:91` TS2741、`material/builder.ts:99` TS2420、`material/manager.ts:20` TS2305、`material/manager.ts:38` TS2420、`material/manager.ts:86` TS2741;`client-modules` 12 条 —— `client.ts:84` TS2739、`client.ts:85` TS2741、`render/map/extension/door.ts:36` 与 `:46` TS2339、`render/map/extension/hero.ts:239` / `:364` / `:428` TS2339、`render/map/renderer.ts:234` TS2741、`render/map/renderer.ts:652` TS2551、`render/map/renderer.ts:653` TS2551、`render/map/renderer.ts:1250` TS2339、`render/map/vertex.ts:546` TS2339(共 12 行,逐行与本节登记的 `client-modules` 错误一致)。**单列**与本改动无关的 180 条既有错误(`data-state` / `data-base` / `data-system` 的测试与寻路、`client-base/src/load/loader.ts` 6 条与 `client-modules/src/core.ts:6` / `render/ui/load.tsx` 9 条属用户加载系统重构),并明写该「material / 非 material」划分口径**须用户确认**(见 assumptions)。**以当日实测为准**,与规划日数值不同即按实测写入并在 `## 处置` 说明差异,不得按规划日数值硬写。
|
||||
|
||||
(1) **新建交付文档** `.planning/phases/04-render-adaptation/04-MATERIAL-INTERFACE-IMPACT.md`,先写标题与 6 行元信息块:`**日期:**`(当日日期);`**范围:**` 被查对象 `packages-user` 全量(含新包 `packages-user/client-system`),`packages/` 不纳入(D-32),`src/` 命中仅报告;`**性质:**` 只读清点(D-30 / D-31 / D-32 第一步),未修改任何生产代码;`**接口基准:**` `packages-user/client-base/src/material/types.ts` 与 `packages-user/client-base/src/types.ts`(`4e305e3` 后)以及 `packages-user/data-state/src/types.ts`(`ICoreStateExtended` 定义源);`**基准提交:**` `4e305e3 refactor(type): material types.`(当日工作树 HEAD);`**下一步:**` 第二步(material 接口适应实施)未规划,待用户审阅本文件后另行规划(D-32)。**全文使用 CRLF 换行**(dev.md「换行使用 CRLF 格式」);若写入工具产出 LF,用 `node -e "const fs=require('fs');const p='.planning/phases/04-render-adaptation/04-MATERIAL-INTERFACE-IMPACT.md';fs.writeFileSync(p,fs.readFileSync(p,'utf8').replace(/\r?\n/g,'\r\n'))"` 统一转换后落盘;Task 2 / Task 3 追加内容同样保持 CRLF,不得出现孤立 LF。
|
||||
|
||||
@ -266,7 +266,7 @@ Phase 4 第六个增量(用户裁定 2026-09-21 · D-30 / D-31 / D-32 **第一
|
||||
|
||||
(3) 写 `## 方法`((0a) 的「只读起始基线」bullet 也在本节):枚举两侧面 ——(a)**基准面** = `packages-user/client-base/src/material/types.ts`(`ITextureManager` / `ITextureGetter` / `ITextureAliasGetter` / `IAutotileProcessor` / `IAssetBuilder` / `ITrackedAssetData` / `IMaterialData` / `IMaterialFramedData` 等现行成员)+ `packages-user/client-base/src/types.ts`(`IClientBase.materials`)+ `packages-user/data-state/src/types.ts`(`ICoreStateExtended`);(b)**命中面** = `packages-user` 全量(`client-base` / `client-modules` / `client-system` / `entry-*` / `legacy-plugin-*` / `data-fallback`),另对 `packages/` 与 `src/` 做**对照扫描**(只登记、不修改)。判定口径固定为 **A 已移除符号的引用点 / B 改名的剩余引用 / C 新增与收紧约束的未实现 / D big-image 残留(实现与消费者)/ E 范围外命中 / F 未能从阅读确定** 六类,**一条记录只归一类**,跨类拆条并互相引用;**A 与 D 的分列规则写死**:A 记「消费者调用点」(`client-modules` 对 `manager.*` 的调用 + `manager.ts:20` 的类型 import),D 记「`client-base` 内已不属接口的实现残留」与「走 legacy 全局的 `cache.ts` 概念路径」。证据纪律:每行含 `接口/成员名 + 命中处 file:line + 基准侧锚点 file:line + 问题描述 + 影响 + 置信`,**每行至少两个锚点**;静态阅读不能定论者一律进 F 类,**不得写成错配 / 缺失 / 残留**。允许按 **D-09** 派**只读**子代理做重型整文件扫描(子代理只回传事实表「成员名 + 所属 `file:line` + 形态」,**不得写文件、不得贴大段源码**),最终由主执行者按 `file:line` 切片复核。同时记录 (0b) 的类型门禁命令与两个数字的口径(正则 `error TS\d+` 的匹配数)。
|
||||
|
||||
(4) 补齐 11 个二级标题(`## 背景` / `## 方法` / `## 基准变更(4e305e3)` / `## 类型门禁实测基线` 已在前几步写入,此处补齐其余 7 个占位,其后 Task 2 在同一骨架上横向补齐,不再改结构):`## A 已移除符号的剩余引用` / `## B 改名的剩余引用` / `## C 新增与收紧约束的未实现` / `## D big-image 残留(实现与消费者)` / `## E 范围外命中(仅报告)` / `## F 未能从阅读确定(未猜测)` / `## 处置`。
|
||||
(4) 补齐 11 个二级标题(`## 背景` / `## 方法` / `## 基准变更(4e305e3)` / `## 类型门禁实测基线` 已在前几步写入,此处补齐其余 7 个占位,其后 Task 2 在同一骨架上横向补齐,不再改结构):`## A 已移除符号的剩余引用` / `## B 改名的剩余引用` / `## C 新增与收紧约束的未实现` / `## D big-image 残留(实现与消费者)` / `## E 范围外命中(仅报告)` / `## F 未能从阅读确定(未猜测)` / `## 处置`。**每个类别标题下先写一行记录编号模板**(供 Task 2 横向补齐时对齐):A 类 `#04-06-A-NN`(消费者调用点;表行形如 `| #04-06-A-NN | 接口/成员名 | 命中处 file:line | 基准侧锚点 file:line | 问题描述 | 影响 | 置信 |`)、C 类 `#04-06-C-NN`(约束未实现)、D 类 `#04-06-D-NN`(实现残留,含 `cache.ts` legacy 概念路径)、E 类 `#04-06-E-NN`(范围外仅报告);B 类为结论行、**不编记录号**;F 类条目形如 `- **#04-06-F-NN**:现象 + 为什么读不出来 + 需要用户裁决的点`。模板行用 `NN` 占位、不含数字,故不计入任何行数门禁。
|
||||
|
||||
(5) **`## 基准变更(4e305e3)` 定稿(本任务的核心横向切片)**:以 `git show 4e305e3 -- packages-user/client-base/src/types.ts packages-user/client-base/src/material/types.ts` 为依据,并与当日工作树**逐条比对**后写入三类差异:① **移除 7 个符号** —— `IBigImageReturn`(原定义在 `material/types.ts`)、`isBigImage` / `getBigImage` / `getIfBigImage`(原在 `IMaterialGetter`,现 `ITextureGetter` 的成员集合不含)、`getBigImageByAlias`(原在 `IMaterialAliasGetter`,现 `ITextureAliasGetter` 不含)、`setBigImage`(原在 `IMaterialManager`,现 `ITextureManager` 不含)、`bigImageStore`(同上),每条附**现行基准侧锚点**(即该符号原所属接口在 `material/types.ts` 的现行行,例如 `ITextureGetter` `:196`、`ITextureAliasGetter` `:228`、`ITextureManager` `:260`);② **改名 3 个接口** —— `IMaterialManager` → `ITextureManager`(`:260`)、`IMaterialGetter` → `ITextureGetter`(`:196`)、`IMaterialAliasGetter` → `ITextureAliasGetter`(`:228`),并列出该提交内同步改名的消费者文件(`client-base/src/load/loader.ts`、`client-base/src/material/{autotile,builder,manager}.ts`、`client-modules/src/{client.ts,fallback/load.ts,render/map/moving.ts,render/map/renderer.ts,render/map/types.ts,types.ts}`);③ **新增 / 收紧约束** —— `ITextureManager` 新增 `readonly textures: ITextureStore`(`:262-263`,附 jsDoc 原文),以及四处 `extends ICoreStateExtended`(`ITextureManager` `:261` / `IAutotileProcessor` `:104` / `IAssetBuilder` `:430` / `ITrackedAssetData` `:462-463`),并**点名定义源** `packages-user/data-state/src/types.ts:45-49`(`readonly state: ICoreState`)。另记录同提交内的**相邻变更**(登记,不作本步裁定):`client-base/src/types.ts` 新增 `rafExcitation` / `excitationDivider`,新增 `packages-user/client-system` 包与 `IClientSystem`。**不得**修改任何被引用文件。
|
||||
|
||||
@ -297,7 +297,7 @@ Phase 4 第六个增量(用户裁定 2026-09-21 · D-30 / D-31 / D-32 **第一
|
||||
- `## 方法` 含「只读起始基线」条目,**逐行原样**记录起始 `git status --porcelain -- packages packages-user src` 的输出(规划日为空 → 写「(无)」);门禁断言记录条目与当前状态逐条一致
|
||||
- `## 方法` 写死 A/B/C/D/E/F 六类判定口径与 **A(消费者调用点)/ D(实现残留与 legacy 概念路径)分列规则**,并写明每行须含命中处与基准侧两个 `file:line` 锚点、未定项一律进 F 类
|
||||
- `## 基准变更(4e305e3)` 覆盖 7 个已移除符号(含各自现行基准侧锚点)、3 个改名接口、`readonly textures: ITextureStore`、四处 `extends ICoreStateExtended`,并点名定义源 `packages-user/data-state/src/types.ts:45-49`;另登记同提交的相邻变更(`rafExcitation` / `excitationDivider` / `client-system`)
|
||||
- `## 类型门禁实测基线` 逐字记录 `- **错误总行数**:<N>` 与 `- **material 相关错误行数**:<M>`(规划日 199 / 20,执行日以实测为准),逐行列出全部 material 相关错误,并单列与本改动无关的既有错误与该划分口径「须用户确认」的说明
|
||||
- `## 类型门禁实测基线` 逐字记录 `- **错误总行数**:<N>` 与 `- **material 相关错误行数**:<M>`(规划日 199 / 19,执行日以实测为准),逐行列出全部 material 相关错误,并单列与本改动无关的既有错误与该划分口径「须用户确认」的说明
|
||||
- A 类含固定列序表头与至少 1 条 `#04-06-A-*` 行,该行含命中处与基准侧两个 `file:line` 锚点,且行内无修复建议
|
||||
- 相对记录在 `## 方法` 的只读起始基线零变化(porcelain 条目逐条一致);未修改任何生产源码;未新增计划文件;全文 CRLF
|
||||
</acceptance_criteria>
|
||||
@ -373,7 +373,7 @@ Phase 4 第六个增量(用户裁定 2026-09-21 · D-30 / D-31 / D-32 **第一
|
||||
- dev.md(「其他要求」的 CRLF 要求;「双端分离」)
|
||||
</read_first>
|
||||
<action>
|
||||
(1) **`## 处置` 定稿**:明写 —— 本文件是 material 接口适应(D-30 / D-31)**第一步(只读清点)**的交付物;本步**未修改任何生产代码**、`files_modified` 仅本文件;相对 `## 方法` 记录的只读起始基线零变化;**第二步(material 接口适应实施)未规划**,待用户审阅本文件后另行规划(D-32);范围限 `packages-user`,`packages/` 不纳入、`src/` 命中仅报告(D-32);A / B / C / D / E / F 六类中只有 A / C / D 是 `packages-user` 内的待处置项,B 类已清零、E 类仅报告、F 类须用户裁决;`state` 的注入方式、`textures` 的承担者、`getIfBigImage` 的替代一律由用户裁决(不得由 AI 裁定,D-23 亦约束新增代码不得取全局单例);`core.*` legacy 适配(D-12)与移动控制(D-19)、跟随者(D-22)、`HeroRendering` 语义(D-18)不属本步;`REND-01` / `REND-02` 保持 Pending;若当日实测数值与规划日(199 / 20)不同,在本节说明差异与原因。
|
||||
(1) **`## 处置` 定稿**:明写 —— 本文件是 material 接口适应(D-30 / D-31)**第一步(只读清点)**的交付物;本步**未修改任何生产代码**、`files_modified` 仅本文件;相对 `## 方法` 记录的只读起始基线零变化;**第二步(material 接口适应实施)未规划**,待用户审阅本文件后另行规划(D-32);范围限 `packages-user`,`packages/` 不纳入、`src/` 命中仅报告(D-32);A / B / C / D / E / F 六类中只有 A / C / D 是 `packages-user` 内的待处置项,B 类已清零、E 类仅报告、F 类须用户裁决;`state` 的注入方式、`textures` 的承担者、`getIfBigImage` 的替代一律由用户裁决(不得由 AI 裁定,D-23 亦约束新增代码不得取全局单例);`core.*` legacy 适配(D-12)与移动控制(D-19)、跟随者(D-22)、`HeroRendering` 语义(D-18)不属本步;`REND-01` / `REND-02` 保持 Pending;若当日实测数值与规划日(199 / 19)不同,在本节说明差异与原因。
|
||||
|
||||
(2) **运行六道门禁并按实测结果如实记录**:① 只读门禁(`git status --porcelain -- packages packages-user src` 与 `## 方法` 记录逐条一致);② 类型门禁一致性(重跑 `node -e "const{execSync}=require('child_process');let o='';try{o=execSync('pnpm exec vue-tsc --noEmit',{encoding:'utf8',maxBuffer:1<<28,stdio:['ignore','pipe','pipe']})}catch(e){o=(e.stdout||'')+(e.stderr||'')}console.log((o.match(/error TS\d+/g)||[]).length)"`,输出必须等于文档记录的**错误总行数**);③ 类别门禁(A/C/D/E 行数下限、每行双锚点、A 覆盖 7 符号、B 三个旧名、C 五个关键词、D 关键残留与 `cache.ts`、E 的 `src/types/declaration` 与 `.planning/graphs`、F ≥ 5 条);④ B 类 0 命中复验(`git grep` 源码面仍为 0);⑤ 既有计划保护 + 计划范围门禁(`04-05-PLAN.md` / `04-05-SUMMARY.md` 的 porcelain 为空;phase 目录内 `-PLAN.md` 仅允许 `04-01..04-06`);⑥ CRLF 门禁。任一门禁失败即停下修正文档后重跑,**不得**改门禁口径或伪造通过。
|
||||
|
||||
@ -441,7 +441,7 @@ Phase 4 第六个增量(用户裁定 2026-09-21 · D-30 / D-31 / D-32 **第一
|
||||
|
||||
<verification>
|
||||
- **只读门禁**:`node -e "const{execSync}=require('child_process');console.log(JSON.stringify(execSync('git status --porcelain -- packages packages-user src',{encoding:'utf8'})))"` 的输出与交付文档 `## 方法` 的「只读起始基线」条目逐条一致(不新增、不消失、状态码不变)。
|
||||
- **类型门禁一致性**:`node -e "const{execSync}=require('child_process');let o='';try{o=execSync('pnpm exec vue-tsc --noEmit',{encoding:'utf8',maxBuffer:1<<28,stdio:['ignore','pipe','pipe']})}catch(e){o=(e.stdout||'')+(e.stderr||'')}console.log((o.match(/error TS\d+/g)||[]).length)"` 的输出等于文档记录的「错误总行数」(规划日 199),且「material 相关错误行数」(规划日 20)在文档中逐行有对应的数据行。
|
||||
- **类型门禁一致性**:`node -e "const{execSync}=require('child_process');let o='';try{o=execSync('pnpm exec vue-tsc --noEmit',{encoding:'utf8',maxBuffer:1<<28,stdio:['ignore','pipe','pipe']})}catch(e){o=(e.stdout||'')+(e.stderr||'')}console.log((o.match(/error TS\d+/g)||[]).length)"` 的输出等于文档记录的「错误总行数」(规划日 199),且「material 相关错误行数」(规划日 19 = `client-base` 7 + `client-modules` 12)在文档中逐行有对应的数据行。
|
||||
- **类别门禁**:交付文档的 A ≥ 9 行 / C ≥ 5 行 / D ≥ 9 行 / E ≥ 5 行 / F ≥ 5 条,A–E 每行 ≥2 个 `file:line` 锚点,A 覆盖全部 7 个已移除符号,B 覆盖三个旧接口名,C 覆盖 `textures` 与四个实现类,D 覆盖关键残留成员与 `cache.ts`,E 覆盖 `src/types/declaration` 与 `.planning/graphs`。
|
||||
- **B 类 0 命中复验**:`git grep -n -E "IMaterialManager|IMaterialGetter|IMaterialAliasGetter" -- packages packages-user src` 无输出。
|
||||
- **既有计划保护 + 计划范围门禁**:`git status --porcelain -- .planning/phases/04-render-adaptation/04-05-PLAN.md .planning/phases/04-render-adaptation/04-05-SUMMARY.md` 为空;phase 目录内 `-PLAN.md` 仅 `04-01..04-06`;`04-06-SUMMARY.md` 已存在。
|
||||
|
||||
Loading…
Reference in New Issue
Block a user