Skip to content

refactor(frontend): migrate execution trace to CqrsStatus#1154

Open
potter-sun wants to merge 1 commit into
refactor/2026-05-28_frontend-shared-cqrs-statefrom
refactor/2026-05-28_frontend-execution-trace-cqrs
Open

refactor(frontend): migrate execution trace to CqrsStatus#1154
potter-sun wants to merge 1 commit into
refactor/2026-05-28_frontend-shared-cqrs-statefrom
refactor/2026-05-28_frontend-execution-trace-cqrs

Conversation

@potter-sun

Copy link
Copy Markdown
Collaborator

Issue

frontend-audit-003 (HIGH) — Incomplete CQRS state model in execution trace.

StepExecutionState.status was typed as 'idle' | 'active' | 'waiting' | 'completed' | 'failed', missing Accepted, Streaming, Paused, Observed, StillProcessing states required by the design baseline.

Source

Frontend architecture audit (docs/audit-scorecard/2026-05-28-frontend-audit.md).

Fix Summary

Migrated execution.ts to use the shared CqrsStatus type from PR #1152. Renamed:

  • 'active''running' (observation phase)
  • 'waiting''paused' (waiting for human input/approval/signal)

Updated 3 consumer files:

  • graph.tsStudioGraphNodeData.executionStatus type
  • GraphCanvas.tsx — status color and badge rendering
  • StudioWorkbenchSections.tsx — interaction detection check

Review Record

Reviewer Model Verdict
ci-runner Sonnet PASS — tsc clean, 656/656 tests

Stacked on: PR #1152 (shared CqrsStatus type)

🤖 Generated with Frontend Refactoring Team

StepExecutionState.status now uses the shared CqrsStatus type instead
of a local 5-state union. Renames: 'active' → 'running', 'waiting'
→ 'paused' to match CQRS lifecycle semantics.

Updated consumers: graph.ts, GraphCanvas.tsx, StudioWorkbenchSections.tsx.

Refs: frontend-audit-003
@potter-sun potter-sun requested a review from AbigailDeng as a code owner May 28, 2026 09:36
@codecov

codecov Bot commented May 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.13%. Comparing base (9a6ea07) to head (3b50e59).

@@                               Coverage Diff                               @@
##           refactor/2026-05-28_frontend-shared-cqrs-state    #1154   +/-   ##
===============================================================================
  Coverage                                           83.12%   83.13%           
===============================================================================
  Files                                                1013     1013           
  Lines                                               67357    67357           
  Branches                                             8725     8725           
===============================================================================
+ Hits                                                55991    55994    +3     
+ Misses                                               7515     7512    -3     
  Partials                                             3851     3851           
Flag Coverage Δ
ci 83.13% <ø> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 3 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@loning

loning commented May 31, 2026

Copy link
Copy Markdown
Contributor

🤖 Phase 10 review — architect (gate mode)

Verdict: approve

未发现需要阻塞合并的 architect/test/quality 问题。这个 PR 范围保持在 console web execution trace 的状态模型迁移内,没有改 CLAUDE.md/AGENTS.md、没有新增跨层抽象,也没有触碰后端 actor / projection / read-model / serialization 边界;不属于 philosophy-out-of-Phase-10-scope。

