docs(roadmap): roadmap 压成「里程碑时间线+迭代总表」+流水线闸注册上电 08c——删除「当前位置」节与主路线表全部巨型行(各迭代过程叙述/T 段明细/读数/闸数字/裁决记录退役归 git 史,116→89 行),新建六列迭代总表 30 行一行一迭代(状态=已完成+落地日期自「✅ 完成/已入库」句提取,迭代 17 任务书日期与文本冲突从文本=2026-10-07;需求卡片列 design/research 实存十卡写实路径、卡片已退役十一迭代写保留字、迭代 1~8/10 无卡片制填「—」;编入时间 9~12/14~30 从文本与编入提交可考取真、其余「—」;预计周期历史行全「—」不做 ≤2 周判;实现报告 iter27/28/29/30 写 reports/ 实存路径、其余二十六迭代写退役保留字),M3/M4 里程碑语义立规注(2026-10-09 用户立规)压缩三行后置于里程碑时间线表后语义全保留,执行纪律/批次 loop 规范/维护纪律三节原样保留(含未迁 process-conventions 的迭代粒度界定等立规),执行纪律第 3 条「当前位置挂起清单」指针随节删除改指 active.md 未决面;pipeline_gate.py 机检扩容对齐新表(需求卡片/编入时间/预计周期三列「—」合法=历史行豁免+实现报告列已完成=存在路径或退役保留字、对「—」维持判红,头注旧格式声明换代),doc-conventions §12.2 四列规则同步补「历史迭代不可考填—」与已完成报告列严格句;run_all_gates.sh 文档域 08b 之后注册「08c 流水线闸」(照抄相邻行形态,闸序其余零改动)+头注 --docs 闸清单补 08c+域横幅 6–8c;baseline.json 手工加入 08c 绿记录(新闸件无基线记录必判闸况变化拦合回收执,其余条目原样保留);06 修存量退役词四笔「随批呈报→顺带呈报」(b4671802 回填批带入、doc_term --strict 首次全量跑暴露,非本批引入)。自检:python tools/pipeline_gate.py=PASS(06 条目 51·总表数据行 30·交叉核 0 链全过)exit 0;bash tools/run_all_gates.sh --docs=六闸全绿无新增红 exit 0
This commit is contained in:
1 parent
b4671802aa
commit
8f66ae1559
6 files changed
+75
-91
No files matched your search
+18
-15
@@ -3,11 +3,12 @@
|
||||
r"""pipeline_gate.py — 工作流程流水线闸(06 条目状态机+roadmap 迭代总表+一次交叉核)。
|
||||
|
||||
职责:机检 06 条目(标题元数据/属性齐备/状态词白名单/条件凭据/状态段累积制在场约束/特批/
|
||||
零命中)与 roadmap 迭代总表(六列/状态四形态/卡片与报告存在性/周期≤2 周可特批豁免/
|
||||
单元格白名单/零命中);「已编迭代↔已写卡段↔迭代行卡片列」交叉核只此一处。
|
||||
零命中)与 roadmap 迭代总表(六列/状态四形态/卡片与报告存在性/编入时间与预计周期的
|
||||
历史行「—」豁免/周期≤2 周可特批豁免/单元格白名单/零命中);「已编迭代↔已写卡段↔迭代行
|
||||
卡片列」交叉核只此一处。
|
||||
约束:每红项一行「文件:行号 判据名 一句白话说明」,exit 0=全绿 / 1=有红 / 2=输入件缺失;
|
||||
卡片与报告存在性相对 --repo-root 解析(缺省=本文件上两级);现行 06 与 roadmap 尚为旧格式,
|
||||
对其红属预期(第二批数据整改后才注册上闸)。
|
||||
卡片与报告存在性相对 --repo-root 解析(缺省=本文件上两级);06 与 roadmap 均已为新格式
|
||||
(2026-10-18 数据整改批),本闸已注册进 tools/run_all_gates.sh 文档域(08c 流水线闸)。
|
||||
用法:python tools/pipeline_gate.py [--todo PATH] [--roadmap PATH] [--repo-root PATH]
|
||||
"""
|
||||
import argparse
|
||||
@@ -287,32 +288,34 @@ def check_iter_table(block, issues, where, root):
|
||||
if not STATUS_COL_RE.match(status_n):
|
||||
issues.append((where, ln, "总表状态列",
|
||||
"「%s」不在四形态(待开工/进行中/已完成(YYYY-MM-DD)/已终止(YYYY-MM-DD))" % status))
|
||||
if norm_parens(cards) != norm_parens(RESERVED_RETIRED):
|
||||
# 需求卡片列:路径逐卡查存在性;退役保留字与历史行「—」(无卡片制时期)豁免
|
||||
if norm_parens(cards) not in (norm_parens(RESERVED_RETIRED), "—"):
|
||||
for part in CARD_SEP_RE.split(cards):
|
||||
part = part.strip()
|
||||
if part and not (root / part).is_file():
|
||||
issues.append((where, ln, "卡片路径不存在",
|
||||
"需求卡片列 %s 相对仓库根不存在" % part))
|
||||
if not re.fullmatch(r"\d{4}-\d{2}-\d{2}", date):
|
||||
issues.append((where, ln, "编入时间", "「%s」须为 YYYY-MM-DD" % date))
|
||||
# 预计周期:≈N 周(N≤2);超 2 周须格内带日期特批标记(§12.2/§12.4)
|
||||
if date != "—" and not re.fullmatch(r"\d{4}-\d{2}-\d{2}", date):
|
||||
issues.append((where, ln, "编入时间", "「%s」须为 YYYY-MM-DD(历史迭代不可考填「—」)" % date))
|
||||
# 预计周期:≈N 周(N≤2);超 2 周须格内带日期特批标记(§12.2/§12.4);历史行「—」跳过
|
||||
week_marks = APPROVAL_RE.findall(weeks)
|
||||
week_core = APPROVAL_RE.sub("", weeks).strip()
|
||||
wm = WEEKS_RE.match(week_core)
|
||||
if not wm:
|
||||
wm = None if week_core == "—" else WEEKS_RE.match(week_core)
|
||||
if week_core != "—" and wm is None:
|
||||
issues.append((where, ln, "预计周期",
|
||||
"「%s」须为「≈N 周」形态(N≤2,允许 0.5 步进)" % weeks))
|
||||
elif float(wm.group(1)) > 2 and not any(DATE_RE.search(mk) for mk in week_marks):
|
||||
"「%s」须为「≈N 周」形态(N≤2,允许 0.5 步进;历史迭代不可考填「—」)" % weeks))
|
||||
elif wm is not None and float(wm.group(1)) > 2 and not any(DATE_RE.search(mk) for mk in week_marks):
|
||||
issues.append((where, ln, "预计周期",
|
||||
"「%s」超 2 周且无带日期特批标记〔用户特批 YYYY-MM-DD …〕" % weeks))
|
||||
# 实现报告:已完成=存在路径或退役保留字(历史报告已按「证据只留最新」退役),禁「—」
|
||||
done = status_n.startswith("已完成(")
|
||||
report_n = norm_parens(report)
|
||||
if report_n == "—":
|
||||
if done:
|
||||
issues.append((where, ln, "实现报告", "状态已完成但实现报告为「—」(须为存在路径)"))
|
||||
issues.append((where, ln, "实现报告",
|
||||
"状态已完成但实现报告为「—」(须为存在路径或退役保留字)"))
|
||||
elif report_n == norm_parens(RESERVED_RETIRED):
|
||||
if done:
|
||||
issues.append((where, ln, "实现报告", "状态已完成但实现报告为退役保留字(须为存在路径)"))
|
||||
pass # 退役保留字合法(含已完成的历史迭代)
|
||||
elif not (report.startswith("reports/") and (root / report).is_file()):
|
||||
issues.append((where, ln, "实现报告",
|
||||
"「%s」须为「—」/退役保留字/reports/ 下存在路径" % report))
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
# 用法:tools/run_all_gates.sh [--code|--docs|--quick]
|
||||
# --code 只跑代码域闸(01 冒烟/02 单元/03 探针 --click/04 探针 --full/05 渲染闸/09 静态扫描
|
||||
# /11 回放确定性对拍+10 熵增闸)——本批改动触及 game/ 时用(游戏工程的唯一代码验收域)。
|
||||
# --docs 只跑文档域闸(06 gdd_lint/07 doc_link/08 doc_term/08b active.md 体量+10 熵增闸)
|
||||
# --docs 只跑文档域闸(06 gdd_lint/07 doc_link/08 doc_term/08b active.md 体量/08c 流水线闸
|
||||
# +10 熵增闸)
|
||||
# ——本批改动不触及 game/ 时用:design/、根规则文件、tools/ 工具脚本、.zcode/ 配置等
|
||||
# 一切非 game 改动的本域验收。
|
||||
# --quick 全量档的中段自检形态:跳过渲染闸(窗口化,需开显示器)与静态扫描;完成出库禁用。
|
||||
@@ -175,7 +176,7 @@ else
|
||||
echo ""; echo "[gates] 05 渲染闸 → SKIP(--quick)"
|
||||
fi
|
||||
fi
|
||||
# ══ 文档域(6–8b)══
|
||||
# ══ 文档域(6–8c)══
|
||||
if in_domain docs; then
|
||||
# ── 6. 文档三闸 ──
|
||||
gate "06 gdd_lint" "gdd_lint.log" "$PY" "$REPO/tools/gdd_lint.py"
|
||||
@@ -183,6 +184,8 @@ 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
|
||||
# ── 6b. 状态文件体量闸(active.md 只记现在:条目数/快照行数/编号/死指针四条硬上限)──
|
||||
gate "08b active.md 体量" "active_state.log" "$PY" "$REPO/tools/audit_active_state.py"
|
||||
# ── 8c. 流水线闸(06 条目状态机+roadmap 迭代总表+一次交叉核,判据=doc-conventions §12)──
|
||||
gate "08c 流水线闸" "pipeline.log" "$PY" "$REPO/tools/pipeline_gate.py"
|
||||
fi
|
||||
# ── 6c. 回放确定性对拍(条件闸件——迭代 29 T3 收编;属代码域)──
|
||||
if in_domain code; then
|
||||
|
||||
Reference in new issue
Block a user