Users building a Skill, removing a chat member, or disconnecting an
integration hit destructive actions with zero confirmation, or copy that
contradicts what the code does. Fifty-nine issues span all eight units,
with Trust & Credibility scoring weakest at 52/100. Chat's
optimistic model-selection revert and Workflows' schedule-preview
sentence show the product can calibrate feedback well when it tries.
This audit covers 8 live surfaces — Chat conversation, Conversation
list & nav rail, Skills & Apps marketplace, App & Skill
builder, Command Center triage, Calendar & calls, Workflows, and
Permissions/connections/vault — plus a cross-cutting consistency pass
across all of them. Domain packs active: High-Stakes
(destructive/access-granting actions present in nearly every unit),
Product & Growth (marketplace/builder), Accessibility (always
on).
Dimension scores
Dimension
Weight
Score
Summary
Cognitive Load
0.18
74
Most units chunk into 5–8 groups with progressive disclosure
(BuildConfirmDialog, MarketplaceHero); the weak spots are ChatInput's
~13 always-visible composer controls and ConvergenceRailLayout's 7 flat
nav rows sitting above the conversation list.
Visual Hierarchy
0.15
77
Strongest dimension — Send button, Workflows' shared
PageHeader/BTN_PRIMARY/SectionHeading system, and RailRow's fill+weight
combo each give one clear focal point; Calendar's competing LIVE badge
and equal-weight card actions are the main dents.
Trust & Credibility
0.18
52
Weakest dimension — Marketplace and Builder both contradict their
own "build it right here, in your workspace" copy the instant a build
starts (BuildProgressPanel.tsx:58); Workflows' "pauses for approval"
subtitle is untrue for ordinary send workflows;
disconnect/kick/uninstall fire with zero confirmation across three
units.
Action Clarity
0.15
67
Single-CTA discipline holds within most units (Send, Add/Update,
BTN_PRIMARY), but three unrelated hand-rolled "primary/confirm" button
treatments compete product-wide, and several time-sensitive controls
(Join, checkbox, refresh) render under the 44px target.
Information Scent
0.12
73
Labeling is generally predictive (ChatInput's full aria-label
coverage, Workflows' plain-language triggerChips), but an "Update
available" badge and an "Install to a room" menu item both advertise
actions with no click path wired to them.
Error Resilience
0.12
56
Resolve, model-revert, and failed-build retry show real recovery
patterns, but snooze/dismiss, workflow-create failure, and
disconnect/uninstall all skip the undo or confirmation their closest
siblings (Resolve, Delete-message) get.
Emotional Design
0.10
68
Breathing-pip progress and reassuring micro-copy calibrate well
against stakes in Workflows and Command Center, but the mid-build
redirect away from the workspace and no-consent call recording create
real anxiety spikes.
Strongest: Visual Hierarchy (77). Weakest:
Trust & Credibility (52). Spread check: σ = 8.7 —
clears the ≥8 anti-clustering threshold; scores are not anchored.
Per-unit scores
Unit
Score
Grade
Declared dimensions
Packs
Findings
Chat conversation
67
C
Error Resilience, Trust & Credibility, Cognitive Load,
Information Scent
High-Stakes (destructive actions), Accessibility
5
Conversation list & nav rail
71
B
Cognitive Load, Information Scent, Action Clarity, Error
Resilience
Trust & Credibility, Error Resilience, Action Clarity,
Information Scent
High-Stakes, Accessibility
6
No unit is flagged uniform — every unit's 7 dimensions spread by more
than 8 points, so none required a "this is genuinely level" defense.
Cross-cutting theme (not a routed surface — a
consistency pass across the 8 units above): cognitiveLoad 58,
visualHierarchy 55, trust 35, actionClarity 50,
infoScent 68, errorResilience 48, emotionalDesign 52. This is the lowest
trust score anywhere in the audit: high-stakes trust actions (vault
save, disconnect) stay silent while low-stakes ones get toasts with
Undo, and the "confirm ceremony" is inverted — a free, reversible create
action gets a full modal while harder-to-reverse remove/disconnect
actions fire from a bare text button. 7 findings (xc-1…xc-7), all folded
into the severity-sorted list below.
Findings (59,
sorted by severity then task-impact)
What: BuildConfirmDialog tells users the agent
"will build it right here, in your workspace," but this effect fires
navigateToRoom the instant a room ID resolves, redirecting
away from the marketplace seconds after confirming.
Principle: Cognitive Dissonance
Fix: Stop auto-navigating; keep BuildProgressPanel
mounted and let users click an explicit "Open room" button.
Effort: medium — Votes: 2/2
P0
Workspace copy is contradicted the instant a build starts
Unit: builder
Where:src/app/[slug]/social/skills-and-apps/_components/BuildProgressPanel.tsx:58
(wired via SkillsAndAppsMarketplace.tsx:563)
What: The instant roomId is set, this
effect calls navigateToRoom, which
router.replace()s the browser out of the marketplace into
the chat room, contradicting the dialog copy shown seconds earlier.
Principle: Cognitive Dissonance
Fix: Remove the automatic onOpenRoom
call; offer an explicit "View live conversation" link instead.
Effort: medium — Votes: 2/2
P0 AI
records and transcribes with no consent step
What: The only signal a call is being captured is
an ambient "Live meeting stream" label shown after listening has already
started; no explicit consent step exists anywhere before
recording/transcription begins.
Principle: Error Prevention
Fix: Add an explicit one-time notice or opt-in
before the first AI-listened call.
What: An empty catch block just stops
the spinner on failure — no error text — and
CreateWorkflowView.tsx:1149 already deleted the
localStorage draft before the call resolved, so the built workflow
vanishes unexplained.
Principle: Error Recovery
Fix: Surface e.message from the catch
block and delete the local draft only after success.
What: The page subtitle claims every workflow
pauses for approval, but the active step palette has no approval block
and "sends-message" is tagged tone "send," not "gate" — an ordinary send
workflow runs unattended.
Principle: [HS] Friction Calibration
Fix: Restore an addable approval block, or soften
the subtitle to only describe workflows with a gate.
Effort: high — Votes: 3/3
P0
"All"-secrets vault grant applies with one click
What: Clicking "All" optimistically grants a tool
access to every stored secret at once with no confirmation, despite
being the widest-blast-radius option next to "Selected" and "Deny."
Principle: [HS] Friction Calibration
Fix: Require a brief inline confirm before
switching a tool's vault grant to "All."
Effort: medium — Votes: 3/3
(severity corrected)
P1 — Major (11)
P1
Removing a member fires instantly with no confirmation
Unit: chat
Where:src/app/[slug]/social/_components/chat/RoomMemberDialog.tsx:260
(menu item at line 529)
What: "Remove from group" calls the kick API
immediately with no confirm step, and silently also kicks the member's
paired agent bot — an admin loses two participants with no warning.
Principle: Error Prevention — no confirmation
before a hard-to-reverse action
Fix: Add a confirm step naming both the member and
their paired agent before kicking.
Effort: low — Votes: 3/3
P1
Delete-message dialog auto-focuses the destructive button
What: The dialog overrides Radix's default focus
onto the red "Delete" button and binds bare Enter to confirm, even
though the copy says "This cannot be undone."
Principle: [HS] Friction Calibration — irreversible
actions should not be the path of least resistance
Fix: Default focus to Cancel instead of
auto-focusing and Enter-binding Delete.
What: The parent wires state, a mutation, and a
dialog for scoped installs, but the only overflow menu has no "Install
to a room" item, so no click anywhere can ever open it.
Principle: Affordance
Fix: Add an "Install to a room…" item to
ItemActionsMenu calling the existing prop.
Effort: low — Votes: 2/2
P1 "Update
available" badge has no way to act on it
What:onRefine is accepted in props
but never called, and the overflow menu has no Update/Refine item, so
the visible upgrade signal has zero click path to the rebuild flow the
parent already implements.
Principle: Mental Models
Fix: Pass onRefine into
ItemActionsMenu as an "Update" item, or make the badge itself call
it.
Effort: medium — Votes: 1/2
P1 Agent
"question" state exists in UI but never fires
What: The fully-rendered "asking" phase (icon,
header copy, autofocused composer) is never assigned by
runLiveBuild/sendFollowUp, so a build needing
clarification has no way to surface it.
Principle: Visibility of System Status
Fix: Add a message listener that flips phase to
"asking" when the agent posts a question.
What: Resolve gets a persistent toast with Undo,
but snoozing/dismissing the same card only plays a 600ms in-card label
before the item disappears for good.
Principle: User Control & Freedom
Fix: Call the shared toast with an Undo action from
handleSnooze and handleDismiss.
What: The full recap/scribe panel is a raw fixed
div with no scrim, no role="dialog", no focus trap, and no
Escape-to-close — keyboard focus can tab into the interactive background
behind it.
Principle: Gestalt Figure-Ground
Fix: Wrap the panel in the existing Radix Dialog,
or add a scrim, role, and focus trap.
What: The history error state is static text with
no retry button, unlike the transcript fetch elsewhere in the same
panel, which does show one — recovery requires an unlabeled window
refocus.
Principle: Error Recovery
Fix: Add a visible Retry button that calls the
existing refetch from useCallsHistoryQuery.
What: The primary "Run" button renders in the page
header while the step-cards preview of what will actually happen renders
below it, so a link recipient can hit Run before seeing the step
list.
Principle: F-Pattern
Fix: Render the step-cards preview above the Run
button.
Effort: low — Votes: 3/3
P1
Disconnect revokes access with zero confirmation
What: The plain-text "Disconnect" button calls
delete-connection the instant it's clicked — no confirm step, unlike
DeleteSecretsConfirmModal's explicit "cannot be undone" pattern for a
comparable action.
Principle: Irreversibility Signals
Fix: Add a Radix confirm dialog mirroring
DeleteSecretsConfirmModal before disconnecting.
What: The component literally starts with
return null;, so it never renders; when the cap disables
the composer the only cue is a disabled input and a native tooltip.
Principle: Visibility of System Status / Error
Recovery
Fix: Remove the dead return null; so
the cap message and upgrade CTA render above the composer.
Effort: low — Votes: 3/3 (severity
corrected)
P2
Composer toolbar shows nine formatting icons at all times
What: All nine rich-text formatting buttons render
unconditionally above every message, adding persistent chrome that
competes with typing and sending.
Principle: Progressive Disclosure
Fix: Collapse rarer formatting behind a single "…"
overflow, keep bold/italic/link inline.
What: The dismiss icon is invisible
until hover, but this component mounts full-screen on touch viewports
with no hover, so the control never becomes reachable there.
Principle: Fitts's Law
Fix: Show the dismiss control at reduced opacity by
default; reveal via (hover: none)/focus-within.
Effort: low — Votes: 3/3
P2
All-chats panel text fails contrast on dark surface
What:placeholder:text-content-tertiary (also lines 175, 181)
resolves to rgba(255,255,255,0.35) over --surface-1
#0d1117, computing to ≈3.2:1 — below the 4.5:1 AA minimum for this
~11–14px text.
Principle: Accessibility Contrast
Fix: Swap text-content-tertiary for
text-content-secondary (or --text-2) on this
panel's text.
What: With every feature flag on, users scroll past
up to 7 undifferentiated nav rows before reaching agents/people/groups —
competing for scroll space with the rail's namesake purpose.
Principle: Miller's Law
Fix: Group the app-destination rows under one
collapsible "Apps" header.
What: Clicking any room name instantly installs the
item and grants everyone in that room access — no secondary confirm,
unlike ShareDialog's own grant flow.
Principle: Consistency & Standards
Fix: Select a room first, then require a separate
"Confirm" button, mirroring ShareDialog.
Effort: low — Votes: 1/2
P2
Uninstall removes instantly with no confirmation
What: Removing any item — including a self-built,
unpublished app — fires immediately, while the analogous Share flow
requires a full "Remove sharing?" confirmation.
Principle: Error Prevention
Fix: Add a confirm step before uninstalling,
reusing ShareDialog's confirm-footer pattern.
Effort: low — Votes: 2/2
P2
Primary build button is smaller than a touch target
What: After a build completes, the panel offers
only a preview toggle and refine composer — no Publish action — so a
successful build's peak moment lands flat.
Principle: Peak-End Rule
Fix: Add a primary "Publish" button next to Open
preview that opens the existing PublishDialog.
What: A guard ref is set on the first run
regardless of whether history has loaded, and the effect never re-fires
once history resolves, leaving a generic "Recap" header
permanently.
Principle: Visibility of System Status
Fix: Re-run enrichment once history loads, keyed on
whether a match was found.
What: Name, room, and flow-step errors only render
after the Create button is pressed, so a user filling this long form
gets no feedback until the end.
Principle: Error Prevention
Fix: Validate required fields inline on blur
instead of gating errors on a submitted flag.
What: Deleting one workflow opens a Radix dialog
warning it can't be undone; deleting several via selection mode just
relabels the same pill button with no irreversibility copy.
Principle: Consistency & Standards
Fix: Reuse the single-item confirm dialog,
including its undo warning, for bulk delete too.
What: This confirmation is a plain div with
role="dialog" sitting inline in the page — no scrim, focus
trap, or Escape handling — announcing as a dialog to assistive tech
while behaving like ordinary content.
Principle: Gestalt Figure-Ground
Fix: Wrap this warning in the existing Radix Dialog
component used elsewhere in the file.
Effort: low — Votes: 3/3
P2
Add-key Save enables before name format is valid
What: The footer button enables on any non-empty
name, but the actual regex format check runs only inside handleSave, so
a format error surfaces only after clicking Save.
Principle: Error Prevention
Fix: Run the name validator on change and keep Save
disabled until it actually passes.
What: The disabled, always-checked "Access level"
row reuses the shared interactive Radio component, so hovering the
single non-changeable option still highlights it as though
selectable.
Principle: Affordance
Fix: Replace the disabled Radio with a static
read-only label or badge.
Effort: low — Votes: 3/3
P2
Icon-only connect button has no accessible name
What: The Plus-icon-only button that starts an
OAuth connect flow has no aria-label and no visible text, so
screen-reader users hear only "button" for an access-granting
action.
Principle: Dual Coding
Fix: Add aria-label={\Connect
${task.title}`}` to the connect button.
Effort: low — Votes: 3/3
P2
High-stakes trust actions stay silent; low-stakes ones get toasts
What: Saving a vault secret and disconnecting an
integration give zero success/failure toast, while comparable or
lower-stakes chat/Command Center actions fire a toast, often with
Undo.
Principle: Visibility of System Status
Fix: Wire vault-save and disconnect outcomes into
the shared toastStore.
Effort: low — Votes: 3/3 (severity
corrected)
P2
Confirm ceremony inverted: cheap actions get a modal, costly ones
don't
What: A full Radix modal guards a free, reversible
create action, while harder-to-reverse revoke-access and remove-member
actions fire from a bare text button with no modal.
Principle: [HS] Friction Calibration
Fix: Reserve modal ceremony for higher-consequence
actions; add a lightweight confirm to disconnect/remove instead.
Effort: medium — Votes: 3/3
(severity corrected)
P2
Three unrelated button systems play the role of "primary CTA"
What: Three different confirm-button treatments
(colors, radii, type scale) each hand-roll the "commit this action"
button; the shared PrimaryButton is imported in only one file across all
8 units.
Principle: Consistency & Standards
Fix: Route all primary/destructive confirm buttons
through one shared button component or token set.
Effort: medium — Votes: 3/3
P2
Four competing loading-skeleton treatments across units
Unit: cross-cutting
Where:src/app/[slug]/social/workflows/_components/WorkflowLoadingPlaceholder.tsx:60
(vs. ui/skeleton.tsx and two bespoke pulse divs)
What: Four different signifiers exist for the same
"content incoming" state: .animate-qs-skel, shadcn's
ui/skeleton.tsx, and two bespoke bg-wash animate-pulse
divs.
Principle: Consistency & Standards
Fix: Standardize every list/card loading state on
one shared skeleton primitive.
Effort: medium — Votes: 3/3
P2
Only marketplace survives a render crash without losing the shell
What: Only the marketplace scopes a local
ErrorBoundary with an in-place "Reload" fallback; workflows, calendar,
chat, and trust-control fall through to the app-wide boundary, which
replaces the entire UI and loses the session.
Principle: Error Recovery
Fix: Add the same scoped ErrorBoundary-with-Reload
pattern around the other units.
Effort: medium — Votes: 3/3
P2
Legacy tertiary-text token fails contrast on two trust-control
screens
What:text-content-tertiary at 12–13px
computes to roughly 3.2–3.4:1 against the surface hexes in the token
reference — below the 4.5:1 AA minimum for body text.
Principle: Accessibility Contrast
Fix: Swap text-content-tertiary for a
token that clears 4.5:1 on dark surfaces, or bump to
--text-2.
Effort: low — Votes: 3/3
P2
Same destructive-remove action confirms in chat, not in
trust-control
What: Message deletion gets a Radix confirm dialog,
but remove-member and disconnect — both at least as consequential — skip
any dialog, firing straight from a text button.
Principle: Consistency & Standards
Fix: Reuse the same confirm-dialog pattern for
every irreversible remove/disconnect action.
Effort: medium — Votes: 2/3
P3 — Minor (17)
P3
Model-selector button borrows the generic "more options" icon
What: The whole row renders as a native
<button>, then nests another interactive
role="button" span inside it — invalid nesting that can
confuse tab order and screen-reader traversal.
Principle: Constraints
Fix: Render the row as a <div>
with onClick/role="button" so dismiss is a
true sibling.
What: BuildConfirmDialog, PublishDialog and
InstallNameConflictDialog use legacy rounded-token-md/lg corners and
text-content-primary/secondary, while the rest of the flow uses
rounded-[14px] and text-content-1/3.
Principle: Consistency & Standards
Fix: Restyle these dialogs' radii and text colors
to match the rest of the flow.
What: An owner with both preview and live running
can see seven header actions in one unwrapped flex row,
which can overflow the dialog on narrower widths.
Principle: Miller's Law
Fix: Add flex-wrap (or horizontal scroll) to the
header actions container for owner-heavy states.
Effort: low — Votes: 2/2
P3
Close and send icons are too small to tap reliably
What: The header's Close button and the follow-up
send button both render well under the 44px accessibility hit-target
minimum, on a panel used repeatedly during refinement.
Principle: Accessibility Contrast
Fix: Pad both icon buttons to a 44px square hit
area without enlarging the glyph.
Effort: low — Votes: 2/2
P3 "Skip"
and "Close" silently disagree on your rating
What: With no tag selected, "Skip" submits the
already-registered thumbs-down while "Close" silently reverts it to
unrated — same context, opposite outcomes, neither label warns of the
difference.
Principle: Mental Models
Fix: Relabel "Close" to "Cancel rating," or make it
submit an empty-tag rating like Skip.
What: The Undo control for a resolved item hovers
to the app's error/destructive red, while equivalent Undo/Restore
controls elsewhere use a neutral hover — a safe action reads as
risky.
Principle: Color Psychology
Fix: Swap hover:text-danger for the
neutral hover used by other Undo/Restore controls.
What: The primary resolve control on every triage
card is a 16×16px box with no extra padding, well under the ~44px
tap-target guidance for a control clicked dozens of times per
session.
Principle: Fitts's Law
Fix: Wrap the checkbox in a larger invisible
hit-area without changing its visual size.
What: This dialog uses legacy AIC "icing" tokens
while every other Calendar surface uses Quiet Sky tokens, producing a
visibly different modal in the same flow.
Principle: Consistency & Standards
Fix: Restyle with the same Quiet Sky
content/surface tokens used elsewhere in Calendar.
What: Recap, Scribe note, and the Room-navigation
pill all use an identical pill style, so the card's most useful action
has no more visual pull than a navigation link.
Principle: Von Restorff Effect
Fix: Give the Recap button a slightly stronger fill
or weight than the other pills.
Effort: low — Votes: 3/3
What's working
Chat — MessageActionsToolbar/Menu
(MessageActions.tsx) pairs every icon-only button with an
aria-label and tooltip, and the full context menu repeats the same
actions with visible text. Dual Coding
Chat — A failed optimistic message shows an
AlertCircle plus a Retry/Delete dropdown right on the bubble
(MessageBubble.tsx:1312-1363). Error Recovery
Chat — Model selection applies optimistically, then
reverts with a specific message if no ack arrives within 3s
(ChatPanel.tsx:3357-3386). Visibility of System
Status
Conversation list — Current-location logic
precisely reconciles soft navigation with the URL so the active-row
highlight never drifts (ConvergenceRailLayout.tsx:613-677).
Mental Models / Jakob's Law
Conversation list — The active row is marked with
both a background fill and a font-weight change, plus a press-scale
animation on every row. Dual Coding + Feedback
Conversation list — Dismiss/hide and delete-section
actions are reversible account-data toggles, not real deletes, so
skipping a confirm dialog there is genuinely well-calibrated.
Friction Calibration
Marketplace — accessNoteForType gives
an honest, type-derived explanation of what a capability can access
instead of fabricating a permissions scope. Match Real
World
Marketplace — primaryActionLabel keeps
every card/row/detail CTA to one scannable verb (Add/Added/Update/Open
app). Recognition over Recall
Marketplace — ShareDialog requires an explicit
"Confirm" click to grant access and a "Remove sharing?" confirm before
revoking it. Error Prevention
Builder — BuildConfirmDialog makes building a
deliberate, correctable, type-visible two-step act rather than firing an
autonomous agent on a bare Enter. [HS] Friction
Calibration
Builder — Completion detection layers a room-state
poll, a gateway-event fallback, and a 90s "still working" hint, so a
slow build never goes silent. Visibility of System Status
Command Center — RatingBar uses proper
role="radiogroup"/role="radio" semantics with
aria-labels, collapsing to a single labeled "Rated: X" button.
Recognition over Recall
Command Center — Resolving a waiting item pairs
optimistic UI with a persistent toast and Undo. User Control &
Freedom
Calendar — The empty history state explains in
plain language what will appear there instead of a bare blank panel.
Match Real World
Calendar — NewCallMenu's three creation intents
each pair a distinct icon with a plain-language label that predicts
exactly what happens next. Dual Coding
Workflows — Select.tsx keeps a real,
focusable native <select> under its custom chrome, so
keyboard nav and screen readers stay platform-correct. Jakob's
Law
Workflows — ScheduleBuilder replaces raw cron entry
with pickers and a live-language preview sentence. Tesler's
Law
Workflows — WorkflowRunPanel's live checkpoint only
flips to approved after the server confirms, avoiding an
optimistic-looking gate. [HS] Irreversibility Signals
Trust-control — DeleteSecretsConfirmModal uses a
real Radix dialog with explicit "cannot be undone" copy before deleting
a secret. Irreversibility Signals
Trust-control — EditSecretModal clears each field's
error the moment the user edits it, placed directly beneath the field
that caused it. Change Blindness (feedback at point of
action)
Cross-cutting — ChatroomSection and
CommandCenterTab consistently route mutation feedback through the shared
toastStore, including Undo actions for reversible operations. User
Control & Freedom
Coverage & limits
This is a static-code audit: no mock/offline layer
exists and .env.local points at a live dev gateway, so
loading/empty/error/modal states were inferred from JSX and handlers,
not observed at runtime; every finding above names the state it occurs
in. No finding required an "unverified — check actual value" flag — all
contrast claims (e.g. chat-list-3, xc-6) are
computed WCAG ratios against the actual hex values in the token
reference, not estimates.
Every finding in this report — including the 7 cross-cutting
ones — faced an adversarial verification panel, and each finding above
carries its own vote count. 0 findings were killed (a finding
dies only when ≥2 lenses refute it). 13 findings had their severity
corrected by the severity lens during that pass (marked "severity
corrected" above): chat-1, chat-3,
calendar-1, calendar-4,
calendar-5, command-center-2,
command-center-3, command-center-4,
trust-control-1, trust-control-3,
trust-control-4, xc-1, xc-2.
Three caveats on that verification, and on this run:
The panel was 2 lenses, not 3, for marketplace
and builder. The gates verifier for
that pair died mid-response on an API error, so those 13 findings (vote
counts 2/2 and 1/2) were judged only by
reproduce and severity — they never faced the
quality-gates/anti-pattern lens. Treat them as one verification
short.
Two findings are contested, not confirmed:builder-2 (YoursRow.tsx:137) and
marketplace-3 (InstallToRoomDialog.tsx:159)
each carry 1/2 — one of their two lenses refuted them, and
they survived only because the kill rule needs two refutations. They are
the weakest evidence in this report.
marketplace-1 and builder-1 are
the same defect — both cite
BuildProgressPanel.tsx:58 under Cognitive
Dissonance, filed independently by the two units that share that
surface. The dedup pass missed it because the two agents wrote the path
differently (one repo-prefixed, one repo-relative). The 6 P0s therefore
cover 5 distinct issues.
Model: every agent in this run executed on Sonnet
5, not the planned Opus/Sonnet hybrid — the per-agent Opus overrides did
not take effect. The methodology's own guidance is that Sonnet-only runs
cluster scores toward the middle and surface more plausible-but-wrong
findings, so the severity calibration and band-matching here are weaker
than an Opus run would give. The line-level evidence is unaffected: all
59 cited file:line locations were independently confirmed
to exist and to contain the claimed element.
The following surfaces are unreachable code, not UX findings, and
carry no ticket: the _settings/** and
_upgrade/** page trees are private (underscore-prefixed)
App Router folders opted out of routing entirely — the live
settings/upgrade UI is instead
CoreSettingsModal.tsx/UpgradePlanModal.tsx.
The /[slug] root page (BotClient.tsx) is
redirected away by middleware before it can render.
social/calls and social/huddles are
redirect-only stubs with no UI of their own. Orphaned
UserAvatar.tsx/UpgradeButton.tsx links point
at these dead URLs and have zero live importers.