PG 宿主 100.64.0.8 恢复在线→查出旧 jar(Jun-19 00:59)缺 GET bindings 端点(commit 3a7a72f Jun-19 13:30)致 405→rebuild Jun-20 新 jar(反假绿:不用过时 jar)→起栈 48080(local,infra,清 socks)→playwright MSW-off 真打:22 passed/0 failed/0 skipped/0 flaky(9.1s)。 覆盖:accept-suggestion 正负×2 + account-security-ack + agent-create + knowledge-bindings(06-19 PG 离线阻塞项 unblock) + knowledge-confirm + knowledge-graph + live-read×6 + market-publish×8 + workspace。 种子:核验 4/5 基础数据在,knowledge-bindings 投影固化进 e2e/global-setup.ts #6(可入库、下次自动补,补此前未覆盖项);0 红故无就地修。回写进度总账 §五C + 总览待办(受阻→完成) + spec 注释。附本会话 ce-brainstorm/ce-plan 产出文档。 诚实边界:本地全栈活体(rebuild jar + 真 PG muse_slice_live),非 CI(maven.yml 不跑 e2e/需活体后端+浏览器)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
10 KiB
10 KiB
test: 全量 e2e 真跑通 + 测试结论台账
- 日期:2026-06-20
- 类型:test(验证)
- 深度:Standard
- Origin:
docs/brainstorms/2026-06-20-studio-ui端面与e2e真跑通-requirements.md - Target repo:oh-my-muse(
muse-studioe2e +muse-cloud后端)
Summary
把 muse-studio 既有 9 个 playwright e2e spec 在真实全栈(muse-server 48080 + PG muse_slice_live + redis)上全部真实跑一遍,消除"待实跑"妥协。配套:基础种子固化为可入库脚本(替代一次性 /tmp/*.java、补 global-setup 未覆盖项);跑红就地修(含后端潜伏 bug,反假绿);最终整理测试结论回写进度台账。
Problem Frame
接口覆盖门 233/233 只验证后端接口层,≠ 端到端可用。e2e 此前因 PG 宿主 100.64.0.8:5433 离线停留在"待实跑"。2026-06-20 PG 恢复在线(直连可达、Flyway 24 全绿、165 表),全栈起栈配方现成(.agents/knowledge/external-deps-and-gotchas.md §六),本会话已坐实 muse-server READY(Started in 19.437s,48080)。
最大不确定性有二:① 基础种子完整性——global-setup.ts 每轮自动复位 5 类 fixture,但假定基础数据已存在;基础数据历史靠一次性 /tmp/*.java(每会话丢失),knowledge-bindings 投影 global-setup 未覆盖。② 首次全量真跑可能暴露潜伏红——部分 spec(如 knowledge-bindings)从未活体运行过。
Requirements(trace origin)
- R1(origin 目标 2):9 个 e2e spec 全部真实跑通(绿)。
- R2(origin 目标 3):测试结论台账——每 spec 状态/证据/修复,回写进度总账。
- R3(origin 完成标准):端到端 e2e 实跑绿,非"待实跑";全栈真实后端 + 真 PG。
- R4(本轮 call-out 决策):基础种子固化为可入库;红用例就地修(含后端)。
Key Technical Decisions
- 基础种子固化为可入库(global-setup 扩展 / 独立 seed),不再用一次性
/tmp/*.java——复利、反每会话丢失,延续global-setup.ts自身"可入库版替代 /tmp"的既定方向。 - 红就地修(含后端潜伏 bug)——e2e 真绿才算完成,掩盖红=假绿。沿用历史模式(publish 部分索引→V22、confirm 重名 500→预检)。
- 起栈用 §六 现成配方:profile=
local,infra、清 JVM socks(-DsocksProxyHost=)、AI 调度熄火(超大 delay)、--muse.codegen.import-enable=false。 - PG =
muse_slice_live(100.64.0.8:5433),凭据走 env(~/.config/muse-repo/infra.env),绝不入库。 - 结论回写进度总账 + 总览,不新增过程文档(单一台账偏好)。
Implementation Units
U1. 全栈起栈就绪(前置)
- Goal:muse-server 单体在 48080 起栈,连
muse_slice_live+ 本机 redis,AI 调度熄火、socks proxy 清除。 - Requirements:R3。
- Dependencies:无(起点)。
- Files:
.agents/knowledge/external-deps-and-gotchas.md(§六 配方,参照不改)、muse-cloud/muse-server/target/muse-server.jar、~/.config/muse-repo/infra.env(仓外凭据)。 - Approach:本机 redis(
--requirepass)→set -a; . infra.env; set +a→ 按 §六java -DsocksProxyHost= … -jar muse-server.jar --spring.profiles.active=local,infra --spring.flyway.baseline-on-migrate=true --muse.codegen.import-enable=false。jar 现为 Jun-19 build(本会话未改后端,可复用);若 U4 改后端则mvn -pl muse-server -am package(classifier=exec 已配)后重起。本会话已起栈 READY,可直接复用。 - Test scenarios:Covers R3. 健康探针
curl --noproxy '*' -H "Authorization: Bearer test1" -H "tenant-id: 1" -H "X-API-Version: 1" http://localhost:48080/app-api/muse/works?pageNo=1&pageSize=5→code:0;日志含Started MuseServerApplication。 - Verification:48080 健康返回
code:0;redis PONG;PG 直连可达。
U2. 基础种子核验 + 固化为可入库脚本
- Goal:核验
muse_slice_live的 e2e 基础数据完整性,缺失项固化为可入库基础种子,补 global-setup 未覆盖的 knowledge-bindings 绑定投影。 - Requirements:R1、R4。
- Dependencies:U1。
- Files:
muse-studio/e2e/global-setup.ts(扩展基础种子段)或新建muse-studio/e2e/seed-base.ts;参照历史已丢失的/tmp/{SeedSec,KnowledgeGraphSeed,SetReqStatus,SeedAppeal,SetAppealSup}.java(按各 spec 注释 + global-setup 复位逻辑反推语义)。 - Approach:① 连 PG 核验基础数据存在性:
muse_content_blockid=3、muse_ai_suggestionid=3、muse_member_security_event「待确认演练」、muse_market_appeal/资产、账户/智能体、muse_knowledge_source_binding_projection(work_id=1/active/market_kb/kb4001)。② 缺失项写幂等 upsert 种子(对齐 global-setup 风格)。③ knowledge-bindings 投影种子补入 global-setup 或 seed-base。注意:muse_ai_suggestion.id为GENERATED ALWAYS,suggestion3 若缺需处理 id 对齐(global-setup #3 假定其存在不重建)——若无法还原原 id,需调整该 spec 的定位策略或基础种子以稳定 id。 - Test scenarios:种子幂等(重跑不产生重复/唯一冲突);跑后 global-setup 5 类复位无 "基础种子缺失" warn;
GET /works/1/knowledge-bindings返回 active 绑定。 - Verification:global-setup 跑无 warn;9 spec 的基础前置全部满足。
U3. 逐 spec 实跑 + 结果记录
- Goal:playwright 跑全部 9 spec,记录每个 pass/fail + 失败根因线索。
- Requirements:R1、R2。
- Dependencies:U1、U2。
- Files:
muse-studio/e2e/{accept-suggestion,knowledge-graph,knowledge-confirm,knowledge-bindings,market-publish,account-security-ack,live-read,agent-create,workspace}.spec.ts、muse-studio/playwright.config.ts(webServer 自动起 vite 5173、VITE_API_MOCK=false已固化)。 - Approach:
set -a; . infra.env; set +a→cd muse-studio; ./node_modules/.bin/playwright test。先单跑knowledge-bindings(历史从未活体跑、最高风险,验证 PG unblock)再全量。global-setup 每轮复位 fixture。记录每 spec 结果(绿/红 + trace)。 - Test scenarios:spec 本身即测试。关键断言:accept-suggestion 正/负(采纳写 Canonical rev1→2 / 乐观锁拒);knowledge-confirm(Shadow→Canonical 入库 + 草稿 confirmed);market-publish 6 例(发布草稿/申诉/撤回全链);knowledge-bindings(投影读回 200/code:0/active);live-read 5 读旅程;agent-create / workspace 冒烟。
- Verification:9 spec 结果明确(绿,或红 + 根因);首次全量真跑结果落账。
U4. 红用例就地修(条件性)
- Goal:跑红的 spec 定位根因(前端断言/接线 or 后端潜伏 bug),就地修至绿。
- Requirements:R1、R3、R4。
- Dependencies:U3。
- Files:视红而定——前端
muse-studio/src/**或后端muse-cloud/**(后端改动后回 U1 rebuild jar + 重起栈)。 - Approach:红多为"从未活体跑过的潜伏 bug"。前端红=断言/接线/SSE 漂移类;后端红=潜伏业务 bug(就地修 + 补 Flyway 迁移/IT,如 publish 索引→V22 先例)。
- Execution note:修红前先复现 + 定位根因,再 targeted 修,勿掩盖(反假绿);后端修须配真实 PG IT 或迁移,不靠放宽断言凑绿。
- Test scenarios:每修复点回归对应 spec 绿;后端修补对应迁移/IT(如适用);修复不引入其他 spec 回归(全量复跑)。
- Verification:原红 spec 转绿,根因 + 修复有记录;全量无回归。
U5. 测试结论台账回写
- Goal:整理全量 e2e 测试结论(每 spec 状态/证据/修复/无法绿的根因),回写进度总账 + 总览。
- Requirements:R2。
- Dependencies:U3(、U4)。
- Files:
docs/mvp/进度总账.md、docs/项目功能与进度总览.md。 - Approach:结论表(spec × 状态 × 证据 × 修复)。更新总览待办(e2e「待实跑」→ 实跑结果)、必要时同步
.agents/knowledge/module-reality-baseline.md。回写进度总账时间线。不新增过程文档。 - Test scenarios:none —— 纯文档台账回写,无行为变更。
- Verification:进度台账反映全量 e2e 真实结果;总览 e2e 行从「待实跑」更新为实跑结论。
Scope Boundaries
- 不在本 plan:studio UI 4 组补全(origin 目标 1)、admin 管理端 UI、两个未实现硬缺口(Meta impact-preview、AI Security 权限链)。
- Deferred to Follow-Up Work:P0 = AI 候选采纳链 UI 补全(见 origin)——本 plan 的全量 e2e 跑通是其前置基线。
Risks & Dependencies
- R-基础数据:基础种子部分缺失(尤其 suggestion3
GENERATED ALWAYSid 难还原)→ U2 核验,可能需调 spec 定位或稳定 id 策略。 - R-潜伏红:首次全量真跑暴露潜伏 bug(knowledge-bindings 从未活体跑)→ U4 就地修,可能触及后端 + rebuild jar。
- R-jar 时效:jar 为 Jun-19 build;U4 改后端须
mvn package重 build + 重起栈(耗时)。 - R-fixture 共享:多 spec 消费共享 fixture(live-read 多读旅程、market 申诉状态流转)→ global-setup 每轮复位缓解,但顺序敏感用例需注意。
- R-PG 在线:
100.64.0.8依赖 Tailscale 在线(本会话可达,会话间可能再离线)→ 离线即全套阻塞,需 PG 宿主恢复。 - 依赖:本机 redis、
muse-server.jar、playwright chromium(已装)、infra.env凭据(仓外)。
完成条件(Verification)
- 9 个 e2e spec 全绿,或诚实记录无法绿的 spec + 根因(反假绿,不放宽断言凑绿)。
- 基础种子可入库、幂等,global-setup 无"基础种子缺失"warn。
- 红用例根因 + 修复有记录;后端修配真实 IT/迁移。
- 测试结论回写进度总账 + 总览,e2e 行从「待实跑」更新为实跑结论。