From 845216266516385435bd7f26341eaa3587e7fcac Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Tue, 27 Oct 2026 04:08:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E6=8E=92(=E8=BF=AD=E4=BB=A341)?= =?UTF-8?q?=EF=BC=8B=E9=97=B8=E4=BA=A4=E5=8F=89=E6=A0=B8=E8=AF=AD=E4=B9=89?= =?UTF-8?q?=E6=89=A9=E5=B1=95:=20=E5=8D=A1=E2=91=A1=E6=A0=B8=E5=BF=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9D=A2=E7=BB=93=E6=9E=84=E6=94=B6=E6=95=9B?= =?UTF-8?q?=E6=89=B9(=E2=89=887.9d)=E2=86=92=E5=8D=A1=E2=91=A2=E5=91=88?= =?UTF-8?q?=E7=8E=B0=E5=B1=82=E7=BB=93=E6=9E=84=E6=94=B6=E6=95=9B=E6=89=B9?= =?UTF-8?q?(=E2=89=885.3d)=E7=BC=96=E5=85=A5=E8=BF=AD=E4=BB=A341,=E5=90=88?= =?UTF-8?q?=E8=AE=A1=E2=89=8813.15=E4=B8=AA=E5=B7=A5=E4=BD=9C=E6=97=A5?= =?UTF-8?q?=E3=80=94=E7=94=A8=E6=88=B7=E7=89=B9=E6=89=B9=202026-10-27=20?= =?UTF-8?q?=E8=B6=85=2010=20=E4=B8=AA=E5=B7=A5=E4=BD=9C=E6=97=A5=E3=80=95?= =?UTF-8?q?=E2=80=94=E2=80=94=E4=B8=89=E8=BF=AD=E4=BB=A3/=E4=B8=A4?= =?UTF-8?q?=E8=BF=AD=E4=BB=A3+=E7=89=B9=E6=89=B9=E4=B8=A4=E6=A1=88?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=A3=81=E5=90=8E=E6=A1=88;=E5=8D=A1?= =?UTF-8?q?=E5=BA=8F=3D=E6=89=A7=E8=A1=8C=E9=A1=BA=E5=BA=8F;=E5=BE=85?= =?UTF-8?q?=E5=8A=9E=E6=9D=A1=E7=9B=AE=E7=8A=B6=E6=80=81=E6=8E=A8=E8=BF=9B?= =?UTF-8?q?=E5=B7=B2=E7=BC=96=E8=BF=AD=E4=BB=A341;=E9=97=B8=E4=BF=AE?= =?UTF-8?q?=E8=AE=A2=3D=E4=BA=A4=E5=8F=89=E6=A0=B8=E4=BB=8E=E3=80=8C?= =?UTF-8?q?=E6=9D=A1=E7=9B=AE=E5=8D=95=E8=BF=AD=E4=BB=A3=E5=8F=B7=C3=97?= =?UTF-8?q?=E5=8D=95=E5=8D=A1=E8=B7=AF=E5=BE=84=E3=80=8D=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E4=B8=BA=E3=80=8C=E6=AF=8F=E5=B7=B2=E7=BC=96=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E6=AE=B5=C3=97=E6=9D=A1=E7=9B=AE=E5=8D=A1=E9=9B=86any=E8=A6=86?= =?UTF-8?q?=E7=9B=96=E3=80=8D(check=5Fstatus=E8=BF=94=E5=9B=9E=E5=B7=B2?= =?UTF-8?q?=E7=BC=96=E8=BF=AD=E4=BB=A3=E5=8F=B7=E5=88=97=E8=A1=A8/links?= =?UTF-8?q?=E6=8C=89=E6=AE=B5=E5=B1=95=E5=BC=80/cross=5Fcheck=E6=8C=89?= =?UTF-8?q?=E8=A1=8C=E6=A0=B8=E6=9D=A1=E7=9B=AE=E8=87=B3=E5=B0=91=E4=B8=80?= =?UTF-8?q?=E5=8D=A1)=E2=80=94=E2=80=94=E4=B8=80=E6=9D=A1=E7=9B=AE?= =?UTF-8?q?=E5=A4=9A=E5=8D=A1=E5=88=86=E7=BC=96=E5=A4=9A=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E6=98=AF=E6=9C=AC=E6=AC=A1=E7=BC=96=E6=8E=92=E7=9A=84=E7=9C=9F?= =?UTF-8?q?=E5=AE=9E=E5=BD=A2=E6=80=81,=E6=97=A7=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E5=8D=95=E5=80=BC=E5=8F=96=E6=9C=AB=E6=AE=B5=E6=BC=8F=E6=A0=B8?= =?UTF-8?q?40=E6=AE=B5=E4=B8=9441=E6=AE=B5=E8=AF=AF=E6=AF=9440=E8=A1=8C?= =?UTF-8?q?=E5=8D=A1;=E5=8D=A1=E7=BA=A7=E6=98=A0=E5=B0=84(=E5=93=AA?= =?UTF-8?q?=E5=BC=A0=E5=8D=A1=E7=BC=96=E5=93=AA=E4=B8=AA=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?)=E4=BB=8D=E5=BD=92=E7=BC=96=E6=8E=92=E5=9B=9B=E6=9F=A5?= =?UTF-8?q?=E4=B8=8E=E4=BA=BA=E5=B7=A5,=E9=97=B8=E5=8F=AA=E9=98=B2?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E6=96=AD=E8=A3=82;pipeline=5Fgate=E7=BB=BF(5?= =?UTF-8?q?2=E6=9D=A1=E7=9B=AE/41=E8=A1=8C/4=E9=93=BE/12=E5=8D=A1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roadmap.md | 1 + tools/pipeline_gate.py | 31 +++++++++++++++++++------------ 待办清单.md | 2 +- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/roadmap.md b/roadmap.md index e43ce854..ecd6f58a 100644 --- a/roadmap.md +++ b/roadmap.md @@ -74,6 +74,7 @@ | 迭代 38 | 已完成(2026-10-26) | 已退役(git 历史可考) | 2026-10-26 | ≈5.225 个工作日 | 已退役(git 历史可考) | | 迭代 39 | 待开工 | reports/需求卡片-冒险域拆件与账本实体化批-2026-10-26.md
reports/需求卡片-同调配装充能域封装批-2026-10-26.md
reports/需求卡片-技能池情境条件触发器批-2026-10-26.md | 2026-10-26 | ≈10.15 个工作日〔用户特批 2026-10-26 超 10 个工作日〕 | — | | 迭代 40 | 待开工 | reports/需求卡片-B1战斗域拆件批-2026-10-27.md
reports/需求卡片-结构小件定点修批-2026-10-26.md | 2026-10-27 | ≈6.225 个工作日 | — | +| 迭代 41 | 待开工 | reports/需求卡片-核心数据面结构收敛批-2026-10-27.md
reports/需求卡片-呈现层结构收敛批-2026-10-27.md | 2026-10-27 | ≈13.15 个工作日〔用户特批 2026-10-27 超 10 个工作日〕 | — | - 迭代 38 收口为带红合并〔用户特批 2026-10-26〕:09 静态扫描 S13 gdstyle 恶化 2 条经批准记入基线存量红(git 提交 c4c69701),卡② 停卡退上游,处方已于 2026-10-26 修订定稿 v1.3(git 提交 b3ea7532),随「gdstyle 存量债全量清偿」条目波 7 待编排。 - 历史行的「—」= 该列事实不可考:迭代 1~8 早于需求卡片制;编排时点与预计周期不再回溯,细节查 git 提交史。 diff --git a/tools/pipeline_gate.py b/tools/pipeline_gate.py index d6ee448b..fe707606 100644 --- a/tools/pipeline_gate.py +++ b/tools/pipeline_gate.py @@ -148,7 +148,7 @@ def check_segment(word, line, issues, where): def check_status(raw, line, issues, where): - """判据 3+状态段累积制(§12.1)+特批/备选。返回 (状态词列表, 已编迭代号|None)。 + """判据 3+状态段累积制(§12.1)+特批/备选。返回 (状态词列表, 已编迭代号列表|[])。 累积制:按+切段后段数不限,逐段各自合法;再查一条结构约束——下游段 (待写卡/已写卡/已编迭代)在场时禁残留未闭合设计段(带日期特批可豁免)。 @@ -177,13 +177,13 @@ def check_status(raw, line, issues, where): if not segs: issues.append((where, line, "状态词非法", "状态行内容为空")) return [], None - words, iter_no = [], None + words, iter_nos = [], [] for seg in segs: w, it = check_segment(seg, line, issues, where) if w: words.append(w) if it is not None: - iter_no = it + iter_nos.append(it) # 同一设计线只留最新一段:并现两段说明推进时忘了收旧段,或把另一条线的段 # 误写进本线条目;跨条设计线的未闭合依赖(如文档线已闭合写卡、美术线仍待设计)合法。 for track, name in ((DOC_DESIGN_WORDS, "文档线"), (ART_DESIGN_WORDS, "美术线")): @@ -191,7 +191,7 @@ def check_status(raw, line, issues, where): if len(hit) > 1: issues.append((where, line, "设计线段并现", "%s同时出现 %s(同线只留最新一段,§12.1)" % (name, "、".join(hit)))) - return words, iter_no + return words, iter_nos def check_todo(text, issues, where, root): @@ -228,7 +228,7 @@ def check_todo(text, issues, where, root): issues.append((where, line, "属性缺失", "条目缺「**%s**」属性" % req)) if "状态" not in attrs: continue - words, iter_no = check_status(attrs["状态"], attr_line["状态"], issues, where) + words, iter_nos = check_status(attrs["状态"], attr_line["状态"], issues, where) # 改动面:四档取多,+连接,禁重复、禁自造词 if "改动面" in attrs: parts = [p.strip() for p in SURFACE_SEP_RE.split(attrs["改动面"]) if p.strip()] @@ -297,8 +297,9 @@ def check_todo(text, issues, where, root): if not need_gap and words and "缺口" in attrs: issues.append((where, line, "缺口属性", "状态为 %s,设计已闭合/后段不得残留「**缺口**」属性" % "、".join(words))) - if iter_no is not None: - links.append((line, iter_no, cards[0] if cards else None)) + if iter_nos: + for no in iter_nos: + links.append((line, no, cards)) return links @@ -423,17 +424,23 @@ def check_roadmap(text, issues, where, root): def cross_check(links, index, issues, where): - """唯一一处交叉核:已编迭代 N ↔ 总表迭代 N 行的需求卡片列。""" - for line, no, card in links: + """唯一一处交叉核:已编迭代 N ↔ 总表迭代 N 行的需求卡片列。 + + 一条目可有多张已写卡分编多个迭代(状态段累积「已编迭代 40+已编迭代 41」): + 对每个已编迭代号核两件——总表该行存在;该行卡片列含本条目至少一张已写卡路径。 + 哪张卡编哪个迭代的卡级映射由编排四查与人工核验,闸不猜卡级映射。 + """ + for line, no, cards in links: row = index.get(no) if row is None: issues.append((where, line, "交叉核", "迭代总表无迭代 %d 行" % no)) - elif card is None: + elif not cards: issues.append((where, line, "交叉核", "已编迭代 %d 但条目无可引的已写卡路径(须先已写卡)" % no)) - elif card not in row[1]: + elif not any(c in row[1] for c in cards): issues.append((where, line, "交叉核", - "迭代 %d 行卡片列不含本条目已写卡路径 %s" % (no, card))) + "迭代 %d 行卡片列不含本条目任何已写卡路径(%s)" + % (no, "/".join(cards[:3])))) def card_date(path): diff --git a/待办清单.md b/待办清单.md index abf112d2..6942a0c7 100644 --- a/待办清单.md +++ b/待办清单.md @@ -18,7 +18,7 @@ **改动面**:游戏代码+工具代码 -**状态**:文档设计已闭合+已写卡+已编迭代 40 +**状态**:文档设计已闭合+已写卡+已编迭代 40+已编迭代 41 #### 波 0:gdstyle 基线刷新——清 18 陈旧键+登记迭代 40 还债水位(2026-10-27 登记,来源=会话提及)