Commit b63a678285333600eb8e0c2c993cd2078f3b4733

Authored by yanghl
1 parent 1251c274

coding.mjs: 调度提示修复并行——order 边不再默认保留 docs/02 全序

rule 1 翻转:docs/02 § 二 列出顺序只是排版次序、不构成依赖;order 边
仅在 docs/06(或 REQ 卡)显式声明"X 必先于 Y"时才加。明确堵死本次实测的
误读——对已完成模块的 fk/api 证据绝不构成两个待跑模块间的 order 理由
(scheduler 曾拿 PUR→BAC[fk] 当借口给 PUR←SAL 加链式 order 边)。两个待跑
模块间无 fk/api/seed/共享表/docs 显式约束 → 不加边、落同一波并行(默认而非例外)。

保守偏置同步收窄:"不确定"仅指怀疑真实依赖却证据不全,绝不把"docs/02 里
靠后"当不确定理由——否则该"最高优先级"段会盖过 rule 1。

实测背景(xlyClaude13):待跑 PUR/SAL/USR 表归属不相交、彼此无真实依赖,
旧提示却链式 order 串成 USR→SAL→PUR,每波仅 1 ready,maxWidth=3 形同虚设。
修复后三者应进同一波 3 路并行。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Showing 1 changed file with 2 additions and 2 deletions
workflows/coding.mjs
@@ -364,7 +364,7 @@ function schedulerPrompt(todoBackendIds, allBackendIds, root) { @@ -364,7 +364,7 @@ function schedulerPrompt(todoBackendIds, allBackendIds, root) {
364 '**绝不输出"并行组 / 波次"**——并行性是全局属性,由脚本侧拓扑推导;你只做局部、有证据可查的判断。', 364 '**绝不输出"并行组 / 波次"**——并行性是全局属性,由脚本侧拓扑推导;你只做局部、有证据可查的判断。',
365 '', 365 '',
366 '## 保守偏置(最高优先级)', 366 '## 保守偏置(最高优先级)',
367 - '不确定就加边(kind=uncertain)。错误串行只损失时间,错误并行损失正确性。', 367 + '对**真实依赖**(fk/api/seed/共享表/docs 显式约束)拿不准时就加边(kind=uncertain)——错误串行只损失时间,错误并行损失正确性。但"不确定"**仅指**怀疑存在真实依赖却证据不全;**绝不**把"在 docs/02 里靠后 / 排版顺序靠后"当作不确定理由——列序不是依赖(见 order 规则)。',
368 '', 368 '',
369 '## 待跑后端模块(只对它们逐项输出 deps;`frontend-phase` 不在你的职责内——脚本硬规则强制它依赖全部后端模块)', 369 '## 待跑后端模块(只对它们逐项输出 deps;`frontend-phase` 不在你的职责内——脚本硬规则强制它依赖全部后端模块)',
370 todoBackendIds.map(id => `- \`${id}\``).join('\n'), 370 todoBackendIds.map(id => `- \`${id}\``).join('\n'),
@@ -373,7 +373,7 @@ function schedulerPrompt(todoBackendIds, allBackendIds, root) { @@ -373,7 +373,7 @@ function schedulerPrompt(todoBackendIds, allBackendIds, root) {
373 allBackendIds.map(id => `- \`${id}\``).join('\n'), 373 allBackendIds.map(id => `- \`${id}\``).join('\n'),
374 '', 374 '',
375 '## 边规则(按证据来源定 kind;方向:`dependsOn` 列出的是"必须先完成"的模块)', 375 '## 边规则(按证据来源定 kind;方向:`dependsOn` 列出的是"必须先完成"的模块)',
376 - `1. **order**(人定全序,默认全保留):\`${root}/docs/02-开发计划.md § 二 开发顺序清单\` 的模块顺序默认逐字保留——每个待跑模块对其在 docs/02 顺序中的**紧邻前驱**(待跑清单序)输出一条 order 边(链式边传递地保留全序)。**只有当**该模块与其全部前序待跑模块**逐对**都查不到任何 fk/api/seed 证据、**且** \`${root}/docs/06-实现策略.md\` 未对任何一对声明顺序约束时,才可松开(不输出该边);逐对核查中任一对命中证据 → 对该对输出对应 kind 的边。松开是例外,保留是默认。`, 376 + `1. **order**(仅 docs/06 显式顺序约束才加;docs/02 列序**不是**依赖):\`${root}/docs/02-开发计划.md § 二 开发顺序清单\` 的列出顺序**只是开发计划的排版次序,绝不构成依赖**——**绝不**因某模块"在 docs/02 里靠后 / 是另一模块的紧邻后继"就对其前驱输出 order 边。order 边**只在** \`${root}/docs/06-实现策略.md\`(或 \`${root}/docs/01-需求清单/\` REQ 卡)**显式声明**"模块 X 必须先于模块 Y 完成"这类顺序约束时才输出,evidence 写"文件 + 小节 + 原文约束"。**关键**:对**已完成模块**(不在待跑清单内)的 fk/api 证据**绝不构成**两个待跑模块之间的 order 理由——order 只看**待跑模块两两之间**显式声明的顺序约束。两个待跑模块间查不到 fk/api/seed/共享表/docs/06 显式顺序约束 → 对该对**不加边**(让它们落进同一波并行,这是默认而非例外)。`,
377 `2. **fk**:\`${root}/docs/03-数据库设计文档.md\` 中本模块归属表的外键引用了另一模块归属的表 → 本模块依赖对方。evidence 写"docs/03 + 表名.外键列 → 被引表"。`, 377 `2. **fk**:\`${root}/docs/03-数据库设计文档.md\` 中本模块归属表的外键引用了另一模块归属的表 → 本模块依赖对方。evidence 写"docs/03 + 表名.外键列 → 被引表"。`,
378 `3. **api**:\`${root}/docs/05-API接口契约.md\` 中本模块消费另一模块提供的端点,或 \`${root}/docs/01-需求清单/\` REQ 卡「依赖接口」字段指向对方模块端点 → api 边。evidence 写"文件 + 端点路径"。`, 378 `3. **api**:\`${root}/docs/05-API接口契约.md\` 中本模块消费另一模块提供的端点,或 \`${root}/docs/01-需求清单/\` REQ 卡「依赖接口」字段指向对方模块端点 → api 边。evidence 写"文件 + 端点路径"。`,
379 '4. **seed**:演示种子跨模块主键引用(本模块种子数据需引用对方模块表已存在的主键)→ seed 边。evidence 写引用的表与主键区间出处。', 379 '4. **seed**:演示种子跨模块主键引用(本模块种子数据需引用对方模块表已存在的主键)→ seed 边。evidence 写引用的表与主键区间出处。',