mirror of
https://github.com/motajs/template.git
synced 2026-10-16 02:20:17 +08:00
docs(09-19): revise plan (rev7) - correct ledger §8.3 U-1 (42->43, D-84 supersede); tighten LEDGER GATE to reject both 42-forms and require 43 in §2.4/§9/U-1
This commit is contained in:
parent
14d0dadf39
commit
22372480f0
@ -185,7 +185,7 @@ Phase 9 · 任务 9 · 第 19 个计划(**revision 6**)—— **旧引擎数
|
||||
|
||||
⑦ **48px 素材按尺寸与帧数分组的**技术核实结论与**已裁定处置**(D-85,取代 D-81 的 npc 计数;U-9 / U-17 / OI-3 已裁定):** 帧数权威 = `FrameNumbers`(`src/types/declaration/source.d.ts`:81-91):`enemys`/`npcs` = 2 帧、`enemy48`/`npc48` = **4 帧**。实测 `npcs.png`(64×448)= 2 帧列 × 14 行(单元格 32×32,14 个 NPC 块,各 2 帧 32×32)、`npc48.png`(128×480)= **4 帧列** × 10 行(单元格 **32×48**,10 个 NPC 块,各 4 帧 32×48);`enemys.png`(64×2336)单元格 32×32、`enemy48.png`(**128×384**)**4 帧列**、单元格 **32×48**。`addRowAnimate`(`manager.ts`:158-175,配 `TextureRowSplitter`,且 `frames = source.width / width`)要求**单张图内所有块共用同一帧 `width`/`height`**,故 32×32(2 帧)与 32×48(4 帧)帧**无法同图**(尺寸与帧数均不同)。**已裁定处置 = D-85 · 按尺寸与帧数分组(= 原 OI-3 的 A):** 32×32 组与 32×48 组**各自成图**—— 32px 组 14 块 → `npc0..3`(`npc0..2` 4 行 64×128、`npc3` 2 行 **64×64**)、48px 组 10 块 → `npc4..6`(`npc4`/`npc5` 4 行 128×192、`npc6` 2 行 **128×96**),`npc` 共 **7 张**、`SPLIT-COUNT` = **43**。**不同尺寸 / 帧数的素材必须用不同图片;不放一块、不留白、不重采样。** D-85 取代 D-81 的 npc 计数(原 `npc0..5`=6 / 42);**enemy 不受影响**(32px 19 + 48px 2 = 21 张,与 D-81 `enemy0..20` 一致)。**原「统一 64×48 + 透明留白」(旧默认 B)已被用户明确否决**(留白会改变消费端读取的帧尺寸),本节不作为备选。
|
||||
|
||||
⑧ **台账更正(Task 1,D-84 / D-85):** 仅更正 `09-DATA-MIGRATION-AUDIT.md` 的 48px 事实:§2.1 将 `enemy48.png`/`npc48.png` 行改为 **4 帧 / 单元格 32×48 / 行数 8、10**;§2.4 将 D/E 组**按帧数与尺寸拆为** `enemys`(2f,32×32)/`enemy48`(4f,32×48)/`npcs`(2f,32×32)/`npc48`(4f,32×48) 四条(enemy = 19+2 = **21**、npc = 4+3 = **7**),`SPLIT-COUNT` 由 42 改为 **43**;§2.5 将 npc 命名改为 `npc0..6`(7 图,enemy 保持 `enemy0..20`=21);同步 §0/§2/§5.2/§8.3(U-9/U-17)/§9 的 D-84/D-85 引用并**标注 D-81 的 `npc0..5`/42 已被取代**。**不改**字段分类判定、§8.1/§8.2 分区或条目增删。`09-DATA-MIGRATION-AUDIT.md` 是本计划**唯一允许修改的既有规划文件**。
|
||||
⑧ **台账更正(Task 1,D-84 / D-85):** 仅更正 `09-DATA-MIGRATION-AUDIT.md` 的 48px 事实:§2.1 将 `enemy48.png`/`npc48.png` 行改为 **4 帧 / 单元格 32×48 / 行数 8、10**;§2.4 将 D/E 组**按帧数与尺寸拆为** `enemys`(2f,32×32)/`enemy48`(4f,32×48)/`npcs`(2f,32×32)/`npc48`(4f,32×48) 四条(enemy = 19+2 = **21**、npc = 4+3 = **7**),`SPLIT-COUNT` 由 42 改为 **43**;§2.5 将 npc 命名改为 `npc0..6`(7 图,enemy 保持 `enemy0..20`=21);同步 §0/§2/§5.2/§8.3(U-1/U-9/U-17)/§9 的 D-84/D-85 引用并**标注 D-81 的 `npc0..5`/42 已被取代**;**§8.3 U-1 的派生计数由 42 更正为 43 并标注其「严格 4 行」读法由 D-84 取代**。**不改**字段分类判定、§8.1/§8.2 分区或条目增删。`09-DATA-MIGRATION-AUDIT.md` 是本计划**唯一允许修改的既有规划文件**。
|
||||
|
||||
⑨ **地图图层键:** `mapState.fromRaw` 要求每层为整张展平网格(`length = width × height`),与台账 §6.2 候选「层键即行索引」不符;默认「旧二维 `map` 单张展平图层、键 `0`、`layerAlias` = `{}`」,额外图层(`bgmap` 等)属 §8.2 U-16b 不移植(OI-4)。
|
||||
|
||||
@ -237,7 +237,7 @@ Phase 9 · 任务 9 · 第 19 个计划(**revision 6**)—— **旧引擎数
|
||||
<precondition>Task 0 已闭环:用户明确回复「可以执行」(若用户就台账更正范围另有指定,按指定执行)。`09-DATA-MIGRATION-AUDIT.md` 为 09-17/09-18 产出的待更正版本(§2.1 的 48px 行仍为「2 列 / 2 帧」口径)。</precondition>
|
||||
<files>.planning/phases/09-minimum-browser-runnable/09-DATA-MIGRATION-AUDIT.md</files>
|
||||
<read_first>
|
||||
- .planning/phases/09-minimum-browser-runnable/09-DATA-MIGRATION-AUDIT.md(§0.5 / §0.6 / §2.1 / §2.4 / §2.5 / §5.2 / §8.3 U-9 / §8.3 U-17 / §9)—— 待更正位置
|
||||
- .planning/phases/09-minimum-browser-runnable/09-DATA-MIGRATION-AUDIT.md(§0.5 / §0.6 / §2.1 / §2.4 / §2.5 / §5.2 / §8.3 U-1 / §8.3 U-9 / §8.3 U-17 / §9)—— 待更正位置
|
||||
- .planning/phases/09-minimum-browser-runnable/09-CONTEXT.md(D-72 / D-81 / D-84 / D-85)
|
||||
- src/types/declaration/source.d.ts:81-91(`FrameNumbers`:`animates:4` / `enemys:2` / `npcs:2` / `enemy48:4` / `npc48:4`)—— 帧数权威
|
||||
- packages-user/client-base/src/material/manager.ts:158-175(`addRowAnimate`:单图单帧尺寸、`source.width % width === 0`、`frames = source.width / width`)+ packages/render/src/assets/splitter.ts:8-18(`TextureRowSplitter`)—— 「不同尺寸/帧数必须不同图」的依据
|
||||
@ -263,7 +263,7 @@ Phase 9 · 任务 9 · 第 19 个计划(**revision 6**)—— **旧引擎数
|
||||
|
||||
(6) **§5.2(交叉引用):** 将 `npc48.png`「10 NPC × 2 帧」更正为「10 NPC × **4 帧**」;E 组引用由「归属 §2.4 的 E 组(目标图 6 张,`npc0.png` … `npc5.png`)」改为「(目标图 **7 张**,`npc0.png` … `npc6.png`,**按尺寸与帧数分组**)」;该节末尾「是否与 32px NPC 混入同一目标图…受 D-72④…需进一步确认(§8)」标注为**已由 D-85 裁定**。
|
||||
|
||||
(7) **§8.3(观察项同步):** U-9 更正为「48px 素材为 **4 帧列**、单元格 **32×48**(`enemy48.png` 128×384、`npc48.png` 128×480;帧数权威 `FrameNumbers`)—— 由 D-84/D-85 裁定」;U-17 标注**已由 D-85 裁定**(`npc48` 高门与 32px NPC 各自成图、不混图)。
|
||||
(7) **§8.3(观察项同步):** U-9 更正为「48px 素材为 **4 帧列**、单元格 **32×48**(`enemy48.png` 128×384、`npc48.png` 128×480;帧数权威 `FrameNumbers`)—— 由 D-84/D-85 裁定」;U-17 标注**已由 D-85 裁定**(`npc48` 高门与 32px NPC 各自成图、不混图);**U-1 必须一并更正**——将 U-1 行的派生计数由 `SPLIT-COUNT` = 42 更正为 **43**(D/E 按帧数与尺寸分组后 E = 7),并**明确标注该「严格 4 行」读法(D-72⑤ 的 4×4 / 帧数列 × 4 行)已由 D-84 取代**(列数固定、行数 ≤4 且按每图实际块数裁剪,见 §2.4);更正后 §8.3 U-1 的计数须**与 §2.4 / §9 的 `SPLIT-COUNT` = 43 三处一致**。
|
||||
|
||||
(8) **标注 D-81 的 npc 计数被取代:** 在 §2.5 与 §9 相关处注明「D-81 的 `npc0..5`=6 / `SPLIT-COUNT`=42 的 **npc 计数部分已由 D-85 取代**;enemy 不受影响仍 `enemy0..20`=21」。
|
||||
|
||||
@ -271,17 +271,17 @@ Phase 9 · 任务 9 · 第 19 个计划(**revision 6**)—— **旧引擎数
|
||||
</action>
|
||||
<reversibility rating="reversible">仅更正一份规划文档内的事实与引用;`git checkout` 可整体回退;未触及任何源码、数据文件或既有注释。</reversibility>
|
||||
<verify>
|
||||
<automated>node -e "const fs=require('fs');const p='.planning/phases/09-minimum-browser-runnable/09-DATA-MIGRATION-AUDIT.md';const t=fs.readFileSync(p,'utf8');const bad=[];const rows=t.split(/\r?\n/);const lineOf=sub=>{const i=rows.findIndex(l=>l.indexOf(sub)>=0);return i<0?'':rows[i]};const e48=lineOf('materials/enemy48.png');const n48=lineOf('materials/npc48.png');if(!/4 帧/.test(e48))bad.push('§2.1 enemy48 row lacks 4 帧');if(!/32×48/.test(e48))bad.push('§2.1 enemy48 row lacks 单元格 32×48');if(/2 列 × 8 行/.test(e48))bad.push('§2.1 enemy48 row still 2 列 × 8 行');if(!/4 帧/.test(n48))bad.push('§2.1 npc48 row lacks 4 帧');if(!/32×48/.test(n48))bad.push('§2.1 npc48 row lacks 单元格 32×48');if(/2 列 × 10 行/.test(n48))bad.push('§2.1 npc48 row still 2 列 × 10 行');if(t.indexOf('SPLIT-COUNT: 42')>=0)bad.push('SPLIT-COUNT still 42');if(t.indexOf('SPLIT-COUNT: 43')<0)bad.push('SPLIT-COUNT not 43');if(t.indexOf('npc6.png')<0)bad.push('§2.5 npc not extended to npc6.png');if(t.indexOf('npc5.png')>=0)bad.push('§2.5 still references npc5.png');if(t.indexOf('D-84')<0||t.indexOf('D-85')<0)bad.push('missing D-84/D-85 sync');if(/npc0\.png` … `npc5\.png/.test(t))bad.push('old npc range still present');if(t.indexOf('ceil(73/4)+ceil(8/4)')<0||t.indexOf('ceil(14/4)+ceil(10/4)')<0)bad.push('missing recomputed group counts');if(bad.length>0){console.error('LEDGER GATE FAILED :: '+bad.join(' ; '));process.exit(1)}console.log('OK ledger: 48px = 4 frames / cell 32×48 (rows 8,10); SPLIT-COUNT 43 (enemy 21 / npc 7); npc0..6; D-84/D-85 synced')"</automated>
|
||||
<fails_when>non-zero exit, 或 stderr 含 "LEDGER GATE FAILED"(§2.1 的 48px 行未更正为 4 帧 / 单元格 32×48 / 行数 8、10;`SPLIT-COUNT` 未由 42 改为 43;`npc` 命名未扩到 `npc0..6`;D-84/D-85 引用缺失;旧的 `npc0..npc5` 区间仍在)</fails_when>
|
||||
<automated>node -e "const fs=require('fs');const p='.planning/phases/09-minimum-browser-runnable/09-DATA-MIGRATION-AUDIT.md';const t=fs.readFileSync(p,'utf8');const bad=[];const rows=t.split(/\r?\n/);const lineOf=sub=>{const i=rows.findIndex(l=>l.indexOf(sub)>=0);return i<0?'':rows[i]};const e48=lineOf('materials/enemy48.png');const n48=lineOf('materials/npc48.png');if(!/4 帧/.test(e48))bad.push('§2.1 enemy48 row lacks 4 帧');if(!/32×48/.test(e48))bad.push('§2.1 enemy48 row lacks 单元格 32×48');if(/2 列 × 8 行/.test(e48))bad.push('§2.1 enemy48 row still 2 列 × 8 行');if(!/4 帧/.test(n48))bad.push('§2.1 npc48 row lacks 4 帧');if(!/32×48/.test(n48))bad.push('§2.1 npc48 row lacks 单元格 32×48');if(/2 列 × 10 行/.test(n48))bad.push('§2.1 npc48 row still 2 列 × 10 行');if(t.indexOf('SPLIT-COUNT: 42')>=0)bad.push('SPLIT-COUNT still 42 (colon form)');if(/SPLIT-COUNT\s*=\s*42/.test(t))bad.push('SPLIT-COUNT still 42 (equals form)');const c43=(t.match(/SPLIT-COUNT: 43/g)||[]).length;if(c43<2)bad.push('SPLIT-COUNT: 43 not present in both §2.4 and §9 (found '+c43+')');const u1=lineOf('| U-1 |');if(!u1)bad.push('§8.3 U-1 row not found');else{if(!/43/.test(u1))bad.push('§8.3 U-1 count not updated to 43');if(/42/.test(u1))bad.push('§8.3 U-1 still shows 42');if(!/D-84/.test(u1))bad.push('§8.3 U-1 missing D-84 supersede note');}if(t.indexOf('npc6.png')<0)bad.push('§2.5 npc not extended to npc6.png');if(t.indexOf('npc5.png')>=0)bad.push('§2.5 still references npc5.png');if(t.indexOf('D-84')<0||t.indexOf('D-85')<0)bad.push('missing D-84/D-85 sync');if(/npc0\.png` … `npc5\.png/.test(t))bad.push('old npc range still present');if(t.indexOf('ceil(73/4)+ceil(8/4)')<0||t.indexOf('ceil(14/4)+ceil(10/4)')<0)bad.push('missing recomputed group counts');if(bad.length>0){console.error('LEDGER GATE FAILED :: '+bad.join(' ; '));process.exit(1)}console.log('OK ledger: 48px = 4 frames / cell 32×48 (rows 8,10); SPLIT-COUNT 43 consistent in §2.4/§9/§8.3 U-1 (enemy 21 / npc 7); npc0..6; D-84/D-85 synced')"</automated>
|
||||
<fails_when>non-zero exit, 或 stderr 含 "LEDGER GATE FAILED"(§2.1 的 48px 行未更正为 4 帧 / 单元格 32×48 / 行数 8、10;`SPLIT-COUNT` 未由 42 改为 43;`SPLIT-COUNT` 仍以 `=` 形式残留 42(§8.3 U-1 未更正为 43、或未标注 D-84 取代「严格 4 行」读法);§2.4 / §9 / §8.3 U-1 三处的 43 不一致;`npc` 命名未扩到 `npc0..6`;D-84/D-85 引用缺失;旧的 `npc0..npc5` 区间仍在)</fails_when>
|
||||
</verify>
|
||||
<acceptance_criteria>
|
||||
- §2.1 的 `enemy48.png` 行为 `128×384`、4 帧列 × 8 行、每怪 4 帧、单元格 32×48;`npc48.png` 行为 `128×480`、4 帧列 × 10 行、每 NPC 4 帧、单元格 32×48
|
||||
- §2.4 D/E 各拆为两条(按帧数与尺寸):`enemys`(2f)/`enemy48`(4f)、`npcs`(2f)/`npc48`(4f);含 `enemy = 19+2 = 21`、`npc = 4+3 = 7` 的推导;`SPLIT-COUNT` = **43**
|
||||
- §2.5 `npc0..6`(7 图);`enemy0..20`(21 图)保持不变
|
||||
- §0 新增 D-84/D-85 口径说明与「2026-10-13 用户更正」标注;§5.2 / §8.3 U-9/U-17 同步;D-81 的 npc 计数标注被取代
|
||||
- §0 新增 D-84/D-85 口径说明与「2026-10-13 用户更正」标注;§5.2 同步;**§8.3 U-1 的派生计数更正为 43 并标注 D-72⑤「严格 4 行」读法由 D-84 取代**;§8.3 U-9/U-17 同步;D-81 的 npc 计数标注被取代
|
||||
- §9 汇总与机器可读计数均为 43;未改动字段分类判定、§8.1/§8.2 分区或条目增删;未改任何其它文件
|
||||
</acceptance_criteria>
|
||||
<done>台账 48px 事实与拆分计数更正为自洽(4 帧 / 单元格 32×48 / 行数 8、10;enemy 21 / npc 7 / `SPLIT-COUNT` 43 / `npc0..6`=7);D-84/D-85 引用同步;门禁全绿</done>
|
||||
<done>台账 48px 事实与拆分计数更正为自洽(4 帧 / 单元格 32×48 / 行数 8、10;enemy 21 / npc 7 / `SPLIT-COUNT` 43 且在 §2.4 / §9 / §8.3 U-1 三处一致 / `npc0..6`=7);§8.3 U-1 的「严格 4 行」读法已标注由 D-84 取代;D-84/D-85 引用同步;门禁全绿</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
@ -423,7 +423,7 @@ Phase 9 · 任务 9 · 第 19 个计划(**revision 6**)—— **旧引擎数
|
||||
|
||||
(3) **写 `09-DATA-MIGRATION-UNMAPPED.md`(路径/命名待批准,OI-1;仅 §8.1):** 采用连字符命名(Markdown 文档文件名规范)、裸 LF。内容仅收录「无目标字段 → 只记录、不移植」项,按维度分组并附「所查接口与缺失字段」依据(引用 `09-DATA-MIGRATION-AUDIT.md` §8.1):tile(`canBreak`/`script`/`doorInfo`/`animate`/`name`/`faceIds`/`autotileConnection`)、enemy(`faceIds`)、item(`hideInReplay`)、map(`title`/`name`/`height`/`firstArrive`/`eachArrive`/`parallelDo`/`changeFloor`/`afterBattle`/`afterGetItem`/`afterOpenDoor`/`beforeBattle`/`cannotMove`/`cannotMoveIn`/`autoEvent`/`images`/`bgm`/`weather`/`ratio`/`defaultGround`/`canFlyTo`/`canFlyFrom`/`canUseQuickShop`/`cannotViewMap`/`upFloor`)。**不得**收录 §8.2 待定项——它们保留在盘点台账。
|
||||
|
||||
(4) **写 `09-19-SUMMARY.md`:** 记录本计划范围与逐类映射口径、**台账更正结果(§2.1 的 48px 事实 4 帧 / 单元格 32×48 / 行数 8、10;§2.4 D/E 按帧数与尺寸分组、enemy 21 / npc 7、`SPLIT-COUNT`=43;§2.5 `npc0..6`=7;D-84/D-85 同步;D-81 的 npc 计数被取代)**、`num` 策略 A 的分段/取值、`text` 缺失 13 条的 `""` 处置、素材产出(**43 张拆分图**、**每张图的实际行数与尺寸(含裁剪末图,如 `terrains2`/`terrainsAnim7`=128×32、`enemy18`=64×32、`npc3`=64×64、`npc6`=128×96)**、**D-85 处置**(= OI-3 的 A · 按尺寸与帧数分组:`npc0..6`=7 张——32px 组 `npc0..2` 64×128 + `npc3` 64×64、48px 组 `npc4`/`npc5` 128×192 + `npc6` 128×96;不放一块、不留白、不重采样;**取代 D-81 的 6 图 / 42**;enemy 不受影响仍 `enemy0..20`=21)+ 5 张复制素材)、**D-84 布局口径(列数固定、行数 ≤4 且按每图实际裁剪)与「台账 §2 严格 4 行读法已被 D-84 取代、§2.5 `npc0..5` 计数已被 D-85 取代」说明**、地图图层键与旧→新重映射口径、消费接线未实现(D-70/D-83)、门禁结果(含 enemy/item/map 精确键集断言与 D-84 逐图尺寸断言、npc 图数 = 7 断言、台账更正断言)、`open_items`(OI-1/2/4/5/6/7 的最终处置;OI-3 标注「已由 D-85 裁定」)。
|
||||
(4) **写 `09-19-SUMMARY.md`:** 记录本计划范围与逐类映射口径、**台账更正结果(§2.1 的 48px 事实 4 帧 / 单元格 32×48 / 行数 8、10;§2.4 D/E 按帧数与尺寸分组、enemy 21 / npc 7、`SPLIT-COUNT`=43;§2.5 `npc0..6`=7;D-84/D-85 同步;D-81 的 npc 计数被取代)**、`num` 策略 A 的分段/取值、`text` 缺失 13 条的 `""` 处置、素材产出(**43 张拆分图**、**每张图的实际行数与尺寸(含裁剪末图,如 `terrains2`/`terrainsAnim7`=128×32、`enemy18`=64×32、`npc3`=64×64、`npc6`=128×96)**、**D-85 处置**(= OI-3 的 A · 按尺寸与帧数分组:`npc0..6`=7 张——32px 组 `npc0..2` 64×128 + `npc3` 64×64、48px 组 `npc4`/`npc5` 128×192 + `npc6` 128×96;不放一块、不留白、不重采样;**取代 D-81 的 6 图 / 42**;enemy 不受影响仍 `enemy0..20`=21)+ 5 张复制素材)、**D-84 布局口径(列数固定、行数 ≤4 且按每图实际裁剪)与「台账 §2 严格 4 行读法已被 D-84 取代、§2.5 `npc0..5` 计数已被 D-85 取代」说明**、**D-85 字面描述的取代说明(D-85 的 CONTEXT 文字「64×48」/「3×128×192」由权威口径取代:48px 单元格为 32×48,且经 D-84 逐图裁剪后 48px 组为 `npc4`/`npc5` 128×192 + `npc6` 128×96,非「3×128×192」;本计划实际实现 32×48 与 `npc6`=128×96,据此保留)**、地图图层键与旧→新重映射口径、消费接线未实现(D-70/D-83)、门禁结果(含 enemy/item/map 精确键集断言与 D-84 逐图尺寸断言、npc 图数 = 7 断言、台账更正断言)、`open_items`(OI-1/2/4/5/6/7 的最终处置;OI-3 标注「已由 D-85 裁定」)。
|
||||
|
||||
(5) **收口:** 不改任何源码 / `public/project/**` / `ROADMAP.md` / `STATE.md` / `09-CONTEXT.md` / 既有 PLAN 与 SUMMARY(**唯一允许修改的既有规划文件是 `09-DATA-MIGRATION-AUDIT.md`,已由 Task 1 更正**);提交前 `git status` 逐条核对,仅暂存本计划 `files_modified` 条目(避开用户并发改动 D-56)。
|
||||
</action>
|
||||
@ -439,7 +439,7 @@ Phase 9 · 任务 9 · 第 19 个计划(**revision 6**)—— **旧引擎数
|
||||
- 5 份楼层 jsonc 齐备(`empty`/`MT0`/`sample0`/`sample1`/`sample2`),顶层键集恰为 `floorId`/`width`/`map`/`layerAlias`/`events`(5 键,无 §8.1/§8.2 键);每个图层数组长度 = `width`×`height`;数值均为 `0` 或有效新 `num`
|
||||
- `maps/.list.jsonc` 恰 5 个 id;旧 `num` 已重映射为新 `num`
|
||||
- `09-DATA-MIGRATION-UNMAPPED.md` 存在且仅含 §8.1 项(含 tile/enemy/item/map 四组,含 `src`/接口依据),不含 §8.2 项
|
||||
- `09-19-SUMMARY.md` 已写(含范围、台账更正结果、`num` 分配、`text` 缺失 13 条的 `""` 处置、素材产出(含**每张图实际行数与裁剪末图尺寸**、**43 张总量**)与 **D-85 处置**(`npc0..6`=7 / 取代 D-81 的 6/42)、**D-84 布局口径**、地图口径、门禁、`open_items`)
|
||||
- `09-19-SUMMARY.md` 已写(含范围、台账更正结果、`num` 分配、`text` 缺失 13 条的 `""` 处置、素材产出(含**每张图实际行数与裁剪末图尺寸**、**43 张总量**)与 **D-85 处置**(`npc0..6`=7 / 取代 D-81 的 6/42)、**D-84 布局口径**、**D-85 字面描述(「64×48」/「3×128×192」)由权威 32×48 单元格 + D-84 逐图裁剪(`npc6`=128×96)取代的说明**、地图口径、门禁、`open_items`)
|
||||
- 未改任何源码 / `public/project/**` / 既有台账(除 Task 1 的更正)与其它规划文件;未写 §8.2/§8.1 进数据文件(精确键集断言)
|
||||
</acceptance_criteria>
|
||||
<done>5 楼层 + `maps/.list.jsonc` + unmapped 文档 + SUMMARY 落盘;地图/作用域门禁全绿(台账更正不触发作用域门禁)</done>
|
||||
@ -489,7 +489,7 @@ Phase 9 · 任务 9 · 第 19 个计划(**revision 6**)—— **旧引擎数
|
||||
|
||||
<verification>
|
||||
- **Task 0**:预执行状态(台账 + 类型/地图管理器/切分器/加载器/源数据 + `src/types/declaration/source.d.ts` + `node zlib` 就位;unmapped/summary 不存在);人工关卡(用户回复「可以执行」;OI-3 已由 D-85 裁定,无需再给取值)。
|
||||
- **Task 1**:台账更正断言——§2.1 的 `enemy48.png`/`npc48.png` 行为 **4 帧 / 单元格 32×48 / 行数 8、10**(旧「2 列 × 8 行 / 2 列 × 10 行」消失);§2.4 含 `ceil(73/4)+ceil(8/4)`(enemy 19+2=21)与 `ceil(14/4)+ceil(10/4)`(npc 4+3=7)推导;`SPLIT-COUNT` 由 `42` 变为 `43`;§2.5 `npc0..6`(旧 `npc0..npc5` 区间消失);D-84/D-85 引用就位。
|
||||
- **Task 1**:台账更正断言——§2.1 的 `enemy48.png`/`npc48.png` 行为 **4 帧 / 单元格 32×48 / 行数 8、10**(旧「2 列 × 8 行 / 2 列 × 10 行」消失);§2.4 含 `ceil(73/4)+ceil(8/4)`(enemy 19+2=21)与 `ceil(14/4)+ceil(10/4)`(npc 4+3=7)推导;`SPLIT-COUNT` 由 `42` 变为 `43`(**且门禁拒收 `SPLIT-COUNT: 42` 与 `/SPLIT-COUNT\s*=\s*42/` 两种形式**);**§8.3 U-1 的派生计数更正为 43(不再是 `=` 形式的 42)且标注由 D-84 取代「严格 4 行」读法**,§2.4 / §9 / §8.3 U-1 三处 43 一致;§2.5 `npc0..6`(旧 `npc0..npc5` 区间消失);D-84/D-85 引用就位。
|
||||
- **Task 2**:三份实体 jsonc 分隔标记后严格 JSON;tile 235 且 `id`/`num` 唯一、`type` ∈ {2,3,4,5,6,7}、键集恰 6 键;enemy 81 且键集恰 3 键(`num`/`attribute`/`special`)、`num` ∈ `Enemy` 图块、`attribute`/`special` 形状正确;item 62 且键集恰 5 键(`num`/`category`/`name`/`text`/`hideInToolbox`)、`text` 为字符串(旧缺 `text` 的 13 条写 `""`)、`num` ∈ `Item` 图块;头部 `// Type:` 保留。
|
||||
- **Task 3**:**43 张**拆分图(`terrains0..2`/`terrainsAnim0..7`/`items0..3`/`enemy0..20`/`npc0..6`)+ 复制素材存在、PNG `IHDR` 合法(8 位非隔行)、**尺寸按 D-84 从来源块数逐图推导**(`width = 列数 × 帧宽`、`height = 行数 × 帧高`,`1 ≤ 行数 ≤ 4`;含全部 `enemy*`/`npc*`;末图可裁剪为 128×32 / 64×32 / 64×64 / 128×96 等),`npc` 图数 = **7**,且 `.list.jsonc` 的 `rowAnimate` 条目 `width`/`height`/帧数按 D-85 断言(48px 条目 = **32/48** / 帧数 4;32px 条目 = 32/32 / 帧数 2);`texture/.list.jsonc` 解析成功、`source` 存在、`map`/`identifier` `num` 均在 `tile.jsonc` 且 **覆盖全部有贴图图块 `num`**;autotile/tileset 逐字节复制;脚本零依赖、`package.json` 未变。
|
||||
- **Task 4**:5 楼层齐备、顶层键集恰 5 键(无 §8.1/§8.2 键)、每层长度 = `width×height`、数值 ∈ {0} ∪ `tile` nums;`maps/.list.jsonc` = 5 id;unmapped 文档仅含 §8.1;SUMMARY 存在;`SCOPE GATE` 无越界改动(台账更正属白名单)。
|
||||
@ -499,7 +499,7 @@ Phase 9 · 任务 9 · 第 19 个计划(**revision 6**)—— **旧引擎数
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- **台账更正(Task 1,D-84 / D-85):** `09-DATA-MIGRATION-AUDIT.md` 的 48px 事实更正为 **4 帧 / 单元格 32×48 / 行数 8、10**;§2.4 D/E 按帧数与尺寸拆分(enemy 19+2 = **21**、npc 4+3 = **7**)、`SPLIT-COUNT` = **43**;§2.5 `npc0..6`(7 图,`enemy0..20` 保持 21);§0/§2/§5.2/§8.3/§9 同步 D-84/D-85 并标注 D-81 的 npc 计数被取代;未改字段分类判定与 §8 分区。
|
||||
- **台账更正(Task 1,D-84 / D-85):** `09-DATA-MIGRATION-AUDIT.md` 的 48px 事实更正为 **4 帧 / 单元格 32×48 / 行数 8、10**;§2.4 D/E 按帧数与尺寸拆分(enemy 19+2 = **21**、npc 4+3 = **7**)、`SPLIT-COUNT` = **43**(§2.4 / §9 / §8.3 U-1 三处一致,`=` 形式残留的 42 已清除);§2.5 `npc0..6`(7 图,`enemy0..20` 保持 21);§8.3 U-1 的「严格 4 行」读法标注由 D-84 取代;§0/§2/§5.2/§8.3/§9 同步 D-84/D-85 并标注 D-81 的 npc 计数被取代;未改字段分类判定与 §8 分区。
|
||||
- **实体(D-76):** `tile.jsonc` 235 / `enemy.jsonc` 81 / `item.jsonc` 62 条,基础字段按「映射候选(可确定)」全量、按 `num` 策略 A 分配;旧缺 `text` 的 13 条写 `""`;§8.2/§8.1 字段均未落入数据文件(各实体精确键集断言)。
|
||||
- **素材(D-72/D-81/D-84/D-85):** **43 张**拆分图(`npc` 按尺寸与帧数分组 `npc0..6`=7:`npc0..2` 64×128 + `npc3` 64×64 + `npc4`/`npc5` 128×192 + `npc6` 128×96)+ 4 autotile + 1 tileset 落 `src/content/texture/`;`animates` 并入 `terrains`;零依赖生成;**每张 PNG 尺寸按 D-84 从来源块数逐图推导(列数固定、行数 ≤4 且裁剪),门禁按实际行数断言(不硬编码 4 行尺寸)**;`npc` 图数 = 7,且 `.list.jsonc` 每帧尺寸与帧数按 D-85 断言(48px 条目 = 32/48、4 帧);`texture/.list.jsonc` 用 D-80 已批准 schema 且与 `tile.jsonc` `num` 一致、覆盖全部有贴图图块。
|
||||
- **地图(D-82):** 5 楼层全部写入;顶层键集恰 5 键;每层展平数组长度 = `width×height`;旧 `num` 重映射为新 `num`。
|
||||
|
||||
Loading…
Reference in New Issue
Block a user