feat(web): add OpenTag onboarding preview - #2317
Conversation
yuezengwu
left a comment
There was a problem hiding this comment.
Reviewed the implementation and found no blocking issues. The development-only route keeps the preview and embedded brand assets out of production builds; the computer/runtime states reuse the shared selection logic and preserve the server-authored command boundary; and the Feishu reachability plus first-Task completion flow matches the intended product boundary.
baixiaohang
left a comment
There was a problem hiding this comment.
Recommendation: request changes
- Rationale: The preview does not preserve the Agent draft across its own forward path, and it cannot demonstrate the claimed reachability gate between Feishu confirmation and first-use polling.
Risk level: C
- Path baseline: changes are limited to
packages/web/**. - Semantic lift: none; the route is development-only and fixture-backed.
PR summary
- Author / repo: Gandy2025 / agent-team-foundation/first-tree
- Problem: Give product reviewers a shareable desktop/mobile preview of the four-step OpenTag first-use journey, including Computer/runtime edge states and the final Feishu-created task handoff.
- Approach: Add a development-only route with URL-addressable fixtures, shared Computer/runtime selection helpers, grouped progress, Feishu QR/waiting states, and a completed-task destination.
- Impacted modules: Web app route registration, the OpenTag onboarding preview page, and preview-only brand assets.
Review findings
❌ 1. The chosen focus and Agent name are local to FocusAndNameStep; after advancing, Step 2 always renders gandy2025 assistant · Team Assistant, and completion repeats the same hard-coded name. Selecting Researcher/Software Engineer or editing the name therefore produces a contradictory draft immediately on the next screen. Lift the draft to the page-level state and derive every downstream summary/status from it. [R1 / packages/web/src/pages/opentag-onboarding-preview.tsx:398, :636, :704]
❌ 2. Step 3 has only ready and provisioning: clicking its CTA can only enter an indefinite “Waiting for Feishu to confirm” screen. There is no fixture for provisioned-but-unreachable, connection failure, or reachable, so the preview cannot show the PR's central boundary that Step 4 begins only after genuine reachability; the controller can jump directly to Step 4 regardless. Model the server facts explicitly and make the reachable state the only transition into first-task polling. [R4 / packages/web/src/pages/opentag-onboarding-preview.tsx:37, :388, :652]
packages/web/src/pages/opentag-onboarding-preview.tsx:516]
Action taken
- Submitted request changes.
Summary
/preview/opentag-onboardingroute for the grouped four-step OpenTag onboarding shell/?c={firstUseChatId}OptionCardpills, and opaque server-command rendering contractstep,state, andviewportcontrols, with the grouped desktop rail and 390 px segmented mobile progressTry it
Start at:
http://localhost:5173/preview/opentag-onboarding?step=focus&state=ready&viewport=desktopStep 2 examples:
?step=computer&state=no-computer&viewport=desktop?step=computer&state=command-error&viewport=desktop?step=computer&state=ready&viewport=desktop?step=computer&state=multiple-computers&viewport=desktop?step=computer&state=checking&viewport=desktop?step=computer&state=no-coding-agent&viewport=desktop?step=computer&state=ready&viewport=mobileStep 4 examples:
?step=first-task&state=waiting&viewport=desktop?step=first-task&state=completed&viewport=desktop?step=first-task&state=waiting&viewport=mobileVerification
pnpm --filter @first-tree/web typecheck— passed, including Design System token guardrailspnpm --filter @first-tree/web build— passed; Preview route strings and fixtures are absent from the production bundlepnpm exec biome check packages/web/src/pages/opentag-onboarding-preview.tsx— passedfirst-treeinstaller/login response shape while prose stays brand-neutralView taskdestination were verified on desktop, with waiting also verified at 390×844The local preview reports one expected
/api/v1/bootstrap/configproxy error when the API server is not running; the dev-only fixture route still renders and operates independently.Scope
This preview is fixture-only and performs no persistence, API mutation, analytics, provisioning, lifecycle, or production
/opentagchanges.