Evidence:

  • apps/aevatar-console-web/src/shared/studio/execution.ts:21StepExecutionState.status 从本地 5 状态 union 收敛到共享 CqrsStatus,符合“核心语义强类型 / 命名语义优先”的前端状态模型方向。
  • apps/aevatar-console-web/src/shared/studio/execution.ts:237:step request 进入 running,避免继续使用旧的 active 命名,语义更贴近 observation/running 阶段。
  • apps/aevatar-console-web/src/shared/studio/execution.ts:277:human input / wait signal request 进入 paused,与等待人工输入、审批或 signal 的 CQRS UI 语义一致。
  • apps/aevatar-console-web/src/shared/studio/execution.ts:333:step completion 仍明确落到 completed / failed,没有把 accepted/running/readmodel observed 与业务完成态混用。
  • apps/aevatar-console-web/src/shared/studio/graph.ts:8:graph node data 直接引用共享 CqrsStatus,没有继续复制状态 union 或制造第二套状态模型。
  • apps/aevatar-console-web/src/shared/graphs/GraphCanvas.tsx:99:图节点颜色和 badge 消费 paused / running,消费者与 trace producer 的命名迁移保持一致。
  • apps/aevatar-console-web/src/pages/studio/components/StudioWorkbenchSections.tsx:900:人工交互入口只在 step 状态为 paused 时暴露,避免旧 waiting 分支残留导致交互丢失。
  • apps/aevatar-console-web/src/pages/studio/components/StudioExecutionPage.test.tsx:186:现有测试覆盖 approval playback;apps/aevatar-console-web/src/pages/studio/components/StudioExecutionPage.test.tsx:196 覆盖 wait_signal resume 路径,这次状态重命名没有削弱对应行为断言。
  • CI evidence: gh pr checks 1154 显示 console-webfast-gatescoverage-qualitycodecov/patch 均为 pass;diff 中未出现 [Skip]Task.DelayThread.Sleep 或断言弱化。

Quality notes:

  • 这是窄 refactor,未引入 dead code 或过度抽象。
  • Streamingdocs/canon/frontend-design.md 中允许作为 Running 的子状态或表现形式;本 PR 只迁移 execution trace 的主状态类型,不要求在同一变更中补齐所有细分视觉映射。

REVIEW_DONE:1154:architect:approve
⟦AI:AUTO-LOOP⟧

@loning

loning commented May 31, 2026

Copy link
Copy Markdown
Contributor

🤖 Phase 10 review — quality (gate mode)

Verdict: reject

主要阻塞点是:这个 PR 把 execution trace 的节点状态类型放宽到完整 CqrsStatus,但渲染与测试仍停留在旧的 5 态子集。作为 gate review,我不能把它当成“migrate execution trace to CqrsStatus”完成态放行。

Evidence:

  • apps/aevatar-console-web/src/shared/studio/graph.ts:47StudioGraphNodeData.executionStatus 改为完整 CqrsStatus,但 apps/aevatar-console-web/src/shared/graphs/GraphCanvas.tsx:99108 只显式处理 completed / failed / paused / runningapps/aevatar-console-web/src/shared/graphs/GraphCanvas.tsx:190197 的 badge 背景也只区分这几类。这样 accepted / streaming / observed / stillProcessing / cancelled / success / error 都是合法输入,却会落入同一个默认视觉分支,尤其 error/cancelled 可能不显示失败语义,违反 frontend design 4.1 对 CQRS / Observation / ReadModel 状态分开呈现的要求。
  • apps/aevatar-console-web/src/shared/studio/execution.ts:23StepExecutionState.status 放宽为完整 CqrsStatus,但当前 builder 实际只产生 idlerunningpausedcompletedfailed(见同文件 :83:238:278:333:378)。这不是完整迁移,而是让消费者相信可以收到完整 CQRS 状态,同时又没有穷尽处理;质量上会削弱类型自文档性和 exhaustiveness。
  • Tests: diff 没有新增或更新测试文件。这个 PR 改了 active -> runningwaiting -> paused,会影响 pending interaction 选择和 graph badge 渲染,但没有覆盖 human_input/wait_signal 进入 pausedstudio.human.resume 回到 running、以及 decorateNodesForExecution 向 graph data 传递状态的行为。CI 显示 console-webfast-gatescoverage-quality 通过,diff 中也没看到 [Skip]Task.Delay 或 weakened assertion,但缺少 net-new 逻辑测试仍是当前改动的质量缺口。

