From d4b9e53d58f33303c5d1b04222d97fd56491395f Mon Sep 17 00:00:00 2001 From: yanghl Date: Wed, 22 Jul 2026 21:07:34 +0800 Subject: [PATCH] perf(coding-start): 开启 parallel.features——同模块内后端 REQ 的 tdd/verify/review 段并发 --- skills/coding/coding-start/SKILL.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/skills/coding/coding-start/SKILL.md b/skills/coding/coding-start/SKILL.md index 4a6e259..227143e 100644 --- a/skills/coding/coding-start/SKILL.md +++ b/skills/coding/coding-start/SKILL.md @@ -98,14 +98,16 @@ Workflow({ args: { projectRoot: "", pluginRoot: "${CLAUDE_PLUGIN_ROOT}", - parallel: { modules: true, maxWidth: 3 } + parallel: { modules: true, maxWidth: 3, features: true } } }) ``` > `pluginRoot` 供 coding.mjs 调用插件 `lib/req-ledger.mjs` 在首跑时自动建立需求台账基线(P1#3,使日后 `/add-req` 能识别增量、免空跑);缺省则该增强静默跳过。 > -> `parallel` 是模块级并行总开关:`modules: true` 时 coding.mjs 先跑调度器(LLM 只输出模块间依赖边,JS 做确定性拓扑波次),同波次 ≥2 个后端模块各自在 lane worktree + lane 测试库 + 专属 migration 版本段内并行推进;任何调度/隔离环节失败一律 fail-open 降级串行,绝不因并行机制 halt。**逃生口**:改传 `parallel: { modules: false }`(或整个不传 `parallel`)即完全回退现行串行路径。`features`(feature 级并行)**刻意不传**——维持缺省关闭,待并行化计划 Task 14 收益评估通过后才在此处开启(附录补 1)。 +> `parallel` 是模块级并行总开关:`modules: true` 时 coding.mjs 先跑调度器(LLM 只输出模块间依赖边,JS 做确定性拓扑波次),同波次 ≥2 个后端模块各自在 lane worktree + lane 测试库 + 专属 migration 版本段内并行推进;任何调度/隔离环节失败一律 fail-open 降级串行,绝不因并行机制 halt。**逃生口**:改传 `parallel: { modules: false }`(或整个不传 `parallel`)即完全回退现行串行路径。 +> +> `features: true`(feature 级并行,2026-07-22 开启):同一后端模块内多个 REQ 的 **tdd→verify→review→fix** 段并发跑。执行序见 `featureBatchRun`——① spec+plan 仍串行在模块树产出(plan 要 Grep 现有代码定位文件边界)→ ② 逐 REQ 提取 `PLAN_FACTS`(改哪些文件 / 是否动 schema)→ ③ **JS 确定性分批**:批内两两文件集不相交 ∧ 全部不改 schema ∧ 批宽 ≤ `featureMaxWidth`(缺省 2,可另传)。准入的灵魂是「**LLM 提议、JS 验证**」——文件集相交与否可确定性计算,不信 LLM 单方判断。隔离三前提:feature worktree(独立 index)+ 准入排除 schema 改动(不撞 `V`)+ feature 专属测试库;tdd/verify 不起栈不占固定端口,故无需 stackLock——这也是它**只收窄到后端 REQ、不含前端**的原因(FE 的 e2e 要打穿 vite/playwright/后端三层端口配置,收益比不成立)。全链路 fail-open:facts 提取失败 / 准入不过 / lane 建失败一律退回串行链,**绝不因并行机制新增 halt 点**;跨批保持 docs/02 原序。**逃生口**:改传 `features: false`(或删掉该键)即回退逐 REQ 串行。 > > `frontendOverlap`(前端 jsdom-only 重叠)**同样刻意不传**——维持缺省关闭。开启(`parallel: { modules: true, maxWidth: 3, frontendOverlap: true }`)时,前端**不依赖后端**的部分(骨架 + spec/plan + tdd 的 jsdom 任务 + vitest verify)在独立前端 worktree 与后端波次**并发**跑,打中间 tag `fe-code-done/`;后端全部 done 后才 reconcile(合 default→frontend-phase)并跑 phase2(e2e 任务 + review + req-done + 行为门 + 测试闸 + 里程碑,主根全栈)。重叠期前端无栈/无固定端口/无 DB,补 8/9/10 不变量与端口/lane 安全全部保住。**风险**:前端对 docs/05 契约写代码,后端编码期若偏离契约,错误拖到 phase2 e2e/行为门才暴露、需返工——故列为显式评估开关,收益/正确性评估通过后才在此处开启(设计:`docs/superpowers/plans/2026-06-15-frontend-overlap-jsdom.md`)。缺省关 / phase1 失败 / 后端未全 done 一律回退现行终波路径,绝不新增 halt 点。 -- libgit2 0.22.2