From a93e6c0005bae8e99a7728edf35fd5b38f298c65 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Sun, 1 Nov 2026 19:31:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=8D=A1(=E7=8A=B6=E6=80=81=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E7=B4=AF=E5=8A=A0=E5=88=B6=E6=89=B9=C2=B7godot-master?= =?UTF-8?q?=E5=AE=A1=E6=9F=A5=E7=BA=BF=E8=A1=A5=E9=BD=90):=20=E5=BF=85?= =?UTF-8?q?=E6=94=B91+=E6=B3=A85=E8=90=BD=E5=8D=A1=E2=80=94=E2=80=94?= =?UTF-8?q?=E8=A1=A5=E7=AC=AC=E4=B8=89=E5=A4=84refresh=E8=AF=AD=E4=B9=89?= =?UTF-8?q?=E6=96=AD=E8=A8=80=E7=94=B3=E6=8A=A5(damage=5Fcontroller=5Ftest?= =?UTF-8?q?:376=E6=A0=87=E7=AD=BE=E6=8D=A2=E4=BB=A3,=E8=A1=8C=E4=B8=BA?= =?UTF-8?q?=E9=9D=A2=E4=BB=8D=E7=BB=BF)/=E5=B8=83=E5=B0=94=E5=8F=97?= =?UTF-8?q?=E7=90=86=E8=A1=8C=E5=AE=9A=E6=80=A7=E6=94=B9attack=5Fup(accumu?= =?UTF-8?q?late=E8=A1=8C)/=E6=8E=A2=E9=92=88=E5=9B=9B=E6=AE=B5=E5=BC=8F?= =?UTF-8?q?=E6=94=B9=E4=BA=94=E6=AE=B5=E5=BC=8F/=E6=94=B9=E5=90=8D?= =?UTF-8?q?=E8=A1=8C=E5=8F=B7=E6=B8=85=E5=8D=95=E8=A1=A5:159=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E7=82=B9/tres=E4=BF=9D=E6=8C=81CRLF/=E5=AD=A4?= =?UTF-8?q?=E7=AB=8B=E9=AA=8C=E8=AF=81=E4=BA=94=E5=A5=97=E4=BB=B6=E6=89=A9?= =?UTF-8?q?=E5=85=AD(EV=E9=94=9A=E5=A5=97=E4=BB=B6round=5Fflow=E6=8F=90?= =?UTF-8?q?=E5=89=8D=E6=9B=9D=E7=BA=A2);=E5=BC=95=E6=93=8E=E8=AF=AD?= =?UTF-8?q?=E4=B9=89=E6=A0=B8=E9=AA=8C=E9=9B=B6=E9=98=BB=E5=A1=9E(?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=E6=94=B9=E5=86=99=E6=97=A0=E7=BC=9D/S9?= =?UTF-8?q?=E9=9B=B6=E6=96=B0=E9=94=AE/=E5=8A=A0=E8=BD=BD=E6=9C=9Ffail-fas?= =?UTF-8?q?t=E5=B1=9E=E5=AE=9E/=E6=B5=8B=E8=AF=95harness=E5=85=A8=E5=85=BC?= =?UTF-8?q?=E5=AE=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reports/需求卡片-状态合并累加制批-2026-11-01.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/reports/需求卡片-状态合并累加制批-2026-11-01.md b/reports/需求卡片-状态合并累加制批-2026-11-01.md index f138d396..1c99de9d 100644 --- a/reports/需求卡片-状态合并累加制批-2026-11-01.md +++ b/reports/需求卡片-状态合并累加制批-2026-11-01.md @@ -16,7 +16,7 @@ 2. 容器:同名重复授予 → 剩余结算次数加上本次授予的生效时长(`duration_override` ≥1 时加覆盖值);层数恒 1;时长不封顶;空授予面消除(每次授予必有剩余次数变化)。 3. 叠加(stack)与并存(independent)两臂语义零变化;快照纪律不变(首授快照恒定)。 4. 词表换代:schema 词表改 `["stack", "accumulate", "independent"]`,加载期枚举校验随词表生效(fail-fast 不变)。 -5. 既有断言换代两处(见第十一节申报)+新增累加断言三条,全部真实入口、当轮执行并通过。 +5. 既有断言数值换代两处+断言标签/注释文字换代两处(第十一节申报共四条)+新增累加断言三条,全部真实入口、当轮执行并通过。 6. 独立验收审计通过(报告落 `reports/iter-验收审计-<日期>.md`,未过不得合并);反哺点两条落反哺点清单;README 能力行批末只核对名字与实际落地一致;本批不写 `design/` 与根规则文件。 ## 二、设计事实源 @@ -38,8 +38,8 @@ 7. 授予链三路(真实入口全走 `apply_effect` 同口):`game/core/reward_grant.gd:239`(安全格 percent 奖励 → attack_up/ac_up)· `game/core/damage_controller.gd:451`(效果引擎 fx_apply_status)· `game/core/settlement/combat_segment.gd:89`(敌方增益/妨害技施放——:88 `dur = srow.buff_duration`,覆盖时长的真实入口)。 8. AC 读取:`game/core/damage_controller.gd:616–631` `defender_ac` = 基线(hero 表或合流入参)+Σ ac 型 `effective_value`(层数×快照幅度)——无上限钳制;ac_up 层数恒 1 → 阈值=基准+1。v1.3「上限 2 层叠读取法退役」为现状描述句,代码无该读取路径——AC 侧零改动。 9. AC11 采样:`game/tests/unit/battle_settlement/roll_multiplier_test.gd:241` 起 `_ac11_tier_samples` 每轮衰减后重授——实例已移除、重授为新建,不触合并臂——累加制下行为与断言不变。 -10. 断言换代点:`roll_multiplier_test.gd:158–161`(削弱重复授予 remaining==2 重置语义断言与 :157–158 注释)+ :221–236 `_weaken_refresh_probe`(:230 重授注释「remaining ← 2」;:342 注释引用该探针名——改名随批换代);`game/tests/unit/data_config/table_structure_guard_test.gd:273–275`(ac_up 行断言 `stack_policy == "refresh"`)。 -11. 不受影响断言:`damage_controller_test.gd:391`(stack 行过滤)· `seal_polarity_test.gd:684`(sapped=="stack")· `system_contracts_test.gd:_test_status_boolean_acceptance`(布尔受理——stack 行)。 +10. 断言换代点:`roll_multiplier_test.gd:158–161`(削弱重复授予 remaining==2 重置语义断言与 :157–158 注释)+ :221–236 `_weaken_refresh_probe`(:230 重授注释「remaining ← 2」;:159 调用点与 :342 注释引用该探针名——改名随批换代);`game/tests/unit/data_config/table_structure_guard_test.gd:273–275`(ac_up 行断言 `stack_policy == "refresh"`);`game/tests/unit/battle_settlement/damage_controller_test.gd:376`(断言标签「refresh 政策重复授予受理且层数恒 1」——行为面累加制下仍绿〔层数恒 1、池值不变〕,仅标签文字换代)。 +11. 不受影响断言:`damage_controller_test.gd:391`(stack 行过滤)· `seal_polarity_test.gd:684`(sapped=="stack")· `system_contracts_test.gd:_test_status_boolean_acceptance`(布尔受理——attack_up 行,refresh→accumulate 行;单次授予不触合并臂)。 12. sim/probe 零消费:`stack_policy`/`apply_effect` 于 `game/sim`、`game/probe` grep 零命中;状态实例不落存档断点(战斗域生命周期——`notify_battle_start` 清空,`game/core/breakpoint_store.gd` 无状态片段)。 13. EV 锚:战斗结算域 EV 抽样对锚(goblin 锚)读战斗真实结算——合并语义改变重复授予的削弱/增益存续时长,EV 有漂移可能(先例:触发器批 git 提交 4868e11b 触发重锚 ba5105aa 归绿)。 14. S13 基线:status_container/status_effect_table/damage_controller 均不在 `tools/gdstyle_baseline.txt`(默认阈值内);tests 不在 S13 扫描面。 @@ -83,7 +83,7 @@ ## 八、落位与可复用性预检 - **复用面**:零新增文件、零新增函数、零新增数据件——累加臂就地替换 refresh 臂(`_apply_refresh` 改名 `_apply_accumulate`),词表与表行就地换代;合并逻辑唯一落点=容器策略 match(C1/C6),无第二处可复用或需新建的合并实现。 -- **唯一面**:`stack_policy` 词表唯一出处=schema :11;取值**定义面**全仓 grep 仅存于 tres 六行+schema 词表+容器臂+两处断言(第三节 1/2/3/10)——叙事批注与测试注释例外(第三节 15/10 在案),不属定义面。 +- **唯一面**:`stack_policy` 词表唯一出处=schema :11;取值**定义面**全仓 grep 仅存于 tres 六行+schema 词表+容器臂+三处断言(第三节 1/2/3/10)——叙事批注与测试注释例外(第三节 15/10 在案),不属定义面。 - **分层与交互面**:表行(data/tables)→ schema 校验(data/schemas,加载期致命)→ 容器臂(core)→ 消费面(defender_ac 与池乘区——零改动)。Core 零 UI、数值单点经 ConfigDB、RNG 零新增——既有红线零触碰。 ## 九、实现规范预算 @@ -101,13 +101,13 @@ **T1 累加制单点实装(0.5~0.75 天)** -- [ ] status_effects.tres:六行 `stack_policy` "refresh"→"accumulate"(:14/:23/:32/:68/:77/:86)——可核查:grep '"stack_policy": "refresh"' 零命中(值行限定写法——:129/:139 恢复批注含同词、不属值行,禁触碰)、"accumulate" 恰六处 +- [ ] status_effects.tres:六行 `stack_policy` "refresh"→"accumulate"(:14/:23/:32/:68/:77/:86;保持既有 CRLF 行尾)——可核查:grep '"stack_policy": "refresh"' 零命中(值行限定写法——:129/:139 恢复批注含同词、不属值行,禁触碰)、"accumulate" 恰六处 - [ ] status_effect_table.gd:11:`STACK_POLICIES` 换代 `["stack", "accumulate", "independent"]`——可核查:加载链全表装载零红(枚举校验随词表生效) - [ ] status_container.gd::44–45 match 臂 "refresh"→"accumulate";`_apply_refresh` 改名 `_apply_accumulate`——命中 `inst.remaining = int(inst.remaining) + dur`、未命中追加、恒 true;:60 注释换代(累加语义——R += D;L 不变;快照沿首授)——可核查:容器内 stack_policy 语境 "refresh" 零残留 -- [ ] roll_multiplier_test.gd:③段 :157–158 注释与 :160–161 断言换代(重置 2 → 累加 3);`_weaken_refresh_probe` 改名 `_weaken_accumulate_probe`(:342 引用注释随改),探针改四段式——授予(2)→衰减(1)→重授(1+2=3,V1)→覆盖值重授(3+3=6,V3)→同轮再授(6+2=8,V2);返回 {layers, pool, after_regrant, after_override, after_extra, snap_magnitude} 六读数(pool 键保留——:163 池读数断言零改动在位) +- [ ] roll_multiplier_test.gd:③段 :157–158 注释与 :160–161 断言换代(重置 2 → 累加 3);`_weaken_refresh_probe` 改名 `_weaken_accumulate_probe`(:159 调用点与 :342 引用注释随改),探针改五段式——授予(2)→衰减(1)→重授(1+2=3,V1)→覆盖值重授(3+3=6,V3)→同轮再授(6+2=8,V2);返回 {layers, pool, after_regrant, after_override, after_extra, snap_magnitude} 六读数(pool 键保留——:163 池读数断言零改动在位) - [ ] 新增断言三条(尾缀〔状态累加 V1/V2/V3〕):V1=重授后 remaining==3、layers==1、snap_magnitude==−65(首授快照恒定);V3=覆盖值累加后 remaining==6;V2=同轮再授后 remaining==8 - [ ] table_structure_guard_test.gd:273–275:ac_up 行断言 `stack_policy == "accumulate"`+消息换代(累加语义句)——可核查:断言尾缀〔状态累加 V4〕可 grep、套件绿 -- [ ] 孤立验证:五套件最窄复跑(roll_multiplier/table_structure_guard/system_contracts/damage_controller/seal_polarity)全绿、断言尾缀可 grep +- [ ] 孤立验证:六套件最窄复跑(roll_multiplier/table_structure_guard/system_contracts/damage_controller/seal_polarity/round_flow_skill_pool——EV 锚套件提前曝红)全绿或按 L3②停机、断言尾缀可 grep **T2 产出物落位(0.25 天)** @@ -132,6 +132,7 @@ 1. roll_multiplier_test.gd:160–161 削弱续时断言——refresh 重置语义(remaining==2)作废,换代为累加语义(remaining==3)——被测行为就是本批改动本体。 2. roll_multiplier_test.gd:157–158 注释、:230 探针注释与 :342 探针名引用注释换代(「续时:remaining ← 2」→累加口径;旧函数名 `_weaken_refresh_probe` 全仓清零)。 3. table_structure_guard_test.gd:274–275 ac_up 行断言值与消息换代(refresh→accumulate)——同上。 +4. damage_controller_test.gd:376 断言标签「refresh 政策重复授予受理且层数恒 1(叠层改续时裁决)——池值不变」——行为面累加制下仍绿(层数恒 1、池值不变,断言数值零改动),仅标签文字换代为累加口径。 ## 十二、异常分级