Commit 20030e772c9203b5082d07f335e4fa0e6852c752

Authored by yibo
1 parent 601ed9ab

chore(devloop): 退役 DevLoop 子系统,归档 PRD/SDD 规格站点

DevLoop 本质是 loop workflow(L1/L2/L3 三层嵌套,PM→Architect→Coder→Tester→
Integrator→Triager 六个固定角色),已被 27 号系列的 graph workflow(org graph +
work graph,graph-engine.js)严格覆盖——loop 只是 graph 的一个退化形状。
用户评估 27 号总纲原计划的 P6(DevLoop 收编)后拍板:不做迁移,直接整体退役。

决策记录、评估过程、退役范围与保留项详见 docs/done/system-design/52-devloop-retirement.md。

删除:
- 后端:routes/devloop.js、src/core/devloop/、services/devloop/ 下除
  path-resolver.js/doc-store.js 外的全部文件、src/tools/devloop/、
  server/public/devloop-status.html、两个 server 入口的 /api/devloop 挂载
- 前端:views/DevLoop*.vue(4)、components/devloop/(12)、router 里的 4 条路由
- system/agents/devloop-{pm,architect,coder,tester,integrator,triager}/(6 个本体)
  + _registry.json 对应条目
- server/tests/devloop/(21 个测试文件)+ 1 处跨文件断言(route-auth-gate.test.js)
- fixtures/devloop-mock/ 下 DevLoop 专属 fixture + fixtures/devloop-mock-scenarios/
- 8 个 DevLoop 专属人工验证脚本(phase1-5-verify.js 等)→ 归档
- package.json 的 spec:extract/spec:check、scripts/git-hooks/pre-commit
  (唯一职责是校验已归档的 docs/prd/newfunction)

保留(仍被 27 号系列现役代码依赖,文件顶部已加说明):
- server/services/devloop/path-resolver.js(graph-engine.js 项目根分配用)
- server/services/devloop/doc-store.js(hashContract 被 graph-engine.js/
  goal-contract.js 复用)
- fixtures/devloop-mock/ 目录本身(graph-engine 真实链路测试共用这批 fixture)

归档到 docs/_archive/devloop-prd-2026-09-17/:docs/prd/ 整站、build-manifest.json、
5 个 PRD 抽取脚本、8 个人工验证脚本。

顺带修正:work-graph-skeletons.test.js 的占位符不再依赖已删除的 devloop-* 本体;
CLAUDE.md/docs/README.md 全面同步;no-dead-path-references.test.js 揪出的两处
死链接(brace-expansion 写法、历史路径未加归档说明)已修。

全量 vitest(1403 passed,3 条与本次改动无关的既有失败)、web:build、真实
server 启动(含 graph-seed 自愈:自动清理了库里残留的 devloop-* system_agents 行)
均已验证。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JnCKUFSGvdz4SY7BvYWdMU
Showing 249 changed files with 138 additions and 12171 deletions

Too many changes.

To preserve performance only 100 of 249 files are displayed.

CLAUDE.md
@@ -20,7 +20,7 @@ npm run dev # 后端 server/index.js:3010 + 前端 vite:51 @@ -20,7 +20,7 @@ npm run dev # 后端 server/index.js:3010 + 前端 vite:51
20 # 等价快捷脚本(先 kill 占用端口再起) 20 # 等价快捷脚本(先 kill 占用端口再起)
21 bash start.sh # server/index.js:3010 + vite:5173 21 bash start.sh # server/index.js:3010 + vite:5173
22 22
23 -# (历史轻量入口,仅 Agent Chat / Company / OKR / Tasks / DevLoop 子集) 23 +# (历史轻量入口,仅 Agent Chat / Company / OKR / Tasks 子集)
24 PORT=3010 node server/agent-server.js 24 PORT=3010 node server/agent-server.js
25 ``` 25 ```
26 26
@@ -44,10 +44,6 @@ npx vitest run -t &quot;test name&quot; # 按名称过滤单个测试用例 @@ -44,10 +44,6 @@ npx vitest run -t &quot;test name&quot; # 按名称过滤单个测试用例
44 # 扫描该目录的守卫测试会被瞬时竞态打成偶发假失败(详见 docs/done/claude-cli-session-leak.md §七) 44 # 扫描该目录的守卫测试会被瞬时竞态打成偶发假失败(详见 docs/done/claude-cli-session-leak.md §七)
45 DISABLE_BACKGROUND_AGENTS=1 bash start.sh 45 DISABLE_BACKGROUND_AGENTS=1 bash start.sh
46 46
47 -# DevLoop 规范  
48 -npm run spec:extract # 从 docs/prd/newfunction/*.html 重新生成 _spec/*.md(改完 HTML 后必须跑)  
49 -npm run spec:check # CI/pre-commit 用,校验 _spec/ 与 HTML 是否同步  
50 -  
51 # CLI / 工具 47 # CLI / 工具
52 npm run skills:sync # 同步 Skill 到 Claude CLI 配置目录 48 npm run skills:sync # 同步 Skill 到 Claude CLI 配置目录
53 npm run graph:seed # 按 system/agents/ 目录重建图谱种子数据 49 npm run graph:seed # 按 system/agents/ 目录重建图谱种子数据
@@ -66,8 +62,8 @@ npm run okr:migrate # goals → okr 存量迁移 @@ -66,8 +62,8 @@ npm run okr:migrate # goals → okr 存量迁移
66 62
67 | 入口 | 端口 | 启动方式 | 挂载路由 | 63 | 入口 | 端口 | 启动方式 | 挂载路由 |
68 |------|------|----------|----------| 64 |------|------|----------|----------|
69 -| `server/index.js` | 3010 | `npm run dev` / `npm run server` / `bash start.sh` | 全量:`/api/claude-chat` `/api/config` `/api/evolution` `/api/innovator` `/api/master` `/api/open` `/api/arena` `/api/auth` `/api/users` `/api/whatsapp` `/api/agent` `/api/okr` `/api/company` `/api/graph-runs` `/api/tasks` `/api/devloop`,WS `/ws/claude`,插件 / 心跳 / 中断任务恢复,`NODE_ENV=production` 时托管 `web/dist/` 静态文件 |  
70 -| `server/agent-server.js` | 3010 | 仅手动 `node server/agent-server.js`(历史保留) | 子集:`/api/agent` `/api/company` `/api/okr` `/api/graph-runs` `/api/tasks` `/api/devloop` | 65 +| `server/index.js` | 3010 | `npm run dev` / `npm run server` / `bash start.sh` | 全量:`/api/claude-chat` `/api/config` `/api/evolution` `/api/innovator` `/api/master` `/api/open` `/api/arena` `/api/auth` `/api/users` `/api/whatsapp` `/api/agent` `/api/okr` `/api/company` `/api/graph-runs` `/api/tasks`,WS `/ws/claude`,插件 / 心跳 / 中断任务恢复,`NODE_ENV=production` 时托管 `web/dist/` 静态文件 |
  66 +| `server/agent-server.js` | 3010 | 仅手动 `node server/agent-server.js`(历史保留) | 子集:`/api/agent` `/api/company` `/api/okr` `/api/graph-runs` `/api/tasks` |
