-
43 号文档补上 Phase 0-4 的实现记录,含一处架构订正(org-planner 在 org 层永远是 subgraph,真跑数据核实后钩子改成扫子 run 全节点)。 44 号文档是真实回归验证 43 号文档时意外发现的独立缺陷:goal-benchmark 按设计把产物写进 root run 共享 artifacts/ 目录,产出闸门只查节点私有 目录,writesArtifacts:true 这个字段全仓库零代码读取——这条契约在当前 实现下结构性地打不过,不是偶发。很可能正是 snakegame-co 参考任务里 goal-benchmark/planner-validator 显示 skipped 的真实原因。只记录诊断, 未修复,留了两条候选修法。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U7xYyvv3pzuV9diMVUH5QL
-
回应"org-planner 出 brd/prd/sdd 后,任务看板能不能展示成 task/sub-task 树,coder-validator 按清单逐条开发验收"。原话照搬 + 结构化复述 + 现状调研(parent_task_id 只服务于 Agent Chat 派单流程、task-planning 人设明确拒绝按检查项拆 task、org-planner 没有建任务工具)。 三轮讨论定案:goal→task 流水线自建父子机制、先只拆验收(开发仍整体 完成)、要不要拆交给 task-planning 判断、任一子任务 fail 父任务即 fail、子任务复用 tasks.status 状态语义。 技术实现计划 Phase 0-4 逐条核实代码形态,含两处订正(org-validator/ coder-validator 是不同 agent;org-planner 产出的验收清单是 acceptance.md 不是 acceptance.json)和一个待验证风险(acceptance.md 在真实回归里 从未被用上,Phase 2 落地前需先确认可靠性)。尚未开工。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U7xYyvv3pzuV9diMVUH5QL
-
昨晚做完 42 号文档 Phase 2-4 之后忘了同步 docs/README.md 索引,还停在 "Phase 1 已实现,Phase 2-4 待开工"。这次一并把两份文档从 todo/ 挪进 done/(39 号 P1-P5、42 号 Phase 1-4 均已实现,符合仓库自己的归档约定), 索引表挪到对应位置,两处过期描述改成完工状态。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BwG4b7Nq1NLR9eeE3M9Us9
-
冲突在 docs/README.md:并行会话在真实端到端测试里发现 boss agent(39 号文档)还有 三个单测没覆盖的真问题,把 39 号重新留在 todo/ 并拆出 42 号跟进文档;与我这边把 39 号挪进 done/ 的判断冲突——采纳对方判断(39 号文档物理路径挪回 todo/system-design/, докс/README.md 用对方更新的行 + 补 42 号一行),因为他们是基于更新的真实测试结果。 顺带把 29-dream-design.md 这次会话移到 done/ 后遗漏的引用修掉: system/agents/{dream-distiller,dream-screener}/agent.md、 server/{routes/dream.js,services/dream-service.js}、 server/tests/unit/dream-routes.test.js 六处 docs/todo/system-design/29-dream-design.md 路径改成 docs/done/system-design/29-dream-design.md(no-dead-path-references.test.js / agent-md-refs.test.js 两条守卫测试之前没扫到这几处,这次真跑测试才暴露)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
29-dream-design / 33-needs-gate-role-filter-bug / 35-validation-rigor-and-body-readiness-proposal / 39-boss-agent-task-supervision / 40-agent-chat-streaming-interrupt 逐份核实状态确认已完成 (后两份状态行本身滞后于代码,已在上一提交订正),按维护说明从 docs/todo/system-design/ 挪到 docs/done/system-design/,docs/README.md 的 todo/done 两张表同步更新。 顺带修复 4 处指向这 5 份文档的相对路径引用(28-followups / 31-work-graph-fail-fallback-coverage / 34-validator-scored-without-real-deliverable / 41-graph-vs-fde-reliability-discussion), 文件搬家后原来的同目录相对链接会失效,改成 ../../done/system-design/ 的正确相对路径。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
上一条 commit 只带了纯改名(git rename detection),文件内标题、 39 号文档的两处引用、docs/README.md 的索引更新都漏提交了(git add 命令里混了一个已经改名走的旧路径,报错后整条 add 没生效)。这次补全。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BwG4b7Nq1NLR9eeE3M9Us9
-
核心修复:indexNodeOutputs() 此前只扫节点私有目录,不扫项目根——但引擎自己的写入边界 明确允许交付物写项目根,导致内容型交付物节点(产出写进项目根时)永远进不了 R-19 产物 索引,下游 needs 声明永远查不到实例。新增 readDeclaredProduces():agent 可在 contract.json 里显式声明 produces:{kind: 绝对路径},校验(绝对路径/落在项目根或私有目录内/ 文件真实存在)通过才登记,不满足就整个 kind 判「没产出」,不静默放过。全局提示词 (describeArtifactContract)同步更新,所有 org/work 节点自动学到这个新字段。 新增 org-hunt / org-digest / org-evolve 三个 graph 原生 agent(方法论抄 innovator-hunt/digest/evolver,协议原生兼容 graph 引擎),配套新增 work-graph-templates 的 deliverable.json(内容型交付物骨架,不引入验证 agent)。11 轮真实试跑挖出并修复 5 个 独立缺陷(详见 41 号文档问题 7):建公司自动规划与手写图的竞态、work-graph 模板库缺内容型 交付物骨架、验收节点任务描述范围溢出、两个规划 agent(orggraph-planning/workgraph-planning) 的路径口径写错、以及上述 R-19 索引缺口。最终产出与原生 FDE 对比:内容骨架可迁移、质量不 打折,但可靠性差距悬殊。 补充说明:system/agents/{ceo,innovator-evolver,master,org-innovator}/{agent,soul}.md 是 本会话开始前已存在的 dream 自编辑改动,随本次提交一并收进去,不属于本次改动范围。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
按 39 号设计文档落地 ceo 常驻监督:company.js 的 goals/tasks 端点 放行内部令牌自环调用,POST /tasks 支持 draft 模式(agent 自主提任务 不再立刻烧预算),ceo 补雇进公司创建流程;task-settle 新增事件驱动 唤醒 + 30 分钟兜底轮询;graph-engine 的回退熔断收敛时顺手回写一条 draft task,形成"卡住 → 自动/ceo 判断 → 重新规划"闭环。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BwG4b7Nq1NLR9eeE3M9Us9
-
服务器地址、/opt/lemonboss 部署拓扑(docker 容器 lemonboss、bind mount)、 git pull + docker restart 的具体上线步骤,来自实地登录核查,避免下次重复问。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
docs/README.md 索引条目同步从 todo/(当前主线)表格挪到 done/ 表格,路径改指 done/system-design/。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
验证阶段真查出一个 Phase 1/2 都没顾上的真实漏洞:agent-chat.js(/api/agent/*)一直靠 :agentId 里的 "companyId:role" 命名空间前缀(locator.companyStateDir 解析)区分会话 属于哪家公司,但这个文件从只挂了 requireAuthOrInternal(登录即可),没有归属校验。 curl 验证:任意登录用户对 GET /api/agent/{别人的companyId}:{role}/conversations 依然 200,能跨租户读别家公司的 agent 会话。 修法跟 company.js 同一套思路:router.param('agentId', ...) 解析 : 前的 companyId 段, 过 canAccessCompany。三个例外:①没有 : 前缀的全局 agent(master/org-innovator 等, 落 _global)不做归属校验,本来就全系统共享;②内部自环调用(req.user.internal)直接 放行,招聘/训练自动流水线要能打到任意公司名下;③admin 不受限制。 新增 agent-chat-company-gate.test.js:直接拿 Express 暴露的 router.params.agentId[0] 单测这个 param handler,覆盖同公司放行/跨公司404/admin不受限/公司不存在404/全局agent 放行/内部自环放行六种情况。顺带修好一个连带失败的既有测试文件 (agent-chat-tenant-isolation.test.js,zz-tenant-alpha/beta 同样是从没真正建过的 虚构公司 id)。 验证:curl 复测跨租户读会话从 200 变 404,owner/admin 依然 200,全局 agent 不受影响; 真实浏览器用全新账号确认 CompanyDashboard.vue 对"没有可用公司"已有现成空状态,不需要 新写前端代码。全量 vitest 1433 passed,3 个无关既有失败不受影响。 至此 38 号文档 Phase 0/1/2/3 全部完成。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
company-service.js:company.json 加 ownerId(无 SQL 表,纯 JSON 字段);create() 接收 ownerId;list({ user }) 按传入用户过滤,不传就不过滤(company-heartbeat-service.js 等 系统内部巡检要看全部公司);新增 canAccessCompany(company, user) 作为全仓库唯一一份 归属判据(admin 不过滤,判负一律 404 不是 403,不暴露"这个 id 存在只是不是你的")。 company.js 用 router.param('companyId', ...) 统一收口(约 50 条路由,含 okrPath() 系列 动态路由)。graph-run.js 的两个挂载点参数形状不一样,设计阶段的描述不准确,实现时才 发现:companyRouter 唯一路由是 /:companyId/graph-runs 直接查;主 router 全部路由是 /:id/...,:id 指的是 run 不是公司,改成先查 run 的 company_id 再判断,run 不存在或 公司不是你的统一回"run 不存在"。devloop.js 用 :pid 反查 company_id;POST /projects 单独校验 body 里的 company_id(放在基本字段校验之后,避免归属检查打乱输入校验的错误 优先级);GET /projects 按归属过滤列表。 okr.js 最终没有按原计划接入 companyId 归属校验——实现前查证发现 OkrDashboard.vue 挂载的 /okr 页面全站没有任何导航入口指向它,是个孤儿页面,给访问不到的页面建"选公司" 前端交互不划算,改成 requireAdmin(跟 dream.js 同款),先堵住直接拼 URL 看到跨公司 聚合数据的口子。真正在用的公司级 OKR(company.js 的 /:id/okr)已随 company.js 一起隔离。 存量数据迁移:scripts/backfill-company-owner.js(npm run backfill:company-owner), 两家存量公司已划给种子账号,幂等验证过。 8 个既有测试文件用的公司 id 都是从没真正建过的字符串标签,挂锁后集体 404——新增共享 helper server/tests/helpers/ensure-test-company.js 修复;两处原有的"跳过已有 company.json 的目录,那是真公司"防御逻辑,判据从"有没有 company.json"改成"ownerId 是不是 -1 这个测试专用标记",否则新出现的测试夹具会被误判成真公司永远不清理。 验证:真实 curl 走过(admin 看到全部存量公司、新用户看到空列表、新用户拼 URL 访问 别人的公司 404、新建公司 ownerId 精确落在创建者、admin 和创建者都看得到其他人看不到); 全量 vitest 1427 passed,3 个无关既有失败不受影响。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
给此前完全零防护的 company.js/okr.js/tasks.js/devloop.js/graph-run.js(两个挂载点)/ arena.js/config.js/evolution.js/whatsapp-auth.js 挂 requireAuth;dream.js 挂 requireAdmin (系统级经验汇流视图,只有 admin 能看)。open-api.js(自己一套 OPEN_API_KEYS)/auth.js 自身/health 端点按计划排除。这一步只挡"没登录",公司归属过滤留到 Phase 2。 agent-chat.js 不能直接挂 requireAuth:company.js(自动建公司/招聘后自动训练)、 task-settle.js(goal 汇报回调)三处服务端自环调用会 fetch 自己的 /api/agent/* 端点, 拿不到任何用户 cookie,直接挂锁会打断这几条核心自动化链路。新增 requireAuthOrInternal + jwt-auth.js 的进程内 INTERNAL_TOKEN(启动时随机生成,只活在内存里):自环调用带上 x-internal-token 头放行,其余情况仍要求真实登录;三处调用点同步改造。 17 个既有测试文件、67+ 处用例直接拿 supertest 打这些路由,从没设过登录 cookie(测的是 业务逻辑不是鉴权)。没有逐个补登录态,改为 requireAuth/requireAdmin 在 NODE_ENV=test 时默认放行,除非显式 FORCE_REAL_AUTH=1;新增 route-auth-gate.test.js 在放行关闭状态下 做结构检查(router.stack 里中间件是否真的排在所有路由前面),确保"锁真的挂上了"这件事 有测试兜底,不被业务测试的默认放行悄悄掩盖。 验证:真实 curl 走过全部路由(无 cookie 401、admin 登录全通、非 admin 能看公司但 dream.js 403);手工删过一行 requireAuth 确认守卫测试真的会红;全量 vitest 1427 passed, 另 3 个失败与本次改动无关(stash 验证过改前改后一致,系仓库并发工作遗留)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
远程部署前置需求:登录鉴权 + 公司级多租户隔离。后端 auth.js/jwt-auth.js(注册/登录/ JWT-cookie/OAuth)本来就已经可用,这次只是把它接到前端。 - scripts/seed-admin-user.js(npm run seed:admin):幂等种子脚本,建出 admin/hex1234, role=admin。 - web/src/composables/useAuth.js + views/Login.vue:登录态 + 登录页。 - router/index.js 全局 beforeEach:未登录跳 /login?redirect=...,登录后带着原目标跳回。 - main.js 全局 401 拦截器:cookie 中途过期同样兜住,不止页面切换那一刻。 - AppNav.vue:显示用户名 + 退出登录。 - 顺手修:App.vue 原来无条件渲染 MasterChatDrawer,登录页也会露出这个悬浮入口, 改成登录且非登录页才显示。 业务路由还没加锁(Phase 1 的事),登录后依然能看到现状全部数据,符合这一阶段的验收边界。 真实浏览器走过一遍全部流程(跳转/登录/跳回/直接刷新受保护路由/退出),npm run build 通过。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
现状 org graph 按 company_id 单例(27-P2 标题原文即"公司级"),塞不下 HR/财务/市场这类 跟"交付流水线"无关的公司常设职能——system/agents/hr/("招·留·管·退")本体已存在却从没 被装进任何图,全靠 fire-and-forget chat 招聘,没有图执行那一套断点续跑/审计轨迹。 提议把作用域从 company_id 升级为 (company_id, department_id),一家公司可装配多张部门图, 每张仍保持人工固定/慢变/可审计——不是把角色图变成动态生成,只是允许公司持有的图从 1 变成 N。 全仓库调用点扫描(fork)结论:改造面是最初估算的 4 倍。真正的单点真相在 work-graph-db.js:readDefGraph 的裸 SQL 不变式(graph_id === company_id,写进了 §四.A.2 设计文档),坐在 graph-engine.js 执行引擎的热路径上,不在 org-graph-service.js 那层服务 API;另外还有两个易混淆的服务文件(org-graph-service.js / graph-service.js)共同维护一份 必须字节级一致的重复唯一索引、独立的 graph-seed-service.js 对账子系统(8 处裸 SQL)、 company-hire-org-layer.test.js 专属测试套件、orggraph-planning/task-planning 两份 agent 人设文档把"只有一张图"写进了自我认知——都需要一并改。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
在 prd-planning/agent.md 加了「描述性语言扫描」+「内容深度下限」+「业务度量翻译」三段 具体操作(对应 36 号文档训练出的 SKILL.md Step 4/5),soul.md 加一条对应工作原则。 用同一个 e2e-demo 首页任务重新跑了一次端到端回归验证:新 PRD 把"大图/简洁大气"等形容词 逐条翻译成量化规则,最终产出的 index.html/style.css 精确对应这些数值(视觉元素 min-height:320px、区块间距 96px/56px 等),文案不再卡在"非空"这条线——训练效果在 真实任务里得到验证。 回归过程中发现一个新的、独立于本次改动的引擎缺陷:org-coder-test 被反向打回后产出 「建议重跑 org-coder-validator」的诊断文件,引擎把诊断文件里的 infra_flake 标记当成 了这个节点自己的执行结果,导致原地重跑但从不路由到诊断建议的目标节点,陷入没有熔断线 的确定性死循环。记进 30 号文档,留待后续修复。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
新建独立试验节点 prd-methodology-trial,走真实 Hunt→Digest→Evolve 训练 PRD 撰写方法论: 2 轮 Small Loop 提前收敛(96/97 分,真实基线 50 分),用三个真实历史项目反推验证方法论 有效,Deploy 范围限定在该独立节点,未触碰生产 prd-planning。结论:FDE 对方法论类角色 确实管用,但收敛速度/验收严谨度依赖任务书里显式写明的自纠正要求,非免人工黑盒。 过程中连带修复同一个 2026-08-16 改名批次(innovator→org-innovator 等)遗留的 5 处死链: company.js 两处硬编码调用、CompanyDashboard.vue「重新训练」按钮,以及四个本体各自 config.json 内部 id 字段从未随目录改名同步更新,导致 /api/agent/list 展示层用假 id 显示成死卡片。顺手修了 AgentScaffold 默认 tools.md 模板一处裸相对路径缺陷(对应 agent-md-refs.test.js 里已登记多时的已知缺陷)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
补记 commit fadb6fa 的实现记录:证据闸门选了"拦截"不是"降级"(降级等于还是采信 了分数,只是换个说法);goal-benchmark.json schema 完全不用改,evidence 早就是 benchmark-validator/agent.md 教的既有字段,只是从没被 goal-contract.js run 读过, 让 runBenchmark 多看一眼姊妹判词文件即可,没有发明新格式;C 的实现只更新了真正 写分数/证据的 benchmark-validator,不是最初以为的 coder/unit-tester。 §三推进顺序标注全部完成,并记录了样本量不足的遗留风险(只有一次真实回归验证过 证据闸门,关键词表覆盖度与拦截后的连带影响都还没有大量数据支撑)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
补记 commit bab675c 的实现记录:按"第一版先做前者"落地(blocked 等人工, 装配自愈留后续),以及中途把测试套件炸穿 75 个用例又收窄回来的完整过程—— 根因是 missingBodyDefinition 查真实文件系统,测试夹具的假 systemAgentId 天然"缺失",改法是借用已有的 boundaryGuardApplicable 判据(只在真实执行器 下生效),不是发明新判据。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
用户问"任务结果差是 agent 能力、架构、还是 graph workflow 问题",这份文档是 书面复盘:按发生顺序分四类——图/模板设计缺陷(31/33 号,已修)、招聘装配可靠性 bug(32 号已知问题的新样本)、一个复盘时新发现的架构缺口(missingBodyDefinition 完整性闸门只在招聘路径上调用,graph-engine.js 的执行核心路径 advanceOne 一次 都没查,本体不完整时没有第二道防线,静默拿空提示词跑真实 LLM)、agent 能力 (不是问题,两次订正过"没工具做不到"的误判,且有正面即兴发挥的例子)。 结论:主要是架构问题 + 一个具体可靠性 bug,不是模型能力问题。 提出两档改进方案供讨论: 低成本(建议直接做)——把完整性闸门接进图执行前置检查(提案 A)、 控制台展示验收证据可见性(提案 B,纯 UI 不改行为) 大改动(建议先讨论优先级)——标准化视觉验收工具(提案 C)、 引擎级证据闸门(提案 D) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
§5.1 原来断言"没有浏览器工具,物理上做不到",复盘时对照 p-bkhylu 的 org-coder (同样只有 bash/read_file/str_replace(+write_file),没有专门的浏览器工具)却 真跑出了 Playwright + headless Chromium 测试,才发现这个判断错了:仓库自带 playwright 依赖,bash 里 `node verify.mjs` 沿目录树能 require 到仓库根的 node_modules,这条路今天的 coder/unit-tester 同样走得通。 真正的差异不是工具权限,是 unit-tester 的 agent.md 从未填充过(32 号文档那类 问题)、没有任何角色指导,而 org-coder/coder-validator 都是正常填充过的成熟 本体。根因从"平台缺工具"改判为"这次没有指导 agent 主动想到",是一个不一样、 也更能采取行动的结论。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
对比 e2e-demo 现有的三个项目根: p-v82tpc(今天的回归任务)—— 静态正则解析文本,零浏览器 p-bkhylu("做一个 lemonai 官网")—— 真实 Playwright + headless Chromium: 六档视口量 scrollWidth/clientWidth、getComputedStyle 量字号、手算 WCAG 对比度、 禁 JS/reduce-motion 验证、整体挪到 /tmp 用 file:// 重开验证可移植性 p-v1mpcl(31 号文档那条原始卡住任务)—— 无验证,任务在验收前就被取消 p-bkhylu 的 DELIVERY.md 里那句"未采信自证脚本,符合 SDD §0/§2 I-4 验收独立性 要求",搜遍 system/、docs/ 都找不到这条规则——它是那次任务的 sdd-planning 会话 自己写进那次 SDD 的,不是仓库级别的通用约束。也就是说三条任务里,要不要认真 验证、认不认自证脚本,完全取决于哪次任务规划时 agent 会话恰好这么想,没有系统 保证。这就是 34 号文档 §三"影响面"判断的实锤:任务显示"已完成"与"真的达成 原始需求"之间的落差,目前只能靠运气。 34 号文档 §四 checklist 全部查完,状态行同步更新。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
34 号文档追加调查(§五): - coder-validator(预置 active 本体)的 agent.md 通篇是代码/契约正确性验证协议 (npx vitest run + 抓假绿五件套),压根不涉及视觉/交互检查;这次任务新招的 coder/unit-tester 两个本体 toolPolicy 都只有 bash/read_file/str_replace, 没有浏览器/截图工具——goal-benchmark.json 的 evidence_hint 要求"打开浏览器", 在给定工具权限下物理上做不到,不是 agent 偷懒。 - 但也不是纯粹空手套白狼:data/companies/e2e-demo/projects/p-v82tpc/tests/ unit-tester.check.js 是一份真实可运行的零依赖静态断言脚本,对维度 1-3 的检查 (字号比例真解析 CSS clamp() 算出数字、三个卖点区块标题顺序、锚点跳转/平滑滚动) 与浏览器版本基本等价甚至更精确;维度 4/5(响应式断点、资源完整性)的静态版本 明显更弱,会放过断点内样式写错、本地资源路径错误这类情况。 顺带发现:这份脚本很可能是 unit-tester 在提示词完全没有测试方法论指导的情况下 自己想出来的——它的 agent.md 还是没填充过的 _base 原始骨架(隔壁 coder 正常填充 过),是 32 号文档"招聘装配没填充完"那类问题的又一个真实样本(发生在方案 B 修复提交 6a18379 落地前 1 小时,是旧行为的证据,不是新机制的回归;新机制下 会不会正常完成,仍未验证)。32 号文档 §四追加第 6 条记录这次样本。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
用户反馈:控制台原来只能逐个节点点「输入输出」tab 看产物,缺一个全局入口。 新增 TaskFilesPanel.vue,挂在页头,跨节点/跨 run 一次性列出这个任务的全部产物。 做的时候发现分两类、且第二类之前完全没覆盖: · 节点产出索引(graph_files,按 company+task 检索)——规划笔记/日志/契约快照 · 项目根(W2 ensureProjectRoot,data/companies/{cid}/projects/{pid}/)—— 真实交付物代码写的地方,跨节点共享,indexNodeOutputs 从不扫它 后端补 readProjectRootRecord 导出 + GET /api/graph-runs/:id 挂 projectRoot 字段; 项目根的文件列表复用已有的 GET /:companyId/files(此前零调用方),不新开列目录端点。 新增 graph-run-route-io.test.js 两例(分配前 null、分配后原样透传 + 幂等)。 顺带订正 34 号文档:当时断言"index.html 从未被写出来"是错的——真实网站文件 其实在项目根里,只是没查那个目录。34 号文档 §零 记录了订正过程,问题收窄成 "validator 有没有真的做过浏览器级检查"(仍未解决,留待下次)。 全量单测 1000/1000 通过。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
真实回归任务 T-mt2r6fz0-125b 走到 completed 后回查产出,发现 org-coder-impl 从未写出任何 HTML/CSS/JS 文件(只有 _plan.md/_research.md/coder.log),但 org-coder-validator 给六个维度全打了 100 分。goal-benchmark.json 的 evidence_hint 里五个维度明确要求"打开 index.html/浏览器开发者工具检查", 这份评分显然没有真的执行过这些检查——是一次没有证据支撑的评分,不是 "查过但判错"。 不是 31/33 号修复引入的新问题,是那两次修复让这条本会一直卡死的任务真的跑到 completed 之后,才把这个一直存在的验收缺口暴露出来。只记现象与证据,根因 (提示词缺前置检查?validator 没有可用的浏览器/文件工具?是不是这次新招聘 本体特有的一次性现象)留给下次调查,这次不深挖。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
org-coder-validator 在真实回归任务里被 missing_required_input 反复误判 blocked: executor.json/executor-fanout.json 的 test/integration→validator 边声明 produces:["log"](required 默认 true),但 test 类节点从不写出能被 indexNodeOutputs 认作 kind=log 的文件(coder.log 实际属于 impl,test 自己的 _plan.md/_research.md 认不出 kind 也没有一对一无歧义可猜),这个 kind 因此永远不会被索引到, requiredInputsMissing 每次都判缺失——不是时序问题,是结构性、每次重试都复现的硬伤。 改成 { kind: 'log', required: false },对齐 validator.json 已有的写法(它的 needs:artifact 早就标了 required:false)。真正必需的 needs:artifact 不变, 仍受硬闸门保护。 中途走了一段弯路:最初以为该改 inboundContracts() 按 role 过滤只留 needs, 改完单测炸了 9 个用例——大多数边只声明 produces(无配对 needs),这条链路 正是 T-mt25ecbd 产出闸门依赖的数据源,按 role 过滤会静默削弱那次修复。 已撤回(work-graph-db.js 这次只加注释,没有逻辑改动),细节记在 33 号文档。 新增回归用例 graph-files-index.test.js ⑪:produces required:false 且该 kind 从未被索引到时不拦下游成功,同边 needs:artifact(required:true) 依旧受保护。 全量单测 998/998 通过。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
用真实 LLM 起了一条新任务(G-mt2r62ia-73af/T-mt2r6fz0-125b)回归验证 83afecb 的修 复:org-planner-sdd 自判失败后沿新补的兜底边自动回退 3 次、零人工介入,最终收敛到 completed,补上 31 号文档 §六此前用确定性测试代替的那步真实验收证据。 顺带在 org-coder 子图撞见一个独立的新 bug:inboundContracts()/requiredInputsMissing() 不按 role 过滤 graph_edge_contracts,把同一条边上声明的 produces(源节点自己产出什么) 也当成目标节点的必需输入,导致 org-coder-validator 被 missing_required_input 反复假阳 性 blocked(agent 自己判定 passed,引擎却强改成 fail)。已定位根因、写清复现证据与建议 修法,记在 33-needs-gate-role-filter-bug.md,留给下次实施。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
planner 骨架(brd→prd→sdd→goal-benchmark→validator)复现:三个 planning 节点 声明了 produces 却没真落盘,executor 没抛异常就被引擎判 success;goal-benchmark 的入边 needs:[brd,prd,sdd] 只用来拼提示词里的 ⚠️ 提示,agent 视而不见照样产出 合法 acceptance。下游 validator 永远读不到三份文档,backward 重试撞循环硬顶后 只能人工兜底。 settleNode 判 success 之前新增两道闸门(均只对 agent_call 节点生效,subgraph/org 节点的契约由子 work run 自己的节点过闸): - unsatisfiedRequiredProduces:声明的 required produces 一个候选文件都没落盘 → fail_reason=produces_missing,不再放行 - requiredInputsMissing:声明的 required needs 在 graph_files 里查不到实例 → fail_reason=missing_required_input,不采信 agent 自报的 success 两者都只判「有没有」,不判「分类对不对」——ambiguous 归类留给下游 ⚠️ 提示词处理, 避免把「写了东西但引擎猜不出对应哪个 kind」误判成没执行。 包含此前已完成但未提交的 27-P4 T3(graph_runs.max_concurrency 落库)及配套 advance-batch 测试。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
只做了这一件事,没有跟着做「dream 改成 org/work graph 来跑」——两者被 单独评估过:org/work graph 是单公司作用域(org graph=公司级 workflow, work graph=公司内某任务的节点图),dream 却是跨公司扫描,套进去要么破坏 作用域假设要么得新开图类型;且 graph 引擎自带的验收机制(goal-contract benchmark/test-script)判的是「产物过没过验收脚本」,对「经验提炼得对 不对」这种自由文本判断没有对应机制——不管套不套 graph 都得单独设计 rubric,是同一件事。用户明确只要 REST/控制台这一半。 ## REST(server/routes/dream.js,挂 /api/dream) 路由本身没有新业务逻辑,全部委托给已测过的 dream-service.js: GET /agents(总览)、GET /agents/:id(详情,含定义文件可写性 + 经验 审计)、POST /agents/:id/run(手动跑一次,dryRun 只看有没有新原料不 起 LLM)、POST /sweep + GET /sweep/status(全量扫描后台跑 + 轮询,内存 态并发锁防止连点两下)。 ## 控制台(web/src/views/DreamConsole.vue,路由 /dream) 一个表格 + 两个弹窗:本体列表(详情/跑一次/dry-run)+ 全量扫描按钮 (15 秒轮询状态)。导航栏加 🌙 Dream 入口。 ## 验证 server/tests/unit/dream-routes.test.js 4 例,monkeypatch 掉 dream-service 导出对象上的六个函数(不走真文件系统,不误扫真仓库 76 个本体),只验路由层自己的逻辑:端点接线、sweep 并发锁状态机。 真起服务器打了真数据:GET /agents/innovator-evolver 正确报 SKILL.md 因没进 git 历史而不可写、经验审计吐出上次真跑沉淀的 4 条 经验及原文;dry-run 正确报 no-new-material,没多花一次 LLM 调用。 浏览器里走了一遍列表→详情→dry-run,与直接打 API 结果一致。 955 个单测全绿。 文档:29-dream-design.md §5.7 记录实现与「为什么不做 graph 化」的 理由;28-followups.md / docs/README.md 同步更新 dream 现状。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
## 验收 4:从「静态成立」变成真的跑过一次 原状态是 🟡「静态成立,未真跑」—— 人读代码把 fixture verdict → FAILING_VERDICTS → readNodeProduct → callAgentNode 判 fail 这条链读通了,但没有任何一次真跑或真链路证据。 现在 graph-real-chain-smoke ⑥ 走完整条:fixture 产出 verdict="attributed" → 节点 fail、fail_reason=input_underspecified、沿 fail 边点亮下游、 判词落在**下游节点**行上(判词的载体是「点亮它的那次状态转换」,不是失败节点自己)。 反向验过:verdict 改成 passed 立刻红。 写 fixture 时踩到一条值得记的:fail_reason 是封闭域 ATTRIBUTION_REASONS, 第一版编了个 contract_invalid,被**按设计降级成 null** 并留一条 timeline —— 引擎不认识的归因一律不信。判据没错,是 fixture 错。 ## 验收 2 / 8:由 2026-08-20 那次真跑验掉(§六ter) · 2 —— 19 次真 agent 调用之后 `git status --porcelain` 完全为空,交付物都在项目根内。 这正是 §六bis「后半被并行 agent 打破」那条的干净环境重验。 · 8 —— 判据取「它引用了只可能来自提示词的内部 id」:triager 判词原文写着 「org-coder-impl 私有目录 rn_96a8cd696dcc 下只有 _research.md」, rn_96a8cd696dcc 是 graph_run_nodes.id,agent 没有别的途径知道它。 ## 验收 9:产出端通了,消费端没等到那个形状 真跑里 triager **确实产出了两半地址**(orgNode + workNode)—— 这一条本身有分量:27-P3/P4 §八.22 第 13 处记的正是「引擎四环全通, 但产出方 agent.md 里根本没有这个键」,那半条现在通了。 紧接着「忽略跨层地址」那条**不是缺陷,是判据在正常工作**:这次回退发生在 work 层内部,edge.to 本身就是 agent_call 节点,已是最细粒度,没有跨层可言。 缺的是**那个形状**:一次 org 层回退边、且目标是 subgraph 节点。 别把「机制没验」和「机制没有」混为一谈 —— 定点重置的逻辑侧有 graph-cross-layer-address.test.js 三例注入式覆盖,缺的只是真跑里发生过一次。 ## 顺带 · template-verdicts 的样本非空那条补 ENOENT 容忍。它扫**活目录**, 而 graph-real-chain-smoke 会在 system/agents/{aid}/{cid}/ 下建了又清运行态 —— 文件在「列出名字」和「读它」之间消失是正常的。walk() 与 violations() 早就容忍了, 只有这一处漏了,实测偶发红过一次。**扫活目录的守卫,每一处读都要容忍 ENOENT。** · 真跑 timeline 里发现一条未修的:每个节点的产物索引写入都撞 UNIQUE idx_graph_files_path 失败并被降级成日志(重试时同路径再写一次)。 后果是 files.json 产物索引在有重试的 run 上静默不全 —— 归 P4 一起处理,记在 §六ter。 全量:139 文件 / 1297 测试全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> -
agent_call 与 subgraph 是**两段不同的默认实现**(defaultAgentExecutor / defaultPlanWorkGraph),各有各的 onAcpEvent 累加、各有各的守卫开关分支。 上一轮只覆盖了前者,「规划子图」那半条链仍然是零真实覆盖。 现在走完:defaultPlanWorkGraph → AgentManager → ClaudeCliProtocol(mock) → extractPlannedGraph 解析回复 → createWorkGraphSafely → 建子 run。 断言两处假 planner 天然绕开的接线: · 子 run 的定义确实来自 fixture 那张图(节点名 / systemAgentId 逐个对) · 规划那一轮烧的 token 也进了预算 —— 走的是 defaultPlanWorkGraph 自己那条 onAcpEvent,与 agent_call 那条不是同一段代码 ③ 的守卫断言补上 subgraph 分支的正反对照。 新增 fixture workgraph-planning.json:图 JSON 同时放进 chunks 与 result (mock 下 output 取哪一半由 AgentManager 决定,不该由 fixture 来赌)。 反向验过:抽掉 fixture 里的图 JSON、或把它的 usage 归零,对应用例分别变红。 **覆盖边界写在用例注释里**:跳过 resolvePlanningAgentName 里的按需 hire (预塞一行 company_agents)—— hire 要一条真实公司记录,那条路径另有 company-hire-org-layer.test.js 盯着;这条 smoke 验的是规划链路,不是招聘。 全量:139 文件 / 1296 测试全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
## 一、W7「零边图」不是待办 —— 它早修了,是注释在骗人 `company-service.js` 的判据注释仍写着「判据用**有没有边**」,并留着一段 「已知残留:单 org node 的最小图没有边,判据③不生效……真跑到那一步再看」。 **那个残留在 `58a2865`(08-17)就修掉了**:`orgGraphMembership` 现在的主判据是 `authored_by='planner'` 的节点存在(「orggraph-planning 提交过一张图」的直接证据, 零边也认),边数降为存量行的回落判据;守卫 `company-hire-org-layer.test.js` 的 `CO_ZEROEDGE` + `W7-fix` 两条盯着。 注释没跟着改,于是它把读的人**引向一个已经修好的缺陷**去重修一遍 —— 我就是这么被 带偏的:读到那段注释就没再往 `orgGraphMembership` 里跟,还据此往待办清单里写了一条。 这是「指路牌失效」那一族,和 CLAUDE.md 死链同型,只是方向相反(那边指向不存在的东西, 这边描述已不存在的洞)。 判据的措辞也改了:**「成型」的判据在 graph-service.orgGraphMembership(),不在这里**, 免得下一个人照注释理解。P3B 文档与 docs/README.md 的对应条目一并更正。 ## 二、还上「真实路径 smoke 进 CI」那笔欠账的一半(27-P3/P4 §十 硬规矩 2) 原话是「凡是靠注入点验的能力,都要有一条真实路径的 smoke 进 CI 才算验收完成 —— 这条欠账仍未还」。此前唯一走真实路径的 `scripts/real-pm-smoke.js` 要真 API 额度、 人工跑、而且验的是 DevLoop 不是图执行。 做法是把「真 LLM」和「真代码路径」拆开:**只把最外层的 CLI 子进程换成 fixture 回放**, setAgentExecutor / setPlanWorkGraph 一个都不调。链路完整走 advanceOne → defaultAgentExecutor → AgentManager → ClaudeCliProtocol → onAcpEvent → 落盘 → readNodeProduct → settleNode → spendBudget → 边界守卫。 三条断言各盯一处**假 executor 天然绕开**的接线: · ① mock/files 真的落到节点产物目录(假 executor 直接 return,这一环整个不存在) · ② token 用量真的从 session/result.usage 数进预算 —— **就是 §六 验收 10 卡了两轮的那一维** · ③ boundaryGuardApplicable 在这条路径上为真(注入假 executor 时它恒为假, 那条唯一有实际后果的分支实际零覆盖);带反向对照,注入后必须变假 反向验过:断掉①的落盘、断掉②的累加,对应用例分别变红。 为此改了一处 mock:session/result 的 usage 原来硬编码 {input:0,output:0}, 现在 fixture 可指定(缺省仍是 0,既有 fixture 行为一个字不变)。 **不改这一处,token 那一维在 CI 里永远产不出数** —— 验收 10 当初就是卡在这儿。 **没还清的部分写在文档里,别当成还清了**:真 LLM 仍进不了 CI; subgraph 那一支(defaultPlanWorkGraph)仍只有注入式覆盖; 多节点 / 回退边 / 熔断没进这条 smoke,它只推一个节点。 afterAll 清掉真实链路建出的公司态目录(gitignore 挡着不进库,但留着会让别的 用例遍历 system/agents/ 时多扫一份)。 全量:139 文件 / 1295 测试全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
## 移进 done/ · 27-p3c-goal-task-model.md —— 五批实施完毕,§15.5 / §16.8 的后续项也全部收掉。 新增 **§十七**:欠账清单对账、边界守卫从「乱扣帽子」改成「留证据不判罚」、 测试污染生产图库(第四次踩同一族,但换了个方向进来)、那条卡了两天的 run, 以及 **§17.5 真跑验收** —— org-planner-sdd/benchmark/validator 全 success、 work run completed、父节点自动拉回、org-coder 起实现层子图、 org-coder-validator 判 fail 走回退边打回 impl(loopCount 1)。 **返工闭环第一次由真 agent(不是注入的假 executor)走通。** · 27-p3c-batch3-handover.md —— 四条复核结论全修完、§五 那条 run 已解开, §七 待办全部打勾。从待办转为**事故记录归档**:§六 那几条多会话协作规则是真踩出来的。 两份的相对链接都已重指(done/ ↔ todo/ 跨目录),no-dead-path-references 守卫通过。 ## 留在 todo/ 的,状态说清楚 · 27-graph-agent-architecture.md —— 状态行校准。那一行是别人判断「能不能搬 done」的依据。 · 27-p3b-real-run-runway.md —— 加状态行:验收 7 ⛔ 真跑不成立(readme-writer 混进 org graph,**未修**)、2/4/8/9 未在干净环境验。缺陷② 的**根因**今天修了, 但特意写明「**根因修了不等于验收点验了**」—— 不然下一个人会照着状态行当成验过。 · 27-p3-p4-work-graph-console.md —— 在索引里写明留 todo 的原因: §十 那笔「真实路径 smoke 进 CI」的欠账未还。 · 28-followups.md —— §3.3 标已修(含「GET /info 的 404 闸门仍没修,别当成修过」); §五 守卫表加两行(graph-db-prod-guard / heartbeat-company-scoped), 并补第七条的来历。 ## docs/README.md 索引补上新增的 done 条目与 P3B / 28-followups 行,主线说明改成 「当前未完成的是哪几件」——原来只说完成了什么,读的人得自己推。 全量:138 文件 / 1292 测试全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
起因是「全量测试偶发挂一条」。查下来既不是回归、也不是那 45 个孤儿进程(它们 CPU 早归零、 不再写任何东西),而是**还活着的心跳在测试扫描 system/agents/ 的同时往里建目录**: locator.taskDir() 的落点是 system/agents/<agent>/<companyId>/<taskId>, 运行态目录落在本体目录里属既定设计;但心跳每 5 分钟建一个新的 (cto/_global/ 已 263 个子项且在涨),于是扫描 system/agents/ 的守卫测试 (no-dead-path-references 那一类)会撞上瞬时竞态:列到了目录名,进去时那一层还没写完。 症状是偶发假失败、重跑就好 —— 这类最费人,因为第一反应总是去怀疑自己刚改的代码。 改法:server/index.js 启动的那个 setTimeout 块里,恰好装着全部「会自己起 agent 的东西」 (两处中断恢复 + 任务队列扫描 + 两路心跳),所以一条早退就够,不必在五个地方各加一个判断。 DISABLE_BACKGROUND_AGENTS=1 bash start.sh 实测:127 文件 / 1226 用例全绿,跑前跑后 cto/_global 子项数都是 263。 **验证它生效不能只看日志里的 ⏸** —— 那只证明代码走到了早退。硬判据是目录数前后相等, 也就是真的没有东西在写。文档 §七 把这条写成了可粘的三行。 排掉的两个坑,都记在文档和 .env.example 里: 1. `.env` 里不能给这个键赋空值。start.sh 是 `set -a; source .env` 加载的,.env 里只要 存在同名键(哪怕空的)就会盖掉命令行传进来的 =1,而且不报错。所以 .env.example 里 它只以注释形式出现 —— 一个「示例文件顺手写全」的习惯会直接让开关失效。 2. 开关生效后 `[TaskQueue] 🚀 已启动` 仍会打印,那是另一个模块:services/task-queue.js (ArenaSK 时代 /api/claude-chat 的队列,routes/claude-chat.js 模块加载时起), 和批 3 的 services/task-scheduler.js 同名不同物。它的心跳只扫内存里的 this.tasks, 不碰 system/agents/,不是干扰源。名字撞车,容易误判成开关没生效。 文档同步: - docs/done/claude-cli-session-leak.md §七 重写(原文写的是「得让测试隔离,或跑前停心跳」, 现在后者已实现,改成开关的用法 + 硬判据 + 上面两个坑);原第 2 条降为 §七之二 - CLAUDE.md 测试命令块加一行(这是找「怎么跑测试」的人真正会看的地方) - docs/README.md 索引行补上开关 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> -
泄漏被修过一次(310a2b2 / 3e718aa),修完照样漏。第二次排查发现原因不是修错了,而是: 系统里有两个互相独立的会话池,上一次只修了其中一个;而被修的那个,还漏了一条分支。 池 A routes/agent-chat.js 的 sessions ← /api/agent/:id/chat,含两路心跳 池 B src/core/session-pool.js 的 SessionPool ← AgentManager.callAgent,图执行 / DevLoop 两者没有任何共享代码,回收逻辑各写各的。这个结构性事实此前没有任何一处记着, 所以第二个人查到同一个症状时会重走一遍全程 —— 这份文档就是为了让第三个人不必再走。 正文八节,除了两个洞各自的成因与修法(b0b2b62 / 2092a2e),有三处是排查方法而非结论: §三 按 cwd 第三层判断孤儿归属的对照表。两个池子都把 cwd 下沉到运行态目录, `_global` / `_no-task` 是 agent-locator 的保留缺省值、两边都会出现,不能靠它区分。 §四 为什么上一版守卫是瞎的。dropSession 和 closeSession 都会让会话从池子里消失, 黑盒探针两种情况都返回 false —— 差别只在子进程死没死,而那是探针看不见的维度。 选探针要问的不是「能不能测出正确行为」,而是「能不能区分正确行为和这个具体的错误行为」。 §八 三步定位脚本,外加一条:先确认跑着的服务器进程是什么时候启动的,再去看代码。 本次排查中,正在跑的实例比修复 commit 早 18 秒启动,代码里有的修复它并没有。 线上验证(PID 63099,13 分钟窗口两轮心跳):触发 5 / 完成 5 / 回收 5,峰值子进程 3、稳态 0。 17:13:32 那个 3 正是泄漏时代的签名(cto+coo+qa-judge 同秒触发),清理前那批孤儿一个都不回收, 现在 30 秒内全部释放。窗口内没有失败心跳,所以 2092a2e 那条 catch 路径是靠单测的变异检验 保证的、不是靠线上观察 —— 文档 §六 里写明了,没算成已验证。 docs/README.md 同步加索引条目(no-dead-path-references 守卫 4 条全绿)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
用户授权清理 system/templates/ 的过期引用。全仓库核了 34 处, 结论与预期相反:没有该删的死代码,但有两处正在静默失效。 真正坏掉的(demo-harness-company.js): path.join(ROOT, 'system/templates/base/agent.md') → system/agents/_base/ path.join(ROOT, 'system/templates/base/config.json') → system/agents/_base/ 两处都包在 fs.existsSync() 里,所以目录消失后**不报错**,只是 静默跳过 base 本体的挂载 —— demo 跑出来的 agent 没有四段式骨架, 但脚本照常打印成功。又一个静默降级。 顺带:real-pm-smoke.js 的提示文案、migrate-agent-naming.js 里 已失效的遍历项、docs/README.md 的 qa-judge 落点。 CLAUDE.md 目录速查表原来只有 `system/templates/devloop-*/` 一行, 连 system/agents/ 都没列。换成两行并写清三个容易踩的点:目录才是 数据源头(seedAgents 直接扫目录)、_registry.json 只补 benchmark_score、_ 前缀是保留 id 会被跳过。 **刻意不动的**:server/tests/ 下 30 处引用。它们分两类,都得留 —— ① 记录迁移过程的注释;② 断言目录已不存在的守卫 (`expect(git(['ls-files','--','system/templates'])).toBe('')`、 `expect(fs.existsSync(...)).toBe(false)`)。删掉后者等于删掉 「迁移已完成」的证明。legacy_path 那几个测试夹具同理,是历史数据形态。 验证:三个脚本 node --check 通过;改后的四个路径实测存在。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
按 docs/README.md 既有约定(done/ 放「已实现/当前有效」),把两份已落地的 阶段设计文档移入 done/system-design/: - 27-p1-virtual-reference.md P1 虚拟引用寻址,commit 226489d - 27-p2-org-graph.md P2 Org Graph,70a4727 + f20d0d8,真实建公司端到端验证过 用 git mv 保留历史(R098 / R087)。移动断掉的 33 处相对链接已全部修复: moved 文件内的出向链接改 ../../todo/system-design/,todo/ 下 6 个文件的入向链接 改 ../../done/system-design/。全 docs/ 扫描无断链。 README 此前严重过时——只列了 2 份 27 文档,实际已有 11 份。本次补全 todo/ 表格, 每份标注状态与作用(总纲 / 需求源头 / 命名规范 / 端到端 / 参考场景 / P3+P4 已实现 / 验收契约 / P4 设计中),并在 done/ 表格补上 P1、P2 两行。 ■ 刻意没有移动 27-p3-p4-work-graph-console.md 它虽然已实现(c3abf4a),但文档正被另一进程持续修改(工作区 M 状态)。 移动会打断它的编辑路径,等它收尾后再归档。 ■ 三份文件的链接修复留在工作区未提交 27-naming-conventions.md / 27-p3-p4-work-graph-console.md / 27-requirement.md 里,我的链接修复与另一进程的在途编辑混在同一文件中,单独拆分风险大于收益。 工作区内容是正确的(链接已指向新路径),会随它下次提交一并带上。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
- New docs/README.md indexes the tree: done/ (shipped features + reference manuals), todo/ (current focus — Graph Agent architecture), todo/future/ (deprioritized roadmaps: FDE pipeline todo list, stale v1.1 milestones, harness engineering proposal — orthogonal to the Graph Agent work, not blocking it) - Move completed/reference docs into docs/done/ (LEMONBOSS-SYSTEM-DESIGN, architecture-v5, claude-code-cron, open-api-manual, qa_judge_req, task_timeline_design, user-guides/, system-design/01-26 minus the three moved to todo/future/) — verified against actual code (qa-judge template, Task Timeline route/service/view) before filing as done - Fix the two TOC links in LEMONBOSS-SYSTEM-DESIGN.md that would otherwise point at the old paths after the move - docs/todo/system-design/27-graph-agent-architecture.md: add the P2 Org Graph doc link in the roadmap table and 关联文档 section - Add docs/todo/system-design/27-p2-org-graph.md (P2 requirements & design, drafted in parallel while P0/P1 landed) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>