合并(写卡段复核纪律修复批·凭据化+四类分流): 解决两件用户实测缺陷——①复核没跑完就对用户称完成(grilling 只作散文纪律存在、零凭据、下游无从证伪);②复核跑完但不按 GDD 架构与 design/engineering 规约自判、把实现层发现转成问句推给用户(原文反写着「裁决归用户」「不改写方案」)。落文五面:req-card 技能补必备结构第 17 节「复核记录」(五格:轮次/复核者身份/发现/去向/处置结果,缺节=卡片不成立)+纪律「复核发现四类分流」(自判=查权威文档或查代码有唯一答案,复核者自己改卡;补写=卡里漏写,回炉补全;待裁=几种做法都不违规且代价不同才交用户;退回上游=文档线未闭合退 doc-design/美术线未闭合退 asset-ingest/架构与代码规范本身冲突退规约修订通道)+「写卡段的完成判据与呈报口径」(顺序没走完禁对用户称完成)+订正 :108/:109/:111 三处旧口径;AGENTS.md 五段流水线铁律补「卡内复核记录在位」;process-conventions §2 段三补成立凭据·段四编排四查换代为五查(新④复核记录在位·缺则禁编入)·§3 第1条「先检索后提问」扩为全段通用并禁把权威文档已答的当问题呈报·第2条给待拍板点下边界;doc-conventions §12.1「已写卡」证据项加复核报告路径;tools/pipeline_gate.py 新增卡片复核判据(REVIEW_RULE_DATE 2026-11-06 按文件名日期生效·旧卡不回头改·三条子判据:节在位/每条发现带四类去向且处置格非空/申报的 reports/复核-*.md 在盘可核)。技能面两份同文随动(.zcode 与 .qoder 的 req-card·iter-plan·iter 三份;diff 显示 .qoder 面 doc-design 尚存他批遗留漂移,本批未动、已呈报)。验证:分支三笔提交各自跑绿——python tools/pipeline_gate.py exit=0(PASS 待办条目 25·总表数据行 52·卡片口径 3 张全过)+文档域全套闸 run_all_gates.sh --docs exit=0「验收通过·无新增红」(基线 121aca40,8 道闸含流水线闸)+新判据四态自证(缺节/无去向/合规/空处置与假报告路径,红项与预期一一对应,临时卡验毕已删)+规则评估回放 56 条真实发现(自判 38·补写 14·待裁 4·退回上游 0=92.9% 本不该问用户)并据回放补出两条配套细则。存量三张卡(最新 2026-11-05)不受新判据影响。post-merge 钩子推送触发远端 CI(本批域=docs,跑闸步真跑)。
ci / gates (push) Successful in 33s
ci / gates (push) Successful in 33s
This commit is contained in:
commit
709d9a85d2
4 files changed
+79
-11
No files matched your search
@@ -110,7 +110,7 @@
|
|||||||
- **红账不清不开新批**——上一批远端跑批有真红未闭合不开新批;假红(导入缓存、user 目录未隔离那类在册环境坑)走异常分级处置,不算未闭合
|
- **红账不清不开新批**——上一批远端跑批有真红未闭合不开新批;假红(导入缓存、user 目录未隔离那类在册环境坑)走异常分级处置,不算未闭合
|
||||||
- 合回后验证 = 远端 CI 闸全绿(唯一强制**全量**验证点;唯一入口、唯一闸清单、唯一域划分与选闸算法仍只在 `tools/run_all_gates.sh`,禁在文档另列;触发与追绿语义见「运行与验证」首条与 process-conventions §1)。它兜的是跨改动面的漏网,不替代改完即测铁规;主动发起的跨域全量回归归用户。分流算法单点=`tools/ci/domain_route.sh`
|
- 合回后验证 = 远端 CI 闸全绿(唯一强制**全量**验证点;唯一入口、唯一闸清单、唯一域划分与选闸算法仍只在 `tools/run_all_gates.sh`,禁在文档另列;触发与追绿语义见「运行与验证」首条与 process-conventions §1)。它兜的是跨改动面的漏网,不替代改完即测铁规;主动发起的跨域全量回归归用户。分流算法单点=`tools/ci/domain_route.sh`
|
||||||
- **改动四类**——**需求改动**(游戏代码,含随逻辑写/改的测试代码):唯一走「写需求卡片+编入迭代批次」通道;迭代实现批禁写 `design/` 整个目录、两份根流程清单(`待办清单.md`/`体验验证清单.md`)与 `game/tests/README.md`(能力清单,归写卡段维护)(含新增/修改/删除),设计文档对它只读、是写测试与实现代码的输入依据;两份流程清单的条目状态只由流水线各段推进,实现批禁止顺手改;产出物只准写 `reports/`;合回后由远端 CI 验证(红项修复合回追绿,process-conventions §1)。**工程改动**(tools/、闸件、模拟测量工具、纯测试维护——不改变游戏行为的配套代码)、**文档设计改动**、**美术素材改动**:不写需求卡片、不编迭代批次,由用户发令走独立 worktree 直改+合回(车道铁律,commit 点零钩子检查);大体量改动(含触及代码面的工程改动如纯测试维护)同车道无特殊通道;文档设计类写入走 doc-design 技能(登记条目格式由流水线闸强制)
|
- **改动四类**——**需求改动**(游戏代码,含随逻辑写/改的测试代码):唯一走「写需求卡片+编入迭代批次」通道;迭代实现批禁写 `design/` 整个目录、两份根流程清单(`待办清单.md`/`体验验证清单.md`)与 `game/tests/README.md`(能力清单,归写卡段维护)(含新增/修改/删除),设计文档对它只读、是写测试与实现代码的输入依据;两份流程清单的条目状态只由流水线各段推进,实现批禁止顺手改;产出物只准写 `reports/`;合回后由远端 CI 验证(红项修复合回追绿,process-conventions §1)。**工程改动**(tools/、闸件、模拟测量工具、纯测试维护——不改变游戏行为的配套代码)、**文档设计改动**、**美术素材改动**:不写需求卡片、不编迭代批次,由用户发令走独立 worktree 直改+合回(车道铁律,commit 点零钩子检查);大体量改动(含触及代码面的工程改动如纯测试维护)同车道无特殊通道;文档设计类写入走 doc-design 技能(登记条目格式由流水线闸强制)
|
||||||
- 五段流水线铁律——**需求改动**(游戏代码)按「登记 → 文档设计/美术设计 → 写需求卡片 → 迭代编排 → 实现」五段推进,段间不自动流转、每段转进由用户发令;编入迭代的卡片必须设计闭合+零待裁点——需求卡片任何工作量皆可写、皆可编入迭代,工作量限制只属迭代层(迭代估时总量 <5 个工作日=「冻结待凑批」、不可开工);流水线闸 `tools/pipeline_gate.py` 强制(已注册进 run_all_gates.sh 文档域);实现段零裁断——卡片没写清=上游缺陷,停该卡退回上游,禁内联求裁(process-conventions §2,格式与状态机=doc-conventions §12)。工程/文档设计/美术素材三类改动不走写卡与编排段:(如需设计讨论)→ 用户发令 → 独立 worktree 直改 → 合回 CI(车道细则=process-conventions §1)
|
- 五段流水线铁律——**需求改动**(游戏代码)按「登记 → 文档设计/美术设计 → 写需求卡片 → 迭代编排 → 实现」五段推进,段间不自动流转、每段转进由用户发令;编入迭代的卡片必须设计闭合+零待裁点+卡内复核记录在位(2026-11-05 用户立规:复核发现按四类去向处置——自判/补写/待裁/退回上游,只有后两类归用户;复核没跑完禁对用户称完成,细则=req-card 技能「复核发现四类分流」与「写卡段的完成判据与呈报口径」)——需求卡片任何工作量皆可写、皆可编入迭代,工作量限制只属迭代层(迭代估时总量 <5 个工作日=「冻结待凑批」、不可开工);流水线闸 `tools/pipeline_gate.py` 强制(已注册进 run_all_gates.sh 文档域);实现段零裁断——卡片没写清=上游缺陷,停该卡退回上游,禁内联求裁(process-conventions §2,格式与状态机=doc-conventions §12)。工程/文档设计/美术素材三类改动不走写卡与编排段:(如需设计讨论)→ 用户发令 → 独立 worktree 直改 → 合回 CI(车道细则=process-conventions §1)
|
||||||
- MC/模拟:无数值改动零跑;档位硬闸见 `sim-data/README.md`「MC 采集档位表」,一档只能由用户发起
|
- MC/模拟:无数值改动零跑;档位硬闸见 `sim-data/README.md`「MC 采集档位表」,一档只能由用户发起
|
||||||
- 闸机轮次纪律:新码先孤立验证 → 出红只跑红件最小单元 → 长批先最小参数试车 → 开工扫坑册(process-conventions §6)
|
- 闸机轮次纪律:新码先孤立验证 → 出红只跑红件最小单元 → 长批先最小参数试车 → 开工扫坑册(process-conventions §6)
|
||||||
- **验收闭合**——每个需求点与每个行为改动都要有从真实入口进入的验收断言,可 grep 定位、在当轮真实跑批中执行并通过,判据绑被测改动特有的可观测提交面;**禁变异类测试与撤销类取证**(2026-10-24/2026-10-28 用户裁——人为制造红属伪造证据),证明做不出=停卡呈报;禁删断言/放宽阈值换绿;合回前独立验收审计未过则禁止合并(细则=test-conventions §8+iter 技能第 5 步)
|
- **验收闭合**——每个需求点与每个行为改动都要有从真实入口进入的验收断言,可 grep 定位、在当轮真实跑批中执行并通过,判据绑被测改动特有的可观测提交面;**禁变异类测试与撤销类取证**(2026-10-24/2026-10-28 用户裁——人为制造红属伪造证据),证明做不出=停卡呈报;禁删断言/放宽阈值换绿;合回前独立验收审计未过则禁止合并(细则=test-conventions §8+iter 技能第 5 步)
|
||||||
|
|||||||
@@ -144,7 +144,7 @@
|
|||||||
#### <条目名>(<YYYY-MM-DD>登记,来源=<playnote/会话提及/审计发现/批次移交>[,优先级=<P0/P1/P2>])
|
#### <条目名>(<YYYY-MM-DD>登记,来源=<playnote/会话提及/审计发现/批次移交>[,优先级=<P0/P1/P2>])
|
||||||
```
|
```
|
||||||
|
|
||||||
`优先级` 是紧急度标记,可选,规则三条:不写=默认档 P2;只有用户明示才写,会话不得自行给任何条目定档;P0 最高、P2 最低。它只服务阅读时的排序,不参与开工门、编排四查与状态机。`P0/P1/P2` 这组记号在本仓库只指待办紧急度,新文档禁另立别义。
|
`优先级` 是紧急度标记,可选,规则三条:不写=默认档 P2;只有用户明示才写,会话不得自行给任何条目定档;P0 最高、P2 最低。它只服务阅读时的排序,不参与开工门、编排五查与状态机。`P0/P1/P2` 这组记号在本仓库只指待办紧急度,新文档禁另立别义。
|
||||||
|
|
||||||
正文四属性模板:
|
正文四属性模板:
|
||||||
|
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
|
|
||||||
只写本条目自己交付的产出面,不预写下游实现批要动的面。`reports/` 下的需求卡片与批次产出物属过程件(第 11 节管辖),不计入 `文档` 档。四档与 AGENTS.md 硬红线的「改动四类」对应关系:`游戏代码`=需求改动(走写卡与编排段)、`工具代码`/`文档`/`美术素材` 三档各自对应工程改动/文档设计改动/美术素材改动三类直改通道;一条条目可以同时含多档。
|
只写本条目自己交付的产出面,不预写下游实现批要动的面。`reports/` 下的需求卡片与批次产出物属过程件(第 11 节管辖),不计入 `文档` 档。四档与 AGENTS.md 硬红线的「改动四类」对应关系:`游戏代码`=需求改动(走写卡与编排段)、`工具代码`/`文档`/`美术素材` 三档各自对应工程改动/文档设计改动/美术素材改动三类直改通道;一条条目可以同时含多档。
|
||||||
|
|
||||||
状态段用词自带所属设计线——`待文档设计`/`文档设计中`/`文档设计已闭合` 是文档线,`待美术设计`/`美术设计中`/`美术设计已闭合` 是美术线,不需要在标题另行声明走哪条线。状态一律取下例用词。状态行按**状态段累积制**书写:条目每推进一段,就把新状态段接在状态行末尾,段与段用+号连接,书写顺序=推进顺序;跨线的段一律保留、禁删(同一设计线内只留最新一段),下游段一旦写下不回收——状态履历供编排四查与开工核验比对。每段各自按状态词白名单校验,+号只作状态段连接符。
|
状态段用词自带所属设计线——`待文档设计`/`文档设计中`/`文档设计已闭合` 是文档线,`待美术设计`/`美术设计中`/`美术设计已闭合` 是美术线,不需要在标题另行声明走哪条线。状态一律取下例用词。状态行按**状态段累积制**书写:条目每推进一段,就把新状态段接在状态行末尾,段与段用+号连接,书写顺序=推进顺序;跨线的段一律保留、禁删(同一设计线内只留最新一段),下游段一旦写下不回收——状态履历供编排五查与开工核验比对。每段各自按状态词白名单校验,+号只作状态段连接符。
|
||||||
|
|
||||||
```
|
```
|
||||||
各设计线推进序列(同条目两条线并列推进时,两段各写各的):
|
各设计线推进序列(同条目两条线并列推进时,两段各写各的):
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
|
|
||||||
设计线段与下游段同条并存是合法形态:状态行里出现过的**每条设计线各自留最新一段**,跨线依赖不阻塞本条推进(文档线闭合后写卡、美术线仍未出图,就把 `文档设计已闭合` 与 `待美术设计` 并写)。「写卡前本条要落的那条设计线必须已闭合」是实现侧的执行义务,由编排段查卡片凭据核对,不靠标题声明——闸只查同线并现多段。
|
设计线段与下游段同条并存是合法形态:状态行里出现过的**每条设计线各自留最新一段**,跨线依赖不阻塞本条推进(文档线闭合后写卡、美术线仍未出图,就把 `文档设计已闭合` 与 `待美术设计` 并写)。「写卡前本条要落的那条设计线必须已闭合」是实现侧的执行义务,由编排段查卡片凭据核对,不靠标题声明——闸只查同线并现多段。
|
||||||
|
|
||||||
状态行只写状态词:去掉特批标记与「(备选)」后缀后,残留任何括号即违规。闭合类状态词(文档设计已闭合/美术设计已闭合/已写卡/已写入)的证据——设计定稿路径+版本、art-bible 条款版本、需求卡片路径、落点文档+版本——一律写在实况的关联文档清单里,由流水线闸到正文核对;已编迭代 N 段的交叉核依据=实况清单里的需求卡片路径。
|
状态行只写状态词:去掉特批标记与「(备选)」后缀后,残留任何括号即违规。闭合类状态词(文档设计已闭合/美术设计已闭合/已写卡/已写入)的证据——设计定稿路径+版本、art-bible 条款版本、需求卡片路径、复核报告路径(「已写卡」段另须报这一项,2026-11-05 用户立规;对文件名日期 ≥2026-11-06 的卡生效,旧卡不回头改,核对由 `tools/pipeline_gate.py` 的卡片复核判据到卡正文做)、落点文档+版本——一律写在实况的关联文档清单里,由流水线闸到正文核对;已编迭代 N 段的交叉核依据=实况清单里的需求卡片路径。
|
||||||
|
|
||||||
三种条目形态与一种后缀:
|
三种条目形态与一种后缀:
|
||||||
|
|
||||||
|
|||||||
@@ -23,11 +23,11 @@
|
|||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| 一·登记 | 无(闸管格式) | 待办清单条目 | 条目=标题登记元数据(日期/来源/可选优先级)+正文四属性(实况/缺口/改动面/状态);标题登记后不再变,正文随进程演进。格式与状态机权威=doc-conventions 第 12 节 |
|
| 一·登记 | 无(闸管格式) | 待办清单条目 | 条目=标题登记元数据(日期/来源/可选优先级)+正文四属性(实况/缺口/改动面/状态);标题登记后不再变,正文随进程演进。格式与状态机权威=doc-conventions 第 12 节 |
|
||||||
| 二·文档设计/美术设计 | doc-design(文档线,兼任反哺点写入)/asset-ingest(美术录入;样张素材由用户主导产出) | GDD 文档或 art-bible/过审样张素材;画面类需求另出预览图(文档线,2026-11-05 用户裁) | 用户提起或从待办清单取出;会话内进行、用户主导、禁无监管自跑;经用户点头确认心智一致才许写入文档;完成判据=待裁点清零,带未裁点的是讨论稿;设计线闭合凭据记入待办清单实况清单(文档线=文档路径+版本号,美术线=art-bible 条款版本);缺哪条线写在缺口属性,闭合与否写在状态段。画面类需求(新增画面要素/布局/配色/动效等触碰画面呈现规格的改动)设计段先出预览图=目标画面的 HTML/SVG 效果图(diagram-design 通道,AGENTS.md 图优先的同款载体),经用户人审通过才许进写卡段;预览图内嵌对应 ux/ 规格文档并随附像素级视觉判据句(§7 第 2 条同款写法);缺陷修复以现行规格与在库基线为准,不触发新预览 |
|
| 二·文档设计/美术设计 | doc-design(文档线,兼任反哺点写入)/asset-ingest(美术录入;样张素材由用户主导产出) | GDD 文档或 art-bible/过审样张素材;画面类需求另出预览图(文档线,2026-11-05 用户裁) | 用户提起或从待办清单取出;会话内进行、用户主导、禁无监管自跑;经用户点头确认心智一致才许写入文档;完成判据=待裁点清零,带未裁点的是讨论稿;设计线闭合凭据记入待办清单实况清单(文档线=文档路径+版本号,美术线=art-bible 条款版本);缺哪条线写在缺口属性,闭合与否写在状态段。画面类需求(新增画面要素/布局/配色/动效等触碰画面呈现规格的改动)设计段先出预览图=目标画面的 HTML/SVG 效果图(diagram-design 通道,AGENTS.md 图优先的同款载体),经用户人审通过才许进写卡段;预览图内嵌对应 ux/ 规格文档并随附像素级视觉判据句(§7 第 2 条同款写法);缺陷修复以现行规格与在库基线为准,不触发新预览 |
|
||||||
| 三·写需求卡片 | req-card | 需求卡片 | 设计线闭合后用户发令;新玩法/新系统/新内容必须有设计定稿前置,例外=需求性工程条目(缺陷修复/重构等改游戏行为)凭实况里的证据指认跳过设计线;配套维护类(工程债/测试基建/工具维护,不动游戏行为)=工程改动直改类,不走本段,由用户发令直改;卡片必经 grilling 多轮复核、零待裁点才成立;写完在待办清单状态记「已写卡」,卡片路径记入实况清单(防遗忘);画面类需求卡片必引设计段已人审的预览图(验收判据的判据出处行锚指向 ux/ 内嵌预览节,test-conventions §8.3 锚口径不变) |
|
| 三·写需求卡片 | req-card | 需求卡片 | 设计线闭合后用户发令;新玩法/新系统/新内容必须有设计定稿前置,例外=需求性工程条目(缺陷修复/重构等改游戏行为)凭实况里的证据指认跳过设计线;配套维护类(工程债/测试基建/工具维护,不动游戏行为)=工程改动直改类,不走本段,由用户发令直改;卡片必经 grilling 多轮复核、零待裁点才成立;复核发现按四类去向处置(2026-11-05 用户立规,定义在 req-card 技能「复核发现四类分流」:自判=查权威文档或查代码现状有唯一答案,复核者自己下结论改卡;补写=卡里漏写,回炉补全;待裁=几种做法都不违规且代价不同、影响玩法取向,才交用户;退回上游=文档设计线未闭合、美术设计线未闭合、或架构与代码规范本身冲突,停笔退对应段);成立凭据=卡内「复核记录」节+该节申报的复核报告路径,顺序未走完禁对用户称完成、禁落 commit(同 §1 第 2 条卡片复核前置判据);写完在待办清单状态记「已写卡」,卡片路径与复核报告路径记入实况清单(防遗忘);画面类需求卡片必引设计段已人审的预览图(验收判据的判据出处行锚指向 ux/ 内嵌预览节,test-conventions §8.3 锚口径不变) |
|
||||||
| 四·迭代编排 | iter-plan | roadmap 迭代行 | 编排四查:①每卡卡片文件存在 ②每卡设计闭合凭据齐(或需求性工程条目的证据指认)③估时与冻结线——所选卡估时按区间**中值**求和(单位工作日、写精确值不取整):**卡片任何工作量均可编入**(2026-10-25 用户立:工作量限制属迭代层、非卡片层);编入后迭代总量 <5 个工作日=迭代行状态「冻结待凑批」、不可开工,凑批 ≥5 后由编排段改「待开工」(迭代体量偏好,2026-10-21 用户立、2026-10-25 改冻结制);5–10 个工作日为常规区间;超过 10 个工作日须经用户确认(确认前呈报整批/拆批两案等裁,禁自行拆分或塞入),确认后迭代行随带日期特批标记;超过 20 个工作日禁止编(硬上限,用户确认也不放行,必须拆批)④写完 roadmap 行后跑流水线闸确认绿;编入未完成迭代,新开迭代行经用户确认 |
|
| 四·迭代编排 | iter-plan | roadmap 迭代行 | 编排五查:①每卡卡片文件存在 ②每卡设计闭合凭据齐(或需求性工程条目的证据指认)③估时与冻结线——所选卡估时按区间**中值**求和(单位工作日、写精确值不取整):**卡片任何工作量均可编入**(2026-10-25 用户立:工作量限制属迭代层、非卡片层);编入后迭代总量 <5 个工作日=迭代行状态「冻结待凑批」、不可开工,凑批 ≥5 后由编排段改「待开工」(迭代体量偏好,2026-10-21 用户立、2026-10-25 改冻结制);5–10 个工作日为常规区间;超过 10 个工作日须经用户确认(确认前呈报整批/拆批两案等裁,禁自行拆分或塞入),确认后迭代行随带日期特批标记;超过 20 个工作日禁止编(硬上限,用户确认也不放行,必须拆批)④每卡复核记录在位(2026-11-05 用户立规)——卡内有「复核记录」节、该节申报的复核报告文件在 `reports/` 盘上真实存在;缺则呈报退回写卡段,禁编入,本段不代跑复核也不代补记录(生效=卡片文件名日期 ≥2026-11-06,旧卡不回头改)⑤写完 roadmap 行后跑流水线闸确认绿;编入未完成迭代,新开迭代行经用户确认 |
|
||||||
| 五·实现 | iter | 代码与配置,可运行的游戏 | 需求卡片永不单独施工,统一由用户指定迭代号触发(=U0 开工令),按 iter 技能与本文 §3 执行;**本段是代码实现批:禁写 `design/` 与根规则文件,产出物只落 `reports/`(见 §3 第 12 条)**;设计权威文档(GDD/art-bible)批内一律不更新;完成人闸=实机目检清单+实现决定记录写齐即完成批内义务;画面类需求实现批另按 test-conventions §8.2 黄金图基线冻结口径执行(实跑截图入基线前用户对照预览图确认一眼,此后渲染闸自动盯) |
|
| 五·实现 | iter | 代码与配置,可运行的游戏 | 需求卡片永不单独施工,统一由用户指定迭代号触发(=U0 开工令),按 iter 技能与本文 §3 执行;**本段是代码实现批:禁写 `design/` 与根规则文件,产出物只落 `reports/`(见 §3 第 12 条)**;设计权威文档(GDD/art-bible)批内一律不更新;完成人闸=实机目检清单+实现决定记录写齐即完成批内义务;画面类需求实现批另按 test-conventions §8.2 黄金图基线冻结口径执行(实跑截图入基线前用户对照预览图确认一眼,此后渲染闸自动盯) |
|
||||||
|
|
||||||
**实现段零裁断**:实现段的输入在编排段出口已锁死(卡片零待裁点+设计闭合凭据齐+编排四查过)。实现中冒出卡片没写清的分歧=上游缺陷——停该卡、待办清单状态回退+缺口补记,退回上游;禁自答、禁内联提问求裁断;该卡停摆不阻塞同迭代其他卡。环境故障与测试红走异常分级(自救重试/记录继续/停机呈报)。代拍板白名单保留:授权发生在卡片审问阶段,实现只执行预授权;超白名单/超卡片明列范围事项记入实现报告「实现决定记录」节备案,不另立追认单。
|
**实现段零裁断**:实现段的输入在编排段出口已锁死(卡片零待裁点+设计闭合凭据齐+编排五查过)。实现中冒出卡片没写清的分歧=上游缺陷——停该卡、待办清单状态回退+缺口补记,退回上游;禁自答、禁内联提问求裁断;该卡停摆不阻塞同迭代其他卡。环境故障与测试红走异常分级(自救重试/记录继续/停机呈报)。代拍板白名单保留:授权发生在卡片审问阶段,实现只执行预授权;超白名单/超卡片明列范围事项记入实现报告「实现决定记录」节备案,不另立追认单。
|
||||||
|
|
||||||
**流水线闸**:`tools/pipeline_gate.py` 机检待办清单与 roadmap 两文件的格式与互相引用;已注册进 `run_all_gates.sh` 文档域。流程文档的条目格式、迭代行格式与状态机细则见 doc-conventions 第 12 节。
|
**流水线闸**:`tools/pipeline_gate.py` 机检待办清单与 roadmap 两文件的格式与互相引用;已注册进 `run_all_gates.sh` 文档域。流程文档的条目格式、迭代行格式与状态机细则见 doc-conventions 第 12 节。
|
||||||
|
|
||||||
@@ -36,8 +36,8 @@
|
|||||||
每个批次按以下链路执行(本清单是总索引,细则散见各规约;冲突以细则为准,发现清单过时须同批修订):
|
每个批次按以下链路执行(本清单是总索引,细则散见各规约;冲突以细则为准,发现清单过时须同批修订):
|
||||||
|
|
||||||
**开工前**
|
**开工前**
|
||||||
1. **先检索后提问**——先查在册记忆与权威文档,禁把已裁决事项当新问题重问或重踩在册坑
|
1. **先检索后提问**——先查在册记忆与权威文档,禁把已裁决事项当新问题重问或重踩在册坑。本条对五段流水线的每一段都生效,不限批次开工前(2026-11-05 用户扩面):权威文档(所属系统 owner 文档、本文与 `design/engineering/` 其余规约、architecture、术语表)或代码现状能给出唯一答案的,禁当问题呈报用户——写了卡片的复核环节也一样,详见 req-card 技能「复核发现四类分流」
|
||||||
2. **需求卡片全列备选案**——每个待拍板点列全部备选方案与代价交用户裁决,禁卡片内自行定夺
|
2. **需求卡片全列备选案**——每个待拍板点列全部备选方案与代价交用户裁决,禁卡片内自行定夺。**待拍板点的边界(2026-11-05 用户立规)**=只有「几种做法都不违反权威文档、代价不同、影响玩法或体验取向」的分叉才算待拍板点;查权威文档或查代码现状就有答案的、以及卡里漏写要补的(名字与参数、测试落点、钉住的取值),一律由写卡段与复核环节自己定下来写进卡,禁转成问句
|
||||||
3. **用户发开工令才动手**——需求卡片经用户批准(U0)后方开工
|
3. **用户发开工令才动手**——需求卡片经用户批准(U0)后方开工
|
||||||
|
|
||||||
**环境与基线**
|
**环境与基线**
|
||||||
|
|||||||
+70
-2
@@ -5,7 +5,8 @@ r"""pipeline_gate.py — 工作流程流水线闸(待办清单条目状态机
|
|||||||
职责:机检待办清单条目(标题元数据与可选优先级档名/四属性齐备与旧属性名防回潮/状态词白名单/
|
职责:机检待办清单条目(标题元数据与可选优先级档名/四属性齐备与旧属性名防回潮/状态词白名单/
|
||||||
改动面四档白名单/条件凭据/无设计线段条目的证据指认/状态段累积制/特批/正文限长双判据/零命中)
|
改动面四档白名单/条件凭据/无设计线段条目的证据指认/状态段累积制/特批/正文限长双判据/零命中)
|
||||||
与 roadmap 迭代总表(六列/状态五形态/卡片与报告存在性/编入时间与预计周期的
|
与 roadmap 迭代总表(六列/状态五形态/卡片与报告存在性/编入时间与预计周期的
|
||||||
分档放行)/需求卡片口径(C1 文档义务/C2 设计事实源/C3 改动—验收对照表/C4 验收档申报)+一次交叉核。
|
分档放行)/需求卡片口径(C1 文档义务/C2 设计事实源/C3 改动—验收对照表/C4 验收档申报/
|
||||||
|
C5 判据出处行锚/C6 复核记录)+一次交叉核。
|
||||||
约束:每红项一行「文件:行号 判据名 一句白话说明」,exit 0=全绿 / 1=有红 / 2=输入件缺失;
|
约束:每红项一行「文件:行号 判据名 一句白话说明」,exit 0=全绿 / 1=有红 / 2=输入件缺失;
|
||||||
卡片与报告存在性相对 --repo-root 解析(缺省=本文件上两级);待办清单与 roadmap 均已为新格式
|
卡片与报告存在性相对 --repo-root 解析(缺省=本文件上两级);待办清单与 roadmap 均已为新格式
|
||||||
(2026-10-18 数据整改批),本闸已注册进 tools/run_all_gates.sh 文档域(流水线闸)。
|
(2026-10-18 数据整改批),本闸已注册进 tools/run_all_gates.sh 文档域(流水线闸)。
|
||||||
@@ -66,6 +67,12 @@ GRADE_RE = re.compile(r"验收档\s*[::]\s*[高中低]")
|
|||||||
# C5 判据出处行锚(2026-11-05 立;test-conventions §8.3:需求点格须带现行文档判据句锚)
|
# C5 判据出处行锚(2026-11-05 立;test-conventions §8.3:需求点格须带现行文档判据句锚)
|
||||||
ANCHOR_RULE_DATE = (2026, 11, 5)
|
ANCHOR_RULE_DATE = (2026, 11, 5)
|
||||||
ANCHOR_RE = re.compile(r"([A-Za-z0-9_\-.\\/]+\.(?:md))\s*:\s*(\d+)")
|
ANCHOR_RE = re.compile(r"([A-Za-z0-9_\-.\\/]+\.(?:md))\s*:\s*(\d+)")
|
||||||
|
# C6 复核记录(2026-11-05 立,生效 2026-11-06;req-card 必备结构第 17 节+纪律「复核发现四类分流」)
|
||||||
|
REVIEW_RULE_DATE = (2026, 11, 6)
|
||||||
|
REVIEW_HEADING_RE = re.compile(r"^#{2,4}\s*\d*\.?\s*复核记录")
|
||||||
|
REVIEW_TARGET_WORDS = ("自判", "补写", "待裁", "退回上游")
|
||||||
|
REVIEW_HEADER_WORDS = ("轮次", "去向")
|
||||||
|
REVIEW_REPORT_RE = re.compile(r"reports/复核-[^\s()(),,、|]+\.md")
|
||||||
# 待办条目正文限长双判据(2026-11-04 立,doc-conventions §12.1:行数抓清单蔓延、字数抓单行堆砌)
|
# 待办条目正文限长双判据(2026-11-04 立,doc-conventions §12.1:行数抓清单蔓延、字数抓单行堆砌)
|
||||||
ENTRY_MAX_LINES = 12
|
ENTRY_MAX_LINES = 12
|
||||||
ENTRY_MAX_CHARS = 700
|
ENTRY_MAX_CHARS = 700
|
||||||
@@ -455,7 +462,7 @@ def cross_check(links, index, issues, where):
|
|||||||
|
|
||||||
一条目可有多张已写卡分编多个迭代(状态段累积「已编迭代 40+已编迭代 41」):
|
一条目可有多张已写卡分编多个迭代(状态段累积「已编迭代 40+已编迭代 41」):
|
||||||
对每个已编迭代号核两件——总表该行存在;该行卡片列含本条目至少一张已写卡路径。
|
对每个已编迭代号核两件——总表该行存在;该行卡片列含本条目至少一张已写卡路径。
|
||||||
哪张卡编哪个迭代的卡级映射由编排四查与人工核验,闸不猜卡级映射。
|
哪张卡编哪个迭代的卡级映射由编排五查与人工核验,闸不猜卡级映射。
|
||||||
"""
|
"""
|
||||||
for line, no, cards in links:
|
for line, no, cards in links:
|
||||||
row = index.get(no)
|
row = index.get(no)
|
||||||
@@ -641,6 +648,55 @@ def check_ledger(text, path, when, issues, root):
|
|||||||
"表内没有数据行"))
|
"表内没有数据行"))
|
||||||
|
|
||||||
|
|
||||||
|
def check_review(lines, start, path, issues, root):
|
||||||
|
"""C6 复核记录的单节校验(req-card 必备结构第 17 节,生效 2026-11-06)。
|
||||||
|
|
||||||
|
只查结构与可核性:节内每条记录行都要带四类去向之一(自判/补写/待裁/退回上游),
|
||||||
|
表格行的处置结果格(末格)非空;节内须申报 reports/复核-*.md 路径且该文件在盘上存在。
|
||||||
|
分流分得对不对属语义判断,本闸不判。返回节末行下标(不含)。
|
||||||
|
"""
|
||||||
|
end = len(lines)
|
||||||
|
for i in range(start + 1, len(lines)):
|
||||||
|
if lines[i].strip().startswith("#"):
|
||||||
|
end = i
|
||||||
|
break
|
||||||
|
records = 0
|
||||||
|
for i in range(start + 1, end):
|
||||||
|
s = lines[i].strip()
|
||||||
|
if not s or s.startswith("|") and SEP_ROW_RE.match(s):
|
||||||
|
continue
|
||||||
|
is_row = s.startswith("|")
|
||||||
|
is_bullet = bool(re.match(r"^[-*]\s+", s))
|
||||||
|
if not (is_row or is_bullet):
|
||||||
|
continue
|
||||||
|
if any(mark in s for mark in REVIEW_HEADER_WORDS):
|
||||||
|
continue
|
||||||
|
if not any(word in s for word in REVIEW_TARGET_WORDS):
|
||||||
|
issues.append((str(path), i + 1, "复核去向未标",
|
||||||
|
"该条复核记录缺四类去向之一(自判/补写/待裁/退回上游)——"
|
||||||
|
"先按 req-card「复核发现四类分流」判归属,前两类禁转成问句呈报用户"))
|
||||||
|
continue
|
||||||
|
if is_row:
|
||||||
|
cells = row_cells(s)
|
||||||
|
if not cells or not cells[-1].strip():
|
||||||
|
issues.append((str(path), i + 1, "复核处置未填",
|
||||||
|
"处置结果格为空——须写改了卡内哪一节、退给了哪一段、或用户裁决的结论"))
|
||||||
|
records += 1
|
||||||
|
if records == 0:
|
||||||
|
issues.append((str(path), start + 1, "复核记录空节",
|
||||||
|
"「复核记录」节内没有一条发现记录——卡片必经对抗复核并逐轮登记"))
|
||||||
|
sec = "\n".join(lines[start:end])
|
||||||
|
reports = REVIEW_REPORT_RE.findall(sec)
|
||||||
|
if not reports:
|
||||||
|
issues.append((str(path), start + 1, "复核报告未申报",
|
||||||
|
"「复核记录」节末须申报复核报告落盘路径 reports/复核-<批名>-<日期>.md"))
|
||||||
|
for rel in reports:
|
||||||
|
if not (root / rel).is_file():
|
||||||
|
issues.append((str(path), start + 1, "复核报告不可核",
|
||||||
|
"申报的复核报告不在盘上:%s" % rel))
|
||||||
|
return end
|
||||||
|
|
||||||
|
|
||||||
def check_cards(root, issues):
|
def check_cards(root, issues):
|
||||||
"""C1 文档义务口径(生效 2026-10-17)+C2 设计事实源声明(生效 2026-10-18)
|
"""C1 文档义务口径(生效 2026-10-17)+C2 设计事实源声明(生效 2026-10-18)
|
||||||
+C3 改动—验收对照表结构(生效 2026-10-21)。
|
+C3 改动—验收对照表结构(生效 2026-10-21)。
|
||||||
@@ -654,6 +710,8 @@ def check_cards(root, issues):
|
|||||||
能力行列(2026-10-29 起)既有与新增的名称都须在 game/tests/README.md 能力表在场
|
能力行列(2026-10-29 起)既有与新增的名称都须在 game/tests/README.md 能力表在场
|
||||||
(新增=写卡同批入表,test-conventions §8.3);至少一行;必填格非空;全文含「验收审计」声明。
|
(新增=写卡同批入表,test-conventions §8.3);至少一行;必填格非空;全文含「验收审计」声明。
|
||||||
语义覆盖不在此判。
|
语义覆盖不在此判。
|
||||||
|
C6 判据(生效 2026-11-06):有「复核记录」节;节内每条发现记录带四类去向之一
|
||||||
|
(自判/补写/待裁/退回上游)且表格行处置格非空;节内申报 reports/复核-*.md 且文件在盘。
|
||||||
"""
|
"""
|
||||||
dirn = root / CARD_DIR
|
dirn = root / CARD_DIR
|
||||||
if not dirn.is_dir():
|
if not dirn.is_dir():
|
||||||
@@ -680,6 +738,16 @@ def check_cards(root, issues):
|
|||||||
issues.append((str(path), 1, "验收档未申报",
|
issues.append((str(path), 1, "验收档未申报",
|
||||||
"须在卡片头部信息区申报「验收档:高/中/低」(2026-11-05 起,"
|
"须在卡片头部信息区申报「验收档:高/中/低」(2026-11-05 起,"
|
||||||
"test-conventions §8.3)"))
|
"test-conventions §8.3)"))
|
||||||
|
if when >= REVIEW_RULE_DATE:
|
||||||
|
lines = text.splitlines()
|
||||||
|
head = next((i for i, raw in enumerate(lines)
|
||||||
|
if REVIEW_HEADING_RE.match(raw.strip())), None)
|
||||||
|
if head is None:
|
||||||
|
issues.append((str(path), 1, "复核记录缺失",
|
||||||
|
"缺「复核记录」节——卡片必经对抗复核,逐轮发现与处置须登记在案"
|
||||||
|
"(req-card 必备结构第 17 节,2026-11-06 起生效)"))
|
||||||
|
else:
|
||||||
|
check_review(lines, head, path, issues, root)
|
||||||
if when < SYNC_RULE_DATE:
|
if when < SYNC_RULE_DATE:
|
||||||
continue
|
continue
|
||||||
in_sec = False
|
in_sec = False
|
||||||
|
|||||||
Reference in new issue
Block a user