Skip to content

refactor(console): retire legacy pages and simplify scoped routes - #3648

Open
AbigailDeng wants to merge 3 commits into
feat/2026-08-04_workflow-activity-vnextfrom
refactor/2026-09-16_console-canonical-routes
Open

AbigailDeng wants to merge 3 commits into
feat/2026-08-04_workflow-activity-vnextfrom
refactor/2026-09-16_console-canonical-routes

Conversation

@AbigailDeng

@AbigailDeng AbigailDeng commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Problem and Result

The feature branch still exposes the old Teams/Members console alongside the current Workflow Activity experience, and current resource URLs contain the preview name workflow-activity-vnext. This PR makes Workflows, Activity, Channels, and Settings the production console and removes that segment from scoped URLs.

Base: feat/2026-08-04_workflow-activity-vnext.

  • Canonical sections: /scopes/:scopeId/workflows, /scopes/:scopeId/activity, /scopes/:scopeId/channels, and /scopes/:scopeId/settings, including existing create/detail/edit routes.
  • Preserve /workflows account-scope resolution and login/callback recovery. Home aliases open this entry. Safe deep links retain query parameters and fragments.
  • Delete legacy Teams, Members, Studio, Scopes, Chat, Runtime, Services, Governance, Deployments, and old Settings pages, their obsolete tests/navigation helpers, and global console chrome. Backend resources, persisted data, and API contracts are unchanged.
  • Move the canvas/editor components and LLM settings helpers used by the retained experience to shared directories, keeping their coverage. Account-menu Settings now uses the current scope and the editor's unsaved-changes guard on desktop and mobile.
  • Update the frontend routing specification, AGENTS, README, baseline precedence notices, Jest's retired-file inventory, and the CI guard's retired frontend paths.

Old business URLs, including the former vNext namespace, now render 404. No hidden legacy route aliases remain. The existing canvas benchmark stays behind its exact development opt-in. Internal source-directory, query-key, and locale-key names are unchanged.

Latest Conflict Resolution — 2026-09-17

Merge commit b875470d7 includes target branch commit dae3e45c8 and resolves all 31 conflicting files. The target remains feat/2026-08-04_workflow-activity-vnext.

  • Keep the canonical resource shell and legacy-page retirement. Remove newly introduced Chat and Team Work Order page files whose owning surfaces are retired by this PR; keep backend resources and shared API contracts intact.
  • Preserve the target branch's NyxID bot adoption and Ornn skill selector. Bind now resolves at /scopes/:scopeId/channels/bind/:botId; the replaced Telegram credential route and page stay retired. Update binding, edit-save, and removal navigation assertions to the canonical URLs.
  • Carry the target's LLM model-catalog assertion into the relocated shared/settings/userLlmSelection.test.ts.
  • Update the route-consolidation specification for bot binding. No visual baseline assets changed.

Verification on the resolved merge

17 suites / 84 tests passed; changed-file Biome passed for 11 files. Test stability and GAgent registry guards passed. The internal module-resolution audit found no missing modules, surviving legacy pages, or references to retired page modules. The final PR diff passes the whitespace check and includes no backend changes.

Exact commands, from the repository root:

python3 /Users/abigaildeng/.codex/skills/frontend-incremental-pr/scripts/frontend_change_scope.py --repo . --base origin/feat/2026-08-04_workflow-activity-vnext
python3 /Users/abigaildeng/.codex/skills/frontend-incremental-pr/scripts/frontend_change_scope.py --repo . --base HEAD

pnpm --dir apps/aevatar-console-web exec jest --listTests --runInBand --findRelatedTests src/pages/workflow-activity-vnext/channels/ChannelConfigurationPage.tsx src/pages/workflow-activity-vnext/channels/ChannelDetailsPage.tsx src/pages/workflow-activity-vnext/channels/ChannelSkillField.tsx src/pages/workflow-activity-vnext/channels/ChannelsPage.tsx src/shared/settings/userLlmSelection.ts

pnpm --dir apps/aevatar-console-web exec jest --runInBand --verbose --runTestsByPath src/app.layout.test.ts src/app.test.tsx src/routesConfig.test.ts src/pages/workflow-activity-vnext/navigation.test.ts src/pages/workflow-activity-vnext/channels/ChannelAuthorizedServices.test.tsx src/pages/workflow-activity-vnext/channels/ChannelEditPage.test.tsx src/pages/workflow-activity-vnext/channels/ChannelIdentity.test.tsx src/pages/workflow-activity-vnext/channels/ChannelsPage.test.tsx src/shared/api/channelSkillsApi.test.ts src/shared/api/channelsApi.test.ts src/shared/api/scopeRuntimeApi.test.ts src/shared/api/workOrdersApi.test.ts src/shared/auth/client.test.ts src/shared/settings/userLlmSelection.test.ts src/shared/ui/AevatarTooltipImportGuard.test.ts src/locales/catalog.test.ts src/locales/hardcodedCopyAudit.test.ts

