把普查清单 open 任务切成可并行车道:A(aigc后端/DB·组B→source列→R6 车道内串行)/B(SAA worker)/ C(质量harness成本)/D(prompt-gatespec 双侧同步)/E(开闸前置 G0创作页核实 + G1 GP9 staging验); game-studio/ 全域划归另一 session,接缝(FeedCard templateName / sort_score / SSE)走契约先行 + 通知。 Flyway 版本预分配 V16/V17 防抢号;跨车道依赖 + 创始人卡点(labels.json/2安全洞/日历闸门)标清。供多 session 共用。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9.2 KiB
生成引擎 · 并行开发编排(多 session 共用 · 依赖图 + 车道)
状态:编排协调版 · 2026-06-16 · 供多 session 并行开发共用读。 WHAT 来源:
docs/agent-specs/2026-06-16-生成引擎-任务清单普查.md(任务全景普查 §1-§8)。本文是其 HOW-to-parallelize——把 open 任务切成可并行车道 + 标依赖 + 划 session 边界。 核心原则:parallel boundary = module boundary;车道间零共享状态、只经契约交互(参.agents/skills/contract-first-development.md/.agents/workflows/mvp-execution-orchestration.md第 5 策)。 ⚠️ session 边界(最重要):game-studio/(产品前端:创作页 / feed UI / 缩略图展示 / 进度条 / 设计体系 HJ-FE-DS-001)整块归 studio session;本编排的后端/worker session 一行不碰game-studio/,接缝一律走契约先行。
0. 已落主线(截至 2026-06-16 · 各车道起点)
| 项 | 状态 | commit |
|---|---|---|
| tap-targets 自产 driver 临门一脚(moat 主线杠杆) | ✅ | a2cbabe6 |
| 组A · D12 控制平面 v0 + GP9 合规先行段 | ✅ | 0b1b37ea |
| 组C · 首局体验门(品类化 additive 派生超集) | ✅ | d4f16aab |
| 组B · 落库组 execution spec(= Lane A 起点,待实现) | 📝 spec | cd0692b3 |
1. 依赖图
flowchart TB
classDef founder fill:#fff3cd,stroke:#856404
classDef studio fill:#f8d7da,stroke:#b21f2d,stroke-dasharray:4 4
classDef seam fill:#ede0f8,stroke:#5a2a82
subgraph CP["🚪 开种子 · 4 个并行前提 → 放"]
G0["G0 创作页核实<br/>read-only 走查"]
G1["G1 GP9 staging 验 10 负例<br/>组A 代码✅·proof 待"]
GSEC["2 安全洞收内网"]:::founder
GLAB["labels.json 人锚"]:::founder
OPEN{{"放种子创作者"}}
G0-->OPEN
G1-->OPEN
GSEC-->OPEN
GLAB-->OPEN
end
subgraph LA["Lane A · aigc 后端/契约/DB(车道内串行)"]
A1["组B 落地 V16<br/>D9+D11+trace9d"]-->A2["source 列隔离 V17"]-->A3["Dify 残骸 R6"]
end
subgraph LB["Lane B · SAA worker"]
B1["form① e2e"]---B2["agent-loop-v1 退役"]---B3["player 子图"]
end
subgraph LC["Lane C · 质量/harness/成本"]
C1c["scale-20 补全"]---C2c["四模型横比"]---C3c["¥0.15/P75 验收门"]
end
subgraph LD["Lane D · prompt-gatespec(双侧同步)"]
D1["t2048 latch"]---D2["brief pin 自产化"]---D3["插件门面决策"]
end
subgraph STUDIO["🚧 另一 session 在改 · 后端 session 只读不写 game-studio/"]
S1["创作页修复"]:::studio
S2["feed/sort 前端消费"]:::studio
S3["缩略图/封面/叙事"]:::studio
S4["进度条 UI"]:::studio
S5["设计体系 HJ-FE-DS-001"]:::studio
end
subgraph SEAM["🟪 契约缝 · 后端 session 做后端半 → studio 做前端半"]
K1["FeedCard +templateName"]:::seam
K2["sort_score 多因子公式·后端"]:::seam
K3["streaming SSE·后端"]:::seam
end
C1c-. scale20 数据 .->D3
C2c-. 横比 .->D3
A1-. trace 字段 .->C3c
GLAB-. 人锚解锁放量判定 .->C1c
G0-. 断则交付 .->S1
K1-->S2
K2-->S2
K3-->S4
2. 车道表(每条 = 独立 worktree,off origin/dev/2.0.0)
| 车道 | 内容 | 现可并行? | 车道内次序 | 跨车道依赖 | 模块边界(文件域) |
|---|---|---|---|---|---|
| A · aigc 后端/DB | 组B(V16)→source列(V17)→Dify残骸R6 | ✅ | 串行(共享 game_aigc_task DO + Flyway 版本序) |
出 trace 喂 C 的 ¥验收门 | game-module-aigc + contracts/api-schemas/aigc.yaml + wg1/gen-worker(service.py/studio.py 抽 trace、dedup.py) |
| B · SAA worker | form① e2e / agent-loop-v1 退役登记 / player 子图 / gatespecParseErr 回灌 | ✅ | 可并 | 无 | SAA worker 编排面(dispatcher/图/检查点) |
| C · 质量/harness/成本 | scale-20 补全 / 四模型横比 / 好玩基线 v2 rubric / ¥0.15+P75 验收门 / 抽检阀·告警阈值 | ◑ 部分 | 可并 | 好玩判定等 labels.json(创始人);¥验收门等 A 的 trace 字段 | 九门 harness + 评估/成本脚本(不碰后端业务码) |
| D · prompt-gatespec | t2048 latch 放宽 / brief pin 自产化 / 插件门面缺口决策 | ◑ 部分 | 可并 | 插件门面决策等 C 的 scale-20 数据 | roles.py(Python)+ SaaPrompts.java(SAA)字符级双侧同步(公平性铁律) |
| E · 开闸前置 | G0 创作页核实(read-only 走查)/ G1 GP9 staging 真验 10 负例 | ✅ | 可并 | G0 若发现断 → 交 studio session 修 | staging 运维 + CDP 走查(只读)/ 后端部署 |
| 🚧 studio | 创作页修复 / feed·sort 消费 / 缩略图展示 / 进度条 / 设计体系 | — | — | 另一 session 拥有,后端 session 不碰 | game-studio/ 全域 |
3. 并行硬规则(防撞)
- worktree 隔离:每车道一棵 worktree(
git worktree add -b <lane> <path> origin/dev/2.0.0),零共享工作树;push 前fetch + rebase origin/dev/2.0.0,撞车的别人 untracked 文档先find挪走再 rebase(参 memorymulti-session-shared-tree-push-conflict)。 - Flyway 版本预分配(防抢号):组B =
V16.0.0、source 列 =V17.0.0;Lane A 内 A1→A2 都改AigcTaskDO.java→ 同一 worktree 串行顺做,禁两 worktree 并发改同一 DO 类。 - 不碰
game-studio/:后端/worker session 对game-studio/只读不写;任何前端改动属 studio session。 - 契约缝 = 契约先行:接缝三件(FeedCard
templateName/sort_score多因子 / streaming SSE)——后端 session 先改contracts/+ 实现后端半、通知 studio session 接前端半;禁绕过契约直接联调。 - 公平性铁律(Lane D 专属):
roles.py与SaaPrompts.java的 gatespec 规则字符级一致,改一侧必同步另一侧(Python 先、SAA 逐字跟进)。 - 非阻断/可回滚:观测类(组B 三件)落库失败一律 best-effort 吞异常不阻断主链;新增列/字段 additive 可空、feature-flag 全关 = 现行字节不变。
4. 跨车道依赖 / 闸门 / 创始人卡点
车道间硬依赖(图中虚线)
C.scale-20 + C.四模型横比→ D.插件门面缺口决策(无 scale-20 数据不能拍 20 款成功率上限/token 成本,普查标"W-G1 架构最关键未决")。A.组B trace 9d→ C.¥0.15/款 + P75 验收门(需 per-game trace 字段完整)。A.组B V16↔A.source 列 V17:共享game_aigc_taskDO + Flyway 序 → 车道内串行。
创始人卡点(blocked-on-founder,非车道能解)
- labels.json 人锚:创始人亲玩补锚 → 解锁 bake-off 放量好玩判定(卡 C 的放量段)。
- 2 安全洞:new-api 3000 公网暴露 / 8888 短信旁路码——上线前必修(confidence-100),ops/创始人路由。
- 真实计费扣退:随 M4(new-api
AddToken硬编码 UserId 阻塞),与配额/背压拆开。
开种子闸门(4 并行前提 → 放)
G0 创作页核实 ∧ G1 GP9 staging 验 ∧ 2 安全洞收内网 ∧ labels.json 补锚 → 放种子创作者。
真公开上线另受日历闸门(ICP 备案 / 短信签名报备 / 支付 / 广告)——不可压缩的真瓶颈,创始人轨(memory mvp-binding-constraint-calendar-gates)。
5. 立即可并行启动 / 阻塞
- 现在可同时开火:A、B、C、E 四条(各自 worktree + 子代理)。D 可并但 D3 插件决策须等 C 的 scale-20 数据。
- 阻塞:放量好玩判定 / labels.json / 2 安全洞 / 真实计费 / 日历闸门——均在创始人或 ops,非车道内能推进。
6. 给 studio session 的边界与接缝(双向读)
本节给正在改 studio 的那个 session 读:明确"哪些是你的、哪些是契约缝、怎么协同"。
- 你的全域:
game-studio/(创作页、feed 列表/卡片、缩略图展示、生成进度条、设计体系/i18n/通用组件库 HJ-FE-DS-001)。后端 session 不会改这里。 - 3 个契约缝(后端 session 交付后端半 + 契约,你接前端半):
- FeedCard
templateName:契约contracts/(FeedCard)加templateName玩法标签字段 → 你在 feed 卡片消费做玩法分发信号。 - feed
sort_score多因子:后端把sort_score从quality_score+boost升级为多因子(freshness/interaction_rate/skip_rate/...)→ 你的 feed 列表只是消费排序结果,前端无需改,但若要展示"为什么排这"需新字段时走契约。 - streaming SSE 进度:后端出 SSE 进度端点 → 你在创作页接进度条 UI。
- FeedCard
- G0 创作页核实:后端 session 会对创作页做只读 CDP 走查(查 W-CLEAN 后"开始生成"是否禁用/创作主链是否断),不改你的代码;若发现断链,修复由你做(后端 session 出复现证据交付)。
- 协同协议:接缝改动一律契约先行 → 通知 → 双方各改各侧;push 前互相
fetch+rebase,撞车 untracked 先挪。
一句话:WHAT 看普查清单,HOW 看本文。后端 5 车道(A/B/C/D/E)各自 worktree 并行,
game-studio/全归 studio session,接缝走契约。开种子 = 4 前提齐;真上线另卡日历闸门。