• 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
    yibo authored
     
    Browse File »

  • 冲突在 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>
    yibo authored
     
    Browse File »
  • 核心修复: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>
    yibo authored
     
    Browse File »

  • system/templates/ 已在 28 号文档的合并里并入 system/agents/,「模板」作为独立
    数据概念已经消失;确认后手工 CRUD 页面(创建/改名/删除骨架、触发生成与训练、
    传 skill 文件、provision)也已经没人用,一并下线:
    
    - 前端:删 AppNav「Templates」菜单项、/templates 路由、TemplateAgents.vue
    - 后端:company.js 删掉只服务于该页面的写接口(PATCH/DELETE/POST /templates、
      generate/train/skills-upload/provision/files 系列),保留 GET /templates
      (CompanyDashboard 招聘弹窗和 CLI `company templates` 命令仍依赖它列出可招角色)
    - CLI:bin/lemon.js 删 `template create`/`template train`(调用的是被删接口)
    - 修正两处过时注释(company-service.js / graph-service.js):不再声称
      buildAgentDefinitionBrief 有两个调用方,/hire 是唯一派单点
    - work-layer-body-paths.test.js 同步更新断言(2 处调用方 → 1 处)
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    yibo authored
     
    Browse File »

  • 只做了这一件事,没有跟着做「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>
    yibo authored
     
    Browse File »

  • 起因是「全量测试偶发挂一条」。查下来既不是回归、也不是那 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>
    yibo authored
     
    Browse File »

  • 手工扫了两轮,扫出的是三类会持续复发的失真,不是零星笔误:
      ① package.json 里 12 处引用指向从未在 git 历史存在过的文件(server/src/cli/auto-dev.js 一族)
      ② CLAUDE.md 的 docs/ 那行列了 5 个文件名,文档移进 done/ 之后全成死链
      ③ 数据存储整节把两个不同的 data 根当成一个写,server/conversations/ 这个路径根本不存在
    
    共性是**不报错、不影响测试、git status 干净**,只有照着做的人(或 agent)撞墙才发现。
    而 CLAUDE.md 是每个会话都会加载进上下文的文件 —— 写错等于把错误信息直接灌给每一个后来者。
    
    四条扫描:
      - CLAUDE.md 里的仓库路径都存在
      - CLAUDE.md 里出现的每条 npm run 都在 package.json 里(守反方向:删脚本忘改文档)
      - package.json 的 scripts / bin / main 指向的文件都存在
      - docs/README.md 的相对链接都指向真实文件
    
    判据刻意窄(本仓库有过「防线被整条注释掉」的教训):路径只认「以仓库顶层目录开头 + 含 /」,
    且跳过 gitignored 的 —— 那是运行态产物(web/dist/、data/companies/、skills/),在干净机器上
    本来就不存在,缺席不是文档错误;这与 no-stale-templates-path.test.js 用的是同一条判据。
    上下文里的相对片段(_base/、todo/future/)、glob、<repo>/… 示意写法一律不判。
    
    四条各带「样本非空」下限断言(当前 26 路径 / 16 script 名 / 6 入口引用 / 22 链接),
    下限取当前值一半左右:正则一写错就会以「零违例」全绿,那和没有这条测试是一回事。
    
    验证:把同一套判据跑在旧 revision 的文件内容上(只读 git,不碰工作区)——
      3e718aa:路径 ❌3 条、入口 ❌10 条
      d6214f8:路径 ❌4 条、入口 ❌10 条
      HEAD   :全绿
    顺带修掉自己写的一处假路径占位符(`data/xxx` → 「以 `data/` 开头的路径」),
    文档里本来就不该出现假路径。
    
    28-followups 守卫清单补到第六条,并写明后两条与前四条的形状差异。
    npm run test:unit 1061/1061 绿。
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • 顺着上一笔的判据(引用了不存在的东西)继续扫,扫出的不是零星笔误,是一处结构性失真。
    
    事实(按绝对路径解析源码里的 path.resolve(__dirname, ...),不是数字面量 ——
    数字面量会错,path-resolver.js 比 db 文件深一层,同样的 '../../../data' 落点不同):
    
      仓库内 <repo>/data/    — 11 个模块(company / okr / graph / devloop / schedule / pipeline …)
      仓库外 <repo>/../data/ — 3 个模块(skill-db、user-db、benchmark-db,ArenaSK 时代遗留)
    
    原文把六条全挂在扁平的 `data/` 前缀下,读的人只会理解成仓库内一个根。这不是抠字眼:
    备份 / 迁移 / 换机器时漏掉仓库外那半边,skill、用户、benchmark 数据会**静默丢失**。
    
    一并修掉的具体错误:
      - `data/benchmark.sqlite` → 实际文件名是 `benchmark_logs.sqlite`
      - `server/conversations/` → 该路径不存在。会话持久化实际有**两套**:
        ArenaSK/Innovator 侧在 `<repo>/conversations/`(config.conversationsDir),
        LemonBoss agent-chat 侧在公司态目录下(getConvDir → locator.companyStateDir)
      - 目录速查里的 `data/skills/` 改成 `<repo>/../data/skills/`,点明 `<repo>/data/skills/` 并不存在
      - 补上仓库内侧原本一条没列的 graph.sqlite / companies/ / okr/ / logs/ / agents/
      - 每个库补上真实的 env 覆盖名(SKILLS_DB_PATH / USERS_DB_PATH / BENCHMARK_DB_PATH / GRAPH_DB_PATH)
    
    新写进去的每一条路径与每一个 env 名都用脚本核过存在性(10 路径 + 5 env 全 ✅)。
    docs/README.md 的 markdown 链接同批扫过,零死链。
    npm run test:unit 1057/1057 绿。
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • 判据统一:目标文件既不在盘上、**也从未在 git 历史里出现过**(逐个 git log --all 核过),
    不是「搬了地方」而是从来没有过。跑起来一律 MODULE_NOT_FOUND。
    
    删除(12 处,指向 4 个从未存在的目录):
      server/src/cli/       main、bin.auto-dev、example、example-bmi
      server/src/utils/     logs、analyze、parse
      server/src/modules/   test:browser-logger、test:design-validator
      server/src/tests/scripts/  test:multi-cli
      skills/whatsapp-bot/  whatsapp:auth、whatsapp:start
                            (skills/ 是 gitignored 的运行时目录,确实存在,
                              但里面没有也从没有过 whatsapp-bot;
                              /api/whatsapp 路由走的是 routes/whatsapp-auth.js,不受影响)
    
    只授权了 auto-dev 那 3 处,其余 9 处是同一类缺陷、同一条判据,一并删了 —— 要退回来
    `git revert` 这一笔即可。删完 package.json 零死引用(脚本目标存在性已脚本化核过)。
    
    CLAUDE.md 同步:
      - 常用命令去掉已删除的 6 条,补上真实存在但之前没列的 graph:seed / okr:migrate
      - 上一笔加的 auto-dev 警告块随引用一起去掉
      - /api/goals 从「向后兼容别名」改为「已退役」—— 7f24ef0(27-P3C §六.1)已落地,
        OKR 只剩 /api/okr 一个挂载点,且有守卫测试盯着
    
    验证:npm run test:unit 1057/1057 绿;npm run spec:check 52 份 _spec 全同步;
    CLAUDE.md 里出现的每一条 npm run 都在 package.json 里存在(脚本核对)。
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • 逐条都对着 HEAD 核过(不含工作区里其它会话未提交的改动):
    
    ① docs/ 那一行列的 5 个文件全是死链 —— 它们都搬进了 docs/done/。
       根因不是路径写错,是同一份文件清单被抄在两处:CLAUDE.md 一份、docs/README.md 一份,
       文档一搬家,抄的那份就烂。改成只描述「按状态分目录」的结构并指向 docs/README.md,
       并写明「别在本表里加文件名」,免得再抄一次。
    
    ② 路由清单漏项 + 错项:
       - index.js 实挂 /api/okr 与 /api/graph-runs,表里都没有
       - 表里写的 /api/goals 是 okr 的向后兼容别名,不是独立路由;标注清楚
       - agent-server.js 子集同样漏了 /api/okr、/api/graph-runs
       (注:工作区里有另一个会话正在退役 /api/goals 别名,尚未提交。本次按 HEAD 的事实写,
         等那笔落地后这两行还要再改一次。)
    
    ③ 三个硬编码计数全部过期:routes 15→实际 17,services 26→38,views 10→15,
       agents「75 个」连测试建本体都会让它变。计数在这种表里只会烂,直接去掉;
       views 补上 GraphConsole 与 DevLoop 四页。
    
    ④ auto-dev 是幽灵入口:server/src/cli/ 整个目录不存在,且 git 历史里从未有过
       auto-dev.js。npm run example / example-bmi / bin.auto-dev 三处引用全是坏的
       (实测 MODULE_NOT_FOUND)。CLAUDE.md 里改成显式警告 —— 没删 package.json 的
       scripts/bin,那是代码改动,留给人定「补文件还是删引用」。
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • 承接 310a2b2 的两个遗留:
    
    ① 四类被错标成心跳
       company-heartbeat-service._sendAgentChat 给五类调用(心跳巡检 / Pipeline 步骤 /
       日程 / 告警 / 日报)无差别打 isHeartbeat:true,于是对话列表里全都显示成
       「⏱️ 自主心跳巡检」、meta.type 一律 'heartbeat'。改成显式传 kind,五类各自标注。
       isHeartbeat 仍然发,但只对真心跳为真,老消费方行为不变。
    
    ② 310a2b2 让 Pipeline 重试变成了冷启动
       Pipeline 步骤的 convId 是 `pipeline-{runId}-step-{i}`,被驳回重做时**复用同一个**。
       310a2b2 按 isHeartbeat 一刀切回收,等于每次重试都要走 buildPrompt 场景 C 重注入历史。
       现在回收策略挂在 CALL_KINDS 表上,判据只有一条:**convId 会不会被下一轮复用** ——
       会复用的(pipeline / 人类对话)留着走 TTL,不复用的(心跳 / 日程 / 告警 / 日报)跑完即回收。
       不按「是不是后台调用」分:五类后台调用里 pipeline 就是要留的那一类。
    
    守卫补到 12 条(原 3 + kind 标注 5 + 回收策略 4)。对 310a2b2 跑过:8 红 4 绿。
    convId 一律用固定字面量而非拼时间戳 —— 撞上 test-id-stability 那道防线后按它的判据改的,
    固定之后第二次跑还顺带走了「复用已有对话」那条分支。
    
    文档:
      - CLAUDE.md 注意事项加一条(新增会话创建路径时必须同时定回收路径,附症状与守卫位置)
      - 28-followups 守卫清单补第五条,并把「前四条守单一持有者」与第五条「守资源生命周期」
        的形状差异写明;顺手修掉表格已有 4 行、结尾却仍写「这三条」的失配
      - .env.example 补 AGENT_SESSION_IDLE_MS
    
    全量单测 667/667 绿。重启后 /api/health 正常,心跳照常挂载。
    
    Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • 用户授权清理 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>
    yibo authored
     
    Browse File »

  • # Conflicts:
    #	system/agents/master/.claude/scheduled_tasks.json
    yibo authored
     
    Browse File »
  • …_DIR move, stray files
    
    - CLAUDE.md: document DevLoop subsystem (spec-first workflow, project root/git-vault,
      mock mode, L1 loop, unit layout, audit trail) and add missing test commands
    - server/routes/agent-chat.js, server/services/task-service.js: TASK_META_DIR moved
      from system/agents/.tasks to system/tasklog
    - system/agents/master/.claude/scheduled_tasks.json: scheduled task state update
    - remove stray memory/daily/2026-04-02.md and a garbled-filename artifact left under
      system/agents/digester-youtube-crawler/
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    yibo authored
     
    Browse File »

  • Two parallel pieces of plumbing — neither has been exercised end-to-end yet
    (real CLI gated on `claude /login`; Projects list view served alongside
    existing pages):
    
    ──── real-CLI wire-up (REAL.1 + REAL.2) ────
    
    LemonBoss now has a clean toggle between mock & real Claude CLI:
    
    - packages/acp-core/protocol/ClaudeCliProtocol.js
      * `options.systemPrompt` → `--append-system-prompt <prompt>` so each
        devloop agent receives its role-specific prompt.md without losing
        Claude's default tool-use conventions.
      * `options.maxBudgetUsd` → `--max-budget-usd` (note: only effective in
        `--print` mode; documented inline).
    
    - server/src/core/devloop/loop-controller.js
      * callAgent now branches on `opts.mock`:
        - mock (P1-P5 path, untouched): fixture sequence + `mock/files` event
        - real: read system/templates/{agent}/prompt.md, pass as systemPrompt,
          snapshot project file mtimes pre-call, diff post-call to compute
          `files_written` — no fixture, no mock/files needed.
      * `_snapshotMtimes(root)` helper walks the project tree (skipping
        .git / node_modules / .cache / .tmp) and returns Map<relPath,mtime>.
      * timeline event payload now carries `real: true` flag.
    
    - scripts/real-pm-smoke.js — minimal real-CLI sanity:
      spawns claude, injects PM prompt, prints which files were written +
      git commit sha. Hard timeout 5min. Single agent → expected spend
      $0.10-0.30 per run when authenticated.
    
    Current status: process spawn + system-prompt injection + stream-json
    flow all verified up to the `Not logged in · Please run /login` gate.
    Auth is the only remaining blocker for executing the real smoke.
    
    ──── project CRUD routes ────
    
    server/routes/devloop.js + server/services/devloop/path-resolver.js
    add the lifecycle pieces the Projects list view needs:
    
    - GET    /projects?include_archived=true   list w/ archive filter
    - PATCH  /projects/:pid                    edit name + idea_summary
    - DELETE /projects/:pid                    soft delete (archive)
    - DELETE /projects/:pid?hard=true          hard delete (rm -rf sandbox;
                                                unregister linked)
    - POST   /projects/:pid/restore            un-archive
    
    path-resolver exposes matching helpers: listProjects({includeArchived}),
    patchProjectMeta(pid,patch), hardDeleteProject(pid).
    
    ──── UI ────
    
    - web/src/views/DevLoopProjects.vue (320 lines, new)  — Projects list
    - web/src/router/index.js — adds `/devloop` → DevLoopProjects
    - web/src/components/devloop/DashboardHeader.vue — back-link now points
      to `/devloop` (project list) instead of `/company`.
    
    ──── housekeeping ────
    
    - CLAUDE.md / start.sh — start.sh now boots server/index.js (full route
      surface incl. /api/devloop) instead of the historical agent-server.js;
      docs updated to reflect this.
    
    ──── tests (+12) ────
    
    - server/tests/devloop/routes-crud.test.js — 12 cases:
      PATCH validation (4) · soft DELETE + list filter (4) · POST /restore
      (1) · hard DELETE (2) · GET /projects default behavior (1).
    
    Results:
    - phase0-verify .. phase5-verify: 8+7+7+6+9+9+7 all pass
    - vitest devloop+acp-core: 230/230 (was 218 → +12)
    
    Specs:
    - docs/prd/newfunction/_spec/arch-acp-bridge.md · Mock Mode
    - docs/prd/newfunction/_spec/plan-migration.md · "自举乐趣" (real path
      prep)
    
    Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • The 50-page PRD HTML totals ~520KB; loading it all costs Claude ~222K
    tokens just for context. This adds a token-efficient sibling layer:
    
    - scripts/extract-spec.js → npm run spec:extract / spec:check
      Walks docs/prd/newfunction/*.html and produces stripped MD into _spec/.
      Strategy varies per page (full-extract for SDD/process/data,
      shell-strip for agents to keep long system prompts intact).
      Result: 327.9KB MD (~84K tokens) — 38% of full load, saves ~138K tokens
      for every Agent invocation that reads the spec.
    
    - scripts/git-hooks/pre-commit + scripts/install-hooks.sh
      Pre-commit guard: when any docs/prd/newfunction/*.html changes, the
      hook checks the corresponding _spec/*.md is up to date; fails commit
      if stale, telling user to `npm run spec:extract`. Auto-installed via
      package.json `prepare` script on `npm install`.
    
    - docs/prd/newfunction/_spec/ (51 .md files + CONVENTIONS.md)
      Machine-readable mirror of HTML. Used by:
      - Coder/Architect/Tester agents when reading spec at runtime
      - External Claude Code sessions doing reproducibility
      - CI checks (npm run spec:check)
      NOT hand-edited; regenerated from HTML by extract-spec.js.
    
    - CLAUDE.md: 1-line note directing future agents to read _spec/*.md
      preferentially, fall back to *.html only for wireframes/SVG/full
      human-readable context.
    
    This is the user's pre-existing scaffolding that the previous commits
    hadn't pulled in yet. Now tracked + enforced by hook.
    
    Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • - Fix port to 3010 (was 3000); both server/index.js and server/agent-server.js
      default to 3010 per config.js
    - Document the two server entrypoints: index.js (full ArenaSK, run via npm run dev)
      vs agent-server.js (Agent Chat only, run via start.sh)
    - Correct counts: 15 routes (not 11), 26 services (not 16), 10 views (not 21)
    - Remove false 'skills/' top-level dir reference; document actual data/skills/
    - Add full test/example/log npm scripts; auto-dev CLI bin; packages list
    - Add note on body-sanitizer middleware (the source of the JSON warning)
    - Add brand history note (ArenaSK → LemonBoss)
    - Keep existing Agentic Self-Correction Loop Prevention warning verbatim
    
    Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
    yibo authored
     
    Browse File »

  • …ter Agent cognitive auto-recovery loop
    
    - Refactored CompanyDashboard into read-only Observer UI
    - Enforced strict companyId:roleId namespacing across Node APIs and AgentManager
    - Added dynamic <env_status> injection to PromptBuilder for robust context
    - Introduced bin/lemon.js CLI for structured LLM tool execution
    - Implemented in-stream error interceptors for implicit silent retry loop
    yibo authored
     
    Browse File »

  • - Agent as Micro-Container: each agent lives in data/agents/{id}/ with full encapsulation
    - Persona vs Capability split: agent.md (identity) + .claude/skills/main_skill/SKILL.md (workflow)
    - Conversations co-located: data/agents/{id}/conversations/ replaces global dir
    - Meta Skills renamed: meta_hunt, meta_digest, meta_creator, meta_evolving, meta_benchmark, meta_research
    - Dynamic Hot-Reload: AgentManager.getAgentConfig() falls back to filesystem scan
    - Parallel Sub-Agent orchestration via Promise.all with multi-terminal UI
    - Removed SQLite dependency, global skills/ directory, and legacy conversations/
    - Full architecture docs: 18-local-filesystem-first-agent-encapsulation.md
    yibo authored
     
    Browse File »