04-01~03:项目治理与架构收敛¶
这一阶段完成了项目发现系统的质量整改、curated 保护机制的落地,以及 Daily Digest 并入 Agent Portal 的代码库合并。
Dad 的关键产品决策¶
ABC 三路径并行¶
04-01 决策: - 路径 A:提高 digest 运行频率并验证效果 - 路径 B:项目发现补全 + 洞察去重 - 路径 C:门户上支持批准/驳回决策项并自动执行
不要另起炉灶¶
背景:bot 初始方案是单独写一个审核页面
Dad 否决:
这不是一次性需求,必须直接优化门户现有项目管理模块,不能另起炉灶
原则:所有能力都回到现有门户。
代码库合并¶
决策:Daily Digest 本质上是为 Agent Portal 服务,应合并,不再作为独立项目
执行: - 将 bot 列表、事件、交付物等完整合并到 Agent Portal - 移除 Daily Digest 项目 - 项目数从 17 → 16
后端统一部署¶
决策:采用方案 A - Digest pipeline 部署到同一台服务器 - 与 Agent Portal 一起运行 - 所有后端能力都由 Agent Portal 统一负责
技术问题与根因分析¶
项目自动注册缺失¶
问题:新 bot 不会自动注册到 AP_bots 表
根因:digest.py 主流程原本没有正确触发 bot 同步
修复:在 digest.py 主流程中调用 sync_bots()
项目清洗需求¶
问题:100 个项目明显不合理,很多不是项目
Dad 批评: - 批准/驳回操作台没看到 - 所有项目堆在一起,没有按状态筛选和分层 - bot 没有自己验收就汇报
清洗过程: - 100 → 54 → 31 → 23 个可见项目 - 合并/清理明显重复项
digest-v3 硬编码问题¶
现象:错误重复发生,每次重跑 pipeline 又出错
根因:project_tracker.py 第 292 行硬编码:
进一步风险:push_projects 使用 on_conflict=id upsert,每次跑都会覆盖
修复:
- 改为使用 primary_bot
- 通过 resolve_agent_id 映射到真实 bot
项目状态写入失败¶
现象:日志显示"7/7 项目更新成功",但数据库没写进去
根因:
1. push_project_insights 查询时 select 没带 id
2. PATCH URL 变成 ?id=eq.,没有匹配到任何行
修复:
- 查询补上 id
- 改 return=minimal 为 return=representation
数据库架构调整¶
问题:Supabase API 像"多余中间层"
现状:server.cjs 已经通过 Supabase rpc/run_sql 跑 raw SQL
决策:从 Supabase API 走向 PostgreSQL 直连
技术实现:
- Node 侧:package.json 加 pg
- Python 侧:增加 push/db.py
- config.py 增加 DATABASE_URL
- 重构 pusher 使用统一 DB 抽象
- 保留 Supabase HTTP fallback
解决方案¶
curated 保护机制完整落地¶
匹配前同步:从 Supabase 同步 curated 标记到本地缓存
匹配时保护: - 对 curated 项目,只允许追加里程碑 - 不允许改名称/描述/状态/bots
推送时跳过:push_projects 跳过 curated 项目
本地 Digest 退役¶
04-03 决策:Agent Portal Digests 已迁移,本地不需要再跑
执行:
- 注释掉两个相关 crontab 条目
- 本地只保留最原始的 collector.py 采集模块
- 删除其余 Agent Portal Digest 相关代码
架构含义:本地机器从"项目管理后端节点"退化为"原始数据采集参考实现"
知识转移给 portalbot¶
执行: - DM portalbot 完整部署说明 - DM portalbot 完整知识转移文档
意义:项目控制权从本地 bot 转移到 Portal 侧,减少双头维护
DronePicker 产出物修复¶
问题:项目详情页想展示产出物,但 artifacts 为空
排查:数据主要在 metadata.deliverables
解决:改走 /api/artifacts POST 单独创建 artifact
结果:成功创建 9 个产出物
里程碑¶
04-01¶
- [x] ABC 三路径并行推进
- [x] cron 频率确认(每天 5 次)
- [x] 项目清洗:100 → 23 个
- [x] 恢复被误清理项目
- [x] curated 保护机制代码实现
- [x] 项目对话式管理上线
04-02¶
- [x] DronePicker 产出物修复
- [x] Daily Digest 并入 Agent Portal(项目合并)
- [x] Digest 代码库重构(3472 → 2667 行)
- [x] 确认正确仓库
msdevhub/agent-portal - [x] PG 直连方案实现
- [x] 知识转移给 portalbot
04-03¶
- [x] 本地定时任务下线
- [x] 本地只保留原始采集能力
- [x] 项目治理流程闭环
反复出现的根因模式¶
metadata 整体覆盖¶
多个写入路径都把 metadata 当整体对象 PATCH,而不是字段级 merge。
解决:明确"谁拥有哪些 metadata 字段"的边界。
自动发现缺少人工审核¶
项目发现门槛过低 + 缺少 curated 保护 = 数据污染。
解决:引入 candidate 机制 + curated 标记。
列表接口返回详情级 payload¶
导致性能问题。
解决:列表/详情拆分。
pipeline 中存在硬编码¶
如 digest-v3。
解决:改为动态解析。
前端"已部署"不等于"已渲染可见"¶
必须浏览器验收。
整体后端链路总结¶
Mattermost 聊天记录采集
↓
L1/L2/L3 提取与匹配
↓
项目发现/项目洞察生成
↓
推送到 Supabase/PG
↓
React 门户展示
↓
用户通过项目对话反向驱动 bot 执行
ClawCraft 项目污染修复记录¶
问题:ClawCraft 里程碑混入了很多不属于该项目的内容,且该项目已 5 天无动作
处理: 1. 清理错误里程碑 2. 修复匹配 prompt,减少未来误归类
经验:项目匹配不能只靠模糊关键词,否则会把"同生态但不同项目"的事件混入。
至此,ClawCraft 从 03-10 立项到 04-03 完成了: - 产品方向从"配置工具"转向"游戏化工作台" - 技术栈确定为 React + PixiJS + OpenClaw Plugin - 核心稳定性问题(SSE 死循环)彻底解决 - 多端联调与协议层收敛 - 与 Agent Portal 深度整合,形成项目管理门户雏形