收尾(迭代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:
1 parent
f1840fbc80
commit
9c14f23ab8
9 files changed
+50
-428
No files matched your search
+1
-1
@@ -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 文件头闸职能重叠)──
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in new issue
Block a user