Clawline — 03-23~24 分支治理与联调¶
分支与开发流程重构¶
Dad 的决策¶
- 所有项目统一引入
dev分支作为开发分支 - 先 merge 到
main,再基于main创建dev - 以后开发都在
dev上进行
执行范围¶
6 个项目全部切到 dev 分支:
- client-web
- channel
- gateway
- client-wechat
- sdk
- docs
意义¶
统一多仓库协作流程,避免开发环境与主线混乱。这个决策为后续的持续集成和部署自动化奠定了基础。
品牌统一¶
Dad 决策:PWA 与所有品牌标识位置统一替换为正式 logo,整体色系与 logo 保持一致。
Bot 执行: - 完成相关 commit 到 main - 确认待 push/部署状态
品牌统一是产品从"开发阶段"走向"正式产品"的重要标志。
feat/whatsapp-mobile-interactions 分支¶
Dad 要求:拉取并部署到 dev 环境测试。
Bot 执行内容:
- 重新 build dev-web
- 修复 emoji 表情在亮/暗主题下的适配
- 调整 bot 消息时间戳与 model badge 的布局
- 用户消息文本与时间改为同一行内联显示
这个分支带来了重要的移动端交互优化,为后续的 PWA 适配打下基础。
Gateway/Channel/Web 三仓联调¶
安全与错误处理分支部署¶
Dad 决策:三个项目切到 feat/security-and-error-handling(channel/gateway 实际为 feat/security-hardening),部署到开发环境;gateway 还要部署到 relay.restry.cn
Bot 执行: - client-web 部署 - channel 插件部署 - gateway 部署 - gateway admin 部署
Gateway CORS/WebSocket Origin 问题¶
问题根因分析:
1. gateway 支持 settings.corsAllowedOrigins,但当前配置源来自 Supabase,不是本地 relay-config.json
2. PUT /api/settings 只更新内存;Supabase store 只存 channels/users,不持久化 settings
3. 重启后 corsAllowedOrigins 丢失,回退为 same-origin only
4. WebSocket upgrade 也做 origin 校验,导致跨域 WS 直接连不上
解决方案演进:
- 通过 admin API 设置 CORS 验证生效
- 最终方案:使用环境变量 CORS_ALLOWED_ORIGINS 持久化配置
里程碑:解决"HTTP CORS 看似配置了但 WS 仍失败"的隐蔽问题。
这个问题体现了分布式系统配置管理的复杂性:HTTP 和 WebSocket 可能有不同的校验路径,需要统一处理。
Gateway Backend WS Rate Limiting 过严¶
问题现象:每次发消息,回复生成期间 relay backend 都断开重连,导致消息流程异常。
根因:gateway 对 backend WebSocket 的 rate limiting 过于激进。
解决方案:放宽/修正 backend WS rate limiting 策略并重新部署 relay。
结果:发消息流程恢复正常。
ChatRoom 视觉与交互重构¶
从 bubble chat 改为 flat/thread 风格¶
决策者:Dad 提需求,Bot 执行
背景:最初实现成了聊天气泡样式,但参考图实际是类似 Slack/Discord 的无气泡平铺样式。
关键决策:Dad 明确指出"不需要气泡,不然信息不好展示"。
结果:
- Bot 将 ChatRoom 消息渲染整体改为 flat/thread layout
- 同步调整 thinking indicator
- 构建通过,ChatRoom bundle 还缩小约 2KB
- 提交:e201d169
Markdown 表格渲染修复¶
问题根因:
- react-markdown 默认不支持 GFM table 语法
- 项目中缺少 remark-gfm
解决方案:安装并接入 remark-gfm
关键结论:表格不显示不是 CSS 问题,而是 Markdown parser 能力缺失。
提交:18ca6bf8
Slash menu 与技能入口统一¶
Dad 要求:
- 去掉外露的技能入口与某些额外入口
- / 菜单应支持所有技能 + 系统命令
- 技能与系统命令分组展示、标识区分
- 支持点击添加,列表更紧凑
架构方案:
- 统一为一个 slash panel
- handleInputChange 同时支持:输入以 / 开头 和 /use 后继续弹出技能菜单
实现结果:
- 移除 standalone skills panel
- 从 + 菜单移除"技能/上下文"
- ChatRoom bundle 从 152KB 降到 149KB
- 提交:e1014084
ClawTeam UI 优化首次实践¶
组织方式¶
critique → (arrange + colorize + typeset 并行) → polish
遇到的问题¶
- polish agent 卡住 2 小时
- agents 没有真正 worktree 隔离,直接改主 repo
经验教训¶
- 多 agent 流水线若无可靠 worktree 隔离,会污染主工作区
- polish 阶段需要 watchdog/超时回收机制
最终流程固化¶
Dad 决策:以后所有开发环境都跑 dev 分支
Bot 执行:确认 relay 上 gateway 与 admin 也切换到 dev
关键配置总结¶
# Gateway CORS 持久化
CORS_ALLOWED_ORIGINS=<origins>
# 开发站点
https://web.dev.dora.restry.cn
# 生产 Gateway
relay.restry.cn
为什么这两天至关重要?¶
1. 开发流程标准化¶
6 个仓库统一到 dev 分支工作流,为团队协作和 CI/CD 奠定基础。
2. 全栈联调完成¶
Gateway/Channel/Web 三端联调成功,证明了架构设计的可行性。
3. 配置管理教训¶
CORS 和 rate limiting 问题暴露了分布式配置管理的复杂性,推动了环境变量持久化方案。
4. UI 风格定型¶
从气泡到 flat 的转变,确立了 Clawline 的视觉风格基调。