pnpm --dir apps/aevatar-console-web exec biome check config/routes.ts jest.config.ts src/app.tsx src/app.test.tsx src/routesConfig.test.ts src/pages/workflow-activity-vnext/index.tsx src/pages/workflow-activity-vnext/navigation.ts src/pages/workflow-activity-vnext/navigation.test.ts src/pages/workflow-activity-vnext/channels/ChannelEditPage.test.tsx src/pages/workflow-activity-vnext/channels/ChannelsPage.test.tsx src/shared/settings/userLlmSelection.test.ts

bash tools/ci/gagent_registry_kind_guard.sh
node .planning/audit-dependencies.cjs
git diff origin/feat/2026-08-04_workflow-activity-vnext...HEAD --check
git merge-base --is-ancestor origin/feat/2026-08-04_workflow-activity-vnext HEAD

The scoped dependency preflight selected five files. Its broad index.test.tsx has no Channel cases and was excluded from the final run; an earlier 18-file attempt including it was interrupted and is not counted as passing evidence. Global navigation and auth are covered by their dedicated contract tests; all retained test files changed by this synchronization were run explicitly.

The stability guard needs Python 3.10+ and committed ancestry. The system Python 3.9 attempt failed on union-type syntax; the pre-commit Python 3.12 attempt failed its Git ancestry assertion. The complete guard passed after creating the merge commit with the installed Python 3.12 selected only for that process:

/opt/homebrew/bin/python3.12 - <<'PYTHON'
import pathlib, subprocess, sys, tempfile, os
folder = pathlib.Path(tempfile.mkdtemp(prefix='pr3648-python-'))
(folder / 'python3').symlink_to(sys.executable)
env = os.environ.copy()
env['PATH'] = str(folder) + os.pathsep + env['PATH']
result = subprocess.run(['bash', 'tools/ci/test_stability_guards.sh'], env=env)
(folder / 'python3').unlink()
folder.rmdir()
raise SystemExit(result.returncode)
PYTHON

Full frontend suite, typecheck, and production build remain delegated to GitHub CI. No reliable affected typecheck target exists, and no full local fallback was run.

Original Implementation Verification

Focused result: 25 test files / 335 tests passed, counting the successful focused reruns. The first run exposed JSX transform issues in two new/updated tests; the final reruns below passed. Changed-file Biome passed for 39 files.

From apps/aevatar-console-web:

Exact related-test commands
pnpm exec jest --runInBand --runTestsByPath \
  src/app.layout.test.ts \
  src/app.test.tsx \
  src/pages/auth/callback/index.test.tsx \
  src/pages/workflow-activity-vnext/WorkflowActivityVNextShell.test.tsx \
  src/pages/workflow-activity-vnext/WorkflowHomePage.test.tsx \
  src/pages/workflow-activity-vnext/activity/ActivityPage.test.tsx \
  src/pages/workflow-activity-vnext/activity/RunDetailPage.test.tsx \
  src/pages/workflow-activity-vnext/channels/ChannelEditPage.test.tsx \
  src/pages/workflow-activity-vnext/channels/ChannelsPage.test.tsx \
  src/pages/workflow-activity-vnext/channels/TelegramConnectionPage.test.tsx \
  src/pages/workflow-activity-vnext/index.test.tsx \
  src/pages/workflow-activity-vnext/navigation.test.ts \
  src/pages/workflow-activity-vnext/settings/AccountPanel.test.tsx \
  src/pages/workflow-activity-vnext/workflows/NewWorkflowPage.test.tsx \
  src/pages/workflow-activity-vnext/workflows/WorkflowScheduleSurface.test.tsx \
  src/routesConfig.test.ts \
  src/shared/auth/client.test.ts \
  src/shared/auth/session.test.ts \
  src/shared/settings/userLlmSaveObservation.test.ts \
  src/shared/settings/userLlmSelection.test.ts \
  src/shared/ui/ConsoleHeaderActions.test.tsx \
  src/shared/workflowEditor/WorkflowStudioCanvas.test.tsx \
  src/pages/workflow-activity-vnext/channels/ChannelAuthorizedServices.test.tsx \
  src/pages/workflow-activity-vnext/workflows/WorkflowTemplateBrowser.test.ts \
  src/shared/datetime/dateTime.test.ts

