Skip to content

feat(APP-1004): address the assistant design feedback round 2 - #1350

Merged
tyhonchik merged 3 commits into
mainfrom
app-1004-ai-assistant-iteration-based-on-feedback-v2
Sep 4, 2026
Merged

feat(APP-1004): address the assistant design feedback round 2#1350
tyhonchik merged 3 commits into
mainfrom
app-1004-ai-assistant-iteration-based-on-feedback-v2

Conversation

@tyhonchik

Copy link
Copy Markdown
Contributor

This addresses Evan's second feedback round on the support assistant (APP-1004, comment). Previously the panel's icon controls were bespoke tooltip buttons, the email escape hatch was an underlined in-tab link, typing the first character of a fresh chat bounced the welcome layout, and the created-ticket card linked out to Linear. Now every control is a gov-ui-kit button, the link follows the app's plain link style in a new tab, the layout holds still, and nothing in the chat references Linear URLs — the ticket travels as a reference, not a link.

Changes

  • Linear links removed end to end. createTicketToolOutputSchema drops url at the contract level: users have no access to the workspace, and anything in the tool output also reaches the model, which would narrate the link into the chat. The service (createLinearTicket, linearGateway, sessionStore), the success card and the past-requests view now carry only the ticket identifier, rendered as a Tag. Stored tickets and localStorage history entries from before the change still parse — the stale field is stripped, not rejected.
  • Header and composer controls on gov-ui-kit. New chat, collapse, back and add-attachment become Button (tertiary/sm, icon-only) and lose their tooltips — the accessible name moves to aria-label. The send/stop controls keep their bespoke shape (no matching IconType for the arrow/square glyphs).
  • "Email support" follows the plain link style. No underline, LINK_EXTERNAL icon, target="_blank" — clicking it no longer risks navigating the app tab. Styled after the gov-ui-kit Link rather than using it: its smallest type scale is too large for the caption line under the composer.
  • Typing no longer bounces a fresh chat. The suggestion chips used to unmount on the first character (and remount when the draft was cleared), shifting the composer and the welcome heading. They now retire through visibility with their height kept.
  • Ticket card bottom margin. The card had mt-3 only, so assistant text following it in the same message sat against its border; it now carries symmetric my-3 with first:mt-0 last:mb-0.

Note

Point 1 of the feedback (header not lined up with the navbar) is already fixed on main by #1303, which merged after the comment was written — measured live with Playwright on a DAO page: both bottom borders sit at exactly 91px. No change here.

The PR spans both release scopes, so it carries two changesets: @aragon/assistant-chat minor + @aragon/app patch, and @aragon/assistant patch + @aragon/assistant-contracts minor. Until the assistant service redeploys it keeps sending url in the tool output — the widget ignores the extra field, so the two can ship in either order.

🤖 Generated with Claude Code

@tyhonchik
tyhonchik requested a review from a team as a code owner August 31, 2026 12:38
@linear-code

linear-code Bot commented Aug 31, 2026

Copy link
Copy Markdown

APP-1004

@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown

🚀 Preview Deployment: View Here
🤖 Assistant Preview: View Here (app preview points at it)

@github-actions

github-actions Bot commented Aug 31, 2026

Copy link
Copy Markdown

E2E results (preview)

Smoke

Base URL https://app-next-5f6s0ec3r-aragon-app.vercel.app
Suite smoke
Playwright result ❌ failed
Summary 80 passed, 2 failed
HTML report View report
GitHub job ✅ completed

View run #5122

thekidnamedkd
thekidnamedkd previously approved these changes Sep 2, 2026

@thekidnamedkd thekidnamedkd left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🎨

@tyhonchik
tyhonchik force-pushed the app-1004-ai-assistant-iteration-based-on-feedback-v2 branch from 37fc879 to ab22ab3 Compare September 2, 2026 15:13
@tyhonchik
tyhonchik force-pushed the app-1004-ai-assistant-iteration-based-on-feedback-v2 branch from ab22ab3 to e359bab Compare September 2, 2026 15:21
@tyhonchik
tyhonchik force-pushed the app-1004-ai-assistant-iteration-based-on-feedback-v2 branch from e359bab to 15a897f Compare September 2, 2026 16:05
@tyhonchik
tyhonchik force-pushed the app-1004-ai-assistant-iteration-based-on-feedback-v2 branch from 15a897f to 559ebaf Compare September 2, 2026 16:07
tyhonchik and others added 3 commits September 4, 2026 15:44
The header and composer controls (new chat, collapse, back, add
attachment) become gov-ui-kit buttons and drop their tooltips, the
"Email support" escape hatch follows the app's plain link style — no
underline, an external-link icon, opening in a new tab — and typing in
a fresh chat no longer bounces the layout: the suggestion chips retire
through visibility instead of unmounting. The ticket card gains a
bottom margin so text following it in the same message no longer sits
against its edge.

Nothing links to Linear anymore: the createLinearTicket tool output
drops the issue URL at the contract level — users have no access to
the workspace, and anything in the output also reaches the model,
which would narrate the link into the chat. The success card and the
past-requests view quote the ticket reference instead; stored tickets
and history entries from before the change still parse, the stale
field is stripped.
…e it when none do

The AI Gateway fails a call over to the next model when the upstream errors.
The failure actually seen in production is the opposite: the provider accepts
the call and goes quiet, so nothing errors and nothing fails over. The assistant
logs have the same prompt on the same provider answering in 1.0s, 1.7s and 2.3s,
then once in 47.8s, then once not at all. No AI SDK timeout helps either — every
one of them (totalMs, stepMs, firstChunkMs, chunkMs) aborts the shared signal,
and an abort is not an error, so neither the SDK's retries nor the Gateway's
fallback react to it.

So the stall becomes a failover here: a turn now runs on the first model that
actually starts answering. A model that produces no content within its deadline
is abandoned for the next one, which is invisible to the user (no content had
arrived) and cannot duplicate a ticket (no tool had run). The chunks read while
waiting are replayed in front of the returned stream. The deadline is measured
by reading the attempt — streamText produces nothing until its stream is pulled,
so an onChunk callback would never fire in time.

When every model stays silent, the wall-clock cap ends the turn, and that no
longer fails silently either. The SDK closes such a stream with an `abort`
chunk, which the widget renders as nothing at all: an empty message, no error,
nothing in Sentry. It is now rewritten into a `timeout` error the widget can
show, reported, and the turn is refunded so a retry does not cost the user
twice. A stop from the composer aborts the stream the same way and is left
alone.

Also updates the support-chat smoke test to the ticket card this branch ships:
the identifier is a reference now, not a link out to Linear.
@tyhonchik
tyhonchik force-pushed the app-1004-ai-assistant-iteration-based-on-feedback-v2 branch from 578286d to f2421c3 Compare September 4, 2026 13:49

@milosh86 milosh86 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@tyhonchik
tyhonchik merged commit 242489f into main Sep 4, 2026
21 checks passed
@tyhonchik
tyhonchik deleted the app-1004-ai-assistant-iteration-based-on-feedback-v2 branch September 4, 2026 15:05
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.

4 participants