修复(CI追绿·迭代50收尾): run29两闸红因三处——①roadmap下一步「2026-11-03 新条」措辞触发gdd_lint R3正文修订注记,改「在册」去日期式叙述 ②能力行敌方增益自体落点代表用例名实断裂(_test_enemy_buff_targets_self→_smoke_enemy_buff_targets_self,实况=实现侧_smoke定名,iter50批末核对漏检此行,卡片退役后卡在通道消失即暴露) ③capability_audit真实入口锚面结构性缺口——入口宿主在game/sim/(battle_driver/auto_player)而扫描面排除sim,卡片退役后无持久锚即红; 锚面扩入sim测量件(判据面有意放宽:被锚入口本在库内,补的是卡片死后的持久锚通道,非放水),头注与报错文案同步; 本地复核gdd_lint 0不通过+capability_audit strict红项0

This commit is contained in:
DKChan committed 2026-11-03 20:00:06 +08:00
1 parent 276252fc5d
commit 6add37b68c
3 files changed
+8 -6

No files matched your search

+1 -1
View File
@@ -183,7 +183,7 @@ tests/
| 同名状态合并策略(叠加/累加/并存)与剩余次数语义 | 战斗循环×增益状态 | `StatusContainer.apply_effect()`(编排宿主 begin_battle 链) | `roll_multiplier_test.gd:_smoke_armor_roll` |
| 状态效果结算链(逐值衰减/到期移除/战斗结束全清/满层拒绝/独立并存/首授快照) | 增益状态 | `StatusContainer.apply_effect()`/`decay_round()`/`notify_battle_end()` | `system_contracts_test.gd:_test_status_decay_and_clear`;`system_contracts_test.gd:_test_status_stack_full_reject`;`system_contracts_test.gd:_test_status_independent_branch`;`system_contracts_test.gd:_test_status_snapshot_first_grant` |
| 状态实例按个体归属:个体隔离/全体授予逐体发/死亡即清/同体合并照旧 | 增益状态 | `StatusContainer.apply_effect()`(个体键)/`purge_owner()` | `system_contracts_test.gd:_test_status_individual_isolation`;`system_contracts_test.gd:_test_status_grant_all_per_unit`;`system_contracts_test.gd:_test_status_death_clears`;`system_contracts_test.gd:_test_status_merge_per_unit` |
| 敌方增益自体落点与乘区池按个体 | 敌人系统×战斗结算×增益状态 | 技能兑付编排链/`DamageController.clamped_pool()` | `round_flow_skill_pool_test.gd:_test_enemy_buff_targets_self`;`damage_controller_test.gd:_test_pool_consumption_per_unit`;`damage_controller_test.gd:_test_defender_ac_per_unit`;`battle_narrator_test.gd:_test_snapshot_effects_per_unit` |
| 敌方增益自体落点与乘区池按个体 | 敌人系统×战斗结算×增益状态 | 技能兑付编排链/`DamageController.clamped_pool()` | `round_flow_skill_pool_test.gd:_smoke_enemy_buff_targets_self`;`damage_controller_test.gd:_test_pool_consumption_per_unit`;`damage_controller_test.gd:_test_defender_ac_per_unit`;`battle_narrator_test.gd:_test_snapshot_effects_per_unit` |
| 敌人技能池跨表链接校验 | 数据配置×敌人系统 | `ConfigDbCrossValidator.validate_skill_pool_links()` | `config_db_cross_validator_test.gd:_test_all_links_valid`;`config_db_cross_validator_test.gd:_test_dangling_skill_id`;`config_db_cross_validator_test.gd:_test_cast_side_mismatch` |
**覆盖域表**(`design/gdd/systems/` 逐篇对照——状态三档:已覆盖/部分覆盖/未覆盖;部分与未覆盖行的缺口指待办清单条目,覆盖面提升时同批改本表):
+1 -1
View File
@@ -6,7 +6,7 @@
- **阶段**:M3——Alpha 版本的完整实现(2026-10-09 立规:未明令宣布完成前停留 M3,迭代只排 M3 需求,M4 不排期;根目录 stage.txt 为旧阶段开关仅存档)。
- **迭代位**:迭代 1–50 全部已完成——迭代 50(敌方状态个体化+断言补齐+架构审查 3.1+3.2 整改三卡)2026-11-03 合回(合并提交 8d3a12ec,独立验收审计两轮终判通过〔首轮缺漏三条→整改笔 6cb1cf5e→复验通过〕),批后收尾闭合(2026-11-03):反哺点十条处置闭合(增益状态 v1.6 删「实装随该批」过时行/architecture v1.32 排雷规则件 preview_reveal 只读预览口登记+天赋树 tree_rules 参数字典 API 换代/奇物 v1.5 cap 必填与取值域写入/覆盖域表减动效行翻已覆盖;SPAWN_AREA_CELLS、shop.spend_discount 表字段、battle_driver 签名三处零登记零落点,天赋树 v0.12 等五份与术语表零反哺确认)、实机目检五项登记体验验证清单 ㊿〔实现报告原编㊾与 CI 迁远端批撞号,改用㊿〕、MC 锚代表性注记落 sim-data/README(重跑归一档用户发起)、产出物退役六件(三需求卡片+反哺点+实现报告+验收审计——吸收即死+证据只留最新)、待办清单三卡条目整条删除(架构审查余项〔审计待裁点④⑤⑥⑦〕按未决先迁再死另立新条登记)。迭代 49 收尾记录见 git 提交 aa396eb9,迭代 48 见 bd54d1f4。
- **下一步**:迭代 51 编排待发令(`/iter-plan`)。待编池:架构审查余项(闸面缺口/豁免存废/零测试点名/架构文档漂移——待办清单 2026-11-03 新条,待讨论段逐项裁决)、冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。
- **下一步**:迭代 51 编排待发令(`/iter-plan`)。待编池:架构审查余项(闸面缺口/豁免存废/零测试点名/架构文档漂移——待办清单在册,待讨论段逐项裁决)、冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。
## 里程碑时间线
+6 -4
View File
@@ -10,8 +10,8 @@ r"""capability_audit.py — 能力清单、覆盖域表与 GDD 纯度机检(
manifest 内且该文件有 `func 函数名(`,或该文件是 game/probe/ 下的探针件且件内有 `func 函数名(`——
探针不进 run_all manifest,单独认探针面)或卡在(该文件名或函数名能在 reports/需求卡片*.md 中找到,
供写卡时当场入表的计划用例锚定);两头都无=红(清单挂了无凭证义务)。
E 真实入口可核(双通道):能力行「真实入口」的每个 `类.方法()`——产品码(game/ 除 tests//probe//sim/)
有 `func 方法(`,或该方法名能在 reports/需求卡片*.md 中找到(计划入口同 D 口径);两头都无=红。
E 真实入口可核(双通道):能力行「真实入口」的每个 `类.方法()`——产品码+sim 测量件(game/ 除
tests//probe/)有 `func 方法(`,或该方法名能在 reports/需求卡片*.md 中找到(计划入口同 D 口径);两头都无=红。
F 覆盖域表:systems 每篇一行;状态∈{已覆盖,部分覆盖,未覆盖};非未覆盖行的「能力行」非空且每项都能
对上能力表里的行名;部分/未覆盖行的缺口非空且指待办清单。
条件闸行豁免(代表用例含「条件闸」字样)不参与 D/E。
@@ -121,10 +121,12 @@ def manifest():
def product_funcs():
# 「代码在」锚面=产品码(game/ 除 tests//probe/)+sim 测量件:调参测量与模拟驱动件
# (battle_driver/auto_player 等)是合法的真实入口宿主,卡片退役后其入口只能锚代码面。
names = set()
for p in (REPO / "game").rglob("*.gd"):
rel = p.relative_to(REPO).as_posix()
if rel.startswith(("game/tests/", "game/probe/", "game/sim/")):
if rel.startswith(("game/tests/", "game/probe/")):
continue
names.update(re.findall(r"^(?:static\s+)?func\s+([A-Za-z_]\w*)\s*\(", read(p), re.M))
return names
@@ -251,7 +253,7 @@ def check_entry(no, name, cell, funcs, cards):
for _, method in tokens:
if method not in funcs and not (cards and method in cards):
red(README.relative_to(REPO), no, "真实入口",
"「%s」方法 %s() 无凭证——产品码无定义且需求卡片未载" % (name[:16], method))
"「%s」方法 %s() 无凭证——产品码与 sim 测量件无定义且需求卡片未载" % (name[:16], method))
def check_coverage(cov_tables, names):