Commit d4b9e53d58f33303c5d1b04222d97fd56491395f
1 parent
e9e38982
perf(coding-start): 开启 parallel.features——同模块内后端 REQ 的 tdd/verify/review 段并发
原本刻意不传、维持缺省关闭(待 Task 14 收益评估)。现开启:一个模块内的多个 REQ 不再严格串行走完整条流水线,文件集不相交且不改 schema 的 REQ 进同一批 并发跑 tdd→verify→review→fix(批宽缺省 2)。 准入是 JS 确定性计算(文件集两两不相交 ∧ schemaChange=false),不信 LLM 单方 判断;隔离靠 feature worktree + 准入排除 schema 改动 + feature 专属测试库; tdd/verify 不起栈不占固定端口,故无需 stackLock。 全链路 fail-open:facts 提取失败 / 准入不过 / lane 建失败一律退回串行链, 不新增 halt 点。逃生口 features: false。 coding.mjs 未改动——featureBatchRun 及其准入闸本就实现完整,此前只是没打开开关。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Showing
1 changed file
with
4 additions
and
2 deletions
skills/coding/coding-start/SKILL.md
| @@ -98,14 +98,16 @@ Workflow({ | @@ -98,14 +98,16 @@ Workflow({ | ||
| 98 | args: { | 98 | args: { |
| 99 | projectRoot: "<git rev-parse --show-toplevel 的 stdout>", | 99 | projectRoot: "<git rev-parse --show-toplevel 的 stdout>", |
| 100 | pluginRoot: "${CLAUDE_PLUGIN_ROOT}", | 100 | pluginRoot: "${CLAUDE_PLUGIN_ROOT}", |
| 101 | - parallel: { modules: true, maxWidth: 3 } | 101 | + parallel: { modules: true, maxWidth: 3, features: true } |
| 102 | } | 102 | } |
| 103 | }) | 103 | }) |
| 104 | ``` | 104 | ``` |
| 105 | 105 | ||
| 106 | > `pluginRoot` 供 coding.mjs 调用插件 `lib/req-ledger.mjs` 在首跑时自动建立需求台账基线(P1#3,使日后 `/add-req` 能识别增量、免空跑);缺省则该增强静默跳过。 | 106 | > `pluginRoot` 供 coding.mjs 调用插件 `lib/req-ledger.mjs` 在首跑时自动建立需求台账基线(P1#3,使日后 `/add-req` 能识别增量、免空跑);缺省则该增强静默跳过。 |
| 107 | > | 107 | > |
| 108 | -> `parallel` 是模块级并行总开关:`modules: true` 时 coding.mjs 先跑调度器(LLM 只输出模块间依赖边,JS 做确定性拓扑波次),同波次 ≥2 个后端模块各自在 lane worktree + lane 测试库 + 专属 migration 版本段内并行推进;任何调度/隔离环节失败一律 fail-open 降级串行,绝不因并行机制 halt。**逃生口**:改传 `parallel: { modules: false }`(或整个不传 `parallel`)即完全回退现行串行路径。`features`(feature 级并行)**刻意不传**——维持缺省关闭,待并行化计划 Task 14 收益评估通过后才在此处开启(附录补 1)。 | 108 | +> `parallel` 是模块级并行总开关:`modules: true` 时 coding.mjs 先跑调度器(LLM 只输出模块间依赖边,JS 做确定性拓扑波次),同波次 ≥2 个后端模块各自在 lane worktree + lane 测试库 + 专属 migration 版本段内并行推进;任何调度/隔离环节失败一律 fail-open 降级串行,绝不因并行机制 halt。**逃生口**:改传 `parallel: { modules: false }`(或整个不传 `parallel`)即完全回退现行串行路径。 |
| 109 | +> | ||
| 110 | +> `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<n>`)+ feature 专属测试库;tdd/verify 不起栈不占固定端口,故无需 stackLock——这也是它**只收窄到后端 REQ、不含前端**的原因(FE 的 e2e 要打穿 vite/playwright/后端三层端口配置,收益比不成立)。全链路 fail-open:facts 提取失败 / 准入不过 / lane 建失败一律退回串行链,**绝不因并行机制新增 halt 点**;跨批保持 docs/02 原序。**逃生口**:改传 `features: false`(或删掉该键)即回退逐 REQ 串行。 | ||
| 109 | > | 111 | > |
| 110 | > `frontendOverlap`(前端 jsdom-only 重叠)**同样刻意不传**——维持缺省关闭。开启(`parallel: { modules: true, maxWidth: 3, frontendOverlap: true }`)时,前端**不依赖后端**的部分(骨架 + spec/plan + tdd 的 jsdom 任务 + vitest verify)在独立前端 worktree 与后端波次**并发**跑,打中间 tag `fe-code-done/<FE>`;后端全部 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 点。 | 112 | > `frontendOverlap`(前端 jsdom-only 重叠)**同样刻意不传**——维持缺省关闭。开启(`parallel: { modules: true, maxWidth: 3, frontendOverlap: true }`)时,前端**不依赖后端**的部分(骨架 + spec/plan + tdd 的 jsdom 任务 + vitest verify)在独立前端 worktree 与后端波次**并发**跑,打中间 tag `fe-code-done/<FE>`;后端全部 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 点。 |
| 111 | 113 |