docs(流程文档迁出GDD批): 待办清单与体验验证清单移到仓库根并去掉编号前缀
两文件是流水线流程件而非游戏描述件,此前住在 design/gdd/ 造成三处不适配: gdd_lint 必须为它们逐条关掉体裁规则、格式权威却写在 doc-conventions §12、 与同族的 roadmap(在仓库根)分居两处。迁到根后按 roadmap.md 的无编号风格改名。 - 迁出:design/gdd/06-待办清单.md → 待办清单.md;07-体验验证清单.md → 体验验证清单.md - 指向改写 53 个文件:GDD 各系统文档指路存根、四份规约、02 根索引、README/roadmap/AGENTS - 两份清单自身 74 处出站链接按新基址重指(../art → design/art、systems → design/gdd/systems) - gdd_lint:待办/体验验证两文件的 R1/R3/R5/R7 豁免行随迁删除(已脱离扫描面),后门表清零 - pipeline_gate 默认路径、log_analysis/render_gate 称谓、repo_structure_audit 根文件白名单同步 - 保护面补写:两份清单列入实现批禁写清单(AGENTS 两类批条 / process-conventions §12 / 架构文档域表), 条目状态只由流水线各段推进 - 范围外未动(用户令「全不碰」):reports/ 与 design/research/ 的 22 处历史指向、game/ 两处注释
This commit is contained in:
1 parent
32a0b53d70
commit
7aee5eb71a
53 files changed
+241
-254
No files matched your search
@@ -121,7 +121,7 @@ TERM_CONTEXT_EXEMPT = {
|
||||
# 敌人 id 只能读作历史留档(真正的现行规格在 敌人系统.md「目标顺位与意图线索」节)。
|
||||
"伏击": re.compile(r"ambusher|成文占位"),
|
||||
"heavy_multiplier|重击倍率": re.compile(r"ambusher|heavy_multiplier|成文占位"),
|
||||
# 拔旗(2026-09-19 退役「旗无移除手段」):06 待办清单「件派生动词白名单」条目说的是
|
||||
# 拔旗(2026-09-19 退役「旗无移除手段」):待办清单「件派生动词白名单」条目说的是
|
||||
# 「将来件池 ≥30 种后可能开放的第三盘面动作」,是待评估的设计意图而非在用机制。
|
||||
"拔旗|撤旗": re.compile(r"件派生动词白名单|第三盘面动作|非信息类"),
|
||||
}
|
||||
|
||||
+13
-27
@@ -10,12 +10,11 @@ r"""gdd_lint.py — GDD lean 格式门禁
|
||||
规则(口径权威 = design/engineering/doc-conventions.md 第 5–6 节文档骨架与结构纪律):
|
||||
R1 散文段落 ≤ 240 字(代码块/表格/列表/引用不计)
|
||||
R3 正文禁止修订注记:~~删除线~~、"作废"、括号内"日期+评审/修订/拍板/裁决/核销"
|
||||
(登记处/清单按 RULE_EXEMPT 分域豁免)
|
||||
R4 禁止变更记录节:出现「版本历史/修订记录/变更记录/修改记录/更新记录/更新日志」标题即红
|
||||
(沿革只进 git commit log;扫描面 = 全 design/ + roadmap.md,见 --changelog-only)
|
||||
R5 流程/状态类章节必须含代码块图(字符画或 Mermaid);清单节/词条节按 RULE_EXEMPT 分域豁免
|
||||
R5 流程/状态类章节必须含代码块图(字符画或 Mermaid);词条节按 RULE_EXEMPT 分域豁免
|
||||
R6 表格列数一致(含转义 \| 识别)
|
||||
R7 括号嵌套跨度 ≤ 80 字(长括号 = 审计注记挤进正文的信号;登记处/清单按 RULE_EXEMPT 分域豁免)
|
||||
R7 括号嵌套跨度 ≤ 80 字(长括号 = 审计注记挤进正文的信号)
|
||||
R8 核心规则表:规则列必须是"谁·何时·做什么"陈述句所在的可读表——说明/要点列
|
||||
禁止出现编号引用(AC-x/F-x/EC-x/E-x/OQ-x/Rule-x/义务),引用只允许在依据类列
|
||||
R9 一页纸节点:任一标题节点的直接内容(到下一标题为止)≤ 80 行——装不下就拆子节点
|
||||
@@ -35,26 +34,14 @@ MAX_PARA = 240
|
||||
MAX_PAREN_SPAN = 80
|
||||
|
||||
# 规则分域(2026-10-03 用户裁「测试要快/要准」优化批):R1 的体裁前提是「规范文」
|
||||
# (短段+表格化);登记处/清单的自然形态就是长条目与叙事散文,硬套=自 2026-09-20
|
||||
# 上线起 8/8 常红零过滤价值(test-perf-report-2026-10-02 §6.2 实证)。R3/R7 不豁免——
|
||||
# 「provenance 出正文」对一切体裁有效;R4 变更记录节禁令自 2026-10-19 起对一切体裁有效。
|
||||
R1_EXEMPT = {
|
||||
"06-待办清单.md", # 全项目待办登记处:现状/状态/方案长条目为体裁
|
||||
"07-体验验证清单.md", # 体验验证读数清单:同上
|
||||
}
|
||||
# (短段+表格化)。「provenance 出正文」对一切体裁有效;R4 变更记录节禁令自 2026-10-19
|
||||
# 起对一切体裁有效。
|
||||
# 规则粒度分域豁免(2026-10-15 用户令「清单类文件与术语表不做 GDD 规范性检查」)。
|
||||
# 原则:**按规则豁免,不按文件拉黑**——体裁规则(R3/R5/R7)对登记处/清单/词条表
|
||||
# 不适用,但机械可判的完整性规则(R4/R6/R8/R9/R11)一律不豁免,真缺陷不得藏起来。
|
||||
# 各条理由:
|
||||
# R3 正文禁修订注记——登记处/清单的条目「带日期+裁决来源」是设计目的本身
|
||||
# (条目要能回答「这条谁在何时裁的」),禁它等于禁登记处的核心价值。
|
||||
# R5 流程/状态类节须含代码块图——节名含「流程/生命周期」即触发,但 07 的
|
||||
# 「㉖…全流程走查」「㉗…目检」是目检清单节、术语表的「开发流程」是词条节,
|
||||
# 两者都不是流程描述,属节名误匹配。
|
||||
# R7 括号跨度 ≤80 字——长括注在登记处/清单里是常态(现状+裁决+归属挤在一行)。
|
||||
# 原则:**按规则豁免,不按文件拉黑**——体裁规则对词条表不适用,但机械可判的完整性规则
|
||||
# (R4/R6/R8/R9/R11)一律不豁免,真缺陷不得藏起来。
|
||||
# R5 流程/状态类节须含代码块图——节名含「流程/生命周期」即触发,术语表的「开发流程」
|
||||
# 是词条节、不是流程描述,属节名误匹配。
|
||||
RULE_EXEMPT = {
|
||||
"06-待办清单.md": {"R3", "R7"},
|
||||
"07-体验验证清单.md": {"R3", "R5", "R7"},
|
||||
"术语表.md": {"R5"},
|
||||
}
|
||||
|
||||
@@ -181,17 +168,16 @@ def lint_file(path):
|
||||
issues.append(f"R9 节点「{node_name}」直接内容 {node_count} 行(>{MAX_NODE_LINES})——超一页,拆为子节点")
|
||||
infos.append(f"最大节点直接内容 {max(node_count, 0)} 行")
|
||||
|
||||
# R1 段落长度(登记处/清单文分域豁免,见 R1_EXEMPT 注)
|
||||
# R1 段落长度
|
||||
fname = Path(path).name
|
||||
ex = RULE_EXEMPT.get(fname, set()) # 规则粒度分域豁免(见 RULE_EXEMPT 注)
|
||||
if fname not in R1_EXEMPT:
|
||||
for p in paras:
|
||||
if len(p) > MAX_PARA:
|
||||
issues.append(f"R1 散文段 {len(p)} 字(>{MAX_PARA}): {p[:50]}…")
|
||||
for p in paras:
|
||||
if len(p) > MAX_PARA:
|
||||
issues.append(f"R1 散文段 {len(p)} 字(>{MAX_PARA}): {p[:50]}…")
|
||||
|
||||
# R2 表格占比已停用(见文件头注释)。
|
||||
|
||||
# R3 修订注记(代码块豁免;登记处/清单按 RULE_EXEMPT 豁免——变更记录节已整体禁设,无豁免域)
|
||||
# R3 修订注记(代码块豁免;变更记录节已整体禁设,无豁免域)
|
||||
body_no_code = "\n".join(l for l in text.splitlines() if l not in code_lines)
|
||||
for m in (() if "R3" in ex else re.finditer(r"~~.+?~~", body_no_code)):
|
||||
issues.append(f"R3 删除线残留: …{m.group(0)[:40]}…")
|
||||
|
||||
@@ -166,7 +166,7 @@ class RunAcc:
|
||||
self.end_hp = int(e.get("hp", 0))
|
||||
|
||||
def on_action(self, e):
|
||||
# 刷新经济监控(07 清单⑦):只计受理成功的弃图刷新——被拒尝试不构成弃图。
|
||||
# 刷新经济监控(体验验证清单⑦):只计受理成功的弃图刷新——被拒尝试不构成弃图。
|
||||
if e.get("op") == "refresh" and e.get("accepted"):
|
||||
self.refresh_count += 1
|
||||
|
||||
@@ -514,7 +514,7 @@ def render(res_files, args, out):
|
||||
print("== 关卡级统计 ==", file=out)
|
||||
print(" 口径:局=run 行切分(无 run 行的旧日志整文件一局);通关=result=victory;", file=out)
|
||||
print(" 进BossHP=Boss首结算快照HP+首轮承伤−首轮治疗(精确反推);平均轮数=每局settlement数。", file=out)
|
||||
print(" 弃图率=每局受理刷新次数(07⑦ 基线读数,与 MC 刷新/局同口径);", file=out)
|
||||
print(" 弃图率=每局受理刷新次数(体验验证清单⑦ 基线读数,与 MC 刷新/局同口径);", file=out)
|
||||
print(" 每轮刷新率=刷新次数÷结算轮数(组内加权)。阈值数字归调参批,本表只出基线。", file=out)
|
||||
hdr = (f" {'关卡':>6} {'档位':>8} {'局数':>5} {'通关率':>7} {'平均轮数':>8} {'进BossHP均':>10} "
|
||||
f"{'通关剩余HP均':>12} {'整局承伤均':>10} {'弃图率':>7} {'每轮刷新率':>9}")
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
r"""pipeline_gate.py — 工作流程流水线闸(06 条目状态机+roadmap 迭代总表+需求卡片口径+一次交叉核)。
|
||||
r"""pipeline_gate.py — 工作流程流水线闸(待办清单条目状态机+roadmap 迭代总表+需求卡片口径+一次交叉核)。
|
||||
|
||||
职责:机检 06 条目(标题元数据/属性齐备/状态词白名单/条件凭据/状态段累积制在场约束/特批/
|
||||
职责:机检待办清单条目(标题元数据/属性齐备/状态词白名单/条件凭据/状态段累积制在场约束/特批/
|
||||
零命中)与 roadmap 迭代总表(六列/状态四形态/卡片与报告存在性/编入时间与预计周期的
|
||||
历史行「—」豁免/周期≤2 周可特批豁免/单元格白名单/零命中);「已编迭代↔已写卡段↔迭代行
|
||||
卡片列」交叉核只此一处。2026-10-18 卡片冲突修订批补两条卡片机检:C1 关联文档同步面的
|
||||
文档义务口径(生效 2026-10-17)、C2 设计事实源声明(生效 2026-10-18)——两条都按文件名
|
||||
日期只追新规生效日之后的卡,旧卡属 git 历史留档不回头改。
|
||||
约束:每红项一行「文件:行号 判据名 一句白话说明」,exit 0=全绿 / 1=有红 / 2=输入件缺失;
|
||||
卡片与报告存在性相对 --repo-root 解析(缺省=本文件上两级);06 与 roadmap 均已为新格式
|
||||
卡片与报告存在性相对 --repo-root 解析(缺省=本文件上两级);待办清单与 roadmap 均已为新格式
|
||||
(2026-10-18 数据整改批),本闸已注册进 tools/run_all_gates.sh 文档域(08c 流水线闸)。
|
||||
用法:python tools/pipeline_gate.py [--todo PATH] [--roadmap PATH] [--repo-root PATH]
|
||||
"""
|
||||
@@ -18,7 +18,7 @@ import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
DEFAULT_TODO = Path("design/gdd/06-待办清单.md")
|
||||
DEFAULT_TODO = Path("待办清单.md")
|
||||
DEFAULT_ROADMAP = Path("roadmap.md")
|
||||
|
||||
SOURCE_WORDS = ("playnote", "会话提及", "审计发现", "批次移交")
|
||||
@@ -200,7 +200,7 @@ def check_status(raw, line, face, issues, where):
|
||||
|
||||
|
||||
def check_todo(text, issues, where, root):
|
||||
"""06 全部判据。返回交叉核链(已编迭代条目 → (行号, 迭代号, 卡片路径|None))。
|
||||
"""待办清单全部判据。返回交叉核链(已编迭代条目 → (行号, 迭代号, 卡片路径|None))。
|
||||
|
||||
2026-10-20 状态栏纯化批:闭合类状态词的证据核对从状态栏括号改到现状关联文档
|
||||
清单(§12.1「状态行只写状态词」)——已写卡对 reports/ 卡片路径+磁盘存在性,
|
||||
@@ -254,7 +254,7 @@ def check_todo(text, issues, where, root):
|
||||
issues.append((where, line, "卡片路径不存在",
|
||||
"现状清单里的卡片路径 %s 相对仓库根不存在" % rp))
|
||||
# 证据核对二:文档轨闭合/反哺已写入 → 现状清单须有文档路径+版本号
|
||||
# (06 正文里的指针是相对路径,形如 systems/… 或 design/…,只认 .md 收尾+版本号)
|
||||
# (待办清单正文里的指针是相对路径,形如 systems/… 或 design/…,只认 .md 收尾+版本号)
|
||||
if "文档设计已闭合" in words or "已写入" in words:
|
||||
if not (re.search(r"[^\s ,,()()]+\.md", xian) and VER_RE.search(xian)):
|
||||
issues.append((where, xline, "正文缺设计定稿指针",
|
||||
@@ -459,8 +459,8 @@ def check_cards(root, issues):
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser(
|
||||
description="工作流程流水线闸:06 条目状态机+roadmap 迭代总表+一次交叉核")
|
||||
ap.add_argument("--todo", help="06-待办清单路径(缺省=<仓库根>/design/gdd/06-待办清单.md)")
|
||||
description="工作流程流水线闸:待办清单条目状态机+roadmap 迭代总表+一次交叉核")
|
||||
ap.add_argument("--todo", help="待办清单路径(缺省=<仓库根>/待办清单.md)")
|
||||
ap.add_argument("--roadmap", help="roadmap 路径(缺省=<仓库根>/roadmap.md)")
|
||||
ap.add_argument("--repo-root", help="仓库根(卡片/报告存在性的相对基准;缺省=本文件上两级)")
|
||||
args = ap.parse_args()
|
||||
@@ -484,7 +484,7 @@ def main():
|
||||
if issues:
|
||||
print("流水线闸 FAIL:红项 %d" % len(issues))
|
||||
return 1
|
||||
print("流水线闸 PASS:06 条目 %d · 总表数据行 %d · 交叉核 %d 链 · 卡片口径 %d 张全过"
|
||||
print("流水线闸 PASS:待办清单条目 %d · 总表数据行 %d · 交叉核 %d 链 · 卡片口径 %d 张全过"
|
||||
% (len(parse_todo(todo_text)), len(index), len(links), n_cards))
|
||||
return 0
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
# 段:
|
||||
# ① shot_probe 七屏窗口化截图(menu/settings/career/camp/level/battle/status)
|
||||
# → tools/shot_checker.py A-D 语义断言自动判定(A 屏级骨架全屏/B 文字对比度/C 明度三档带/
|
||||
# D 文字禁压纹理;E 焦点预算=语义面仍归人闸不机检)。首跑存量 FAIL 按 S1 停机点全量呈报登记 06。
|
||||
# D 文字禁压纹理;E 焦点预算=语义面仍归人闸不机检)。首跑存量 FAIL 按 S1 停机点全量呈报登记待办清单。
|
||||
# ② 取证段(Q7:超时/零字节/文件缺失任一即 FAIL——「渲染真实发生」必须成立,不做像素判定):
|
||||
# fx_shot_probe 三时刻抓帧(行到达/结算排播/轮末连帧)+ board_shot_probe L1-L3 棋盘抓帧。
|
||||
# ③ 棋盘 golden 逐像素:board 整屏帧按 board_meta.json 取样坐标裁剪棋盘区
|
||||
@@ -64,7 +64,7 @@ fi
|
||||
if [ "$_rc" -eq 0 ]; then
|
||||
python tools/shot_checker.py "$SHOT" shot_menu.png shot_settings.png shot_career.png shot_camp.png shot_level.png shot_battle.png shot_status.png | sed 's/^/[render_gate] /'
|
||||
_rc="${PIPESTATUS[0]}"
|
||||
[ "$_rc" -ne 0 ] && echo "[render_gate] FAIL — shot_checker A-D 断言存在红(S1 停机点:首跑存量 FAIL 全量呈报登记 06)"
|
||||
[ "$_rc" -ne 0 ] && echo "[render_gate] FAIL — shot_checker A-D 断言存在红(S1 停机点:首跑存量 FAIL 全量呈报登记待办清单)"
|
||||
fi
|
||||
|
||||
echo "======== fx_shot_probe 三时刻取证(Q7) ========"
|
||||
|
||||
@@ -27,7 +27,8 @@ ROOT = Path(__file__).resolve().parent.parent
|
||||
# 清单的家——迭代批禁写 design/,只准往这里写,design/ 全目录对它只读。只放 .md,不放图(图像白名单不含此目录)。
|
||||
TOP_DIRS = {"archive", "artwork", "design", "game", "sim-data", "tools", "reports"}
|
||||
# 2) 根目录文件白名单
|
||||
ROOT_FILES = {"AGENTS.md", "README.md", "roadmap.md", "stage.txt", "review-mode.txt",
|
||||
ROOT_FILES = {"AGENTS.md", "README.md", "roadmap.md", "待办清单.md", "体验验证清单.md",
|
||||
"stage.txt", "review-mode.txt",
|
||||
".gitignore", ".zcodeignore"}
|
||||
# 3) 图像允许目录(相对路径前缀;archive/ 为归档 zip 不扫)
|
||||
# game/tests/golden/(棋盘 golden 基线=机检测试资产非美术素材,素材齐盘态生成入库【基线换代权限 Q6】)
|
||||
|
||||
@@ -49,7 +49,7 @@ for _a in "$@"; do
|
||||
done
|
||||
|
||||
# 控制台编码:本仓库闸件输出中文与 ✅/✗ 符号。Windows GBK 控制台下 python 打印这些字符会抛
|
||||
# UnicodeEncodeError——06/10 两闸直接崩(假红)、09 的 FAIL 行被写成乱码字节(指纹漂移,
|
||||
# UnicodeEncodeError——待办清单/10 两闸直接崩(假红)、09 的 FAIL 行被写成乱码字节(指纹漂移,
|
||||
# 与基线比必判「红项清单变化」假红)、末尾汇总自身崩掉打不出结论。
|
||||
export PYTHONIOENCODING=utf-8
|
||||
|
||||
@@ -183,7 +183,7 @@ gate "06 gdd_lint" "gdd_lint.log" "$PY" "$REPO/tools/gdd_lint.py"
|
||||
gate "06b 变更记录节" "changelog.log" "$PY" "$REPO/tools/gdd_lint.py" --changelog-only
|
||||
gate "07 doc_link" "doc_link.log" "$PY" "$REPO/tools/doc_link_audit.py" --strict
|
||||
gate "08 doc_term" "doc_term.log" "$PY" "$REPO/tools/doc_term_audit.py" --strict
|
||||
# ── 8c. 流水线闸(06 条目状态机+roadmap 迭代总表+一次交叉核,判据=doc-conventions §12)──
|
||||
# ── 8c. 流水线闸(待办清单条目状态机+roadmap 迭代总表+一次交叉核,判据=doc-conventions §12)──
|
||||
gate "08c 流水线闸" "pipeline.log" "$PY" "$REPO/tools/pipeline_gate.py"
|
||||
fi
|
||||
# ── 6c. 回放确定性对拍(条件闸件;属代码域)──
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""技能池出招节奏审计(消费 playtest_*.jsonl 的 enemy_action 行)。
|
||||
|
||||
对应 06 待办「单拍行为环的体验验证(改型:技能池节奏体验验证)」的机器半边。
|
||||
对应待办清单「单拍行为环的体验验证(改型:技能池节奏体验验证)」的机器半边。
|
||||
判读带:
|
||||
· 过涝 = 敌群连续出特殊技、无普攻基底——读数 = 单敌群同场战斗内最长连续特殊技连击
|
||||
(连击 ≥3 记过涝信号,连击阈值 3 为代拍板默认:保底 M=4 与冷却 2-4 语义下 2 连属正常波动)
|
||||
|
||||
Reference in new issue
Block a user