收尾(迭代51批后收尾): 反哺点十条落文 architecture.md(RoundCycle/BattleRefreshFlow束注入换代/settlement段类束注入对编排器零引用与四helper归位/damage·RewardGrant·BattleFxHost·breakpoint_store·save_manager·slot_store公开面换代/minesweeper_rules归位两法与超阈值还债在册/charge_layers退役两处闭面四键; 第十一条落点不存在跳过在案); S13无凭证基线键经用户裁撤销(gdstyle红在案=预期单键,还债归P0)+gdstyle_gate --refresh重生成入口删除(基线维护改人工修订,--refresh传参exit=2)+gdstyle.toml与基线头注同步; 待办清单: minesweeper_rules公开面还债P0+EffectEngine死函数与全仓孤儿函数清退P0两条登记/presentation卡未编迭代迁出承接条目/iter51三条目(L1混编·架构审查余项·EffectPort删键)完成整条删除/两条P0实况引用改写; roadmap迭代51行已完成(2026-11-04)+当前位换代; 产出物退役三件(反哺点+实现报告+验收审计——吸收即死+证据只留最新,目检义务⑱在册承载,引用面已改写); 验证: gdstyle单键红=预期,--refresh exit=2,--docs全绿

This commit is contained in:
DKChan committed 2026-11-04 06:49:01 +08:00
1 parent f1840fbc80
commit 9c14f23ab8
9 files changed
+50 -428

No files matched your search

