2026-06-27 | 执行者:Claude Code (Opus)
发生了什么:打了 dev tag 后没等 CI 构建完成,直接用源码测试、直接 release。结果 dev CI 实际失败了(cartopy 编译 OOM),完全跳过了"用 CI 产物测试"这一步。
根因:fullstack-test skill 里没有写"等 dev CI 完成 → 拉镜像 → 用镜像跑测试"这个环节。测试计划 HTML 里写了阶段二,但执行时图快跳过了。
改进:fullstack-test skill 应增加硬性门禁:gh run watch 等 dev CI 完成 → docker pull 拉镜像 → 用镜像而非源码跑全流程。release CI 恰好成功是运气(分架构构建避开了 OOM)。
发生了什么:app-image-develop workflow 在同时构建 amd64+arm64 时,cartopy 的 Cython C++ 文件(41000+ 行)编译耗尽 runner 内存,fatal error: error writing to。
根因:dev workflow 用 QEMU 模拟 + 并行双架构构建,资源竞争严重。release workflow 分开成两个独立 job,每个 job 只构建一个架构,所以成功了。
改进:app-image-develop.yml 也应改为分架构独立 job(与 release 一致),或者 dev 只构建 amd64 单架构(盒子主要是 x86)。提 issue 记录。
发生了什么:v0.5.25 tag 指向 76a2977f(旧 commit),测试的是 778eff4c(新 commit)。Codex review 时发现了这个问题,改发 v0.5.26。
改进:发版前先跑 git tag -l 'v*' --sort=-v:refname | head -1 确认最新 tag,版本号自动 +1。可以写进 fullstack-test skill。
发生了什么:Claude in Chrome 的 type 动作对用户 1 能正常输入中文(首次),但切换到用户 2 后 type 的内容"消失"了。form_input 不支持 DIV 元素。用 document.execCommand('insertText') 能写入 DOM 但 React/Tiptap 状态不同步,发送按钮无效。
根因:Tiptap/ProseMirror 的 contenteditable 由编辑器内部状态管理,直接操作 DOM 不会更新 React state。type 动作依赖操作系统 IME,刷新页面后 IME 状态可能变化。
改进:对 Tiptap 编辑器输入应使用 execCommand('insertText', false, text)(适用于英文),或通过 React fiber 找到 Tiptap editor 实例调用 editor.commands.insertContent()。可以封装为浏览器测试的通用 helper。
发生了什么:点击登出按钮后,页面重定向到 localhost:19000/logout(真实 OAuth server 地址),但 mock 模式下 19000 端口没有服务。
改进(产品):Mock 模式下的登出应该直接清除 cookie 并重定向到 BA 自己的登录页(/api/auth/login),而不是跳到不存在的 OAuth server。这是一个产品 bug,应提 issue。
发生了什么:chown root 失败、/output 只读文件系统、chgrp 找不到用户组。需要大量 -e 覆盖才能部分跑通。
改进:box-deploy 的 render-only 应该能在 macOS 上零配置运行。建议:(1) render-only 模式自动跳过 chown/chgrp;(2) 提供 inventory.macos-local.yml 模板,预设 ansible_become=false + 用 $HOME/tmp 作为 deploy root。
当前 skill 只覆盖"源码启动 → 浏览器测试"。应增加:
gh run watch)当前 skill 只描述 Mock 模式。应增加"真实 OAuth 模式"章节:
oauth_config.yaml 指向 BO把发版流程固化为 skill,包含:
测试用户隔离需要双用户 mock 配置,但默认的 oauth_config.mock.yaml 只有单用户。应提供 oauth_config.mock-multiuser.yaml 模板,或者在 mock.yaml 注释中说明如何配置双用户。
| # | 问题 | 严重度 | 建议 |
|---|---|---|---|
| 1 | Mock 模式登出跳转到不存在的 19000 端口 | 低 | Mock 下登出应清 cookie + 跳自己的 /api/auth/login |
| 2 | 项目列表卡片点击无法进入项目详情 | 低 | 需要点击项目名称文字而非卡片任意区域,体验不一致 |
| 3 | dev CI (app-image-develop) 双架构并行构建 OOM | 中 | 改为分架构独立 job 或仅构建 amd64 |
浏览器自动化一个测试项需要 5-10 轮对话(截图→点击→等待→截图),API 测试一个 curl 命令就能验证。建议 E2E 测试以 API 验证为主,浏览器只用于关键 UI 交互和截图证据。
GIF 最多 50 帧,长流程会被截断。对于需要等待智能体回复的测试(10+ 秒等待),GIF 帧大部分是等待画面。建议只对关键交互录制 GIF,其他用单张截图 + API 日志佐证。
Gitea admin 创建 → BO 应用注册 → SR 连接 → Blade OS 配置,手动搭一次要 20+ 分钟。应该有一个 docker-compose.fullstack.yml 一键启动全家桶测试环境。