fix(#13371): make character select post-onboarding only#13396
Conversation
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Code review on current head: the implementation direction matches #13371. Local validation:
Sparse-worktree limit:
I am leaving auto-merge off. The PR body is correct that this UI behavior still needs |
|
Additional local validation on current head Results:
Local blockers / gaps:
|
|
Disabled auto-merge again. The code-level fix and focused startup-phase test are good, but the merge-quality evidence gap remains: no |
|
Local review for head
Local blockers/caveats:
I did not find an implementation issue in the handoff logic, but this local environment did not provide clean focused hook-test or audit proof. |
|
Maintainer review note: this branch must be rebased before merge or further verification. After refreshing I attempted to disable auto-merge because the PR body itself says it is missing app audit / iOS simulator relaunch evidence, but GitHub returned: Please rebase onto current |
…he character-select fix Captures the on-device proof requested by #13405: develop-tip build relaunches into the character view after onboarding (bug), the #13396 fix relaunches into home. Fresh-install onboarding smoke + relaunch screenshots + recordings for both builds, with renderer build stamps pinning each installed app to its commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…he character-select fix Captures the on-device proof requested by #13405: the pre-fix develop build relaunches into the character view after onboarding (bug), the #13396 fix relaunches into home. Fresh-install onboarding smoke + relaunch screenshots + recordings for both builds, with renderer build stamps pinning each installed app to its commit. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…he character-select fix (#13487) Captures the on-device proof requested by #13405: the pre-fix develop build relaunches into the character view after onboarding (bug), the #13396 fix relaunches into home. Fresh-install onboarding smoke + relaunch screenshots + recordings for both builds, with renderer build stamps pinning each installed app to its commit. Co-authored-by: Shaw <shawgotbags@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
❌ PR title does not match the required pattern. Please use one of these formats:
|
…y onboarding
Cloud-only onboarding ends with completeFirstRun("chat"), but a later
re-hydrate could route the first post-onboarding boot to the full-screen
character-select view once (via a session-scoped justCommitted ref, #13396).
Two surfaces fought for the first post-onboarding impression, contradicting
the one-obvious-path / chat-first doctrine.
The agent is auto-provisioned/adopted in cloud-only mode and character
customization is reachable from Settings/launcher, so the automatic landing
is removed:
- startup-phase-hydrate.ts: drop the character-select branch; a root boot
lands on the default tab (chat) and a deep-linked URL still wins. The
dead firstRunCompletionJustCommittedRef / firstRunCompletionCommittedRef
fields leave HydratingDeps (runHydrating no longer reads either).
- Remove the justCommitted plumbing end to end (useFirstRunState,
useFirstRunCallbacks, AppContext) and the now-dead
shouldStartAtCharacterSelectOnLaunch helper (always returned false).
- Tests: rewrite startup-phase-hydrate.initial-tab.test.ts to assert a root
boot lands in chat and never character-select; delete the obsolete
character-select handoff test; drop the justCommitted assertions from
first-run-completion-persist; assert no character-select surface in the
cloud-only onboarding e2e.
- IN_CHAT_ONBOARDING_DESIGN.md: document the final chat-first landing.
Closes #14362
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…y onboarding
Cloud-only onboarding ends with completeFirstRun("chat"), but a later
re-hydrate could route the first post-onboarding boot to the full-screen
character-select view once (via a session-scoped justCommitted ref, #13396).
Two surfaces fought for the first post-onboarding impression, contradicting
the one-obvious-path / chat-first doctrine.
The agent is auto-provisioned/adopted in cloud-only mode and character
customization is reachable from Settings/launcher, so the automatic landing
is removed:
- startup-phase-hydrate.ts: drop the character-select branch; a root boot
lands on the default tab (chat) and a deep-linked URL still wins. The
dead firstRunCompletionJustCommittedRef / firstRunCompletionCommittedRef
fields leave HydratingDeps (runHydrating no longer reads either).
- Remove the justCommitted plumbing end to end (useFirstRunState,
useFirstRunCallbacks, AppContext) and the now-dead
shouldStartAtCharacterSelectOnLaunch helper (always returned false).
- Tests: rewrite startup-phase-hydrate.initial-tab.test.ts to assert a root
boot lands in chat and never character-select; delete the obsolete
character-select handoff test; drop the justCommitted assertions from
first-run-completion-persist; assert no character-select surface in the
cloud-only onboarding e2e.
- IN_CHAT_ONBOARDING_DESIGN.md: document the final chat-first landing.
Closes #14362
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…y onboarding (#14950) * fix(#14362): remove one-time character-select landing after cloud-only onboarding Cloud-only onboarding ends with completeFirstRun("chat"), but a later re-hydrate could route the first post-onboarding boot to the full-screen character-select view once (via a session-scoped justCommitted ref, #13396). Two surfaces fought for the first post-onboarding impression, contradicting the one-obvious-path / chat-first doctrine. The agent is auto-provisioned/adopted in cloud-only mode and character customization is reachable from Settings/launcher, so the automatic landing is removed: - startup-phase-hydrate.ts: drop the character-select branch; a root boot lands on the default tab (chat) and a deep-linked URL still wins. The dead firstRunCompletionJustCommittedRef / firstRunCompletionCommittedRef fields leave HydratingDeps (runHydrating no longer reads either). - Remove the justCommitted plumbing end to end (useFirstRunState, useFirstRunCallbacks, AppContext) and the now-dead shouldStartAtCharacterSelectOnLaunch helper (always returned false). - Tests: rewrite startup-phase-hydrate.initial-tab.test.ts to assert a root boot lands in chat and never character-select; delete the obsolete character-select handoff test; drop the justCommitted assertions from first-run-completion-persist; assert no character-select surface in the cloud-only onboarding e2e. - IN_CHAT_ONBOARDING_DESIGN.md: document the final chat-first landing. Closes #14362 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * test(app): align cloud-only onboarding assertions --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Summary
Fixes #13371 by separating two first-run completion signals that had been sharing one ref:
completionCommittedRefremains the durable recovery signal seeded fromeliza:first-run-complete.completionJustCommittedRefis a new in-memory one-shot handoff for the immediate post-onboarding character-select route.Startup hydration now consumes only the one-shot ref for
character-select, so a cold relaunch with persisted first-run completion lands on the normal default tab instead of replaying character select every launch.Evidence
Added
.github/issue-evidence/13371-character-select-once.md.Commands run locally from
/tmp/eliza-13371:bun run --cwd packages/ui test src/state/startup-phase-hydrate.character-select.test.ts src/state/first-run-completion-persist.test.tsxbunx @biomejs/biome check packages/ui/src/state/useFirstRunState.ts packages/ui/src/state/useFirstRunCallbacks.ts packages/ui/src/state/startup-phase-hydrate.ts packages/ui/src/state/AppContext.tsx packages/ui/src/state/first-run-completion-persist.test.tsx packages/ui/src/state/startup-phase-hydrate.character-select.test.ts --no-errors-on-unmatchedbun run --cwd packages/ui typecheckgit diff --checkAudit / device evidence gap
bun run --cwd packages/app audit:appwas attempted but failed before screenshots because the local Node executable is too old:/opt/homebrew/bin/nodeisv23.3.0/usr/local/bin/nodeisv18.13.0Invalid ELIZA_NODE_PATH=/opt/homebrew/bin/node: Node.js 23.3.0 is too old.This PR should not be merged as fully evidenced until app audit and/or simulator relaunch evidence is captured on a Node 24-capable runner.