Have the Expert open the onboarding conversation - #8467
Open
cstns wants to merge 1 commit into
Open
Conversation
cstns
added this pull request to stack #8441
September 10, 2026 11:44
cstns
force-pushed
the
8369-open-conversation
branch
2 times, most recently
from
September 10, 2026 11:57
93f5f11 to
c96e33a
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## 8383-suppress-tour #8467 +/- ##
=====================================================
Coverage ? 76.88%
=====================================================
Files ? 460
Lines ? 24741
Branches ? 6596
=====================================================
Hits ? 19022
Misses ? 5719
Partials ? 0
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
cstns
force-pushed
the
8369-open-conversation
branch
from
September 10, 2026 12:21
c96e33a to
24f80de
Compare
cstns
force-pushed
the
8369-open-conversation
branch
from
September 10, 2026 12:26
24f80de to
283706e
Compare
cstns
force-pushed
the
8369-open-conversation
branch
from
September 10, 2026 13:07
283706e to
af69b91
Compare
The Expert speaks first on the onboarding page, so the frontend needs a way to start a turn the user has not typed. openConversation sends a turn with an empty query, the same shape resumeToolApprovals already uses, and the agent tells onboarding apart from ordinary support by the onboarding flag now carried on the context object. Two things it deliberately does not do. No user message is added, since the user has not said anything. And the session clock is left unstarted, so the 25 minute warning and 28 minute expiry begin when the user first replies rather than while they are still reading the opening question. The onboarding flag goes on both branches of the context getter: they build their objects separately, so a field added to one goes missing depending on load timing. It tracks the conversation rather than the deployment, staying true after the Expert moves the user into the editor and going false once onboarding is finished or skipped. Drops the hardcoded placeholder transcript that stood in while this was missing. A transcript holding only canned messages still counts as empty and gets cleared, so arriving from the drawer does not leave its greeting in the way, while a real conversation is left alone and picked up where it stopped.
cstns
force-pushed
the
8369-open-conversation
branch
from
September 10, 2026 13:53
af69b91 to
3933fad
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Expert speaks first on the onboarding page, so the frontend needs a way to start a turn the user has not typed.
Heads up for whoever reviews this
This is the first PR in the stack whose behaviour cannot be verified from the frontend side. It sends the opening turn and renders whatever comes back. Whether the Expert actually produces a sensible first turn for an empty query is the other half, and that lives in the expert flows (#8371), not here.
If the agent is not ready for it, nothing errors.
Verify inputaccepts an empty string, the fast-reply switch does not match it, and the turn goes to the LLM as an empty user message. So the page opens, the request goes out, a reply comes back and renders. It reads as working right up until you look at what the Expert actually said. A blank or confused first message is the failure mode, not a stack trace.So testing this means reading the opening turn, not just checking that one appears.
What it does
openConversationsends a turn with an empty query. That is not a new protocol:resumeToolApprovalsalready does exactly this, described in its own comment as "an ordinary chat request with no query". Worth noting the expert-sideVerify inputcheck turns out to be looser than #8371 assumed, it requiresqueryto be a string rather than to be non-empty, so an empty string already passes it today.Two things it deliberately does not do:
handleQueryalready starts the clock on the first turn where it is unset, so the user's first reply picks it up naturally.The
onboardingflag is added to both branches of the context getter. They build their objects separately, so a field added to one goes missing depending on load timing. It is sourced fromux.isOnboarding, which tracks the conversation rather than the deployment: it stays true after the Expert moves the user into the editor, and goes false once onboarding is finished or skipped, so a later ordinary chat is not treated as one. That settles the open question on #8370.Also drops
onboardingFixture.js, the hardcoded placeholder transcript that stood in while this was missing, along with its seeding call and the stale TEMPORARY comment. The drawer's canned welcome was already suppressed on this surface, so nothing else was hardcoded. The old guard is kept: a transcript holding only canned messages counts as empty and gets cleared, so arriving from the drawer does not leave its greeting in the way, while a real conversation is left alone, which is what makes the page resumable.Closes #8369
Closes #8370