From c61d00b41a2526d33b702eae08fbd0bee80fe74d Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Wed, 21 Oct 2026 23:33:27 +0800 Subject: [PATCH] =?UTF-8?q?docs(=E8=BF=AD=E4=BB=A3=E5=91=A8=E6=9C=9F?= =?UTF-8?q?=E8=A7=84=E5=88=99=E6=89=B9):=20=E8=BF=AD=E4=BB=A3=E5=91=A8?= =?UTF-8?q?=E6=9C=9F=E4=B8=89=E6=9D=A1=E7=BA=BF=E5=AE=9A=E5=9E=8B=E2=80=94?= =?UTF-8?q?=E2=80=94=E4=B8=AD=E5=80=BC=E7=B2=BE=E7=A1=AE=E5=80=BC=E4=B8=8D?= =?UTF-8?q?=E5=8F=96=E6=95=B4=EF=BC=8F5=E2=80=9310=20=E6=97=A5=E5=B8=B8?= =?UTF-8?q?=E8=A7=84=EF=BC=8F=E8=B6=85=2010=20=E9=A1=BB=E5=B8=A6=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E7=89=B9=E6=89=B9=EF=BC=8F=E7=A1=AC=E4=B8=8B=E9=99=90?= =?UTF-8?q?=205=E3=80=81=E7=A1=AC=E4=B8=8A=E9=99=90=2020=EF=BC=88=E7=89=B9?= =?UTF-8?q?=E6=89=B9=E4=B8=8D=E6=94=BE=E8=A1=8C=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2026-10-21 用户裁定落地四件: - process-conventions 四查③改「总估时三条线」(<5 不得编/5–10 直接编/超 10 呈报整批/拆批两案等裁、确认后带日期标记/>20 不得编、确认也不放行) - doc-conventions §12.2 预计周期列改「≈N 个工作日」中值精确值形态(退役 0.5 步进周形态,1 周=5 工作日) - roadmap 粒度句换代;迭代 31–35 五行按中值精确值改写(31≈7.5/32≈8.75/33≈13.25/34≈11 归特批/35≈15.25 个工作日) - pipeline_gate:WEEKS_RE→PERIOD_RE;周期判据改三条线(<5 与 >20 判红、10reports/需求卡片-选档界面新建批-2026-10-18.md
reports/需求卡片-主菜单三入口化批-2026-10-18.md | 2026-10-21 | ≈2.5 周〔用户特批 2026-10-21 超 2 周上限〕 | — | -| 迭代 34 | 待开工 | reports/需求卡片-敌人表深度带换代批-2026-10-21.md
reports/需求卡片-信息迷雾可见性批-2026-10-21.md | 2026-10-21 | ≈2 周 | — | -| 迭代 35 | 待开工 | reports/需求卡片-节点图生成器核心批-2026-10-21.md
reports/需求卡片-节点图消费侧换代批-2026-10-21.md | 2026-10-21 | ≈3 周〔用户特批 2026-10-21 超 2 周上限〕 | — | +| 迭代 31 | 已完成(2026-10-19) | 已退役(git 历史可考) | 2026-10-18 | ≈7.5 个工作日 | 已退役(git 历史可考) | +| 迭代 32 | 已完成(2026-10-21) | 已退役(git 历史可考) | 2026-10-20 | ≈8.75 个工作日 | 已退役(git 历史可考) | +| 迭代 33 | 待开工 | reports/需求卡片-存档制数据层改造批-2026-10-18.md
reports/需求卡片-选档界面新建批-2026-10-18.md
reports/需求卡片-主菜单三入口化批-2026-10-18.md | 2026-10-21 | ≈13.25 个工作日〔用户特批 2026-10-21 超 10 个工作日〕 | — | +| 迭代 34 | 待开工 | reports/需求卡片-敌人表深度带换代批-2026-10-21.md
reports/需求卡片-信息迷雾可见性批-2026-10-21.md | 2026-10-21 | ≈11 个工作日〔用户特批 2026-10-21 超 10 个工作日〕 | — | +| 迭代 35 | 待开工 | reports/需求卡片-节点图生成器核心批-2026-10-21.md
reports/需求卡片-节点图消费侧换代批-2026-10-21.md | 2026-10-21 | ≈15.25 个工作日〔用户特批 2026-10-21 超 10 个工作日〕 | — | - 历史行的「—」= 该列事实不可考:迭代 1~8 早于需求卡片制;编排时点与预计周期不再回溯,细节查 git 提交史。 - 「已退役(git 历史可考)」= 需求卡片或实现报告曾存在,已按「证据只留最新」退役;已完成迭代的实现报告列只填 reports/ 现存路径或本保留字,不填「—」。 @@ -84,7 +84,7 @@ > 模板先例 = 循环 1 计划书(`.zcode/plans/battle-stage-node2d-loop-plan-2026-09-26.md`,已完整跑通收口)。每迭代照此八件成文,缺件不开工。 > -> **迭代粒度界定(对齐敏捷迭代/Sprint)**:一个迭代 = 一句迭代目标 + **3–8 个更改任务** + 一份计划书 loop + 一次合并登记,交付一个可验证增量(≈一次迭代交付)。单交付物不成迭代——并入相邻迭代当任务卡;用户输入闸未解的任务不进迭代(留待办清单当 backlog,解闸后编入下一个迭代);**迭代周期 ≈ 一周左右**(2026-10-11 用户裁定——原「软时间盒 ≤3 个工作日,超限即切迭代」系 3abb3bd2 成文时自造、用户从未立过此规,就此废弃)。**里程碑 = 2–4 个迭代的发布级目标 + 出口验收闸(≈Release)**。 +> **迭代粒度界定(对齐敏捷迭代/Sprint)**:一个迭代 = 一句迭代目标 + **3–8 个更改任务** + 一份计划书 loop + 一次合并登记,交付一个可验证增量(≈一次迭代交付)。单交付物不成迭代——并入相邻迭代当任务卡;用户输入闸未解的任务不进迭代(留待办清单当 backlog,解闸后编入下一个迭代);**迭代周期**:常规 5–10 个工作日(1–2 周)、直接编;超过 10 个工作日(超过 2 周)须经用户确认;低于 5 或超过 20 个工作日不得编(硬下限/硬上限,2026-10-21 用户裁定;列形态与闸判据见 doc-conventions §12.2 与流水线闸)。**里程碑 = 2–4 个迭代的发布级目标 + 出口验收闸(≈Release)**。 > 1. **计划书**(`.zcode/plans/<迭代名>-loop-plan-<日期>.md`):迭代目标与完成定义 / 现状事实(代码级,开工自行复核)/ 设计契约(违反即返工,标 🔴 触碰=L3 停机)/ 范围边界 / 任务卡 T0..Tn(逐卡估时)/ 验证闸 / 异常分级 / 代拍板白名单。 2. **T0 开工**:建 worktree + 基线复读记档(冒烟/探针/三闸/MC 与基线数据逐项比对基准)+ `git status` 归属核对(并行遗留只登记不触碰)。 diff --git a/tools/pipeline_gate.py b/tools/pipeline_gate.py index b1a9911a..61c0127e 100644 --- a/tools/pipeline_gate.py +++ b/tools/pipeline_gate.py @@ -4,7 +4,7 @@ r"""pipeline_gate.py — 工作流程流水线闸(待办清单条目状态机 职责:机检待办清单条目(标题元数据/属性齐备/状态词白名单/条件凭据/状态段累积制在场约束/特批/ 零命中)与 roadmap 迭代总表(六列/状态四形态/卡片与报告存在性/编入时间与预计周期的 - 历史行「—」豁免/周期≤2 周可特批豁免/单元格白名单/零命中);「已编迭代↔已写卡段↔迭代行 + 历史行「—」豁免/周期三条线(<5 与 >20 判红、超 10 须带日期特批标记)/单元格白名单/零命中);「已编迭代↔已写卡段↔迭代行 卡片列」交叉核只此一处。2026-10-18 卡片冲突修订批补两条卡片机检:C1 关联文档同步面的 文档义务口径(生效 2026-10-17)、C2 设计事实源声明(生效 2026-10-18)——两条都按文件名 日期只追新规生效日之后的卡,旧卡属 git 历史留档不回头改。2026-10-21 验收闭合批补 C3: @@ -68,7 +68,7 @@ HEADING_RE = re.compile(r"^(#{1,4})\s+") SEP_ROW_RE = re.compile(r"^\|[\s\-|:]+$") STATUS_COL_RE = re.compile( r"^(待开工|进行中|已完成\(\d{4}-\d{2}-\d{2}\)|已终止\(\d{4}-\d{2}-\d{2}\))$") -WEEKS_RE = re.compile(r"^≈(\d+(?:\.\d+)?)\s*周$") +PERIOD_RE = re.compile(r"^≈(\d+(?:\.\d+)?)\s*个工作日$") ITER_CODE_COL_RE = re.compile(r"^迭代\s*(\d+)") @@ -304,7 +304,7 @@ def cell_shape(cell, card_col=False): return "成段叙述(卡片列一格一行一卡,禁叙述文字)" return None if "。" in cell or "," in cell or len(cell) > 60: - return "成段叙述(只许路径/日期/状态词/保留字/—/≈N 周/特批标记)" + return "成段叙述(只许路径/日期/状态词/保留字/—/≈N 个工作日/特批标记)" return None @@ -325,7 +325,7 @@ def check_iter_table(block, issues, where, root): if len(cells) != 6: issues.append((where, ln, "六列数", "本行 %d 列(须恰六列)" % len(cells))) continue - code, status, cards, date, weeks, report = cells + code, status, cards, date, period, report = cells for ci, cell in enumerate(cells): bad = cell_shape(cell, card_col=(ci == 2)) if bad: @@ -347,16 +347,24 @@ def check_iter_table(block, issues, where, root): "需求卡片列 %s 相对仓库根不存在" % part)) 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 = None if week_core == "—" else WEEKS_RE.match(week_core) - if week_core != "—" and wm is None: + # 预计周期:≈N 个工作日(估时中值精确值);<5/>20 硬判红(特批标记不放行);10 2 and not any(DATE_RE.search(mk) for mk in week_marks): - issues.append((where, ln, "预计周期", - "「%s」超 2 周且无带日期特批标记〔用户特批 YYYY-MM-DD …〕" % weeks)) + "「%s」须为「≈N 个工作日」形态(精确值不取整;历史迭代不可考填「—」)" % period)) + elif pm is not None: + wd = float(pm.group(1)) + if wd < 5: + issues.append((where, ln, "预计周期", + "「%s」低于 5 个工作日硬下限,不得编入" % period)) + elif wd > 20: + issues.append((where, ln, "预计周期", + "「%s」超过 20 个工作日硬上限,特批标记不放行,须拆批" % period)) + elif wd > 10 and not any(DATE_RE.search(mk) for mk in per_marks): + issues.append((where, ln, "预计周期", + "「%s」超 10 个工作日且无带日期特批标记〔用户特批 YYYY-MM-DD …〕" % period)) # 实现报告:已完成=存在路径或退役保留字(历史报告已按「证据只留最新」退役),禁「—」 done = status_n.startswith("已完成(") report_n = norm_parens(report)