feat(T2-T6): 五词注释换代——完美排雷→完美封印/板级→整图/门票→专长凭证/正主→现行事实源/落籍→已入库
全局 sed 替换 89 处命中清零(S11 绿)。修复: - 移交 3 处保留原词(shop.tres:86 display_name、curio_controller:165-166 玩家文案) - 豁免 enemy.tres:653 历史注记保持"已落籍" - static_scan.sh 词表追加行与头注恢复禁「」引举句式 - S11 规则文件自身不被自身规则误伤(闸门自指豁免生效)
This commit is contained in:
1 parent
85dce2c77d
commit
b6629d6848
39 files changed
+118
-118
No files matched your search
@@ -112,7 +112,7 @@ timeout 120s godot --headless --script tests/run_all.gd
|
||||
`tests/static_scan.sh` 实现静态扫描域 S1–S11 的可执行子集;规则全集与动机见
|
||||
`design/engineering/architecture/architecture.md`「测试与质量域」节。新违规案例必须**先补扫描规则再修码**。
|
||||
|
||||
S11 代码注释禁用词:扫描 game/ 全域 .gd/.tres/.md/.json/.sh 的注释面,词表从 `design/gdd/术语表.md`「退役词对照」解析(显式追加「完美排雷」,排除「巢穴」「旗」);三层豁免(闸门自指/显式留档 4 处/非注释面天然不取);两道自检(扫描面文件数非空+词表解析非空)。
|
||||
S11 代码注释禁用词:扫描 game/ 全域 .gd/.tres/.md/.json/.sh 的注释面,词表从 `design/gdd/术语表.md`「退役词对照」解析(显式追加「完美封印」,排除「巢穴」「旗」);三层豁免(闸门自指/显式留档 4 处/非注释面天然不取);两道自检(扫描面文件数非空+词表解析非空)。
|
||||
|
||||
## 本地闸(唯一验收门禁)
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
5. 移动:已开格瞬移、**已引爆危险格可通行可读**(工程债呈现半边)
|
||||
6. 停手:RAP 1:1 转存、下轮 AP 硬重置同图继续
|
||||
7. 轮末结算:明细逐行呈现、来源标注可读(P2——"这一行是我哪步扫雷带来的"可答)
|
||||
8. 清图:清图奖励兑付 + 完美排雷高光(零误标时双份)+ 换新图;未刷新的停手轮不换图
|
||||
8. 清图:清图奖励兑付 + 完美封印高光(零误标时双份)+ 换新图;未刷新的停手轮不换图
|
||||
9. 轮内刷新(方案 A):Active 当场换图、AP 保留、RAP 扣减、每轮 ≤2 次、跨图事实结算完整
|
||||
|
||||
## Battle & Level
|
||||
|
||||
+10
-10
@@ -70,7 +70,7 @@ fi
|
||||
|
||||
# S3 — core/ 禁 ConfigDB 外 data 表加载(schema class_name 直引豁免)
|
||||
# 扫描路径必须写 game/core——写裸 `core` 仓根无此目录,恒零命中恒绿(静默空转)。
|
||||
# 豁免:①注释行 ②game/core/config_db.gd 自身(数值单一事实源的正主,它的单点 load 是本规则的例外)。
|
||||
# 豁免:①注释行 ②game/core/config_db.gd 自身(数值单一事实源的现行事实源,它的单点 load 是本规则的例外)。
|
||||
if require_scan_face "S3" "$DIR_CORE"; then
|
||||
hits=$(grep -rnE '\b(load|preload)[[:space:]]*\(|ResourceLoader\.load' "$DIR_CORE" --include='*.gd' 2>/dev/null \
|
||||
| grep -vE '^[^:]+:[0-9]+:[[:space:]]*#' \
|
||||
@@ -97,7 +97,7 @@ fi
|
||||
# 禁「板级」「门票」「正主」「落籍」「完美排雷」等退役词进注释面(完整词表见术语表解析)
|
||||
# 权威出处:design/gdd/术语表.md「退役词对照」节+「对外命名纪律」节
|
||||
# 扫描面:game/ 全域 .gd/.tres/.md/.json/.sh(.txt 不收=第三方许可证非本仓库文本)
|
||||
# 词表来源:解析「退役词对照」第一列(去括号注、斜杠拆分)+显式追加「完美排雷」;显式排除「巢穴」(玩家专名/风味层,术语表自带除外注)、「旗」(单字误报率高,doc_term_audit 判例)
|
||||
# 词表来源:解析「退役词对照」第一列(去括号注、斜杠拆分)+显式追加禁「完美排雷」(受对外命名纪律约束,不在退役词对照表里);显式排除「巢穴」(玩家专名/风味层,术语表自带除外注)、「旗」(单字误报率高,doc_term_audit 判例)
|
||||
# 注释文本提取:.gd/.sh 取 # 后文本;.tres 取 ; 后文本;.md 取整行;.json 无注释语法(保留扩展名但不产生注释段)
|
||||
# 三层豁免依序:①闸门自指(行内含检查/禁令形态即跳过)②显式留档豁免单 4 处 ③非注释面天然不取
|
||||
|
||||
@@ -148,11 +148,11 @@ else
|
||||
for(i=1;i<=nw;i++){
|
||||
if(index(cmt,words[i])>0){
|
||||
if($0~/contains\(|find\(|grep|has_char\(|禁「|禁『|零「|零『/)next
|
||||
if(FILENAME~"enemy.tres"&&NR==653)next
|
||||
if(FILENAME~"level_runner"&&NR==832)next
|
||||
if(FILENAME~"adventure_runner"&&NR==403)next
|
||||
if(FILENAME~"damage_math_test"&&NR==36)next
|
||||
print FILENAME":"NR":"words[i]
|
||||
if(FILENAME~"enemy.tres"&&FNR==653)next
|
||||
if(FILENAME~"level_runner"&&FNR==832)next
|
||||
if(FILENAME~"adventure_runner"&&FNR==403)next
|
||||
if(FILENAME~"damage_math_test"&&FNR==36)next
|
||||
print FILENAME":"FNR":"words[i]
|
||||
next
|
||||
}
|
||||
}
|
||||
@@ -167,8 +167,8 @@ else
|
||||
for(i=1;i<=nw;i++){
|
||||
if(index(cmt,words[i])>0){
|
||||
if($0~/contains\(|find\(|grep|has_char\(|禁「|禁『|零「|零『/)next
|
||||
if(FILENAME~"enemy.tres"&&NR==653)next
|
||||
print FILENAME":"NR":"words[i]
|
||||
if(FILENAME~"enemy.tres"&&FNR==653)next
|
||||
print FILENAME":"FNR":"words[i]
|
||||
next
|
||||
}
|
||||
}
|
||||
@@ -182,7 +182,7 @@ else
|
||||
for(i=1;i<=nw;i++){
|
||||
if(index($0,words[i])>0){
|
||||
if($0~/contains\(|find\(|grep|has_char\(|禁「|禁『|零「|零『/)next
|
||||
print FILENAME":"NR":"words[i]
|
||||
print FILENAME":"FNR":"words[i]
|
||||
next
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,7 +171,7 @@ func _init() -> void:
|
||||
"判定相减:误标 1 − 豁免 1 = 有效 0 且标中≥1 → 完美成立〔卡② R2 真值表〕")
|
||||
orch._perfect_hit_true = 0
|
||||
Kit.check_quiet(not orch.perfect_sweep_earned(),
|
||||
"判定守卫:标中数 0 时零误标也不成立(板级 ≥1 标中条件零松动)〔卡② R2 真值表〕")
|
||||
"判定守卫:标中数 0 时零误标也不成立(整图 ≥1 标中条件零松动)〔卡② R2 真值表〕")
|
||||
var rig_rng2 = RngScript.new()
|
||||
rig_rng2.set_master_seed(778002)
|
||||
var orch2 = RigScript.new(db, rig_rng2)
|
||||
|
||||
@@ -95,7 +95,7 @@ func check_v7(a, db) -> void:
|
||||
if String(t.get("tier", "")) != "common":
|
||||
ok_fb = false
|
||||
Kit.check_quiet(ok_fb, "子池空回退全池:全普通池候选恒 3 格普通档〔专长批 V7〕")
|
||||
# 构成③:凭证不进子池也不进全池视图(独立计数体系——只经门票注入出现)
|
||||
# 构成③:凭证不进子池也不进全池视图(独立计数体系——只经专长凭证注入出现)
|
||||
a._curio_deck = [_tok("gp", "common"), _tok("attack", "common"), _tok("max_hp", "common"),
|
||||
_tok("feat_ticket", "excellent")]
|
||||
var ticket_seen := false
|
||||
|
||||
@@ -130,7 +130,7 @@ func _rows_contain(pool: Array, row: Dictionary) -> bool:
|
||||
func _test_shop_accessors(db) -> void:
|
||||
var products: Array = db.shop_products()
|
||||
if products.is_empty():
|
||||
Kit.check("ShopTable products 行族非空(表已落籍前提)", false)
|
||||
Kit.check("ShopTable products 行族非空(表已已入库前提)", false)
|
||||
return
|
||||
Kit.check("ShopTable products 行族非空", true)
|
||||
var first: Dictionary = products[0]
|
||||
|
||||
@@ -38,7 +38,7 @@ func _run() -> void:
|
||||
ov.visible and btns == 3 and not ov._confirm_btn.visible and not ov._continue_btn.visible):
|
||||
return
|
||||
# ①b 刷新面投喂(对齐商店 MC-1——投喂前隐藏/免费位点亮/GP 付费档禁用态/真实钮路径外发)
|
||||
if not _req("投喂前刷新钮应隐藏(未投喂上下文如店内门票面无刷新)",
|
||||
if not _req("投喂前刷新钮应隐藏(未投喂上下文如店内专长凭证面无刷新)",
|
||||
not ov._refresh_btn.visible):
|
||||
return
|
||||
var refreshed := []
|
||||
|
||||
Reference in new issue
Block a user