feat(规约): 文件头≤8行白名单制第二轮立规+头注机器闸S10(2026-10-15 用户令)
code-conventions §1.4.1 换代:## 文档注释载体+8行上限+五类白名单+黑名单+写法权威参照(Google Python Style Guide §3.8 + PEP 257,GDScript 官方指南无文件头条款不自造标准);§2.1 信号契约改入发送方 ## 文档注释每信号一行、计入上限;CLAUDE.md 硬性红线同步换代;新建 tools/audit_file_headers.py(R1行数/R2日期/R3变更叙事,正例反例边界例盲测通过:恰好8行过/机制词结算批不误伤/无头注过),static_scan.sh 挂 S10。纯规则与工具零行为变更;实测存量 125 处约 90 文件,清偿批在册待发令
This commit is contained in:
1 parent
58432701df
commit
a2d6e03df2
4 files changed
+119
-9
No files matched your search
@@ -40,14 +40,32 @@
|
||||
> **反面案例(2026-09-11,用户:"是没有代码规范吗")**:ID 前缀是跟随 GDD 文档名的事实约定,
|
||||
> 从未成文;同目录 `config_db`/`rng_service` 无前缀与 A/B/C 系列并存——两套命名即规范缺失的铁证。
|
||||
|
||||
### 1.4.1 文件头零工作日志(2026-10-15 用户立规)
|
||||
文件头注释只描述现在——职责、契约、GDD 锚。禁止任何变更叙事进文件头:
|
||||
带日期条目、批次叙事段(「XX批」「T几」「迭代N」开头的"本批做了什么")、迁移/退役经过注记一律禁止;
|
||||
改动历史查 `git log`/`git blame`,变更背景读对应迭代实现报告。
|
||||
### 1.4.1 文件头 = `##` 文档注释,≤8 行,白名单制(2026-10-15 第二轮立规)
|
||||
|
||||
> **反面案例(2026-10-15,用户令全仓清偿)**:main.gd 文件头曾累积 42 行——11+ 笔提交各自往头注
|
||||
> 追加一段「本批做了什么」,全部闸静默放行;save_manager.gd 曾达 49 行。同批 17 文件存量已清;
|
||||
> 红线正文见 CLAUDE.md 硬性红线。
|
||||
文件头注释只用 `##` 文档注释(Godot 官方载体,进编辑器 F1 帮助),总行数 ≤8 行(不含空行,
|
||||
从文件首个非空行到首个非注释代码行)。写法权威 = Google Python Style Guide §3.8 + PEP 257
|
||||
(GDScript 官方风格指南对文件头零条款,GDScript 语法近 Python,沿用其规范——不自造标准)。
|
||||
|
||||
白名单(只许写这五类,超出一类即违规):
|
||||
1. 一行职责摘要——这是什么;
|
||||
2. 用途/验证问题一行——它为什么存在;
|
||||
3. GDD 锚行(§1.4 格式);
|
||||
4. 硬使用约束——使用本文件前必须知道的禁令,每条一行;
|
||||
5. 指路行——架构文档/ADR/契约文档的位置。
|
||||
|
||||
黑名单(出现即违规):
|
||||
- 日期与变更叙事:任何日期、「XX批/T几/迭代N 做了什么」、迁移/改名/退役经过——
|
||||
改动史查 `git log`/`git blame`,变更背景读对应迭代实现报告;
|
||||
- 与 code-conventions、ADR、架构文档重复的段落——规范与架构各有唯一权威文档,文件头只指路不复制;
|
||||
- 场景结构、生命周期等代码机制描述——"Never describe the code"(pyguide §3.8.5),读者读代码或架构文档。
|
||||
|
||||
机器闸:`tools/audit_file_headers.py`(static_scan S10:行数上限 + 黑名单机械可判子集;
|
||||
信号契约成文位置见 §2.1)。存量头注按白名单清偿后挂入收口闸序列;此间新增/改动的文件头必须即合规。
|
||||
|
||||
> **反面案例(main.gd,两轮,2026-10-15)**:第一轮头注累积 42 行——11+ 笔提交各自追加「本批做了什么」,
|
||||
> 全部闸静默放行;清偿删叙事后仍剩 31 行——约 2/3 是对 code-conventions §1.3 与 ADR-0001 的整段复制、
|
||||
> 场景结构/生命周期机制描述(对规约与代码零新信息),且第 4 行残留带日期批次叙事。第二轮立规后
|
||||
> 全仓头注按白名单重写,机制事实归 design/dev/architecture。
|
||||
|
||||
### 1.5 禁止事实约定
|
||||
任何"大家默认这么做"的惯例必须成文进本文件(或 CLAUDE.md)才算存在。
|
||||
@@ -58,7 +76,8 @@
|
||||
## 2. 契约纪律——跨层/跨类调用的语义
|
||||
|
||||
### 2.1 信号与事件契约成文
|
||||
每个跨类信号:参数语义、发送时点、消费方依赖,必须在发送方头注成文(参照 A2 三事件面先例)。
|
||||
每个跨类信号:参数语义、发送时点、消费方依赖,必须在发送方 `##` 文档注释成文,每信号一行
|
||||
(参照 A2 三事件面先例);计入 §1.4.1 的 8 行上限,塞不下时迁契约文档并在文件头留指路行。
|
||||
状态机的每次迁移路径都必须发出对应事件——**缺一条路径的事件 = 消费方永久等待 = 软锁**。
|
||||
|
||||
> **反面案例(playtest 缺陷②)**:A2 旗动作花完末点 AP 后相位翻 Waiting 但不发 round_end,
|
||||
|
||||
Reference in new issue
Block a user