-
## ① system/tasklog/ 改名保留(§十二.5) 派单存储统一进 tasks 表后,旧目录改名为 system/tasklog.bak-unify/ 而不是 直接删 —— 跑顺一个版本再清。回填脚本改成**两处都认**(先原位置再备份位置, 顺序不能反:万一有人从备份恢复出一份新的 tasklog,那份才是要回填的)。 ## ② agent 提示词里的端口 3000 → 3010 packages/agent-core/base/ 下那几份是**所有 agent 的工具说明**,印着 curl http://localhost:3000/... 而实际端口是 3010。agent 照着打拿到的是 连接被拒、不是「端口错了」,它多半会去猜别的原因。 这不是假想:批 5 回填出来的历史派单正文里,有人手写了「(端口 3010, 不是 3000)」在纠正它 —— 靠人肉在每条任务书里打补丁。 守卫 agent-docs-port.test.js:扫 base 模板与 agent 本体,禁 localhost:3000。 判据刻意宽松(不校验「必须等于 config.port」—— 端口可被 PORT 覆盖,写死会在 部署环境误报)。带「样本非空」前置断言。第一版扫出 5 条误报,全是某 agent 目录下 Python venv 里 playwright 的 ThirdPartyNotices —— 那是第三方文件不是 提示词,已把 venv/site-packages/workspace/conversations/train 一并跳过。 ## ③ 边界守卫不再把并行会话的改动算到 agent 头上(§15.5 第 1 条) 守卫的前提是「窗口内新增的仓库改动 = 这个节点写的」。多会话共用 worktree 时 这个前提是假的 —— git status 的差集里没有「谁写的」这一维。实测已发生: 批 3 的开发改动把一条 run 判成 boundary_escape 卡住。 可检测的信号:节点**开跑那一刻**仓库就已经有源码目录的未提交改动 → 有人正在 这个 worktree 上开发 → 窗口内新增的源码改动无法归属 → **降级为只记证据、 不判罚**(与既有的 unattributable 桶同一语义),而不是关掉守卫:证据照留, 人一眼看得出「这次没判罚,因为当时仓库是脏的」。 BOUNDARY_GUARD=strict 强制判罚(CI / 干净环境),=record 一律只记。 守卫 8 例,含关键对照:仓库脏时不判、干净时同样一处越界仍判 fail —— 守卫没被削弱,只是不再乱扣帽子。 ## ④ TaskTimeline 的标签不再撒谎 conversationCount 在批 5 之后只会是 0/1(「有没有起过执行会话」),而界面 写的是 "Convs: N" —— 读的人会以为这条任务只有一次对话。改成有/无的表达。 agents 的语义变化在注释里说明。 注:innovator-hunt/todo.md 与 reddit-scraper/todo.md 里的端口也改了, 但它们是 gitignored 的运行态文件,不入库。 全量:134 文件 / 1268 测试全绿,web:build 通过。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
设计见 docs/done/system-design/28-agent-registry-unification.md。 改造前 Agent 本体散在三处(system/agents/ 11 个、system/templates/ 50 个、 data/companies/{id}/agents/ 17 个),同一个 AgentScaffold 被三个 baseDir 实例化。 后果是同一角色在 N 家公司下有 N 份互不相干的副本,模板更新不会同步; org-coder / org-planner 这类走 hireFromBaseMetaAgent 造出来的本体 legacy_path 指回自己公司目录,永远无法被第二家公司复用。 本次: - G1 单一注册表:system/templates/ 整体并入 system/agents/,base → _base。 7 个同名 id 逐个裁决,被丢弃的一份归档到 docs/_archive/ 而非删除。 source_kind(template/global_agent/company_hired) → origin(builtin/created)。 - G2 运行态下沉:CLI 的 cwd 从本体根改为 system/agents/{aid}/{cid}/{taskId}/。 memory / conversations 落公司态 {aid}/{cid}/,按公司隔离不串。 sessionPool 的 key 含 (companyId, taskId),两家公司调同一 agent 不复用会话。 - G2b 产物不下沉:交付物仍落 data/companies/{cid}/,system/agents/ 只留运行痕迹。 写入边界按链路分叉——graph 节点走节点私有目录(被 indexNodeOutputs 索引), chat 走公司 workspace,同一提示词里不再出现两条互斥指令。 - G3 公司只存引用:data/companies/{id}/agents/ 删除,新增 company_agents 关联表。 不复用 org_graph_nodes——后者是执行流图,work 层本体被雇时不写它,天生覆盖不全。 - G4 缺则创建:本体缺失时从 _base 复制骨架进 system/agents/{id}/, agent-creator 填 agent.md/soul.md 后才从 draft 转 active(哨兵判据, 骨架未填时哨兵仍在,不许被 hire)。产物即刻是全系统可复用的本体。 新增 server/services/agent-locator.js 收编原先散在 6 处的寻址逻辑。 边界守卫(graph-engine)的豁免从「本体根上五个文件名」放宽为整棵 system/agents/: 新本体的骨架本来就要进 git,gitignore 挡不住 ?? system/agents/{newId}/, 旧判据会把一个真正成功的招聘节点判成 boundary_escape fail。 存量迁移见 scripts/migrate-agent-registry.js(幂等,备份到 data/_migration-backup-*)。 真 Claude CLI E2E 已验证:新建公司 → orggraph-planning 自动规划 → 自动招聘 org-planner/org-coder/org-validator 三节点流水线; data/companies/{cid}/agents/ 不存在,company_agents 4 行, system_agents 56→56(零新建私有本体,纯复用),git status 零增量。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
- Implement OKR GoalsService with hierarchical node tracking - Add /api/goals routes and integrate with dispatch/report APIs - Create Innovator agent with Hunt→Digest→Evolving pipeline - Create Hunter (l3-hunt), Digester (l2-digest), Evolver (evolving) meta agents - Copy L1/L2 dependency skills into each agent's .claude/skills/ - Fix buildSystemPrompt to scan ALL skill subdirectories (critical) - Fix agent list sorting: master pinned top, rest by lastActiveAt - Rename master-001→master, innovator-001→innovator - Establish meta agent output convention: write to target agent dir - Add CXO agent base class for management agents - Update CEO agent with delegation-first management model