71 67
72 两者**不要同时启动**(端口冲突)。默认走 `index.js`(`start.sh` / `npm run dev` 都指向它);`agent-server.js` 只在你想跑无依赖最小子集时手动启动。 68 两者**不要同时启动**(端口冲突)。默认走 `index.js`(`start.sh` / `npm run dev` 都指向它);`agent-server.js` 只在你想跑无依赖最小子集时手动启动。
73 69
@@ -76,25 +72,21 @@ npm run okr:migrate # goals → okr 存量迁移 @@ -76,25 +72,21 @@ npm run okr:migrate # goals → okr 存量迁移
76 | 目录 | 说明 | 72 | 目录 | 说明 |
77 |------|------| 73 |------|------|
78 | `server/index.js` | 完整 ArenaSK 服务(API + WS + 插件 + 前端托管),`start.sh` / `npm run dev` 默认入口 | 74 | `server/index.js` | 完整 ArenaSK 服务(API + WS + 插件 + 前端托管),`start.sh` / `npm run dev` 默认入口 |
79 -| `server/agent-server.js` | 历史保留的轻量子集入口(Agent / Company / Goals / Tasks / DevLoop),仅手动启动 | 75 +| `server/agent-server.js` | 历史保留的轻量子集入口(Agent / Company / Goals / Tasks),仅手动启动 |
80 | `server/routes/` | 各 API 路由(挂载点见上表两个入口,以入口文件为准) | 76 | `server/routes/` | 各 API 路由(挂载点见上表两个入口,以入口文件为准) |
81 | `server/services/` | 业务服务(skill-db, benchmark-runner, company-service, heartbeat-service, company-heartbeat-service, pipeline-service, retrain-pipeline, graph-engine, …) | 77 | `server/services/` | 业务服务(skill-db, benchmark-runner, company-service, heartbeat-service, company-heartbeat-service, pipeline-service, retrain-pipeline, graph-engine, …) |
82 | `server/src/core/` | Agent 引擎核心(orchestrator, master-session, agent-manager, scheduler, session-pool, prompt-builder, runtime-resolver, …) | 78 | `server/src/core/` | Agent 引擎核心(orchestrator, master-session, agent-manager, scheduler, session-pool, prompt-builder, runtime-resolver, …) |
83 | `server/src/engine/` | 进程层(command-queue, idle-timer, process-guard, run-registry, failover-error) | 79 | `server/src/engine/` | 进程层(command-queue, idle-timer, process-guard, run-registry, failover-error) |
84 | `server/src/plugins/` | 插件系统(plugin-manager, agent-bridge, config-bridge, bootstrap) | 80 | `server/src/plugins/` | 插件系统(plugin-manager, agent-bridge, config-bridge, bootstrap) |
85 -| `server/src/core/devloop/` | DevLoop 编排核心:`loop-controller.js`(createProject / callAgent / runDocsPhase / runUnit) |  
86 -| `server/services/devloop/` | DevLoop 支撑服务:path-resolver, git-vault, unit-registry(FSM), timeline-logger, bug-tracker, doc-store, changelog-writer, sse-broker |  
87 -| `server/src/tools/devloop/` | DevLoop Agent 可调用工具(coder/tester/integrator/triager/doc/persistence-tools + tool-registry + sandbox) |  
88 -| `server/routes/devloop.js` | DevLoop REST:`/api/devloop/projects` | 81 +| `server/services/devloop/path-resolver.js` / `doc-store.js` | DevLoop 退役(2026-09-17,[52 号文档](docs/done/system-design/52-devloop-retirement.md))后唯二保留的两个文件:`path-resolver.js` 是 `graph-engine.js` 项目根分配的实现,`doc-store.js` 的 `hashContract` 被 `graph-engine.js`/`goal-contract.js` 复用。其余 DevLoop 代码(`src/core/devloop/`、`src/tools/devloop/`、`services/devloop/` 下其余文件、`routes/devloop.js`)已删除 |
89 | `system/agents/` | **全部 Agent 本体的唯一目录**。`_base/` 是元 Agent 骨架,`_registry.json` 只用于按 id 补 `benchmark_score`(**目录才是数据源头**,`graph-seed-service.seedAgents()` 直接扫目录)。`_` 前缀为保留 id,扫描时跳过 | 82 | `system/agents/` | **全部 Agent 本体的唯一目录**。`_base/` 是元 Agent 骨架,`_registry.json` 只用于按 id 补 `benchmark_score`(**目录才是数据源头**,`graph-seed-service.seedAgents()` 直接扫目录)。`_` 前缀为保留 id,扫描时跳过 |
90 -| `system/agents/devloop-*/` | 六个 DevLoop Agent(pm, architect, coder, tester, integrator, triager),每个含 `config.json` + `prompt.md` + 一份指路用的薄 `agent.md` |  
91 | `system/org-graph-templates/` `system/work-graph-templates/` | Org/Work graph 的骨架模板库——公司类型 / org node 职能 → 图形状的**唯一查询入口**,`orggraph-planning`/`workgraph-planning` 建图时读这里选型,人工排查"为什么现场规划出这张图"也从这里查起。每个模板的 `whenToUse` 字段是选型依据,加新模板见各自 `README.md`「加一个新模板」一节;改完 `work-graph-templates/*.json` 跑一遍 `npx vitest run server/tests/unit/template-refs.test.js`(CI 用,查 `systemAgentId` 引用不落空) | 83 | `system/org-graph-templates/` `system/work-graph-templates/` | Org/Work graph 的骨架模板库——公司类型 / org node 职能 → 图形状的**唯一查询入口**,`orggraph-planning`/`workgraph-planning` 建图时读这里选型,人工排查"为什么现场规划出这张图"也从这里查起。每个模板的 `whenToUse` 字段是选型依据,加新模板见各自 `README.md`「加一个新模板」一节;改完 `work-graph-templates/*.json` 跑一遍 `npx vitest run server/tests/unit/template-refs.test.js`(CI 用,查 `systemAgentId` 引用不落空) |
92 | `server/src/tools/` | Master Agent 可调用的工具(call-agent, marketplace, orchestrate, train-skill, …) | 84 | `server/src/tools/` | Master Agent 可调用的工具(call-agent, marketplace, orchestrate, train-skill, …) |
93 -| `web/src/views/` | 页面:AgentChat, AgentList, CompanyDashboard, GraphConsole, JobsPanel, OkrDashboard, PipelineEditor, QuotaMonitor, SkillsMarket, TaskTimeline + DevLoop 四页(Dashboard / Projects / NewRequirement / Ops)。TemplateAgents(手工模板管理页)已于 2026-08-23 随「system/templates/ 并入 system/agents/」一起下线,agent 本体现在完全走自动化招聘产生 | 85 +| `web/src/views/` | 页面:AgentChat, AgentList, CompanyDashboard, GraphConsole, JobsPanel, OkrDashboard, PipelineEditor, QuotaMonitor, SkillsMarket, TaskTimeline。TemplateAgents(手工模板管理页)已于 2026-08-23 随「system/templates/ 并入 system/agents/」一起下线,agent 本体现在完全走自动化招聘产生。DevLoop 四页(Dashboard / Projects / NewRequirement / Ops)已随 DevLoop 退役一起删除 |
94 | `packages/` | `acp-core`, `agent-core`, `evolution`, `plugin-bootstrap` | 86 | `packages/` | `acp-core`, `agent-core`, `evolution`, `plugin-bootstrap` |
95 | `<repo>/../data/skills/` | Skill 仓库。**在仓库外面一层**,不是 `<repo>/data/skills/`(后者不存在)。路径由 `config.skillsDataDir` 控制,见下「数据存储」的两个 data 根 | 87 | `<repo>/../data/skills/` | Skill 仓库。**在仓库外面一层**,不是 `<repo>/data/skills/`(后者不存在)。路径由 `config.skillsDataDir` 控制,见下「数据存储」的两个 data 根 |
96 | `scripts/` | 运维脚本(含 `sync-skills.js`) | 88 | `scripts/` | 运维脚本(含 `sync-skills.js`) |
97 -| `docs/` | 设计文档,**按状态分目录**:`done/`(已实现 / 长期参考手册,含 `system-design/` 01–26 章与 `user-guides/`)、`todo/`(当前主线,27/28 系列)、`todo/future/`(暂缓)、`_archive/`。另有 `prd/`(DevLoop 规格源,见上)。**索引在 [`docs/README.md`](docs/README.md),逐条带状态说明 —— 找文档从那里进,别在本表里加文件名**(这一行曾经列了 5 个具体文件,文档移进 `done/` 之后全成了死链) | 89 +| `docs/` | 设计文档,**按状态分目录**:`done/`(已实现 / 长期参考手册,含 `system-design/` 01–26 章与 `user-guides/`)、`todo/`(当前主线,27/28 系列)、`todo/future/`(暂缓)、`_archive/`(含 DevLoop 退役归档,见下)。**索引在 [`docs/README.md`](docs/README.md),逐条带状态说明 —— 找文档从那里进,别在本表里加文件名**(这一行曾经列了 5 个具体文件,文档移进 `done/` 之后全成了死链) |
98 90
99 ### 关键 API 路由 91 ### 关键 API 路由
100 92
@@ -109,20 +101,19 @@ npm run okr:migrate # goals → okr 存量迁移 @@ -109,20 +101,19 @@ npm run okr:migrate # goals → okr 存量迁移
109 | `/api/auth/*` | JWT + GitHub OAuth | 101 | `/api/auth/*` | JWT + GitHub OAuth |
110 | `/ws/claude` | Claude 实时对话(仅 `index.js`) | 102 | `/ws/claude` | Claude 实时对话(仅 `index.js`) |
111 | `/api/health` `/api/plugins` | 健康检查 / 插件状态 | 103 | `/api/health` `/api/plugins` | 健康检查 / 插件状态 |
112 -| `/api/devloop/projects` | DevLoop:创建项目 + 跑 PM/Architect(POST)、列项目 / 查状态(GET,见下) |  
113 | `/api/dream/*` | 经验汇流(29-DREAM):`dream-service.js` 能力的 REST 封装,只读查询 + 触发 `dreamOnce`/`dreamSweep`,不新增业务逻辑,见 [`docs/done/system-design/29-dream-design.md`](docs/done/system-design/29-dream-design.md) | 104 | `/api/dream/*` | 经验汇流(29-DREAM):`dream-service.js` 能力的 REST 封装,只读查询 + 触发 `dreamOnce`/`dreamSweep`,不新增业务逻辑,见 [`docs/done/system-design/29-dream-design.md`](docs/done/system-design/29-dream-design.md) |
114 105
115 -### DevLoop 子系统 106 +### DevLoop 子系统(已退役)
116 107
117 -多 Agent 自动开发流水线(PM → Architect → Coder → Tester → Integrator → Triager),目前处于 P2(单 Unit 循环)阶段,正朝 P3(跨 Unit runProject)推进。 108 +原多 Agent 自动开发流水线(PM → Architect → Coder → Tester → Integrator → Triager,L1/L2/L3 三层嵌套 loop)。
  109 +**2026-09-17 整体退役**:本质是 loop workflow,已被 27 号系列的 graph workflow(org graph + work graph,
  110 +`graph-engine.js`)严格覆盖(loop 是 graph 的一个退化形状),不再需要维护独立实现,用户拍板不做
  111 +27 号总纲原计划的 P6 迁移,直接删除。决策记录、退役范围、保留了什么/为什么见
  112 +[`docs/done/system-design/52-devloop-retirement.md`](docs/done/system-design/52-devloop-retirement.md)。
