 joywayerandClaude Opus 5
|
0b631a475f
|
docs(shop): 货架 C Task 6 运行时验收 + 权威文档补录 + 计划回填
17 条验收标准 + Task 3 遗留的回读顺序风险全部运行时实测通过(FAILS=0),
无代码改动。发现简报三处脚本不可用并替换/补充:Step 1 阳性对照改用
add_modifier 未知属性守卫;新增 Step 5b 补前序评审「磁盘往返未独立复核」;
Step 6/7 原脚本经排查为空断言,改用真实红/绿对照场景。
numerical_design.md §1.1/§1.2 补录属性购买消耗与 cast_delay_mod 的 soft
约束说明;路线图 E3 第 2 项勾除完成。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 12:19:09 +08:00 |
|
 joywayerandClaude Opus 5
|
cc57980e63
|
docs(plan): Task4 坐标实测订正——商店面板放不下,改用独立子面板
计划里 y=450 起的坐标基于「现有控件止于 y=440」的假设,实测为错:
面板覆盖 y=200–540,现有控件已排到 y≈479,_shop_warn 在 y=502,
panel 内仅余约 18px,而标题+4 行需约 161px。
改用方案 B(独立子面板,照既有 _setup_settings_ui 结构):与项目
「主面板 + 按钮开子面板」的既有模式一致,且零坐标风险。方案 A 撑高面板
后离视口底仅 28px,后续新增控件会再次撞墙。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 11:38:46 +08:00 |
|
 joywayerandClaude Opus 5
|
f9486083e3
|
docs(plan): 订正 Task3 吞血成因——补正提交 900eaea 说明中的失实描述
900eaea 的提交信息照抄了简报里「hp_max 买到 180 后即可复现」的说法,而
Task 3 实测 + 评审独立复现证明该路径不触发:_modifiers 为空时
remove_modifiers_from 提前返回,单次合并的 add_modifier 一步算出最终值,
中间没有可观察的陈旧 hp_max。
真实风险窗口是同进程内二次 apply_run(_modifiers 已有 shop_c 加成时)。
计划里补了三行复现数据与「写回归测试必须用场景 B 前提」的告诫——
按失实说法写的断言恒绿。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 11:34:07 +08:00 |
|
 joywayerandClaude Opus 5
|
68e3edbc7d
|
docs: 订正 pct 合并公式——必须按 combine 分支,inverse 用 1−(1−step)^n
spec §2.4 与计划 Task2 写的 merged = (1+step)^n − 1 只对 hybrid 成立
(AttributeFormula 对 hybrid 用 f=1+v)。inverse 用的是 f=1−v,于是
cast_delay_mod 实际算成 f = 2−1.1^n 而非意图中的 0.9^n:
n=2 应 0.81 实得 0.79;n=7 应 0.478 实得 0.0513
后果是该属性在第 7 次购买就撞 soft 封顶(设计意图约 22 次),
可购买次数砍到 1/3、边际收益曲线整体错误,且零诊断。
评审真机连续购买 7 次坐实。此为 spec 源头错误,非实现偏差。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 11:17:35 +08:00 |
|
joywayer
|
25bdc83c93
|
docs(plan): Task2 Step6 的 git add 补上 player_stats.gd
预检时新增的 Step 0(PlayerStats 通用访问器)改了该文件,但当时没同步更新
Step 6 的提交命令。实现者发现并正确地把它纳入提交。
|
2026-08-03 11:12:17 +08:00 |
|
 joywayerandClaude Opus 5
|
6aeadb84b8
|
fix(shop): PriceFormula 大购买次数溢出静默塌陷为 1;同步计划文档残留类型名
geometric 曲线在 purchased 较大时(如 n=300,base=60 growth=1.15)raw
虽仍是合法有限 double(约 9.7e19),但已超出 int64 安全范围,roundi()
对此行为未定义/环绕,经 maxi(...,1) 静默塌陷成 1——方向与「买得越多越
贵」相反,且零诊断。仅判断 is_finite(raw) 测不出这种情况(double 本身
溢出为 INF 要到 n≈5077 才发生,晚于 int64 溢出很多),故改为
`not is_finite(raw) or raw > 9.0e15` 双重判据,触发时 push_error 并钳
到统一上限,不再依赖具体常数断言(新增用例只断言单调性与「不再塌陷回
归」)。
同时补齐 docs_dev/plans/2026-07-31-shelf-c-attribute-shop.md:64 遗漏的
`PriceFormula.Curve` → `PriceFormula.PriceCurve` 同步(enum 部分先前已
改,返回类型标注漏改),并全仓复核确认无其它残留。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 11:05:51 +08:00 |
|
 joywayerandClaude Opus 5
|
359da9f24f
|
docs: 订正 enum Curve → PriceCurve(与 Godot 内置 Curve 资源类冲突)
Task 1 实现时发现:enum Curve 在 4.7.1 解析期即报
"member Curve shadows a native class"——与引擎内置的 Curve 资源类同名。
实现者做了独立最小复现,确认与 class_name 无关。
spec §2.1 与计划 Task 1 的代码块都写着 enum Curve,若不订正,Task 2 的简报
会从计划里抄到错误的类型名。下游一律用 PriceFormula.PriceCurve。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 10:56:57 +08:00 |
|
 joywayerandClaude Opus 5
|
24948c77f8
|
docs(plan): 预检订正——消除三处硬编码属性名,兑现「加属性零代码」
开工前扫描发现计划初稿违反了它自己的 Global Constraint:ShopManager
_effective_value() 与 combat_s2 的两个辅助各写了一个 match 硬编码四个属性名,
外加 4 个 ATTR_* 的 i18n 键。第 5 个属性加 shop 段后会「UI 生成了行、
但生效值读出 0 且名字是裸 id」——本特性的立身之本直接破功。
改为:PlayerStats 维护 _attr_effective 冷路径视图 + get_attr_value(id)
(热路径仍走裸字段,零开销不受影响);UI 的显示名读 attributes.json 已有的
display_name;ShopManager 暴露 get_attr_def()。三处 match 与 4 个 i18n 键全部删除。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-03 10:52:10 +08:00 |
|
 joywayerandClaude Opus 5
|
e069b76ee1
|
docs(plan): E3-② 货架 C 逐任务实现计划(7 任务 · 含回读顺序吞血风险)
Task0 建分支 / Task1 PriceFormula(TDD,含报错通道断言)/ Task2 shop 段 +
ShopManager 购买与唯一写入点 / Task3 存档 schema 2→3 / Task4 商店 UI +
4 语言 i18n / Task5 设计器 shop 段 / Task6 运行时验收 + 权威文档补录 + 回填。
Task3 写死一条顺序要求:apply_run 目前第一步就 load_save_data 设 hp,而属性
加成若在其后恢复,回读的 hp 会被尚未加成的 hp_max 钳掉——hp_max 可买到 133
之后即可复现静默吞血。Task6 Step6 专门验证该顺序。
自审订正 spec §3 影响文件表:原列 combat_manager「存档读写接入」是想当然,
profile_manager._collect_run_data 本就直接调 ShopManager.get_shop_seed(),
同样可直接调 get_attr_purchases_save(),不必绕一层。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-07-31 16:51:25 +08:00 |
|