工程改动(验证整改阶段3+4·用户令): 验收档三档申报落test-conventions §8.3(判据=失败代价单维,卡头申报U0确认改判,2026-11-05生效,未申报旧卡按高档全量审计)+审计深度分级落§8.7(高档=现行四件事全量,中档=逐行保留复跑省略以CI回执代证,低档=对照表抽查≥1/3且新增改判行必抽,削弱检查与例外核对三档全保留,档位存疑按高档)+doc-conventions §12.1条目正文限长双判据(≤12行且≤700字去空白,过程叙事归git提交信息)+pipeline_gate机检两件(条目超长行/字双判据+卡片验收档申报C4)+req-card/iter两技能随动(必备结构第16节/审计深度分级口径)+待办清单9条存量压缩(过程叙事归git与过程件指针)+ci_watch中间态误写终局红回执缺陷登记(run 37实证:回执16:59记红,run 17:03才succeeded,现查API全绿)+整改条目整条删除(四方向全完成,测试有效性度量用户裁暂不处理)+盘点报告退役(吸收即死,design零引用)+批报告; 负证三件(字数829红/行数18红/验收档缺申报红-申报后消红); pipeline_gate PASS 28条目; --docs全绿
This commit is contained in:
1 parent
536dc07261
commit
7639ec5b3a
6 files changed
+93
-101
No files matched your search
+24
-1
@@ -3,7 +3,9 @@
|
||||
r"""pipeline_gate.py — 工作流程流水线闸(待办清单条目状态机+roadmap 迭代总表+需求卡片口径+一次交叉核)。
|
||||
|
||||
职责:机检待办清单条目(标题元数据与可选优先级档名/四属性齐备与旧属性名防回潮/状态词白名单/
|
||||
改动面四档白名单/条件凭据/无设计线段条目的证据指认/状态段累积制/特批/零命中)与 roadmap 迭代总表(六列/状态五形态/卡片与报告存在性/编入时间与预计周期的
|
||||
改动面四档白名单/条件凭据/无设计线段条目的证据指认/状态段累积制/特批/正文限长双判据/零命中)
|
||||
与 roadmap 迭代总表(六列/状态五形态/卡片与报告存在性/编入时间与预计周期的
|
||||
分档放行)/需求卡片口径(C1 文档义务/C2 设计事实源/C3 改动—验收对照表/C4 验收档申报)+一次交叉核。
|
||||
约束:每红项一行「文件:行号 判据名 一句白话说明」,exit 0=全绿 / 1=有红 / 2=输入件缺失;
|
||||
卡片与报告存在性相对 --repo-root 解析(缺省=本文件上两级);待办清单与 roadmap 均已为新格式
|
||||
(2026-10-18 数据整改批),本闸已注册进 tools/run_all_gates.sh 文档域(08c 流水线闸)。
|
||||
@@ -58,6 +60,12 @@ AUDIT_MARK = "验收审计"
|
||||
CAP_ROW_RULE_DATE = (2026, 10, 29) # req-card §8:每行标能力归属(对齐 test-conventions §8.9 三层模型)
|
||||
CAP_ROW_RE = re.compile(r"^(既有|新增)\s*[::]\s*(.+)$")
|
||||
CAP_README = Path("game/tests/README.md")
|
||||
# C4 验收档申报(2026-11-04 验收强度分级批,生效 2026-11-05;test-conventions §8.3)
|
||||
GRADE_RULE_DATE = (2026, 11, 5)
|
||||
GRADE_RE = re.compile(r"验收档\s*[::]\s*[高中低]")
|
||||
# 待办条目正文限长双判据(2026-11-04 立,doc-conventions §12.1:行数抓清单蔓延、字数抓单行堆砌)
|
||||
ENTRY_MAX_LINES = 12
|
||||
ENTRY_MAX_CHARS = 700
|
||||
|
||||
DATE_RE = re.compile(r"\d{4}-\d{2}-\d{2}")
|
||||
VER_RE = re.compile(r"[vV]\d+(?:\.\d+)*")
|
||||
@@ -216,6 +224,17 @@ def check_todo(text, issues, where, root):
|
||||
for e in entries:
|
||||
line = e["line"]
|
||||
check_title(e["title"], line, issues, where)
|
||||
# 条目正文限长(doc-conventions §12.1 限长规则):行数与字数双判据,不含标题与空行
|
||||
body_stripped = [raw for _, raw in e["body"] if raw.strip()]
|
||||
if len(body_stripped) > ENTRY_MAX_LINES:
|
||||
issues.append((where, line, "条目超长",
|
||||
"正文 %d 行超上限 %d(doc-conventions §12.1:过程叙事归 git 提交信息,"
|
||||
"正文只留现行状态+证据指针)" % (len(body_stripped), ENTRY_MAX_LINES)))
|
||||
body_chars = sum(len(re.sub(r"\s", "", raw)) for raw in body_stripped)
|
||||
if body_chars > ENTRY_MAX_CHARS:
|
||||
issues.append((where, line, "条目超长",
|
||||
"正文约 %d 字超上限 %d(去空白计,doc-conventions §12.1 限长)"
|
||||
% (body_chars, ENTRY_MAX_CHARS)))
|
||||
attrs, attr_line = {}, {}
|
||||
for ln, raw in e["body"]:
|
||||
s = raw.strip()
|
||||
@@ -635,6 +654,10 @@ def check_cards(root, issues):
|
||||
issues.append((str(path), 1, "独立验收审计未声明",
|
||||
"须在卡内写明独立验收审计入口与报告文件(2026-10-21 起,"
|
||||
"test-conventions §9.7)"))
|
||||
if when >= GRADE_RULE_DATE and not GRADE_RE.search(text):
|
||||
issues.append((str(path), 1, "验收档未申报",
|
||||
"须在卡片头部信息区申报「验收档:高/中/低」(2026-11-05 起,"
|
||||
"test-conventions §8.3)"))
|
||||
if when < SYNC_RULE_DATE:
|
||||
continue
|
||||
in_sec = False
|
||||
|
||||
Reference in new issue
Block a user