118 113
119 -- **规格优先**:所有实现以 `docs/prd/newfunction/_spec/*.md` 为准(机器可读,由 `npm run spec:extract` 从同名 `*.html` 自动生成,**不要手改 `_spec/`**;改 HTML 后必须重跑 extract,否则 pre-commit hook 会拦)。跨切约定集中在 `_spec/CONVENTIONS.md`(ID 生成规则、错误响应形态、文件原子写入、并发锁策略、日志分流、命名风格)——写 DevLoop 代码前先读这份。  
120 -- **项目根**:每个 DevLoop 项目是独立 git 仓库,由 `path-resolver.allocateProjectRoot` 分配(`sandbox` 或 `linked-*` 模式),`git-vault` 负责 init/commit,每个 Agent 收尾后自动 commit(`loop-controller.commitAfterAgent`,commit kind 按 agent 名映射:pm→prd, architect→sdd, coder/tester→code, integrator→integ, triager→triage)。  
121 -- **Mock 模式**:P1-P2 阶段 Agent 调用默认走 `ClaudeCliProtocol({mock:true})`(`packages/acp-core/protocol/ClaudeCliProtocol.js`),不真正起 Claude CLI 子进程,而是从 `fixtures/devloop-mock/*.json` 回放固定的 chunks/files/result;显式传 `mock:false` 才会用真实 CLI。  
122 -- **L1 单 Unit 循环**(`runUnit`,P2):Coder(implement) → Tester(test),失败时把上一次 failure + coder.log 摘要打回去重跑(retry-with-reflection),直到 tester 通过或耗尽 `retry_budget`(默认 5)。每次状态转换都过 `unit-registry` 的 FSM(coding → testing → passed/failed → blocked)。  
123 -- **单元产物布局**:项目根下 `units/{unitId}/{spec.json, code/, contract.json, coder.log, runs/{runId}/result.json}`;跨 unit 只能读 `../{otherUnit}/contract.json`,禁止直接读别的 unit 的 `code/`(见 CONVENTIONS.md §12)。  
124 -- **审计轨迹**:`timeline.ndjson`(append-only,永不改已写行)记录所有 Agent 调用 / commit / 状态转换事件,`bugs.ndjson` / `changelog.ndjson` 走同样的追加模式。  
125 -- **测试**:`server/tests/devloop/**/*.test.js`(服务层 + 工具层单测)+ `server/tests/devloop/routes.test.js`(REST 层)。 114 +PRD/SDD 完整规格站点(原仓库根 docs/prd 目录)归档在 `docs/_archive/devloop-prd-2026-09-17/`。
  115 +`server/services/devloop/path-resolver.js` / `doc-store.js` 两个文件因为被 `graph-engine.js` 依赖而保留,
  116 +见上方目录速查表那一行。