修复建议:

  1. 如果 execution trace 目前只支持旧执行子集,请新增明确类型,例如 ExecutionTraceStatus = Extract<CqrsStatus, 'idle' | 'running' | 'paused' | 'completed' | 'failed'>,并让 StepExecutionState.statusexecutionStatus 使用这个窄类型;这样 PR 范围就诚实地表达为局部命名迁移。
  2. 如果目标确实是完整 CqrsStatus,请在 GraphCanvas 做完整状态到 tone/label 的显式映射,最好用 Record<CqrsStatus, ...> 或穷尽 switch,至少保证 accepted / streaming / observed / stillProcessing / cancelled / success / error 不会误入默认分支。
  3. 补一组 execution trace 单元测试,覆盖 paused 默认日志选择、resume 后 running、completed/failed、以及 graph node decoration。不要用 timing wait,也不要弱化断言。

Architect scope: 未发现 actor / projection / read-model / serialization 边界被触碰;PR 没改 CLAUDE.md/AGENTS.md,也没有新增跨层抽象,因此不是 philosophy-out-of-Phase-10-scope。

REVIEW_DONE:1154:quality:reject
⟦AI:AUTO-LOOP⟧

@loning

loning commented May 31, 2026

Copy link
Copy Markdown
Contributor

🤖 Phase 10 review — tests (gate mode)

verdict: approve

按 tests 角色复核了 PR 描述、完整 diff、PR head 相关文件与 checks。这个 PR 只迁移执行 trace 的前端状态命名到共享 CqrsStatus,没有新增抽象层、没有改 CLAUDE/AGENTS、没有越出 Phase 10 范围;可进入 3/3 approve + CI 绿后的 auto-merge 流程。

Evidence:

  • apps/aevatar-console-web/src/shared/studio/execution.ts:21StepExecutionState.status 改为共享 CqrsStatus,消除了本地 5-state union,符合强类型状态语义收敛。
  • apps/aevatar-console-web/src/shared/studio/execution.ts:237 / :277 / :377 / :503:执行中与人工等待状态统一从 active/waiting 迁移为 running/paused,且默认选中 pending interaction 的判断同步改为 paused
  • apps/aevatar-console-web/src/pages/studio/components/StudioWorkbenchSections.tsx:900:只有当 trace 中 step 状态仍是 paused 时才暴露 active interaction,避免已恢复步骤继续显示可操作输入。
  • apps/aevatar-console-web/src/shared/graphs/GraphCanvas.tsx:99:图节点颜色与 badge 渲染同步识别 paused/running,没有继续依赖旧 waiting/active
  • apps/aevatar-console-web/src/pages/studio/components/StudioExecutionPage.test.tsx:186 / :196:现有测试覆盖 approval playback 与 wait_signal resume 行为,能防止 paused 交互判断回退导致操作入口丢失。
  • PR checks:console-webfast-gatescoverage-qualitycodecov/patch 均为 success;未发现本 PR 引入 [Skip]Task.DelayThread.Sleep、弱化断言或测试禁用。

建议:无阻塞修复项。后续如继续迁移完整 CQRS 状态,建议给 GraphCanvas 增加一组 status badge 参数化测试覆盖 accepted/streaming/observed/stillProcessing/cancelled 的展示策略,但这不是本 PR 的 merge blocker。

REVIEW_DONE:1154:tests:approve
⟦AI:AUTO-LOOP⟧

@loning

loning commented May 31, 2026

Copy link
Copy Markdown
Contributor

📊 Phase 10 advisory review 完成 — #1154(❌ 不需要 controller 介入)

角色 verdict
architect approve
tests approve
quality reject

判定:2 approve + 1 reject,未达成 3/3 unanimous,不 auto-merge。quality reviewer evidence 见上方评论。

下一步:PR author(@potter-sun)阅读 quality reviewer 评论后决定是否修复;controller 不派 fix codex 改外部 PR。head SHA 重新 push 后下次 wakeup re-review。

🤖 controller status banner

⟦AI:AUTO-LOOP⟧

@loning loning added the phase10-reviewed Phase 10 advisory review已完成,head SHA 变即失效 label May 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

phase10-reviewed Phase 10 advisory review已完成,head SHA 变即失效

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants