feat(feedback): FleetCrown users can finally report bugs in FleetCrown - #472
Merged
Conversation
Asked directly: where is the feedback widget on FleetCrown itself, and how
does a user give feedback about the site they are using? Measured on the
live app — feedbackWidgetPresent: false, no widget script loaded at all.
The only thing in the corner is the Loki assistant button.
The widget was scoped to eleven public marketing routes by an allowlist
whose comment gave two reasons. Both were checked:
"the FAB would collide with the app shell's mobile nav"
True when written, and fixed earlier today. The widget now measures its
corner and steps aside — rectangle matching for the desktop Loki FAB
(56px at bottom:28, which the feedback FAB overlapped exactly), and an
interactive hit-test below 480px for the mobile nav, which is inset-x-3
and therefore too wide for the rectangle scan to treat as an obstacle.
"in-app feedback already has Loki"
Not true. insertSiteFeedback has exactly one caller — the widget's
ingest route — and the word "feedback" does not appear in loki-core.ts.
Telling the assistant "this button is broken" produces no site_feedback
row, nothing in the triage inbox, nothing dispatchable. A signed-in
user's only option was to tell the operator out of band.
So the rule is inverted: render everywhere EXCEPT a short list, each entry
carrying its reason — /terminal (a FAB over live PTY output covers what you
are reading), the auth routes (you are not in the product yet), and
/docs/feedback-widget (a launcher on the page documenting launchers is an
unanswerable "is this yours or the demo's?").
An allowlist meant every new page shipped with no way to report a bug on
it, and nobody noticed, because a missing feedback channel is invisible
exactly the way the problems it would have caught are.
PublicFeedbackWidget is now DogfoodFeedbackWidget: it is no longer public-
only, and a name that says otherwise is the kind of stale label this page
already had too much of.
Pinned by scripts/test/feedback-widget-reach.ts (42 assertions): every app
surface reachable, public ones still reachable, exclusions excluded
including nested paths, near-misses like /terminals and /settings NOT
swallowed by prefix matching, the widget mounted from the root layout so
new pages inherit it, and loki-core still unable to file feedback — the
premise that justified the old scoping.
Proven by mutation: restoring a public-only allowlist turns 20 assertions
red, including every app surface.
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.
Asked directly: where is the feedback widget on FleetCrown itself, and how does a user give feedback about the site they are using?
Measured on the live app —
feedbackWidgetPresent: false, no widget script loaded at all. The only thing in the corner is the Loki assistant button.A signed-in FleetCrown user has had no way to report a bug in FleetCrown.
The allowlist, and its two reasons
The widget was scoped to eleven public marketing routes. Its comment gave two justifications; both were checked:
insertSiteFeedbackhas exactly one caller — the widget's ingest route — and the word "feedback" does not appear inloki-core.ts. Telling the assistant "this button is broken" produces nosite_feedbackrow, nothing in the triage inbox, nothing dispatchable.On the collision: the desktop Loki FAB is 56px at
bottom:28/right:28, which the feedback FAB atbottom:16/right:16overlapped exactly — rectangle-matching auto-avoid now steps it up. The mobile nav isinset-x-3(~94% of viewport), deliberately too wide for the rectangle scan to treat as an obstacle, so the ≤480px interactive hit-test catches its nav links instead. Both paths covered.Inverted the rule
Render everywhere except a short list, each entry carrying its reason:
/terminal— a floating button over live PTY output covers what you are reading/docs/feedback-widget— a launcher on the page that documents launchers makes "is this yours or the demo's?" unanswerableAn allowlist meant every new page shipped with no way to report a bug on it, and nobody noticed — because a missing feedback channel is invisible in exactly the way the problems it would have caught are.
PublicFeedbackWidget→DogfoodFeedbackWidget: it is no longer public-only, and a name saying otherwise is the stale labelling this area already had too much of.Verification
scripts/test/feedback-widget-reach.ts— 42 assertions:/control,/projects,/today,/loki, …)/terminals≠/terminal,/settingsis an app page)loki-corestill cannot file feedback — the premise that justified the old scopingProven by mutation: restoring a public-only allowlist turns 20 assertions red, including every app surface.
npm run verifyexits 0.