126 117
127 ### 数据存储(SQLite,无需 PostgreSQL) 118 ### 数据存储(SQLite,无需 PostgreSQL)
128 119
@@ -141,10 +132,10 @@ npm run okr:migrate # goals → okr 存量迁移 @@ -141,10 +132,10 @@ npm run okr:migrate # goals → okr 存量迁移
141 - `benchmark_logs.sqlite` — Benchmark 运行数据(**不是** `benchmark.sqlite`) 132 - `benchmark_logs.sqlite` — Benchmark 运行数据(**不是** `benchmark.sqlite`)
142 - `trained_skills/` — 用户训练产物(按 userId 隔离) 133 - `trained_skills/` — 用户训练产物(按 userId 隔离)
143 134
144 -**仓库内** `<repo>/data/` — LemonBoss 侧(company / okr / graph / devloop 都在这儿): 135 +**仓库内** `<repo>/data/` — LemonBoss 侧(company / okr / graph 都在这儿):
145 136
146 - `graph.sqlite` — 图谱库(`GRAPH_DB_PATH` 可覆盖) 137 - `graph.sqlite` — 图谱库(`GRAPH_DB_PATH` 可覆盖)
147 -- `companies/` — 公司态(含 DevLoop 项目根、agent memory) 138 +- `companies/` — 公司态(含 graph-engine 项目根、agent memory;`projects/{pid}/` 这套目录布局历史上由 DevLoop 首创,`path-resolver.js` 保留后两边共用同一套分配逻辑)
148 - `okr/` `logs/` `agents/` — OKR 索引 / 运行日志 / agent 运行态 139 - `okr/` `logs/` `agents/` — OKR 索引 / 运行日志 / agent 运行态
149 140
150 会话持久化有**两套**,不是一处: 141 会话持久化有**两套**,不是一处:
@@ -173,7 +164,7 @@ npm run okr:migrate # goals → okr 存量迁移 @@ -173,7 +164,7 @@ npm run okr:migrate # goals → okr 存量迁移
173 守卫:`server/tests/unit/agent-chat-session-reclaim.test.js`。 164 守卫:`server/tests/unit/agent-chat-session-reclaim.test.js`。
174 - 模块别名 `@server` → `server/`(`module-alias` 注册),跨子包 require 时可用。 165 - 模块别名 `@server` → `server/`(`module-alias` 注册),跨子包 require 时可用。
175 - Claude CLI 进程默认带 `--dangerously-skip-permissions`,写入受限路径前自己评估风险。 166 - Claude CLI 进程默认带 `--dangerously-skip-permissions`,写入受限路径前自己评估风险。
176 -- DevLoop 详见上方「DevLoop 子系统」一节;需要 wireframe / SVG 图表 / 完整人类阅读版时才回查 `_spec/*.md` 同名的 `*.html`。 167 +- DevLoop 已退役,详见上方「DevLoop 子系统(已退役)」一节与 52 号文档。
177 168
178 > [!WARNING] (Agentic Self-Correction Loop Prevention) 169 > [!WARNING] (Agentic Self-Correction Loop Prevention)
179 > **Master Agent 必读**: 你目前存在一个已知的底层 Tool Calling JSON 解析缺陷。当你试图在 `Bash` tool 中使用带有多重双引号的复杂命令(例如 `curl -d '{"id":"lemonv", "name":"Lemonv"}'`)时,你的 JSON 转义会崩溃并导致你陷入"修复格式"的无限死循环,最终进程会被强制终止退出 (code=143)。 170 > **Master Agent 必读**: 你目前存在一个已知的底层 Tool Calling JSON 解析缺陷。当你试图在 `Bash` tool 中使用带有多重双引号的复杂命令(例如 `curl -d '{"id":"lemonv", "name":"Lemonv"}'`)时,你的 JSON 转义会崩溃并导致你陷入"修复格式"的无限死循环,最终进程会被强制终止退出 (code=143)。
docs/README.md
@@ -48,6 +48,7 @@ @@ -48,6 +48,7 @@
48 | [system-design/48-task-acceptance-contract-binding.md](./done/system-design/48-task-acceptance-contract-binding.md) | ✅ **已实现并完成真实端到端回归,已收口**(decomposed_work 链路 2026-09-02/回归补于 2026-09-03,剩余三条路径调研收口于 2026-09-03)。承接 46 号文档 Phase 3 v2 真实回归发现的 `org-validator` 死锁:验收契约的产出被硬绑在"公司完整 org graph 一定会跑到 org-planner"这个假设上,不满足这个假设的执行路径(如轻量子任务图)无契约可读、退无可退。方案:消费端(validator 只认结构化契约、不自由判断)保持硬约束不变,产出端改成"每个 decomposed_work 子任务创建时必须 1:1 带一份验收契约"(`tasks.acceptance_contract` + `createTask` 统一校验 + `enqueueTaskRun` 落盘),真实 `org-coder`→`org-validator` 全程跑通验证。**收口时追加调研**:`task-planning`/`org-planner` 的 `acceptance_item` 物化/人类快速派单三条创建路径经核实**不需要**同款强绑定——都走完整 org graph,`workgraph-planning` 的 `benchmark` 节点"不可裁"约定已天然保证有契约,强行加会跟 46 号文档保护的 `task-planning` 极简边界、快速派单"零 LLM"定位冲突。真正残留风险是"org graph 一定含 org-planner"目前只是提示词约定非代码强制,属于 org 拓扑保证问题,不在本文档范围。安全网(发现时就地补契约)按设计仍只留原则,`decomposed_work` 链路已被主力机制完全覆盖,不为不可达场景写代码 | 48 | [system-design/48-task-acceptance-contract-binding.md](./done/system-design/48-task-acceptance-contract-binding.md) | ✅ **已实现并完成真实端到端回归,已收口**(decomposed_work 链路 2026-09-02/回归补于 2026-09-03,剩余三条路径调研收口于 2026-09-03)。承接 46 号文档 Phase 3 v2 真实回归发现的 `org-validator` 死锁:验收契约的产出被硬绑在"公司完整 org graph 一定会跑到 org-planner"这个假设上,不满足这个假设的执行路径(如轻量子任务图)无契约可读、退无可退。方案:消费端(validator 只认结构化契约、不自由判断)保持硬约束不变,产出端改成"每个 decomposed_work 子任务创建时必须 1:1 带一份验收契约"(`tasks.acceptance_contract` + `createTask` 统一校验 + `enqueueTaskRun` 落盘),真实 `org-coder`→`org-validator` 全程跑通验证。**收口时追加调研**:`task-planning`/`org-planner` 的 `acceptance_item` 物化/人类快速派单三条创建路径经核实**不需要**同款强绑定——都走完整 org graph,`workgraph-planning` 的 `benchmark` 节点"不可裁"约定已天然保证有契约,强行加会跟 46 号文档保护的 `task-planning` 极简边界、快速派单"零 LLM"定位冲突。真正残留风险是"org graph 一定含 org-planner"目前只是提示词约定非代码强制,属于 org 拓扑保证问题,不在本文档范围。安全网(发现时就地补契约)按设计仍只留原则,`decomposed_work` 链路已被主力机制完全覆盖,不为不可达场景写代码 |
49 | [system-design/27-p4-parallel-and-artifacts.md](./done/system-design/27-p4-parallel-and-artifacts.md) | **P4(回收编号)并行执行与产物索引** — ✅ **2026-09-08 已彻底收口**,移入 `done/`(阶段 A/B/C 全部完成,含本轮补齐的同 agent 多实例隔离生产接线 + `advanceTree` 兄弟子 run 并发)。T5 账户欠费门本身已实现(可插拔桩子),只差接一个真实计费接口——用户拍板暂缓,见 `todo/future/` | 49 | [system-design/27-p4-parallel-and-artifacts.md](./done/system-design/27-p4-parallel-and-artifacts.md) | **P4(回收编号)并行执行与产物索引** — ✅ **2026-09-08 已彻底收口**,移入 `done/`(阶段 A/B/C 全部完成,含本轮补齐的同 agent 多实例隔离生产接线 + `advanceTree` 兄弟子 run 并发)。T5 账户欠费门本身已实现(可插拔桩子),只差接一个真实计费接口——用户拍板暂缓,见 `todo/future/` |
50 | [system-design/27-p3b-real-run-runway.md](./done/system-design/27-p3b-real-run-runway.md) | P3 收尾之真跑跑道(从 mock 走到真 Claude CLI)— ✅ **2026-09-08 全部收口**,移入 `done/`。§六「九条验收」全部验完(验收 9 见 §六quater:2 节点 org 图故意跳过 org-coder,`org-validator` 真实读项目根、四维度全判 0 分,engine 真实沿 org 层 fail 边把 `org-planner` 重置重跑,15 次真调用/218,887 tokens);正文里 `W5/W6/W7/W8/W9` 等更细粒度小项也已逐条核对——大半此前就被后续真跑验过、只是没回填,真正之前从未验过的只有 W8(重新规划组织按钮),本轮用隔离 worktree + 真 Claude CLI + 真实浏览器点击补验(详见「W8 浏览器真跑验收」,该节末尾记了一个真跑中顺手发现、尚待排查但不影响验收本身成立的前端细节:`insertNode` 重规划成同名角色时复用同一行 id,与文档里"每次换新 id"的旧设计假设不一致)。⛔/🟡 的历史段落读之前先看头部状态行 | 50 | [system-design/27-p3b-real-run-runway.md](./done/system-design/27-p3b-real-run-runway.md) | P3 收尾之真跑跑道(从 mock 走到真 Claude CLI)— ✅ **2026-09-08 全部收口**,移入 `done/`。§六「九条验收」全部验完(验收 9 见 §六quater:2 节点 org 图故意跳过 org-coder,`org-validator` 真实读项目根、四维度全判 0 分,engine 真实沿 org 层 fail 边把 `org-planner` 重置重跑,15 次真调用/218,887 tokens);正文里 `W5/W6/W7/W8/W9` 等更细粒度小项也已逐条核对——大半此前就被后续真跑验过、只是没回填,真正之前从未验过的只有 W8(重新规划组织按钮),本轮用隔离 worktree + 真 Claude CLI + 真实浏览器点击补验(详见「W8 浏览器真跑验收」,该节末尾记了一个真跑中顺手发现、尚待排查但不影响验收本身成立的前端细节:`insertNode` 重规划成同名角色时复用同一行 id,与文档里"每次换新 id"的旧设计假设不一致)。⛔/🟡 的历史段落读之前先看头部状态行 |
  51 +| [system-design/52-devloop-retirement.md](./done/system-design/52-devloop-retirement.md) | ✅ **DevLoop 子系统退役决策记录**(2026-09-17)。DevLoop 本质是 loop workflow(L1/L2/L3 三层嵌套),已被 27 号系列的 graph workflow 严格覆盖(loop 是 graph 的一个退化形状),用户拍板整体退役、不做 27 号总纲原计划的 P6 迁移。代码/路由/前端/测试套件已删除,`path-resolver.js`/`doc-store.js`(被 `graph-engine.js` 依赖)保留,PRD/SDD 规格站点整体归档到 `docs/_archive/devloop-prd-2026-09-17/` |
51 | [system-design/46-mandatory-planning-and-task-decomposition.md](./done/system-design/46-mandatory-planning-and-task-decomposition.md) | ✅ **已收口**(2026-09-07)。Phase 0-5 全部实现。**Phase 1**:新 agent `subtask-planning`,钩在 `enqueueTaskRun`(显式 opt-in),产物写共享 `artifacts/subtask-plan.json`。**Phase 2**:经验检索 + 按需 deep research(默认关闭)。**Phase 3 v2**:CEO 心跳直接发现+派发(push),子任务走轻量 work graph(`org-coder`+`org-validator` 两节点)。**Phase 4**:父任务被拆分后让位给子任务(新状态 `decomposed`)、预算按步数均分、父子终态汇总(`settleParentTaskIfAllChildrenDone`)、同父子任务独立并发坑位(上限 3,不占公司级槽位)——四项机制全部用真实数据验证过,包括最后补跑的父子终态汇总(两个真实子任务全部 `completed` 后父任务被正确自动结算成 `completed`)与第二次并发确认。过程中撞出并修复一个几乎必现的真缺陷(`markTaskDecomposed` 原本只认父任务还是 `queued`,但 task-scheduler 抢坑是毫秒级、`subtask-planning` 是数十秒的真实 LLM 调用,等它拆完时父任务几乎必然已经 `running`,接管必然失败)。**Phase 5**:看板加 `decomposed` 状态样式 + 子任务进度展示,父子树形复用已有通用逻辑,未改后端接口。回归过程中还牵出一个独立缺陷——`org-validator` 对同一种 benchmark 契约判断不稳定(5 次里 1 次误把源码路径当 `--target` 判 `target_not_json`,反手倒退归因给 `subtask-planning`)——已定位根因(`decomposed_work` 轻量图当时只有一条前进边,没有失败边,validator 判 fail 后无路可退)并修复(补 `validate --fail--> impl` 退回边,复用引擎已验证过的 `backward_count` 双层硬顶 + `remediation_note` 反思闭环,新增 3 条单测),详见文末补跑记录 | 52 | [system-design/46-mandatory-planning-and-task-decomposition.md](./done/system-design/46-mandatory-planning-and-task-decomposition.md) | ✅ **已收口**(2026-09-07)。Phase 0-5 全部实现。**Phase 1**:新 agent `subtask-planning`,钩在 `enqueueTaskRun`(显式 opt-in),产物写共享 `artifacts/subtask-plan.json`。**Phase 2**:经验检索 + 按需 deep research(默认关闭)。**Phase 3 v2**:CEO 心跳直接发现+派发(push),子任务走轻量 work graph(`org-coder`+`org-validator` 两节点)。**Phase 4**:父任务被拆分后让位给子任务(新状态 `decomposed`)、预算按步数均分、父子终态汇总(`settleParentTaskIfAllChildrenDone`)、同父子任务独立并发坑位(上限 3,不占公司级槽位)——四项机制全部用真实数据验证过,包括最后补跑的父子终态汇总(两个真实子任务全部 `completed` 后父任务被正确自动结算成 `completed`)与第二次并发确认。过程中撞出并修复一个几乎必现的真缺陷(`markTaskDecomposed` 原本只认父任务还是 `queued`,但 task-scheduler 抢坑是毫秒级、`subtask-planning` 是数十秒的真实 LLM 调用,等它拆完时父任务几乎必然已经 `running`,接管必然失败)。**Phase 5**:看板加 `decomposed` 状态样式 + 子任务进度展示,父子树形复用已有通用逻辑,未改后端接口。回归过程中还牵出一个独立缺陷——`org-validator` 对同一种 benchmark 契约判断不稳定(5 次里 1 次误把源码路径当 `--target` 判 `target_not_json`,反手倒退归因给 `subtask-planning`)——已定位根因(`decomposed_work` 轻量图当时只有一条前进边,没有失败边,validator 判 fail 后无路可退)并修复(补 `validate --fail--> impl` 退回边,复用引擎已验证过的 `backward_count` 双层硬顶 + `remediation_note` 反思闭环,新增 3 条单测),详见文末补跑记录 |
52 53
53 ## todo/(当前主线) 54 ## todo/(当前主线)
@@ -69,7 +70,7 @@ Graph Agent 架构重构(27 系列)。**已完成的阶段文档已移入 `d @@ -69,7 +70,7 @@ Graph Agent 架构重构(27 系列)。**已完成的阶段文档已移入 `d
69 | [36-prd-agent-methodology-training-feasibility.md](./todo/system-design/36-prd-agent-methodology-training-feasibility.md) | 📝 **调研 + 阶段一/二均已完成**。回应"落地页太单薄是不是该用 Innovator 先训练专业 agent、再用 Dream 持续迭代"——认同方向。**阶段一**:`graph-engine.js` 结算节点后把 `success`/`fail:<reason>` 写进本体 `memory.md`(此前只有人类对话路径会写,Dream 天天空转)。**阶段二**:新建独立试验节点 `prd-methodology-trial` 走真实 Hunt→Digest→Evolve,2 轮收敛(96/97 分,真实基线 50 分),三个真实历史项目反推验证方法论有效;过程中连带修复同一个 2026-08-16 改名批次遗留的 5 处 `innovator`→`org-innovator` 死链(后端两处硬编码、前端"重新训练"按钮、`/api/agent/list` 展示 id 来源的四个 `config.json`),以及 `AgentScaffold` 默认模板一处裸相对路径缺陷。结论:FDE 对方法论类角色确实管用,但收敛速度/验收严谨度依赖任务书显式写明的自纠正要求,非免人工黑盒。环节 3(训练产物 → 雇佣本体转换)尚未开工 | 70 | [36-prd-agent-methodology-training-feasibility.md](./todo/system-design/36-prd-agent-methodology-training-feasibility.md) | 📝 **调研 + 阶段一/二均已完成**。回应"落地页太单薄是不是该用 Innovator 先训练专业 agent、再用 Dream 持续迭代"——认同方向。**阶段一**:`graph-engine.js` 结算节点后把 `success`/`fail:<reason>` 写进本体 `memory.md`(此前只有人类对话路径会写,Dream 天天空转)。**阶段二**:新建独立试验节点 `prd-methodology-trial` 走真实 Hunt→Digest→Evolve,2 轮收敛(96/97 分,真实基线 50 分),三个真实历史项目反推验证方法论有效;过程中连带修复同一个 2026-08-16 改名批次遗留的 5 处 `innovator`→`org-innovator` 死链(后端两处硬编码、前端"重新训练"按钮、`/api/agent/list` 展示 id 来源的四个 `config.json`),以及 `AgentScaffold` 默认模板一处裸相对路径缺陷。结论:FDE 对方法论类角色确实管用,但收敛速度/验收严谨度依赖任务书显式写明的自纠正要求,非免人工黑盒。环节 3(训练产物 → 雇佣本体转换)尚未开工 |
70 | [49-antigravity-inspired-parallel-verification-proposal.md](./todo/system-design/49-antigravity-inspired-parallel-verification-proposal.md) | 📝 **设计讨论,不代表已拍板**(2026-09-04)。对照 Google Antigravity「Teamwork」多智能体框架博客文章,给 27 号 P4「真并行」与 34/35 号「验证严谨度不稳定」两个议题出的方案草稿。**先纠正一个前提**:重读 27-P4 全文后发现阶段 A/B/C 早已全部实现(又一次「文档落后于代码」),当时判断真并行只剩 T2/role 列/`advanceTree` 兄弟子 run 并发三件小事——2026-09-08 收口时又发现这个判断本身有两处误判(role 列其实早就落库、T1 的✅遗漏了 scope 参数的生产接线),三件小事(连同两处误判一起)已全部核实/补齐,见 [27-P4](./done/system-design/27-p4-parallel-and-artifacts.md)。**新提案 A**:借鉴长证明模式的「竞争候选+对抗批评+综合」,区别于现有 `executor-fanout.json` 的分解型 fan-out——需要先有真实场景验证价值,不建议凭空立项,详细设计见 [50 号文档](./todo/system-design/50-competing-candidates-critic-synthesis-design.md)。**新提案 B**:把 35 号提案 D「浏览器关键词命中才要证据」泛化成 benchmark 段全维度默认要求执行级证据(**唯一建议现在推进的部分**);实地核实过把验收路径引导到 `test_script` 段的工作量后**结论是不做**——撞上 `test_script.path` 解析根不含 `org-coder` 实际写代码的项目根这个结构性冲突,改造面远超预期;新增「陷阱注册表」,把 validator 判卷失败的结构化原因喂回 Dream 机制,落点已定案为独立文件 `known_pitfalls.md`(不复用 `memory.md`,避免语义混淆)。建议推进顺序:陷阱注册表最低成本先做,证据泛化次之,竞争候选需要真实场景才立项 | 71 | [49-antigravity-inspired-parallel-verification-proposal.md](./todo/system-design/49-antigravity-inspired-parallel-verification-proposal.md) | 📝 **设计讨论,不代表已拍板**(2026-09-04)。对照 Google Antigravity「Teamwork」多智能体框架博客文章,给 27 号 P4「真并行」与 34/35 号「验证严谨度不稳定」两个议题出的方案草稿。**先纠正一个前提**:重读 27-P4 全文后发现阶段 A/B/C 早已全部实现(又一次「文档落后于代码」),当时判断真并行只剩 T2/role 列/`advanceTree` 兄弟子 run 并发三件小事——2026-09-08 收口时又发现这个判断本身有两处误判(role 列其实早就落库、T1 的✅遗漏了 scope 参数的生产接线),三件小事(连同两处误判一起)已全部核实/补齐,见 [27-P4](./done/system-design/27-p4-parallel-and-artifacts.md)。**新提案 A**:借鉴长证明模式的「竞争候选+对抗批评+综合」,区别于现有 `executor-fanout.json` 的分解型 fan-out——需要先有真实场景验证价值,不建议凭空立项,详细设计见 [50 号文档](./todo/system-design/50-competing-candidates-critic-synthesis-design.md)。**新提案 B**:把 35 号提案 D「浏览器关键词命中才要证据」泛化成 benchmark 段全维度默认要求执行级证据(**唯一建议现在推进的部分**);实地核实过把验收路径引导到 `test_script` 段的工作量后**结论是不做**——撞上 `test_script.path` 解析根不含 `org-coder` 实际写代码的项目根这个结构性冲突,改造面远超预期;新增「陷阱注册表」,把 validator 判卷失败的结构化原因喂回 Dream 机制,落点已定案为独立文件 `known_pitfalls.md`(不复用 `memory.md`,避免语义混淆)。建议推进顺序:陷阱注册表最低成本先做,证据泛化次之,竞争候选需要真实场景才立项 |
71 | [50-competing-candidates-critic-synthesis-design.md](./todo/system-design/50-competing-candidates-critic-synthesis-design.md) | 📝 **设计草稿,不代表已拍板**(2026-09-04)。49 号文档提案 A 的展开:竞争候选骨架 JSON 形状草稿(`candidate-council.json`,未定案)、命名(按 27-NAMING 节点带前缀/本体不带前缀两轴)、`workgraph-planning` 选型判据方向。**关键设计约束**:critic(评判)与 synthesis(择优/融合)必须拆成两个节点,依据是仓库真实事故——`qa-judge` 早期"评判+终态判决合一"设计导致过一次无限循环(20 次调用/31 分钟才熔断,记录在 `deliverable.json` 的反模式说明里),新骨架延续 `validator-triager`/`benchmark-validator` 已验证的"归因/打分/判定三者分离"范式。**预算风险量化**:N 路候选并行消耗 N 倍预算,且 `checkBudget` 只在批量拾取前查一次,实际可能超支到 `maxConcurrency-1`(默认最多多花 4 次调用)才被拦下,候选数 N 目前代码层没有硬顶 | 72 | [50-competing-candidates-critic-synthesis-design.md](./todo/system-design/50-competing-candidates-critic-synthesis-design.md) | 📝 **设计草稿,不代表已拍板**(2026-09-04)。49 号文档提案 A 的展开:竞争候选骨架 JSON 形状草稿(`candidate-council.json`,未定案)、命名(按 27-NAMING 节点带前缀/本体不带前缀两轴)、`workgraph-planning` 选型判据方向。**关键设计约束**:critic(评判)与 synthesis(择优/融合)必须拆成两个节点,依据是仓库真实事故——`qa-judge` 早期"评判+终态判决合一"设计导致过一次无限循环(20 次调用/31 分钟才熔断,记录在 `deliverable.json` 的反模式说明里),新骨架延续 `validator-triager`/`benchmark-validator` 已验证的"归因/打分/判定三者分离"范式。**预算风险量化**:N 路候选并行消耗 N 倍预算,且 `checkBudget` 只在批量拾取前查一次,实际可能超支到 `maxConcurrency-1`(默认最多多花 4 次调用)才被拦下,候选数 N 目前代码层没有硬顶 |
72 -| [51-ceo-autonomous-goal-refill-design.md](./todo/system-design/51-ceo-autonomous-goal-refill-design.md) | 📝 **设计草稿,不代表已拍板**(2026-09-09)。回应"公司能否 7×24 自转"的提问——核实执行层(存活扫描/僵尸 goal 收口/CEO 阻塞任务兜底心跳)已经扎实,真正缺口在决策层:`ceo/heartbeat.md` 与 `tools.md` 的"该提新任务"判断全部要求先有一个 goal/task 存在,没有一条覆盖"公司没有任何 active/draft/planning goal"这种完全空转场景;且 CEO 目前**没有创建 goal 的工具**(`tools.md` 对 `/goals` 只有 GET 示例),`POST /:companyId/goals` 端点存在于路由层但从未暴露给它。设计方案:心跳查询为空时进入"立项模式",先查公司使命(`company-context.md`,默认"待定义"时拒绝立项、转人工)作为立项锚点,用 `created_by:'ceo'` + `split:false`(避免草稿阶段就烧 task-planning token)建草稿 goal,去重后停在 `draft` 等人工 `/dispatch`——分两阶段放权,阶段 B(CEO 自动 enqueue + guardrail)本文档只给方向不实现 | 73 +| [51-ceo-autonomous-goal-refill-design.md](./todo/system-design/51-ceo-autonomous-goal-refill-design.md) | ✅ **阶段 A 已实现**(2026-09-09 设计 / 2026-09-17 实现+实测)。回应"公司能否 7×24 自转"的提问——核实执行层(存活扫描/僵尸 goal 收口/CEO 阻塞任务兜底心跳)已经扎实,真正缺口在决策层:`ceo/heartbeat.md` 与 `tools.md` 原本"该提新任务"判断全部要求先有一个 goal/task 存在,没有一条覆盖"公司没有任何 active/draft/planning goal"这种完全空转场景;CEO 也原本**没有创建 goal 的工具**(`POST /:companyId/goals` 存在于路由层但从未暴露给它)。已接线:心跳先查 `GET /goals` 判空转 → 查公司使命("待定义"时拒绝立项转人工)→ 去重 → `POST /goals` 建 `split:false` + `created_by:'ceo'` 的草稿。**起服务实测(不只是读代码)纠正了两处判断**:① 原设计的多状态/`created_by` 查询参数服务端不支持,改客户端过滤;② 最初以为零 task 的草稿会让 `/dispatch` 天然 409、这就是审批闸门——实测发现 `split:false` 其实自动带 1 条 draft task,`dispatch` 技术上立刻能成功,**没有代码层闸门**,阶段 A 的安全性改为完全依赖 `ceo/tools.md` 里"不许自己调 dispatch"这条提示词约束,是当前最脆弱的一环(见四)。对所有公司默认生效,未改任何路由/服务层代码,纯 agent 人设文档改动(见七)。阶段 B(CEO 自动 dispatch + guardrail + 公司级开关)仍是设计草稿,未实现 |
73 74
74 ## todo/future/(暂缓,非当前重心) 75 ## todo/future/(暂缓,非当前重心)
75 76
@@ -84,9 +85,10 @@ Graph Agent 架构重构(27 系列)。**已完成的阶段文档已移入 `d @@ -84,9 +85,10 @@ Graph Agent 架构重构(27 系列)。**已完成的阶段文档已移入 `d
84 85
85 以下目录本身是**活跃系统的一部分**(不是静态文档),保持原位不动: 86 以下目录本身是**活跃系统的一部分**(不是静态文档),保持原位不动:
86 87
87 -- **`prd/`** — DevLoop 的 PRD/SDD 规格站点源文件。`prd/newfunction/*.html` 由 `npm run spec:extract` 读取生成 `prd/newfunction/_spec/*.md`,是代码依赖的机器可读规格,不是待归档的说明文档。  
88 - **`create-drama/`** — 独立的 Skill 工具子项目(含自身 `package.json` / `node_modules`),不是设计文档。 88 - **`create-drama/`** — 独立的 Skill 工具子项目(含自身 `package.json` / `node_modules`),不是设计文档。
89 89
  90 +> `docs/prd/` 已不在这里:DevLoop 退役(2026-09-17,[52 号文档](./done/system-design/52-devloop-retirement.md))后整体移到了 `docs/_archive/devloop-prd-2026-09-17/prd/`,`npm run spec:extract`/`spec:check` 两条 npm script 也一并删除,不再是活跃工具链的一部分。
  91 +
90 ## 维护说明 92 ## 维护说明
91 93
92 新增文档时,先判断它描述的是**已实现的能力**(放 `done/`)、**当前正在推进的重心**(放 `todo/`),还是**尚未开始且非当前重心**(放 `todo/future/`)。功能落地后,将对应文档从 `todo/`(或 `todo/future/`)移到 `done/` 并更新本索引与 `LEMONBOSS-SYSTEM-DESIGN.md` 中的链接;当主线切换时(比如 Graph Agent 架构完成后),把 `todo/future/` 里优先级提升的条目挪回 `todo/`。 94 新增文档时,先判断它描述的是**已实现的能力**(放 `done/`)、**当前正在推进的重心**(放 `todo/`),还是**尚未开始且非当前重心**(放 `todo/future/`)。功能落地后,将对应文档从 `todo/`(或 `todo/future/`)移到 `done/` 并更新本索引与 `LEMONBOSS-SYSTEM-DESIGN.md` 中的链接;当主线切换时(比如 Graph Agent 架构完成后),把 `todo/future/` 里优先级提升的条目挪回 `todo/`。
build-manifest.json renamed to docs/_archive/devloop-prd-2026-09-17/build-manifest.json
docs/prd/_scan-manifest.json renamed to docs/_archive/devloop-prd-2026-09-17/prd/_scan-manifest.json
docs/prd/assets/app.css renamed to docs/_archive/devloop-prd-2026-09-17/prd/assets/app.css
docs/prd/assets/app.js renamed to docs/_archive/devloop-prd-2026-09-17/prd/assets/app.js
docs/prd/assets/chapter.css renamed to docs/_archive/devloop-prd-2026-09-17/prd/assets/chapter.css
docs/prd/assets/menu.js renamed to docs/_archive/devloop-prd-2026-09-17/prd/assets/menu.js
docs/prd/assets/search-index.json renamed to docs/_archive/devloop-prd-2026-09-17/prd/assets/search-index.json
docs/prd/chapters/01-overview/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/chapters/01-overview/index.html
docs/prd/chapters/02-prd/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/chapters/02-prd/index.html
docs/prd/chapters/03-feature-tree/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/chapters/03-feature-tree/index.html
docs/prd/chapters/04-workflows/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/chapters/04-workflows/index.html
docs/prd/chapters/05-prototype/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/chapters/05-prototype/index.html
docs/prd/chapters/06-sdd-model/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/chapters/06-sdd-model/index.html
docs/prd/chapters/07-sdd-view/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/chapters/07-sdd-view/index.html
docs/prd/chapters/08-sdd-control/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/chapters/08-sdd-control/index.html
docs/prd/chapters/09-sdd-process/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/chapters/09-sdd-process/index.html
docs/prd/chapters/10-reproducibility/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/chapters/10-reproducibility/index.html
docs/prd/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/index.html
docs/prd/newfunction/_spec/CONVENTIONS.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/CONVENTIONS.md
docs/prd/newfunction/_spec/agents-architect.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/agents-architect.md
docs/prd/newfunction/_spec/agents-coder.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/agents-coder.md
docs/prd/newfunction/_spec/agents-integrator.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/agents-integrator.md
docs/prd/newfunction/_spec/agents-overview.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/agents-overview.md
docs/prd/newfunction/_spec/agents-pm.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/agents-pm.md
docs/prd/newfunction/_spec/agents-tester.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/agents-tester.md
docs/prd/newfunction/_spec/agents-triager.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/agents-triager.md
docs/prd/newfunction/_spec/api-contracts.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/api-contracts.md
docs/prd/newfunction/_spec/api-sse.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/api-sse.md
docs/prd/newfunction/_spec/api.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/api.md
docs/prd/newfunction/_spec/arch-acp-bridge.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/arch-acp-bridge.md
docs/prd/newfunction/_spec/arch-components.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/arch-components.md
docs/prd/newfunction/_spec/arch-git-versioning.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/arch-git-versioning.md
docs/prd/newfunction/_spec/arch-mapping.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/arch-mapping.md
docs/prd/newfunction/_spec/arch-project-root.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/arch-project-root.md
docs/prd/newfunction/_spec/arch-tool-registry.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/arch-tool-registry.md
docs/prd/newfunction/_spec/arch-workflow.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/arch-workflow.md
docs/prd/newfunction/_spec/data-documents.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/data-documents.md
docs/prd/newfunction/_spec/data-layout.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/data-layout.md
docs/prd/newfunction/_spec/index.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/index.md
docs/prd/newfunction/_spec/loops-l1.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/loops-l1.md
docs/prd/newfunction/_spec/loops-l2.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/loops-l2.md
docs/prd/newfunction/_spec/loops-l3.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/loops-l3.md
docs/prd/newfunction/_spec/loops-overview.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/loops-overview.md
docs/prd/newfunction/_spec/ops-buglist.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/ops-buglist.md
docs/prd/newfunction/_spec/ops-changelog.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/ops-changelog.md
docs/prd/newfunction/_spec/ops-loop-log.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/ops-loop-log.md
docs/prd/newfunction/_spec/ops-progress.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/ops-progress.md
docs/prd/newfunction/_spec/plan-code-lifecycle.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/plan-code-lifecycle.md
docs/prd/newfunction/_spec/plan-cost-concurrency.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/plan-cost-concurrency.md
docs/prd/newfunction/_spec/plan-migration.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/plan-migration.md
docs/prd/newfunction/_spec/plan-reproducibility.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/plan-reproducibility.md
docs/prd/newfunction/_spec/plan-risks.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/plan-risks.md
docs/prd/newfunction/_spec/prd-background.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/prd-background.md
docs/prd/newfunction/_spec/prd-feature-tree.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/prd-feature-tree.md
docs/prd/newfunction/_spec/prd-glossary.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/prd-glossary.md
docs/prd/newfunction/_spec/prd-personas.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/prd-personas.md
docs/prd/newfunction/_spec/prd-success-metrics.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/prd-success-metrics.md
docs/prd/newfunction/_spec/prd-user-flows.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/prd-user-flows.md
docs/prd/newfunction/_spec/proto-feedback-modal.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/proto-feedback-modal.md
docs/prd/newfunction/_spec/proto-prd-diff.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/proto-prd-diff.md
docs/prd/newfunction/_spec/proto-unit-drawer.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/proto-unit-drawer.md
docs/prd/newfunction/_spec/reading-guide.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/reading-guide.md
docs/prd/newfunction/_spec/requirement.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/requirement.md
docs/prd/newfunction/_spec/scope.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/scope.md
docs/prd/newfunction/_spec/sdd-control.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/sdd-control.md
docs/prd/newfunction/_spec/sdd-model.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/sdd-model.md
docs/prd/newfunction/_spec/sdd-overview.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/sdd-overview.md
docs/prd/newfunction/_spec/sdd-process.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/sdd-process.md
docs/prd/newfunction/_spec/sdd-view.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/sdd-view.md
docs/prd/newfunction/_spec/ui-dashboard.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/ui-dashboard.md
docs/prd/newfunction/_spec/ui-design-system.md renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/_spec/ui-design-system.md
docs/prd/newfunction/agents-architect.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/agents-architect.html
docs/prd/newfunction/agents-coder.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/agents-coder.html
docs/prd/newfunction/agents-integrator.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/agents-integrator.html
docs/prd/newfunction/agents-overview.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/agents-overview.html
docs/prd/newfunction/agents-pm.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/agents-pm.html
docs/prd/newfunction/agents-tester.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/agents-tester.html
docs/prd/newfunction/agents-triager.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/agents-triager.html
docs/prd/newfunction/api-contracts.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/api-contracts.html
docs/prd/newfunction/api-sse.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/api-sse.html
docs/prd/newfunction/api.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/api.html
docs/prd/newfunction/arch-acp-bridge.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/arch-acp-bridge.html
docs/prd/newfunction/arch-components.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/arch-components.html
docs/prd/newfunction/arch-git-versioning.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/arch-git-versioning.html
docs/prd/newfunction/arch-mapping.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/arch-mapping.html
docs/prd/newfunction/arch-project-root.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/arch-project-root.html
docs/prd/newfunction/arch-tool-registry.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/arch-tool-registry.html
docs/prd/newfunction/arch-workflow.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/arch-workflow.html
docs/prd/newfunction/assets/search-index.json renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/assets/search-index.json
docs/prd/newfunction/assets/shell.css renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/assets/shell.css
docs/prd/newfunction/assets/shell.js renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/assets/shell.js
docs/prd/newfunction/data-documents.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/data-documents.html
docs/prd/newfunction/data-layout.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/data-layout.html
docs/prd/newfunction/index.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/index.html
docs/prd/newfunction/loops-l1.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/loops-l1.html
docs/prd/newfunction/loops-l2.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/loops-l2.html
docs/prd/newfunction/loops-l3.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/loops-l3.html
docs/prd/newfunction/loops-overview.html renamed to docs/_archive/devloop-prd-2026-09-17/prd/newfunction/loops-overview.html