Files
gplan-2/CLAUDE.md
T
DKChan 25a7c85bf1 gate(domain): 合回闸推域改 game/ 唯一触发——tools/artwork 出代码域,跨领域执法禁绝(2026-10-18 用户裁「只有改了 game 的才需要代码域全量测试验收,其他修改只跑自己领域相关的验证,不要跨领域执法」)——worktree-guard.sh 推域逻辑逐路径重写(触 game/→要求 code;不触 game/ 的一切路径——design/、根规则文件、tools/ 工具脚本、.zcode/ 配置、其余一切→要求 docs;同批混触两域→两域都要=全量档;删 CODE_PATHS/DOC_PATHS 三前缀判码与分支,artwork/ 死条目随之消失,「未登记按最严」被新逻辑自然吸收)+报错指引文案同步(--code=触及 game//--docs=不触 game/ 一切改动/不带参数=同批混触 game/ 与文档面;「跨两域或改闸件本身跑全量」口径全数退役)+process-conventions §3 第10条域划分细则重写+闸件自身改动不占合回全量(质量义务=落批时变异验证 test-conventions §6+闸崩溃 fail-closed 无回执即拦,不以合回全量为兜底)+第11条合并后复跑按域缩水(触 game/ 批全量复跑维持;纯文档批文档域档秒级)+§4 分级周期口径同步+run_all_gates.sh 头注三档触发条件换代(闸序本体零改动)+CLAUDE.md 运行与验证首条同步。钩子为 gitignored 本地件不入库(.gitignore .zcode/;499 批先例「hooks 属各 harness 私有配置不随仓库传播」),改动落主区唯一生效副本(.zcode/config.json 绝对路径指向)。变异验证五例 stdin 直喂全过:①仅 tools/ 夹具分支=本批核心修正面:错域回执拦且指明要求域=docs、正域 docs 回执放行(旧逻辑此例误拉 code 全量)②仅 game/:要求域=code、code 回执放行③game/+design/ 混合:docs 回执拦显缺 code+code 回执拦显缺 docs(合证两域都要)、full 放行④无回执拦⑤回执 commit≠分支尖拦(full 域也拦)+附检 quick 模式拦(五况其余未波及)。夹具走 git 底层命令(hash-object/read-tree/commit-tree)零工作区触碰,分支 zz-domain-test 验完即删零留痕。本批为旧推域规则下最后一次全量自付(diff 触 tools/ 按旧判跨两域,全量闸自付见收尾回执)
2026-10-18 03:44:52 +08:00

75 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Dungeon Sweeper(扫雷 × 自动战斗 闯关 Roguelike)
扫雷推理层 + 自动战斗结算的两段式回合 Roguelike。个人开发,MVP 优先管线。
设计入口:`design/gdd/02-系统清单.md`(根索引)· 概念:`design/gdd/00-游戏概念.md`
> 本文件只保留全局元信息与硬性红线索引;领域细则在子文档,动手前先查「规范导航」。
## Technology Stack
- **Engine**: Godot 4.7.2 · **Language**: GDScript · **Build**: SCons(engine)+ Export Templates · **资源管线**: Godot Import System + 自定义 resource pipeline
- **Godot 本机固定路径**:`D:\code\godot\Godot_v4.7.2-stable_win64_console.exe`(headless/命令行一律 console 版;编辑器版同目录)
## Engine Version Reference
@design/dev/engine-reference/godot/VERSION.md
## 运行与验证(工作目录 = 含 project.godot 的切片目录)
- **交付前验收 = 跑 `tools/run_all_gates.sh`,按本批改动域选档(`--code` 只跑代码域/`--docs` 只跑文档域/不带参数=两域全量),所选域全绿才合回 master**——它是全部验证闸的唯一入口与唯一清单,**域划分也只写在它这一个地方**,闸件增减与分域调整都只改它,文档禁另列清单。一次改动同批混触 `game/` 与文档面时跑全量档。跑完写回执 `game/tests/.gates/receipt.json`(含 `domain` 字段),合回时由 worktree-guard 按 diff 路径推出该验哪个域再校验回执(缺回执/quick 模式/回执 commit ≠ HEAD/域不覆盖本次改动/含新增红,五况一律拦截)
- 单件直跑(调试期最窄确认用,**不构成验收**):系统级断言面 `python tools/run_smoke.py`(名带 smoke 但不止存活检查,术语见 `game/tests/README.md`)· 场景探针 `…console.exe --headless --path . res://smoke/ui_probe.tscn` · 单元 `… --script res://tests/run_all.gd`
- 调参批量:`--script res://smoke/adventure_monte_carlo.gd`(全冒险期望)· `res://smoke/reward_expectation.gd`(奖励期望);通关率/难度类测量一律走全冒险
- 数值验证:`python tools/balance_verifier.py`(采集端 `res://smoke/verifier_batch.gd`,报告落 `design/qa/`)
- 熵增闸(新类别 = 同批修订 Project Layout + 白名单):`python tools/repo_structure_audit.py`
## Project Layout
- `design/gdd/` — 现行设计文档树(根索引 `02-系统清单.md`,文档增删必须同步;`gdd/ux/` 战斗画面与交互规格)
- `design/registry/` — 跨系统事实登记(entities.yaml 术语与已锁数值、architecture.yaml 架构登记)
- `design/art/` — 美术纯文档(圣经/清单/提示词卡 + references/);评估调研归 `design/research/`;不放图片
- `design/dev/` — 工程规范(五份规约 + architecture + engine-reference)
- `design/qa/` — 验证报告 + QA 呈现产物图;`design/research/` — 调研/提案/评估/历史验收
- `artwork/` — 在途图像素材唯一工作区(文档归文档/在途图归一处/终稿归游戏);整目录不入 git(.gitignore 强制),收口归档 `archive/`
- `game/assets/art/` — 已验收终稿(入包被游戏加载);`game/` — 游戏工程本体(代码 + smoke/ 冒烟 + tests/ 单元集成)
- `sim-data/` — 机器读数据产物;数据件不入 git(入库例外 = README+analyze.py+growth_model.py);MC 锚与读数常驻留盘,无数值调整禁重跑
- `tools/` — python 工具脚本;`archive/` — 收口归档 zip(gitignored)
- `reports/` — 迭代批产出物(实现报告/代拍板追认单/GDD 反哺点清单);**实现批唯一可写目录**,只放 .md,不是事实源(细则见 `reports/README.md`)
- 根目录:`active.md`(会话状态唯一状态源,退役规则见 doc-conventions 第 10 节)、`roadmap.md`(里程碑)、`stage.txt`/`review-mode.txt`(运行开关)
## 规范导航(动手前先查表)
| 时机 | 权威文档 |
|---|---|
| 批次开工 / 流程纪律 | `design/dev/process-conventions.md`——worktree 铁律、五段流水线、批次清单、测试两入口与 MC/闸机细则、像素纪律 |
| 流水线段入口 | 用户级技能对照——doc-design=文档设计/asset-ingest=美术录入/req-card=写卡/iter-plan=迭代编排/iter=实现(登记不立技能);格式与状态机权威=`design/dev/doc-conventions.md` §12 |
| 写代码 / 改代码前 | `design/dev/code-conventions.md`——结构/契约/语言/数值/流程五类硬纪律(反例库 = 同目录 code-conventions-cases.md) |
| 写测试 / 改测试前 | `design/dev/test-conventions.md`——探针标配 / 回归断言 / 全量验证 / 验收清单落码 / 变异验证 |
| 写文档 / 改文档前 | `design/dev/doc-conventions.md`——白话写作 / 载体分工 / 用语 / 结构骨架 / 会话记录与生命周期 |
| 概念切分与互链 | `design/dev/concept-conventions.md`——概念封装 / 跨文档引用 / 归档与事实源 |
| 系统设计 / 增删文档 | `design/gdd/02-系统清单.md`——根索引 + 中文规范名↔英文代号对照 |
| 架构(唯一事实源) | `design/dev/architecture/architecture.md`——历史决策沿革查 git commit log,不另设决策文档 |
| 术语、已锁数值 | `design/registry/entities.yaml`——仅 owner 文档可修订,冲突须显式提出 |
| 会话进度 / 路线图 | 根 `active.md`(状态文件:只记现在,每行当下为真;快照+未决面+滚动条目)· 根 `roadmap.md` |
## 硬性红线(勿违反;操作细则在 process-conventions.md 与各规约)
- 主工作区禁止直接改动与提交——一切改动走独立 worktree(豁免:active.md 会话收口、.zcode 钩子配置)
- 测试执行两入口铁规——只有迭代 loop 开发与用户点名两个触发入口;其余会话零测试,需测试支撑先请示并注明未跑测
- 交付前验收 = 跑 `tools/run_all_gates.sh` **按改动域**全绿(唯一入口、唯一闸清单、唯一域划分,禁在文档另列);合回 master 由 worktree-guard 按 diff 推域校验回执强制(process-conventions §3)
- **两类批**——**迭代批**(代码实现,`/iter` 发射):**禁写 `design/` 整个目录**(含新增/修改/删除),设计文档对它只读、是写测试与实现代码的输入依据;产出物只准写 `reports/`;批末只跑代码域闸。**非迭代批**(工具/规则/文档改动):不占 roadmap 迭代号,按改动域跑闸。文档内容的落地走五段流水线相应段(文档设计段入口=用户级技能 doc-design;登记条目格式由流水线闸强制)
- 五段流水线铁律——一切工作按「登记 → 文档设计/美术设计 → 写需求卡片 → 迭代编排 → 实现」推进,段间不自动流转、每段转进由用户发令;编入迭代的卡片必须设计闭合+零待裁点,流水线闸 `tools/pipeline_gate.py` 强制(工具并行开发中,注册进 run_all_gates.sh 文档域归第二批);实现段零裁断——卡片没写清=上游缺陷,停该卡退回上游,禁内联求裁(process-conventions §2,格式与状态机=doc-conventions §12)
- MC/模拟:无数值改动零跑;档位硬闸见 `sim-data/README.md`「MC 采集档位表」,一档只能由用户发起
- 闸机轮次纪律:新码先孤立验证 → 出红只跑红件最小单元 → 长批先最小参数试车 → 开工扫坑册(process-conventions §6)
- 变异验证——新增/改写验收函数必须变异变红才算验收成立;无变异红记录只写「已实现,拦截能力未证」(test-conventions §6)
- 中间产物吸收即死——结论先吸收进权威文档、未决先迁 06,文件即删且永不提交(doc-conventions 第 11 节)
- 用语红线——一切对用户输出禁自造黑话,需要作者解释的词必须展开成完整白话句(doc-conventions 第 4 节三形态表)
- 呈报六问——What 现状差异 / Why 动机与不做代价 / How 方案与全部备选 / Where 影响面 / 验收判据 / 不确定点单列收尾;Who/When 不进正文;仅首次描述需求/bug/方案适用
- 真人检测只登记不阻塞——登记进 07 清单/实现报告即完成义务,禁以等目检为停工理由或收口前置
- 文件头 = `##` 文档注释,介绍本模块,≤8 行两类白名单(①职责摘要 ②使用约束;禁一切文档反向链接;code-conventions §1.4.1,规范权威 = Google pyguide §3.8 + PEP 257;机器闸 tools/audit_file_headers.py)
- 数值单一事实源——玩法数值只存 `data/tables/`(.tres)经 ConfigDB 单点读取;禁数值字面量与自建 `load()` 表路径
- RNG 单点——禁 `randomize()`/自建 RandomNumberGenerator,随机只经 `RngService` 统一流
- 架构事实唯一源——架构事实只认 `design/dev/architecture/architecture.md`;禁立第二架构文档或决策文档体系,历史决策记录只进 git commit log
- Core 层零 UI 依赖——完整战斗必须可 `--headless --script` 跑通;fail-fast——数据校验错误一律致命中止,无软回退
- spec-AC 一致性——规约与验收标准不得在同一输入上给出不同答案;评审隔离——`/design-review` 必须独立会话跑(与 `/design-system` 隔离)
- 像素结构件——先抄后造、验收写成像素级判据、±1px 坐标推导(process-conventions 第 7 节)