feat(web): Scope B B1 — 多章工作流链前端 UI(发起/轮询/裁决续跑)

链页 app/projects/[id]/chains(RSC fetchProject)+ ChainPage/ChainStarter/
ChainProgress/ChainAdjudication;lib/chain 纯函数(result 收窄/相位映射/resume 组装)。
复用 useJobPoll 轮询、ConflictCard + decisions.ts 裁决、normalizeConflicts/latestReview、
friendlyError;nav 加 chains 入口。awaiting(interrupt)→ 读该章冲突渲 ConflictCard →
POST .../chains/runs/{job_id}/resume 续跑。gen:api 纳入 chains run/resume。
守 #5(链暂停=等裁决,token/正文不入 job result)。
This commit is contained in:
Yaojia Wang
2026-06-23 19:21:00 +02:00
parent 416caed56b
commit a2dcd89881
11 changed files with 874 additions and 4 deletions

View File

@@ -10,15 +10,16 @@ import {
const PID = "p1";
describe("projectNavItems", () => {
it("builds the nine project entries scoped to the project id", () => {
it("builds the ten project entries scoped to the project id", () => {
const items = projectNavItems(PID);
expect(items).toHaveLength(9);
expect(items).toHaveLength(10);
expect(items.map((i) => i.key)).toEqual([
"write",
"outline",
"foreshadow",
"review",
"chains",
"style",
"codex",
"toolbox",