# Focused reruns after fixing the new/updated test harnesses:
pnpm exec jest --runInBand --runTestsByPath src/shared/ui/ConsoleHeaderActions.test.tsx src/pages/workflow-activity-vnext/WorkflowActivityVNextShell.test.tsx
pnpm exec jest --runInBand --runTestsByPath src/pages/workflow-activity-vnext/WorkflowActivityVNextShell.test.tsx

Dependency selection also used jest --listTests --runInBand --findRelatedTests on navigation, the resource shell, the shared editor surface, and the two moved settings helpers. Global app/auth changes use their direct regression files to avoid a full-suite dependency fanout.

Exact changed-file static-check command
pnpm exec biome check \
  config/routes.ts \
  jest.config.ts \
  src/app.layout.test.ts \
  src/app.test.tsx \
  src/app.tsx \
  src/pages/auth/callback/index.test.tsx \
  src/pages/workflow-activity-vnext/WorkflowActivityVNextShell.test.tsx \
  src/pages/workflow-activity-vnext/WorkflowActivityVNextShell.tsx \
  src/pages/workflow-activity-vnext/WorkflowHomePage.test.tsx \
  src/pages/workflow-activity-vnext/activity/ActivityPage.test.tsx \
  src/pages/workflow-activity-vnext/activity/RunDetailPage.test.tsx \
  src/pages/workflow-activity-vnext/channels/ChannelEditPage.test.tsx \
  src/pages/workflow-activity-vnext/channels/ChannelsPage.test.tsx \
  src/pages/workflow-activity-vnext/channels/TelegramConnectionPage.test.tsx \
  src/pages/workflow-activity-vnext/index.test.tsx \
  src/pages/workflow-activity-vnext/index.tsx \
  src/pages/workflow-activity-vnext/navigation.test.ts \
  src/pages/workflow-activity-vnext/navigation.ts \
  src/pages/workflow-activity-vnext/settings/AccountPanel.test.tsx \
  src/pages/workflow-activity-vnext/settings/SettingsPage.tsx \
  src/pages/workflow-activity-vnext/workflows/NewWorkflowPage.test.tsx \
  src/pages/workflow-activity-vnext/workflows/WorkflowEditorPage.tsx \
  src/pages/workflow-activity-vnext/workflows/WorkflowScheduleSurface.test.tsx \
  src/routesConfig.test.ts \
  src/shared/auth/client.test.ts \
  src/shared/auth/session.test.ts \
  src/shared/auth/session.ts \
  src/shared/settings/userLlmSaveObservation.test.ts \
  src/shared/settings/userLlmSaveObservation.ts \
  src/shared/settings/userLlmSelection.test.ts \
  src/shared/settings/userLlmSelection.ts \
  src/shared/ui/ConsoleHeaderActions.test.tsx \
  src/shared/ui/ConsoleHeaderActions.tsx \
  src/shared/workflowEditor/WorkflowStudioCanvas.test.tsx \
  src/shared/workflowEditor/WorkflowStudioCanvas.tsx \
  src/shared/workflowEditor/WorkflowStudioCanvasRegion.tsx \
  src/shared/workflowEditor/WorkflowStudioEditorSurface.tsx \
  src/shared/workflowEditor/WorkflowStudioEmptyState.tsx \
  src/shared/workflowEditor/WorkflowStudioNodeLibrary.tsx

From the repository root, all passed:

bash tools/ci/test_stability_guards.sh
bash tools/ci/gagent_registry_kind_guard.sh
python3 apps/aevatar-console-web/docs/design-baselines/workflow-activity-vnext/verify-baseline.py
git diff --check
git diff --cached --check

An internal TypeScript import-resolution audit found no remaining imports of retired pages and no missing internal modules. An exact deleted-path reference scan of frontend source/config, tools, and CI found no stale executable references.

Browser smoke check: development compilation succeeded with the configured remote backend. Verified /workflows login recovery, canonical Channels deep-link query/hash preservation, and old Teams URL 404. The local preview had no authenticated session, so live signed-in data operations were not exercised.

Full frontend suite, typecheck, and production build are delegated to GitHub CI under the personal local-validation policy. The repository has no reliable affected typecheck target; no full local fallback was run.

CI Fix And Base Synchronization

CI run 35053289124 failed one test in shard 4: AevatarTooltipImportGuard.test.ts detected a direct Ant Design Tooltip import in ChannelDetailsPage.tsx. The other three test shards passed. The same failure was reproduced locally before this update.

Commit 69c94b035 merges the updated feature base at 3dfb85f27, including the shared-tooltip correction already merged through #3647. It also retains the latest Label/Skill name editing behavior. The new label-save test from that base now expects the canonical channel-detail URL without the retired namespace. No test guard or assertion is disabled.

