Commit 20030e772c9203b5082d07f335e4fa0e6852c752
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 "test name" # 按名称过滤单个测试用例 | @@ -44,10 +44,6 @@ npx vitest run -t "test name" # 按名称过滤单个测试用例 | ||
| 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