merge: 垂直切片转正——工程目录迁为 game/(用户拍板 2026-09-24,台账 150;冲突解决=并行伤害管线批 damage_controller 按其内容落 game/ 新路径,旧路径入树经重命名追踪归一)

This commit is contained in:
DKChan committed 2026-09-24 04:06:19 +08:00
commit 6cfeae021c
222 files changed
+66 -63

No files matched your search

+1 -1
View File
@@ -30,7 +30,7 @@
- `design/archive/gdd-2026-09-14/` — 旧版 GDD 归档(只读参考,不作事实引用)
- `design/registry/` — 跨系统事实登记(术语规范名、已锁数值)
- `production/` — stage、session-state、roadmap、gate-checks、qa
- `prototypes/dungeon-sweeper-vertical-slice/` — 垂直切片(概念 demo 已删,验证报告留档 `docs/prototype-report-minesweeper-battle-concept.md`)
- `game/` — 游戏工程本体(垂直切片转正 2026-09-24 结构批;概念 demo 已删,验证报告留档 `docs/prototype-report-minesweeper-battle-concept.md`)
- `docs/` — 规范与参考文档(权威清单见下方导航)
## 规范导航(动手前先查表)
+1 -1
View File
@@ -2,7 +2,7 @@
一句话定位:**三关、按关配置的棋盘、一套格面资源池、一套状态表、一套商店配置**——刚好撑起一次完整的"扫雷决策 → 战斗兑现"循环,除此之外一律不做。
> **体例说明(2026-09-17 数值纪律收口批)**:本文件只写内容规模的结构框架——几个维度、各分几档、扩展走什么流程。具体种数、行数与幅度数值一律不在此抄录,事实源为准:数据表读 `prototypes/dungeon-sweeper-vertical-slice/data/tables/*.tres`,实体登记读 `design/registry/entities.yaml`;现行行数与面值以表和 registry 为准。
> **体例说明(2026-09-17 数值纪律收口批)**:本文件只写内容规模的结构框架——几个维度、各分几档、扩展走什么流程。具体种数、行数与幅度数值一律不在此抄录,事实源为准:数据表读 `game/data/tables/*.tres`,实体登记读 `design/registry/entities.yaml`;现行行数与面值以表和 registry 为准。
## 关卡
@@ -230,7 +230,7 @@ Boss 战的棋盘用本关最大板形(板形行值读棋盘参数表),板
## 调参表
本系统是全项目行值最多的系统。数值纪律(2026-09-17 降级批定稿):**正文与调参表只定规则、取值域与口径,具体行值一律读配置表(切片 `prototypes/dungeon-sweeper-vertical-slice/data/tables/` 的 enemy / skills / hero / board_gen / reward / settlement / status_effects 等),已锁数值以 [registry 的对应条目](../../../registry/entities.yaml) 为准,本文不登记具体数值——防双写失同步**(切片 `.tres` 数值压缩批后文档行值滞后,双写失同步已被实证)。
本系统是全项目行值最多的系统。数值纪律(2026-09-17 降级批定稿):**正文与调参表只定规则、取值域与口径,具体行值一律读配置表(切片 `game/data/tables/` 的 enemy / skills / hero / board_gen / reward / settlement / status_effects 等),已锁数值以 [registry 的对应条目](../../../registry/entities.yaml) 为准,本文不登记具体数值——防双写失同步**(切片 `.tres` 数值压缩批后文档行值滞后,双写失同步已被实证)。
首发行值几乎全部 provisional,其中加难相关数值处于 provisional-pending-scan(扫描未执行);完整行集读表,不在此整表搬运。
@@ -79,9 +79,9 @@
清图槽(clear_default 池,clear_blast)独立于格面资源——作用域为整张板,不挂任何一格。
引用(代码事实源):
- `prototypes/dungeon-sweeper-vertical-slice/core/reward_economy.gd#roll_board`:`_rollable_rows()` 第 207-213 行收 `pool_tag=cell & polarity=positive & weight>0` 全集;循环第 65-67 行对 `eligible` 清单(全部非封锁格)一视同仁。
- `prototypes/dungeon-sweeper-vertical-slice/core/minesweeper_rules.gd#_do_dig` 第 256-264 行:chain/dig 通道 `cell_revealed` 事件 `resource=true` 字段对安全格与雷格一致——注释明确"安全格与雷格一视同仁(雷格亦携带,负向兑付归 战斗结算 极性路由)"。
- `prototypes/dungeon-sweeper-vertical-slice/data/tables/reward.tres`:9 行正向行 weight 现行值读 `data/tables/reward.tres`。
- `game/core/reward_economy.gd#roll_board`:`_rollable_rows()` 第 207-213 行收 `pool_tag=cell & polarity=positive & weight>0` 全集;循环第 65-67 行对 `eligible` 清单(全部非封锁格)一视同仁。
- `game/core/minesweeper_rules.gd#_do_dig` 第 256-264 行:chain/dig 通道 `cell_revealed` 事件 `resource=true` 字段对安全格与雷格一致——注释明确"安全格与雷格一视同仁(雷格亦携带,负向兑付归 战斗结算 极性路由)"。
- `game/data/tables/reward.tres`:9 行正向行 weight 现行值读 `data/tables/reward.tres`。
候选集合具体行值(power / power_min / power_max / stacks / effect_id)随行更新——以 `data/tables/reward.tres` 为现行值源;GDD 表格只锁行集与权重分布语义。负向 9 行(enrage / off_guard / heal_backlash / enemy_alert / ap_drain / sapped / pierce_snare / magic_recoil / gp_loss——2026-09-20 八型批 ambush_double→enemy_alert 换装 + ap_drain 新增、同日 GP+商店房批 +gp_loss)weight=0 不参与摇号,按(类型, 极性)查表取用,不在候选集合内。
@@ -216,7 +216,7 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(现行:酋
## 调参表
配置表共三张。数值纪律(2026-09-17 降级批定稿):**本文只锁字段、取值域与规则,行值一律读配置表(切片 `prototypes/dungeon-sweeper-vertical-slice/data/tables/` 的 enemy / skills / hero 表)与 [registry 的 enemy / hero / skill 条目](../../../registry/entities.yaml),不在本文登记具体数值——防双写失同步**;曲线调参所有权归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)。
配置表共三张。数值纪律(2026-09-17 降级批定稿):**本文只锁字段、取值域与规则,行值一律读配置表(切片 `game/data/tables/` 的 enemy / skills / hero 表)与 [registry 的 enemy / hero / skill 条目](../../../registry/entities.yaml),不在本文登记具体数值——防双写失同步**;曲线调参所有权归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)。
敌人表(按关卡坐标存放,每坐标行集恰一敌种):
@@ -46,7 +46,7 @@
### 挖、插旗、移动:每个动作怎么才算合法
玩家对棋盘只做三件事:挖未开格、插旗,以及移动小人(玩家摆在棋盘上的探险者棋子)。前两个是付费动作,按标准动作价计费(价目见 `prototypes/dungeon-sweeper-vertical-slice/data/tables/action_economy.tres`;每轮的决策预算,账本归[行动经济](行动经济.md));本文只管棋盘面这一半,总纲只有一条:付费动作只能作用于小人周围一圈 8 格(8 向相邻)之内。
玩家对棋盘只做三件事:挖未开格、插旗,以及移动小人(玩家摆在棋盘上的探险者棋子)。前两个是付费动作,按标准动作价计费(价目见 `game/data/tables/action_economy.tres`;每轮的决策预算,账本归[行动经济](行动经济.md));本文只管棋盘面这一半,总纲只有一条:付费动作只能作用于小人周围一圈 8 格(8 向相邻)之内。
移动不花行动点:点任何已开格,小人沿已探明区一次走到位,"已探明区"包括踩过的雷格残址。点击已开格的唯一含义就是移动——本作没有经典扫雷里"双击数字格一键翻开周围"的 chord(双击快开),每一格的兑现都必须花行动点。
@@ -6,7 +6,7 @@
## 设计目的
每场战斗里,玩家真正在花的钱只有一种:行动点(AP)。行动经济就是这本账——每轮发给你固定的行动点,挖格、插旗按统一价目计费(价目见 `prototypes/dungeon-sweeper-vertical-slice/data/tables/action_economy.tres`),花完这一轮就结束了。没有这本账,"挖这一格值不值"就没有统一的价格语言。
每场战斗里,玩家真正在花的钱只有一种:行动点(AP)。行动经济就是这本账——每轮发给你固定的行动点,挖格、插旗按统一价目计费(价目见 `game/data/tables/action_economy.tres`),花完这一轮就结束了。没有这本账,"挖这一格值不值"就没有统一的价格语言。
它还要给"我不想赌了"一个体面的出口:主动停手能把剩余行动点 1:1 存进储备池,攒够了可以当场换掉整张雷图。推理本身不收钱——连锁展开免费——花钱的只是"兑现"这个动作。
@@ -180,7 +180,7 @@
配置表为单行全局表;已锁数值以 [registry 的 action_economy 条目](../../../registry/entities.yaml) 为准。
| 参数 | 域 | 现行值(统一见 `prototypes/dungeon-sweeper-vertical-slice/data/tables/action_economy.tres`) | 说明 |
| 参数 | 域 | 现行值(统一见 `game/data/tables/action_economy.tres`) | 说明 |
|---|---|---|---|
| ap_per_round | int [1, 32] | 表值 | 每轮行动点;兼作停手转存的规模旋钮 |
| dig_ap_cost | int [1, 8] | 表值 | 挖单格成本(下限 1:为 0 则预算系统失效) |
@@ -3,7 +3,7 @@
**日期**:2026-09-19
**性质**:只读对账作业——履行 06 待办「清图支配性保守地板缺口」的对账义务(用户指令:从难度曲线调参批提前执行)。本报告不动任何数值;调参建议仅呈报,拍板归用户。
**判式权威**:[registry entities.yaml `clause5_dominance`](../registry/entities.yaml)(挖穿残余池计价,模型本体不变)
**配套工具**:`tools/clear_dominance_audit.py`(重算器,判式全参数可配——难度曲线调参批的常设重跑入口)+ `prototypes/.../smoke/board_stat_probe.gd`(实测板形统计探针)
**配套工具**:`tools/clear_dominance_audit.py`(重算器,判式全参数可配——难度曲线调参批的常设重跑入口)+ `game/smoke/board_stat_probe.gd`(实测板形统计探针)
**归属**:[难度曲线与Boss](../gdd/systems/冒险循环/难度曲线与Boss.md)(裁决方)× [地图战斗资源](../gdd/systems/战斗循环/地图战斗资源.md)(清图奖励供给方)× [行动经济](../gdd/systems/排雷循环/行动经济.md)(契约本体)× [战斗结算](../gdd/systems/战斗循环/战斗结算.md)(对账责任方)
---
@@ -140,11 +140,11 @@
| 文件 | 动作 | 内容 |
|---|---|---|
| `prototypes/dungeon-sweeper-vertical-slice/data/tables/shop.tres` | 新建 | 商品三行(属性键 / 档位 flat 值 / 首价 / 递增步长 / 刷新费 / 单店刷新限次);行值 provisional 归难度曲线 |
| `prototypes/dungeon-sweeper-vertical-slice/data/schemas/shop_table.gd` | 新建 | schema + 校验(商品属性键 ∈ {atk, max_hp, armor_class};价格域 [1,999];刷新限次域) |
| `prototypes/dungeon-sweeper-vertical-slice/data/tables/level.tres` | 修改 | L2 行集 +1 商店房节点(中段插位、连线 rewiring、六检全绿);L1 零改动 |
| `prototypes/dungeon-sweeper-vertical-slice/data/schemas/level_table.gd` | 修改 | type 词表 {battle, boss, reward, rest} +shop |
| `prototypes/dungeon-sweeper-vertical-slice/data/tables/reward.tres`、`data/schemas/reward_table.gd` | 〔条件〕零改动(推荐)/ 九型扩两行 + 词表(备选) | 推荐方案下本批不碰格面池 |
| `game/data/tables/shop.tres` | 新建 | 商品三行(属性键 / 档位 flat 值 / 首价 / 递增步长 / 刷新费 / 单店刷新限次);行值 provisional 归难度曲线 |
| `game/data/schemas/shop_table.gd` | 新建 | schema + 校验(商品属性键 ∈ {atk, max_hp, armor_class};价格域 [1,999];刷新限次域) |
| `game/data/tables/level.tres` | 修改 | L2 行集 +1 商店房节点(中段插位、连线 rewiring、六检全绿);L1 零改动 |
| `game/data/schemas/level_table.gd` | 修改 | type 词表 {battle, boss, reward, rest} +shop |
| `game/data/tables/reward.tres`、`data/schemas/reward_table.gd` | 〔条件〕零改动(推荐)/ 九型扩两行 + 词表(备选) | 推荐方案下本批不碰格面池 |
### B 集:切片代码(互斥文件集 B)
@@ -177,7 +177,7 @@
| 文件 | 动作 | 内容 |
|---|---|---|
| `prototypes/dungeon-sweeper-vertical-slice/smoke/smoke_all.gd` | 修改 | 新断言组:GP 入账恰一次/战(普通 2 / Boss 5);购买扣费与覆盖值生效(买攻后攻击合计读数);购血上限与当前生命同步;刷新限次被拒;GP 冒险末清零;L2 图六检全绿含商店房 |
| `game/smoke/smoke_all.gd` | 修改 | 新断言组:GP 入账恰一次/战(普通 2 / Boss 5);购买扣费与覆盖值生效(买攻后攻击合计读数);购血上限与当前生命同步;刷新限次被拒;GP 冒险末清零;L2 图六检全绿含商店房 |
| `smoke/level_autoplay.gd` | 修改 | 商店房遍历(进店-购买-离开路径的自动玩家支持 + 贪心购买画像) |
| `smoke/level_monte_carlo.gd` | 修改 | shop 开关参数(off/on 双格)+ 确定性购买画像;分层读数列(通关率按 shop 态分列) |
| `production/qa/mc-shop-baseline-2026-09-XX.md` | 新建 | 分层基线报告(N、画像、双格对照,对齐 mc-reinvest-baseline 口径) |
@@ -28,7 +28,7 @@
### 2.1 A1:reward 表 11 行逐行行值
事实源 = `prototypes/dungeon-sweeper-vertical-slice/data/tables/reward.tres`(行号指该文件):
事实源 = `game/data/tables/reward.tres`(行号指该文件):
| # | reward_id | cell_type | polarity | power | power_min/max | weight | stacks | effect_id | display_name | pool_tag | tier |
|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -298,22 +298,22 @@ v0.6 先例用「零改动」避开连带(`reward.tres:134`);v0.7 先例
| 文件(§3 清单) | 本报告引用的关键行 |
|---|---|
| `prototypes/dungeon-sweeper-vertical-slice/core/reward_economy.gd` | 6, 36-81(roll_board), 62-67, 70-77, 165-172(polarity_row), 177-190(equivalence_supply/tier_min_buff), 184, 195-213(weighted_pick/_rollable_rows) |
| `prototypes/dungeon-sweeper-vertical-slice/core/minesweeper_rules.gd` | 10(信号), 100-103(initial 通道), 124-137(不变式), 236-274(_do_dig), 258-259, 262-271(resource 通道) |
| `prototypes/dungeon-sweeper-vertical-slice/core/board_data.gd` | 14(variants), 15(biome), 81-86(safe_cells), 90-103(compute_r0) |
| `prototypes/dungeon-sweeper-vertical-slice/core/battle_orchestrator.gd` | 75, 131-161(_install_new_board/roll_board 调用), 166-178(facts 缓冲), 200-260(授予段/极性路由), 253-260, 264-269 |
| `prototypes/dungeon-sweeper-vertical-slice/data/schemas/reward_table.gd` | 13-16(枚举), 53-59(weight/stacks 域), 57, 70-84(区间/中点锚), 86-102(字典完整性/池护栏) |
| `prototypes/dungeon-sweeper-vertical-slice/data/tables/reward.tres` | #7-122(11 行), 124-145(注释段:同池声明 125 / 频次 126 / 换装 133-135 / 压缩批 137-145) |
| `prototypes/dungeon-sweeper-vertical-slice/data/tables/status_effects.tres` | #7-88(九行), 90-113(批注:减伤墙/换装/技能池/压缩) |
| `prototypes/dungeon-sweeper-vertical-slice/data/tables/board_gen.tres` | #7-139(12 行板参数), 141-154(调参登记) |
| `prototypes/dungeon-sweeper-vertical-slice/data/tables/action_economy.tres` | 7-14(行值), 16-23(AP 压速批注——差异化前提注记 18-19) |
| `prototypes/dungeon-sweeper-vertical-slice/smoke/reward_expectation.gd` | 4, 9, 21-72(频次实测/口径注——过期基准 4,71-72) |
| `prototypes/dungeon-sweeper-vertical-slice/smoke/monte_carlo.gd` | 8, 28, 54-68(读数口径) |
| `prototypes/dungeon-sweeper-vertical-slice/smoke/experiment_density.gd` | 59-69(FakeDB——零 reward 耦合) |
| `prototypes/dungeon-sweeper-vertical-slice/smoke/level_monte_carlo.gd` | 45-48, 100-109(带口径/完美档断言) |
| `prototypes/dungeon-sweeper-vertical-slice/smoke/level_autoplay.gd` | 18-21, 85-89(mine_hits 埋点), 122-191(双策略档驱动) |
| `prototypes/dungeon-sweeper-vertical-slice/smoke/smoke_all.gd` | 91, 1244-1321(负向字典直验——1255-1256, 1284), 1326-1367(资源面断言——1347,1349,1365-1367) |
| `prototypes/dungeon-sweeper-vertical-slice/smoke/auto_player.gd` | 7(同种子回放等价性), 31-48(完美策略档) |
| `game/core/reward_economy.gd` | 6, 36-81(roll_board), 62-67, 70-77, 165-172(polarity_row), 177-190(equivalence_supply/tier_min_buff), 184, 195-213(weighted_pick/_rollable_rows) |
| `game/core/minesweeper_rules.gd` | 10(信号), 100-103(initial 通道), 124-137(不变式), 236-274(_do_dig), 258-259, 262-271(resource 通道) |
| `game/core/board_data.gd` | 14(variants), 15(biome), 81-86(safe_cells), 90-103(compute_r0) |
| `game/core/battle_orchestrator.gd` | 75, 131-161(_install_new_board/roll_board 调用), 166-178(facts 缓冲), 200-260(授予段/极性路由), 253-260, 264-269 |
| `game/data/schemas/reward_table.gd` | 13-16(枚举), 53-59(weight/stacks 域), 57, 70-84(区间/中点锚), 86-102(字典完整性/池护栏) |
| `game/data/tables/reward.tres` | #7-122(11 行), 124-145(注释段:同池声明 125 / 频次 126 / 换装 133-135 / 压缩批 137-145) |
| `game/data/tables/status_effects.tres` | #7-88(九行), 90-113(批注:减伤墙/换装/技能池/压缩) |
| `game/data/tables/board_gen.tres` | #7-139(12 行板参数), 141-154(调参登记) |
| `game/data/tables/action_economy.tres` | 7-14(行值), 16-23(AP 压速批注——差异化前提注记 18-19) |
| `game/smoke/reward_expectation.gd` | 4, 9, 21-72(频次实测/口径注——过期基准 4,71-72) |
| `game/smoke/monte_carlo.gd` | 8, 28, 54-68(读数口径) |
| `game/smoke/experiment_density.gd` | 59-69(FakeDB——零 reward 耦合) |
| `game/smoke/level_monte_carlo.gd` | 45-48, 100-109(带口径/完美档断言) |
| `game/smoke/level_autoplay.gd` | 18-21, 85-89(mine_hits 埋点), 122-191(双策略档驱动) |
| `game/smoke/smoke_all.gd` | 91, 1244-1321(负向字典直验——1255-1256, 1284), 1326-1367(资源面断言——1347,1349,1365-1367) |
| `game/smoke/auto_player.gd` | 7(同种子回放等价性), 31-48(完美策略档) |
| `design/gdd/systems/战斗循环/地图战斗资源.md` | 9, 52-61(摇号纪律——61 雷安同池行), 70-88(候选集合), 90-100(极性矩阵), 104-118(五型字典), 122-124(负向即时), 128-141(清图), 153, 157, 187, 191-205(调参表指路化), **207(结构冻结七项)**, 209-217(验收标准——212), 225-234(版本历史 v0.4-v0.8) |
| `design/gdd/systems/战斗循环/战斗结算.md` | 103(对账唯一责任方), 124(极性路由兑付), 142(伏击溢出), 146(标错类型化), 180(奖励定义分离) |
| `design/gdd/systems/战斗循环/增益状态.md` | 132, 138(九行), 154-161(状态行表), 163(四池对称), 165(当量锚), 214-221(调参表) |
+2 -2
View File
@@ -18,7 +18,7 @@
| # | 条件 | 判据 |
|---|---|---|
| 1 | AC 批 smoke 全绿 | `smoke_all.gd` 零失败(AC 批会话交付后执行) |
| 2 | 日志分析器可用 | `prototypes/dungeon-sweeper-vertical-slice/tools/log_analysis.py` 可运行;对 AC 落批日志能激活掷点面(FIELD_CANDIDATES 命中,或按其数据质量观测面补一行字段适配) |
| 2 | 日志分析器可用 | `game/tools/log_analysis.py` 可运行;对 AC 落批日志能激活掷点面(FIELD_CANDIDATES 命中,或按其数据质量观测面补一行字段适配) |
| 3 | MC 双档可跑 | `smoke/level_monte_carlo.gd` 以策略 both 跑通零报错;完美档零踩雷构造断言通过 |
| 4 | 工作区无半成品 | git status 干净(`core/rng_service.gd` 等在飞改动已收编提交) |
@@ -28,7 +28,7 @@
### 2.1 模拟批(主数据源)
- 工具:`prototypes/dungeon-sweeper-vertical-slice/smoke/level_monte_carlo.gd`
- 工具:`game/smoke/level_monte_carlo.gd`
- 配置:N=30、种子 4200+30(4200–4229,逐局 seed0+i)、策略 both(normal + perfect 双档一次跑齐)——与 2026-09-16 历史坐标同种子同口径。
- 阶段一读数格:基线格 atk+0%/hp+0%(零天赋,生死带判据格)。
- 阶段二加跑满配格 atk+100%/hp+100%(天赋成人态;F4 复验格,已拍板 i①)。
+1 -1
View File
@@ -8,7 +8,7 @@
- Review Mode: solo(`production/review-mode.txt`,2026-09-12 用户拍板——TD/LP 门禁按 solo 跳过,用户授权架构产出自主推进、迭代期回调)
- GDDs Covered: game-concept · game-pillars · systems-index · d2-data-config · a3-action-economy · a4-terrain-variation · b3-status-effect · a1-board-generation · a2-minesweeper-rules · b2-enemy-system · b4-reward-item-economy · b1-settlement(12 份;A5/C1–C4/B5/D3–D6 未设计,按 systems-index 依赖分层预留)
- ADRs Referenced: 无(0 份现存)——本文档 Phase 5/6 列出的实现期裁决项即为首批 ADR 候选
- Implementation Evidence: 垂直切片 `prototypes/dungeon-sweeper-vertical-slice/`(2026-09-10 起,冒烟 88/88、三 UI 探针 PASS)——本文档的分层/所有权/数据流均经切片实现验证,非纯纸面设计
- Implementation Evidence: 垂直切片 `game/`(2026-09-10 起,冒烟 88/88、三 UI 探针 PASS)——本文档的分层/所有权/数据流均经切片实现验证,非纯纸面设计
- Technical Director Sign-Off: 2026-09-12 — APPROVED WITH CONDITIONS(条件:Required ADRs 于正式工程骨架搭建前定稿;`.claude/docs/director-gates.md` 缺失已登记技术债)
- Lead Programmer Feasibility: SKIPPED — Solo mode
@@ -1,7 +1,7 @@
# 代码架构审查报告 — 代码组织与封装
> 日期:2026-09-13
> 载体:`prototypes/dungeon-sweeper-vertical-slice/`(9707 行 GDScript:core 12 文件 / data 11 / presentation 28 / smoke 10)
> 载体:`game/`(9707 行 GDScript:core 12 文件 / data 11 / presentation 28 / smoke 10)
> 基线:`docs/architecture/architecture.md` v1.0 + ADR-0001~0005 + `docs/code-conventions.md`
> 触发:用户在 code-review 之后要求补充「代码组织问题 + 封装问题」专项审查
> 审查方式:core/presentation 关键文件全读 + S1–S8 静态规则逐条 grep 验证 + 跨层引用面扫描
+1 -1
View File
@@ -2,7 +2,7 @@
> 生效:2026-09-11 · 来源:用户在垂直切片评审中逐一指出的真实陋习与缺陷,全部成文。
> 每条规则附本项目真实反面案例(标注缺陷编号/日期)——规则不是抽象美德,是踩过的坑。
> 约束范围:`prototypes/` 与正式 `production` 代码同尺度;与 CLAUDE.md「硬性红线」节既有硬约束
> 约束范围:`game/`(原 prototypes/ 垂直切片,2026-09-24 转正)代码同尺度;与 CLAUDE.md「硬性红线」节既有硬约束
> (数值表单点 / RNG 封闭流 / Core 零 UI / fail-fast / spec-AC 一致性)并行生效,冲突以用户裁决为准。
**写任何代码前必须通读本文件。**
File renamed without changes.
Loaded 100 of 222 files, more files were not shown because too many files have changed in this diff. Show more