+1 -1
View File
@@ -6,7 +6,7 @@
# INT64_MIN 负字面量是已知误报(Godot 自家解析器放行);type-hint 与 S9 类型闸重叠关;
# empty-function 关(合法桩形态自由)。quality/no-debug-print 本是 opt-in 默认不跑,此处显式开
# ——产品码残留 print() 属真缺陷。阈值(函数长度/参数数等)取 gdstyle 默认值:
# 改阈值=基线口径变,须随批人工重生成基线。工具版本钉 v0.4.0(闸件校验,升级须重测兼容性)。
# 改阈值=基线口径变,须随批人工修订基线(手动编辑 gdstyle_baseline.txt,经用户批准)。工具版本钉 v0.4.0(闸件校验,升级须重测兼容性)。
[rules]
# ── 格式类全关(与 S9 类型闸/S10 文件头闸职能重叠)──
+2 -3
View File
@@ -3,11 +3,10 @@
# (class variables/public methods/file length)=文件|规则;无数字条目=文件|规则|消息全文(裸键)。
# 带数条目行格式「键 = 数值」,数值=消息剥掉 (max N) 段后首个整数;无数字条目裸键。
# 判定=键不在基线红(NEW)、同键数值较登记值恶化红(WORSENED)、改小/持平不红。
# 重生成=人工专用:python tools/gdstyle_gate.py --refresh(禁清基线换绿;改规则口径/工具升级须随批
# 重生成;新键数较旧基线少逾 10% 须加 --force 显式确认)。
# 基线增删改=人工手动编辑本文件(闸件无重写基线入口;禁清基线换绿;登记值只准因还债下降,
# 禁抬高到现状;改规则口径/工具升级须随批人工修订并经用户批准)。
game/core/adventure_runner.gd|quality/max-class-variables = 23
game/core/level_runner.gd|quality/max-class-variables = 30
game/core/level_runner.gd|quality/max-public-methods = 33
game/core/minesweeper_rules.gd|quality/max-public-methods = 21
game/presentation/views/board_view.gd|quality/max-class-variables = 31
game/presentation/views/board_view.gd|quality/max-public-methods = 27
+8 -62
View File
@@ -22,19 +22,15 @@ quality/*+syntax/reserved-identifier,format/naming/order 全关)。扫描
阈值口径=gdstyle 默认值(tools/gdstyle.toml 不设数值阈值);基线只是欠账簿,登记值只准因
还债下降,禁抬高到现状(抬高=把既有代码当尺子,默认恶化)。
基线重生成=人工专用(--refresh,附新旧对账、骤降守卫与抬升守卫),禁在闸内自动重生成
(防清基线换绿);新键数较旧基线少逾 10% 拒绝写入(防扫面断裂静默缩基线换绿);任一键登记
值被抬高同样拒绝(防以现状为尺吞掉恶化)。两条守卫都须 --force 显式确认,--force 只在
refresh 路径有效。
基线维护=人工手动编辑基线文件(本闸无任何重写基线的入口——防清基线换绿;增删行与改登记值
都是人工动作,须用户批准;登记值只准因还债下降,禁抬高到现状)。
二进制:本机固定路径 D:/code/gdstyle/gdstyle.exe(不入库不入包),GDSTYLE_BIN 环境变量覆盖;
版本与钉定版不符即红——升级工具须重测语法兼容性并人工重生成基线。
版本与钉定版不符即红——升级工具须重测语法兼容性并人工修订基线。
退出码:0=无基线外新违规且无恶化;1=有新违规/有恶化/二进制缺失或版本不符/扫描面为空/
输出不可解析/refresh 骤降或抬升拒写;2=用法错。
输出不可解析;2=用法错。
用法:python tools/gdstyle_gate.py # 闸判定
python tools/gdstyle_gate.py --refresh # 人工重生成基线(覆盖旧文件,附对账)
python tools/gdstyle_gate.py --refresh --force # 骤降/抬升守卫触发时显式确认写入
"""
import json
import os
@@ -53,8 +49,6 @@ PINNED_VERSION = "0.4.0"
DEFAULT_BIN = ("D:/code/gdstyle/gdstyle.exe" if sys.platform == "win32"
else "/usr/local/bin/gdstyle")
MAX_REPORT = 50
MAX_VANISHED_REPORT = 20
SHRINK_GUARD = 0.9 # 新键数 < 旧键数 * 本系数=骤降,refresh 拒写须 --force
_FUNC_RE = re.compile(r"function '([^']+)'")
_MAX_RE = re.compile(r"\s*\(max \d+\)")
@@ -112,31 +106,13 @@ def parse_baseline() -> dict:
return entries
def write_baseline(entries: dict) -> None:
lines = [
"# gdstyle 存量基线(S13)——键每行一条;只记基线不记豁免理由。",
"# 键形态(稳定身份键,计数漂移不换键):函数级带数条目=文件|规则|函数名;类级/文件级带数条目",
"# (class variables/public methods/file length)=文件|规则;无数字条目=文件|规则|消息全文(裸键)。",
"# 带数条目行格式「键 = 数值」,数值=消息剥掉 (max N) 段后首个整数;无数字条目裸键。",
"# 判定=键不在基线红(NEW)、同键数值较登记值恶化红(WORSENED)、改小/持平不红。",
"# 重生成=人工专用:python tools/gdstyle_gate.py --refresh(禁清基线换绿;改规则口径/工具升级须随批",
"# 重生成;新键数较旧基线少逾 10% 须加 --force 显式确认)。",
]
for key in sorted(entries):
value = entries[key]
lines.append("%s = %d" % (key, value) if value is not None else key)
BASELINE.write_text("\n".join(lines) + "\n", encoding="utf-8")
def run_gate() -> int:
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
args = sys.argv[1:]
refresh = "--refresh" in args
force = "--force" in args
if (force and not refresh) or any(a not in ("--refresh", "--force") for a in args):
print("[gdstyle_gate] 用法: python tools/gdstyle_gate.py [--refresh] [--force](--force 只在 refresh 路径有效)")
if args:
print("[gdstyle_gate] 用法: python tools/gdstyle_gate.py(无参数;基线维护=人工手动编辑基线文件)")
return 2
binary = os.environ.get("GDSTYLE_BIN", DEFAULT_BIN)
@@ -167,39 +143,9 @@ def run_gate() -> int:
current = collect_entries(findings)
if refresh:
old = parse_baseline() if BASELINE.exists() else None
if old is not None:
vanished = sorted(set(old) - set(current))
print("[gdstyle_gate] 对账:旧基线 %d 条,新扫描 %d 条,消失键 %d 条"
% (len(old), len(current), len(vanished)))
for k in vanished[:MAX_VANISHED_REPORT]:
print(" GONE " + k)
if len(vanished) > MAX_VANISHED_REPORT:
print(" ...(截断,共 %d 条)" % len(vanished))
if len(current) < len(old) * SHRINK_GUARD and not force:
return fail("新键数 %d 较旧基线 %d 少逾 10%%——疑扫面断裂静默缩基线换绿,拒绝写入;"
"确认缩基线正当(如删规则/缩扫描面)须加 --force 显式确认" % (len(current), len(old)))
raised = sorted(
(k, old[k], current[k]) for k in current
if k in old and old[k] is not None and current[k] is not None and current[k] > old[k]
)
if raised and not force:
for k, was, now in raised[:MAX_REPORT]:
print(" FAIL 抬高 %s = %d(登记 %d)" % (k, now, was))
if len(raised) > MAX_REPORT:
print(" ...(截断,共 %d 条)" % len(raised))
return fail("重生成会抬高 %d 条登记值——基线只准因还债下降,抬高=以现状为尺默认恶化;"
"确属阈值口径变更或经用户批准须加 --force 显式确认" % len(raised))
else:
print("[gdstyle_gate] 旧基线不存在,跳过对账(首次落位)")
write_baseline(current)
print("[gdstyle_gate] 基线已重生成:%s 条(%s)" % (len(current), BASELINE.name))
return 0
base = parse_baseline() if BASELINE.exists() else {}
if not base and not BASELINE.exists():
return fail("基线文件不存在:%s(首次落位跑 python tools/gdstyle_gate.py --refresh,须经用户批准)" % BASELINE.name)
return fail("基线文件不存在:%s(首次落位=人工创建基线文件、格式见文件头注,须经用户批准)" % BASELINE.name)
new = sorted(k for k in current if k not in base)
worsened = sorted(
@@ -222,7 +168,7 @@ def run_gate() -> int:
print(" FAIL ...(截断,共 %d 条)" % len(worsened))
red = True
if red:
return fail("基线外新违规 %d 条/恶化 %d 条——新码须修到基线口径内,恶化须还债或经用户批准随批重生成基线"
return fail("基线外新违规 %d 条/恶化 %d 条——新码须修到基线口径内,恶化须还债或经用户批准随批人工修订基线"
% (len(new), len(worsened)))
print("[gdstyle_gate] ok")
return 0