Focused follow-up result: 9 suites / 67 tests passed. Biome passed for the nine source/test/locale files brought in by the synchronization, and the test stability guard passed.

# Repository root; analyzer ran before committing the synchronization
python3 /Users/abigaildeng/.codex/skills/frontend-incremental-pr/scripts/frontend_change_scope.py --repo . --base HEAD

pnpm --dir apps/aevatar-console-web exec jest --listTests --runInBand --findRelatedTests src/pages/workflow-activity-vnext/channels/ChannelDetailsPage.tsx src/pages/workflow-activity-vnext/channels/ChannelEditPage.tsx src/shared/api/channelBotsApi.ts src/shared/api/channelRuntimeConfigApi.ts

pnpm --dir apps/aevatar-console-web exec jest --runInBand --runTestsByPath src/shared/ui/AevatarTooltipImportGuard.test.ts src/pages/workflow-activity-vnext/channels/ChannelsPage.test.tsx src/pages/workflow-activity-vnext/channels/ChannelEditPage.test.tsx src/pages/workflow-activity-vnext/channels/TelegramConnectionPage.test.tsx src/pages/workflow-activity-vnext/channels/ChannelAuthorizedServices.test.tsx src/shared/api/channelBotsApi.test.ts src/shared/api/channelRuntimeConfigApi.test.ts src/locales/catalog.test.ts src/locales/hardcodedCopyAudit.test.ts

pnpm --dir apps/aevatar-console-web exec biome check src/locales/channelMessages.en-US.ts src/locales/channelMessages.zh-CN.ts src/pages/workflow-activity-vnext/channels/ChannelDetailsPage.tsx src/pages/workflow-activity-vnext/channels/ChannelEditPage.test.tsx src/pages/workflow-activity-vnext/channels/ChannelEditPage.tsx src/shared/api/channelBotsApi.test.ts src/shared/api/channelBotsApi.ts src/shared/api/channelRuntimeConfigApi.test.ts src/shared/api/channelRuntimeConfigApi.ts

bash tools/ci/test_stability_guards.sh
git diff --check
git diff --cached --check

Dependency preflight selected seven suites. Six directly cover Channels and its API adapters; the broad index suite has no Channel cases and was excluded from this follow-up. The targeted Tooltip guard and two locale audits complete the nine-suite selection. Internal import audit still finds no missing modules or imports of retired pages, and source/config tests contain no old scoped vNext URL literals.

Full frontend suite, typecheck, and production build remain delegated to GitHub CI; no full local verification was run.

Design Baseline

  • Baseline: apps/aevatar-console-web/docs/design-baselines/workflow-activity-vnext/
  • Primary: aevatar-workflow-activity-vnext.excalidraw
  • SHA-256: 30e74d7b410ae72c4c91432355436679033679c54c10b1702908435b001577de
  • Contract and user paths: 2026-08-04-workflow-activity-vnext-design.md and 2026-08-04-workflow-activity-vnext-user-paths.md.
  • Current route/retirement decision: 2026-09-16-console-route-consolidation.md, which supersedes original namespace isolation and legacy-page preservation.
  • Schedule reference: aevatar-workflow-schedule-design.excalidraw, SHA-256 cd5c84c45ffb0cdb253af31b7e1b7616504b35520298f01773026e3b76882d8a; supplements 2026-08-11-workflow-schedule-design.md and 2026-08-21-workflow-schedule-history-design.md.
  • Existing auth/session/returnTo and Umi localization behavior is preserved.
  • Production data comes only from real APIs and acknowledged user actions, with no mock fallback.
  • Baseline integrity: 17 main frames, seven Schedule frames and standalone PNGs, deterministic generators all passed. Visual assets are unchanged.

@codecov

codecov Bot commented Sep 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 83.42%. Comparing base (e4bf75a) to head (b875470).
⚠️ Report is 1005 commits behind head on feat/2026-08-04_workflow-activity-vnext.

@@                             Coverage Diff                             @@
##           feat/2026-08-04_workflow-activity-vnext    #3648      +/-   ##
===========================================================================
- Coverage                                    84.56%   83.42%   -1.14%     
===========================================================================
  Files                                         1503     1685     +182     
  Lines                                       140015   193217   +53202     
  Branches                                     17180    23239    +6059     
===========================================================================
+ Hits                                        118403   161196   +42793     
- Misses                                       13747    21208    +7461     
- Partials                                      7865    10813    +2948     
Flag Coverage Δ
ci 83.42% <ø> (-1.14%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 580 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant