合并(架构审查P2代码面批·写卡·用户令): 需求卡片v1.1(撤卡修订)——NODE_TYPES词表双份单点化(level_table.gd schema单点,生成器:136改LevelTable.NODE_TYPES直引,S3豁免面在案形态)/零行为变更批(sweep两断言带非空前置正锚+node_map_determinism确定性链逐位)/T1单卡0.25工作日; EC8热重载代码链退役撤下(用户裁决近期完善实装,规格原状+死开关代码保留为实装骨架,实装去向=另立待办+他会话写卡); 待办清单余项对账§4批闭合现状(仅剩presentation层); 已并master(4cc0502f)解冲突; pipeline_gate PASS
ci / gates (push) Successful in 34s
ci / gates (push) Successful in 34s
This commit is contained in:
commit
ce3a86a989
2 files changed
+154
-1
No files matched your search
@@ -0,0 +1,151 @@
|
||||
# 需求卡片:架构审查 P2 代码面批(2026-11-03)
|
||||
|
||||
来源:待办清单「架构审查优化讨论——全库架构审计读数的逐条裁决与整改分批(2026-10-29 登记,来源=审计发现)」条目 P2 部分(**唯一事实源**:reports/审计-全库架构审查-2026-10-29.md §5.3 NODE_TYPES 项+2026-11-03 设计讨论会话用户授权〔实现层事项按代码规则与架构文档决策〕;热重载侧经用户裁决撤卡——规格保留原状、死开关代码保留为将来实装骨架,实装去向=用户另立待办条目+后续实装卡〔他会话写卡〕)。
|
||||
状态:已写卡(v1.1,2026-11-03 修订——原 R1〔EC8 热重载代码链退役〕经用户裁决撤下,本卡收敛为仅 NODE_TYPES 词表单点化)。改动面:游戏代码(含随逻辑写/改的测试代码)。
|
||||
|
||||
## 1. 目标与完成定义
|
||||
|
||||
**这批做什么**:一处零行为变更的词表单点化——审计 §5.3 的 P2 代码遗留:
|
||||
|
||||
| # | 对象 | 现状 | 终态 |
|
||||
|---|---|---|---|
|
||||
| R1 | NODE_TYPES 词表双份 | `node_map_generator.gd:10` 与 `level_table.gd:11` 各持一份(内容同、序不同);生成器 :136 校验自产节点、schema :78 校验表行——校验双活、词表双写 | 词表单点归 schema(`LevelTable.NODE_TYPES`),生成器删本地副本改 class_name 直引;两处校验语义零变化(`.has()` 只判成员、序无关) |
|
||||
|
||||
**不收件(热重载侧,2026-11-03 用户裁决)**:`config_db.gd` 门标志与两方法、`battle_orchestrator.gd` 两行开门点**原样保留**——热重载规格已在设计文档保留原状(arch51-docs 提交 e614773a 撤回本批一度摘除),代码为将来实装骨架;实装需求卡片由用户另立待办条目后于他会话编写,本卡零触碰。
|
||||
|
||||
**什么状态算完**:词表改指落码、第 8 节对照表配对的验收断言在当轮真实跑批中通过;零行为变更证明=既有套件零转红(node_map_determinism/关卡表校验链/冒烟)+结构性 sweep 恒零(第 8 节 V1/V2);代码域闸全绿;两份 reports/ 产出物(实现报告+反哺点清单)写齐。
|
||||
|
||||
**排序义务**:本卡实现排队在 reports/需求卡片-架构审查5.1封装修复批-2026-11-03.md 之后——battle_orchestrator.gd 虽不再被本卡触碰,排序惯例照旧(同批架构审查卡顺次实现)。
|
||||
|
||||
## 2. 设计事实源
|
||||
|
||||
- **审计读数**:`reports/审计-全库架构审查-2026-10-29.md` §5.3(NODE_TYPES 词表双份)。
|
||||
- **裁决凭据**:2026-11-03 设计讨论会话用户授权(实现层事项按代码规则与架构文档决策)+热重载侧撤卡裁决(规格保留、代码保留、实装另卡)。
|
||||
- **架构登记**:`design/engineering/architecture/architecture.md`——:119 行「NODE_TYPES 词表双份」表述随本卡单点化由反哺点订正。
|
||||
|
||||
## 3. 现状事实(2026-11-03 master 工作区实查,基点 ab5d75a2;开工自行复核)
|
||||
|
||||
- **热重载侧(不收件,保留原状)**:config_db.gd:45(`_reload_gate`)+:174-186(`set_reload_gate`/`reload`)+battle_orchestrator.gd:272/:633(两行开门点)——零触碰;实装排期归用户另立待办条目+后续实装卡。
|
||||
- **NODE_TYPES 双份**:`core/node_map_generator.gd:10`(`["battle", "boss", "reward", "rest", "shop"]`)与 `data/schemas/level_table.gd:11`(`["battle", "reward", "rest", "boss", "shop"]`+注释「关卡节点地图 v2.1」);消费点=node_map_generator.gd:136(`NODE_TYPES.has(String(n["type"]))`——生成器自产节点枚举校验)与 level_table.gd:78(表行加载校验)。全库第三处引用零命中(grep 实核——tests/sim/probe 全零)。两处消费均为 `.has()` 成员判定,词表序不参与行为(内容集相同)。
|
||||
- **闸面现状**:S3(core 禁表加载)对 schema class_name 直引是豁免面(warning 级人工复核口径,static_scan.sh S3 注释「schema class_name 直引豁免」)——生成器改引 `LevelTable.NODE_TYPES` 落在既有豁免形态内(同款先例=config_db 持 BoardGenTable 等四域容器);零闸件改动。
|
||||
- **S13 预算**:node_map_generator 公开面与类变量零变化(删常量不涉成员账)。gdstyle 基线(tools/gdstyle_baseline.txt)对本卡触件零登记键。
|
||||
|
||||
## 4. 设计契约(违反即返工红线)
|
||||
|
||||
- 🔴 **零行为变更**:词表 `.has()` 判定集相同——零变更证明=既有套件零转红+同种子确定链零漂移(node_map_determinism 全绿)。RNG 封闭流、明细行协议、诊断状态机、存档与断点链零触碰。
|
||||
- 🔴 **R1 单点方向**:词表唯一落点=`data/schemas/level_table.gd`(表行校验 owner);生成器删本地 `const NODE_TYPES`,:136 改 `LevelTable.NODE_TYPES.has(String(n["type"]))`——core→data/schemas 前向边,schema class_name 直引(S3 豁免面在案形态);禁反向(schema 引 core);禁把词表搬进第三处(词表唯一落点不可迁)。
|
||||
- 🔴 **fail-fast 不破**:改动不引入任何软回退;配置加载校验路径零改动。
|
||||
- 🔴 **测试纪律**:禁变异类测试、禁撤销类取证;禁删断言/放宽阈值(第 8 节申报清单之外零删改)。
|
||||
|
||||
## 5. 范围边界
|
||||
|
||||
**收件**=R1 词表单点化+一件新 sweep 测试+既有套件回归确认。
|
||||
|
||||
**不收件**(去向已指认):
|
||||
- 热重载全侧(config_db 门与 reload、编排器两行开门点、GDD 规格)——原样保留,实装去向=用户另立待办条目+后续实装卡;本卡零触碰。
|
||||
- architecture.md :119 行「NODE_TYPES 词表双份」表述——反哺点清单承载(实现批禁写 design/,第 6 节)。
|
||||
- 闸面缺口(S1/S2/S9/S13 扫描面扩 sim/probe/tests、S8 目录域)与 S13 三处豁免存废——审计 P1 项,**不在本卡**(待办清单条目未闭合余项,后续讨论段)。
|
||||
|
||||
## 6. 关联文档同步面
|
||||
|
||||
实现批禁写 `design/` 整个目录与根规则文件;下表每条的落文义务全部进 `reports/iter<N>-反哺点-<日期>.md`(N=编排段定),由用户裁决后归文档批落文:
|
||||
|
||||
| 文档 | 关联点(本批实现会改变它的哪条陈述) | 同步义务(反哺点清单逐条承载) |
|
||||
|---|---|---|
|
||||
| design/engineering/architecture/architecture.md | :119 行「各持一份 NODE_TYPES 词表(内容同、顺序不同)」表述随单点化删句、改「词表单点归 LevelTable」 | 反哺点清单逐条列行号与改后登记内容——**机械面文档禁直改** |
|
||||
| design/gdd/systems/表现与支撑/数据配置.md | 无陈述变化(热重载规格保留原状——零反哺确认行) | 反哺点清单写「零反哺」确认行 |
|
||||
| 术语表 | 无新术语 | 确认行「零新增术语」 |
|
||||
|
||||
(机检口径:本表同步义务格无一条写「随批」。)
|
||||
|
||||
## 7. 任务卡 T1..T2
|
||||
|
||||
### 卡前·文件结构图
|
||||
|
||||
全部行为面=非行为改动(零行为变更批),行标【非行为】+对照表 R 行号;测试件为随逻辑写/改的测试代码。
|
||||
|
||||
```
|
||||
core 层
|
||||
game/core/node_map_generator.gd 【非行为 R1】:10 本地词表删+:136 改 LevelTable.NODE_TYPES.has(...)
|
||||
测试件(随逻辑写/改)
|
||||
tests/unit/core/encapsulation_p2_sweep_test.gd 【非行为 R1·新增】结构性零命中扫描(非空前置+正锚)
|
||||
tests/run_all.gd 【非行为】manifest +1 行(sweep)
|
||||
文档件
|
||||
game/tests/README.md 写卡段判断=零编辑(第 8 节能力行判断依据)——实现批禁写,批末只核对能力名引用一致
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**T1 NODE_TYPES 单点化+批收口**(估时 0.25 工作日;区间 0.25–0.5)
|
||||
取用:无(本卡起点)。产出:R1 清零+sweep 绿+批收口两件。
|
||||
|
||||
- [ ] 核对实现排序在案:5.1 卡(含 battle_orchestrator 触面)未合回则本批不开工
|
||||
- [ ] node_map_generator.gd::10 本地 `const NODE_TYPES` 删;:136 改 `if not LevelTable.NODE_TYPES.has(String(n["type"])):`——头注如有词表自述随改
|
||||
- [ ] 新增 tests/unit/core/encapsulation_p2_sweep_test.gd(extends SceneTree+Kit.check 主通道,全类型标注;源 token 扫描手法沿 encapsulation_sweep_test.gd〔5.1 卡新增件〕先例)断言组:①node_map_generator.gd 非空+`^const NODE_TYPES` 零命中+`LevelTable.NODE_TYPES.has(` 正锚〔架构P2 V1〕;②全仓 .gd 生产面(core/data/presentation)`NODE_TYPES :=` 定义恰好 1 处且落 data/schemas/level_table.gd〔架构P2 V2〕——两组均带扫描面非空前置
|
||||
- [ ] 孤立验证:新 sweep 单件先跑绿;node_map_determinism_test 全套绿(生成链同种子逐位——R1 零行为变更主证)+关卡表加载路径(level_table 校验活检查)经既有套件覆盖零转红+冒烟零转红
|
||||
- [ ] run_all.gd manifest 追加 1 行:encapsulation_p2_sweep_test(expect 0,注记「R1 结构性零命中扫描〔架构P2〕」)
|
||||
- [ ] **实现报告** `reports/iter<N>-实现报告-<日期>.md`:各卡状态+S13 键改前改后对账(node_map_generator 现场读数)+实现决定记录
|
||||
- [ ] **反哺点清单** `reports/iter<N>-反哺点-<日期>.md`:第 6 节同步面逐条落点(architecture.md :119 一处、GDD/术语确认行)
|
||||
- [ ] 批末核对:README 能力名引用一致(本卡零编辑);独立验收审计(第 8 节末)未过不合并;.uid 收口=`--editor --quit` 一次后确认新测试件 .uid 随批提交
|
||||
|
||||
### 估时汇总
|
||||
|
||||
T1 0.25。区间合计 0.25–0.5 工作日;**精确汇总 0.25 工作日**(超 0.5 工作日=超卡面估时域,须用户确认后方可续批)。
|
||||
|
||||
## 8. 验证闸(改动—验收对照表)
|
||||
|
||||
测试方式两分法:下表全部走**调试接口验证**;**正常流程体验验证**=零项(零行为变更批)。判据绑被测改动特有的可观测提交面(源码零命中带非空前置与正锚/确定链同种子逐位)。
|
||||
|
||||
| 需求点 | 改动(文件:行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| R1 NODE_TYPES 单点化 | node_map_generator :10 删+:136 改指 | encapsulation_p2_sweep_test〔架构P2 V1/V2〕;node_map_determinism_test 既有全套(同种子同参数必产同图逐位) | 单元+集成 | `LevelRunner` 关卡推进→节点图生成真实入口;`LevelTable` 表行加载校验 | 词表定义唯一落点(正锚计数=1);生成链同种子逐位同 | 既有:节点图生成合法性与同种子复现;既有:起关/选路/断点重生成同图(集成) |
|
||||
|
||||
**零行为改动面的证据义务**:本卡一行均为非行为改动——零变更证明=既有套件零转红+sweep 恒零+确定性链逐位。能力行全部「既有」、零新增——判断依据:零行为变更=玩家可观测能力面零变化;能力清单零编辑(批末核对义务在 T1)。
|
||||
|
||||
**闸口径**:重闸=`tools/run_all_gates.sh` 按本批改动域选档(改动含 game/ 下非 .md 行为载体 → `--code`);所选域全绿才合并。卡内不写死闸件名单。回归措辞:里程碑卡出口跑一次全套闸;卡内修复只做出红最小单元的最窄确认;新增测试先行孤立验证再并入全套。
|
||||
|
||||
**测试削弱申报**:零条——本批零删改既有断言(grep 实核:tests 对 NODE_TYPES 零引用,无断言需要迁移)。
|
||||
|
||||
**独立验收审计**:入口=批末 T1 后、合并前;报告=`reports/iter<N>-验收审计-<日期>.md`;由没参与实现的会话或子代理执行,核对:对照表逐行断言真实存在且当轮通过、sweep 非空前置在案、零删改核对、S13 键只降不升对账。未过不合并。
|
||||
|
||||
## 9. 异常分级
|
||||
|
||||
- **L1 自救**:改指行错位、sweep 正则笔误、注释错字——就地改,记录进实现报告。
|
||||
- **L2 记录继续**:行号 ±5 行内漂移(grep 符号锚定位后继续)。
|
||||
- **L3 停机写报告等用户**:①实现中发现 `NODE_TYPES` 出现卡面未登记的第三处消费面(现状事实失实=上游缺陷,禁代裁);②改指后任一既有套件转红(零行为变更契约被破=停卡,禁就地调和);③机检键与卡片契约互斥=停卡呈报,禁自造第三条路。
|
||||
|
||||
## 10. 代拍板白名单
|
||||
|
||||
- sweep 正则具体写法与断言消息措辞(尾缀〔架构P2 Vn〕与判别词保留)。
|
||||
- 逐卡内「孤立验证→出红最小单元→并入全套」执行顺序细节。
|
||||
超清单的决断记入实现报告「实现决定记录」节。
|
||||
|
||||
## 11. 待裁点
|
||||
|
||||
**零待裁点,开工门=U0**——词表单点化方向由审计读数+2026-11-03 会话授权导出;热重载侧经用户裁决撤卡(规格保留、代码保留为实装骨架、实装另卡)。单点落点、T 卡分解、验收断言由写卡期实查定死(第 3/7 节)。本卡未新增备选案。
|
||||
|
||||
## 12. 落位与可复用性预检
|
||||
|
||||
**新增文件(1 件,测试件)**:
|
||||
- tests/unit/core/encapsulation_p2_sweep_test.gd——为什么不能复用 5.1 卡的 encapsulation_sweep_test.gd:两卡独立 worktree 独立实现批(合回顺序未定,并件会让扫描面归属与尾缀语义跨批纠缠);本卡 sweep 仅两组四处、体量小;扫描手法同源(源 token 扫描先例),合回后如需并件归后续纯测试维护批裁决。grep 同名零命中。
|
||||
|
||||
**新增函数/成员**:零(纯删除+一处改指——无任何新增生产函数/成员/数据件)。
|
||||
|
||||
**复用既有**:源 token 扫描手法=encapsulation_sweep_test/player_copy_sweep_test 先例;manifest 登记=run_all.gd 既有条目族;schema class_name 直引形态=config_db 域容器四先例。
|
||||
|
||||
**分层与交互面**:R1 前向边 core→data/schemas=S3 豁免面在案形态(同 config_db 持表容器方向);零新增跨域路径、零新依赖;RngService 红线零触碰;Core 零 UI 红线零触碰;数值单一事实源零触碰(零表改动)。
|
||||
|
||||
## 13. 禁为机检文本保留无效成员
|
||||
|
||||
本卡为收敛类卡:词表删除后生成器禁留本地副本或镜像常量。机检键与卡片契约互斥时实现段一律停卡呈报,不得自造第三条路。
|
||||
|
||||
## 14. 实现规范预算
|
||||
|
||||
新增 .gd 仅 1 个测试件(SceneTree 脚本,全类型标注、零公开生产面)。生产代码全部落既有件,按「存量触面一查」对账(S13 默认阈值):
|
||||
- **零成员变化件**:node_map_generator 公开面与类变量零变化(常量删+一处改指)。
|
||||
- **存量触面 S13 预期**:触件一件 S13 键较现场基线只降不升;gdstyle 基线零登记键,T1 现场读数即对账基线。
|
||||
- **指标例外申报**:无。
|
||||
|
||||
## 15. 拆分边界纪律
|
||||
|
||||
本卡零新拆件——触件全部架构在册既有件,只做词表单点化;逐件职责语句不变(node_map_generator=关卡节点图生成域唯一承载〔词表消费方身份不变、定义权归 schema owner〕)。单一变化原因=单一事实源(词表归一),非阈值驱动。禁凑计数袋:本卡无成员打包面。
|
||||
@@ -16,10 +16,12 @@
|
||||
|
||||
**实况**:2026-10-29 全库架构静态审计的四组待裁余项,自「架构审查优化讨论」条目迁入(该条目的 3.1+3.2 部分已随迭代 50 卡③实现合回〔合并提交 8d3a12ec〕,余项不在本卡,按未决先迁再死迁立本条)。四组余项(审计待裁点 ④⑤⑥⑦,读数为审计时点,逐项现值以仓库为准):①守卫闸面缺口——S1/S2 随机函数扫描面止步 core+presentation(sim 4 处/probe 1 处/tests 3 处自建 RNG 不在扫)、S9 类型闸与 S13 质量闸扫描面不含 sim/probe/tests、S8 是 9 文件显式清单(缺位自检只防删改不防增);②S13 质量闸豁免存废——审计时点三处豁免常态化到最大户文件(battle_orchestrator 已随拆件批收窄,余量以闸件为准);③零测试点名四件(attune_loadout/battle_fx_host/meta_state_store/slot_store);④架构文档漂移三处(architecture.md 登记的 core/hero_ledger.gd 盘上不存在且测试断言它必须不存在、行数过期、EC8 热重载门后 ConfigDb.reload() 零调用方且走 load() 拿不到磁盘新值)。凭据:reports/审计-全库架构审查-2026-10-29.md(待裁点节)+reports/处置-架构审查3.1+3.2整改-2026-11-02.md(3.1+3.2 闭合凭据,随迭代 50 合回)。
|
||||
|
||||
**缺口**:四组余项中①②③ 已裁完并落地(见下 2026-11-03 记录);④**架构文档漂移三处**的落文档由并行 worktree 批(arch51-docs——HeroLedger 行拆件四件补登记+行数冻结计数摘除+MetaProgression 补登记行)承载,随其合回销号;同族审计 §5.1 已登记(见下 2026-11-03/11-04 记录,已写卡),§5.3(NODE_TYPES 词表单点化)已写卡于并行 worktree archp2-card、§5.4(MetaProgression 登记零动作)已随 arch51-docs 落文——均随各自合回入册;presentation 层私取面约 227 行另开设计讨论,为本条最后余项。
|
||||
**缺口**:四组余项中①②③④ 全部闭合销号(④ 架构文档漂移三处已随 arch51-docs 批落文档并合回——HeroLedger 行拆件四件补登记+行数冻结计数摘除+MetaProgression 补登记行);同族审计 §5.1 已写卡并合回(arch51-card 批,见下 2026-11-03/11-04 记录)、§5.3 已写卡(见下 2026-11-04 段,本卡合回后在册)、§5.4(MetaProgression 登记零动作)已随 arch51-docs 落文合回;presentation 层私取面约 227 行另开设计讨论,为本条最后余项。
|
||||
|
||||
**2026-11-03 设计闭合+写卡(5.1 封装修复部分,2026-11-04 并 master 后凭据换代)**:2026-11-03 会话对审计 §5.1(settlement 段类私取编排器私有成员)完成设计讨论并扩面普查,裁决五处跨对象私有访问修复方案(settlement 七段→编排器束交付/搬家五方法/adventure_runner→BreakpointStore/save_manager↔SlotStore 双向公开面/grant_segment→BattleFxHost+config_db→三表容器;presentation 层约 227 行另开设计讨论不在内)。凭据=reports/处置-架构审查5.1封装修复-2026-11-03.md(处置记录)+审计报告 §5.1+architecture.md:119/:124/:137-146。需求卡片 reports/需求卡片-架构审查5.1封装修复批-2026-11-03.md(**v1.1**——godot-master 终审七项折入〔golden 封印步改封未揭示相邻格/三 schema 解析冒烟义务/T3 签名补注解/成员账两笔订正/harmful_adjacent 自呼随更名/现值交付口径注/SlotStore→SaveManagerCore 反向私取终审补查 21 处并入 T3〕;5 张 T 卡估时精确汇总 2.875 工作日;零行为变更批,能力清单零新增行已写明判断依据);实现排序在 3.1+3.2 卡之后——该卡已随迭代 50 合回,前置已解除(combat_segment 行号漂移按卡内 grep 锚定位预案处理)。
|
||||
|
||||
**2026-11-03 P2 部分(5.2 文档漂移+5.3 词表+EC8 撤卡,2026-11-04 并 master 后入册)**:5.2 文档漂移归真已落档并合回(architecture.md——HeroLedger 行拆件四件补登记/冻结计数摘除/MetaProgression 补登记行/CurioStop 与 RunLedger 旧指称订正,arch51-docs 提交 63fc3e74+e614773a,文档域闸全绿);**EC8 热重载侧经用户裁决撤卡**——GDD 规格恢复原状(本批一度摘除已撤回)、config_db 门与 reload+编排器两行开门点代码原样保留为将来实装骨架,实装去向=用户另立待办条目+后续实装卡(他会话写卡);5.3 已写卡——凭据=reports/需求卡片-架构审查P2代码面批-2026-11-03.md v1.1(仅 NODE_TYPES 词表单点化,零待裁点,估时 0.25 工作日,排序在 5.1 卡后,消费点行号已按迭代 50 合回后现址换代 :136)。**未闭合余项对账(2026-11-04)**=仅剩 presentation 层私取面约 227 行(另开设计讨论)——闸面缺口、S13 豁免存废、零测试点名三组已随 §4 批(2026-11-03 裁决+闸件落地,见上裁决段)闭合销号。
|
||||
|
||||
**改动面**:文档+游戏代码+工具代码
|
||||
|
||||
**状态**:文档设计中
|
||||
|
||||
Reference in new issue
Block a user