Feedback: a rating picked then dismissed is never recorded
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 45/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- typescript, vite
- Domain
- analytics, frontend, testing-qa
Research direction
Start with FeedbackDialog and trackFeedback, then inspect the existing PostHog insights for feedback_submitted and the analytics memory pages on event-name tests and trustworthy counts. Review the event-name/property tests before deciding the event shape. Done means star-only dismissal records one final rating, note submission does not double-count it, and VITE_POSTHOG_KEY gating and dead-code elimination remain covered.
Written by the indexing model from the issue text.
Description
Decisions (2026-09-29)
- Two distinct event names, not one event with an
enrichedfollow-up. The existingfeedback_submittedevent keeps its name and its current properties (rating,category,feedback_text,wants_contact,email) so existing PostHog insights on it do not break; it gains one property,open_id. A new eventfeedback_rated(snake_case, matchingfeedback_submitted,parse_failed,llm_critique_raninsrc/lib/analytics.ts) records the rating. - The rating fires ONCE per dialog open, at the end of the open — not per star click. Mint an id when the dialog opens (
open_id). When the open ends with a rating selected — on submit, or on close/dismiss — firefeedback_ratedexactly once with{ rating, open_id, outcome }whereoutcomeis"submitted"or"dismissed". A rating changed before the open ends is simply the last value picked (last rating wins); nothing is emitted per click, so no downstream de-duplication is needed. An open with no star picked fires nothing. A hard tab-kill fires nothing; that loss is accepted (nopagehidebeacon). - Submit still fires
feedback_submitted(rating + note + email as today, plusopen_id), and also fires the singlefeedback_ratedfor that open (outcome: "submitted"). The two events are distinct, so the rating is not double-counted within either. - A star-only rating does not count as "submitted". It must not set
ocv_feedback_submitted(which putsFeedbackPanelinto its done state and stops it asking). Only a realfeedback_submittedsets the flag. The follow-up ask is already bounded: the panel demotes itself to the compact star strip after two views (FeedbackDialog.tsxdocblock). - Same behaviour for the inline nudge (
FeedbackNudge.tsx) if it has its own rating step: onefeedback_ratedper open, same shape.
Problem
FeedbackDialog only sends anything when a step-2 form is submitted: trackFeedback fires one feedback_submitted event carrying the rating, the note and the optional email together. A user who picks a star and then closes the dialog without writing anything sends nothing.
That discards the strongest signal we get from exactly the users least likely to fill in a free-text box. A 2★ followed by a close is a complete answer ("this didn't work for me"), and today it vanishes without a trace.
Found in the #912 research pass (writeup) and deliberately left out of #912 and PR #942, because fixing it changes the analytics event shape.
Implementation
src/lib/analytics.ts: add a pure, exported props builder and atrackFeedbackRated({ rating, openId, outcome })wrapper that callstrack("feedback_rated", …), mirroringbuildFeedbackProps/trackFeedback. Addopen_idtobuildFeedbackProps/FeedbackArgs. Both stay dead-code-eliminated whenVITE_POSTHOG_KEYis unset (they go throughtrack()).FeedbackDialog.tsx/useFeedbackDialog.ts(and the nudge, if applicable): mint the open id on open; hold the currently selected rating in state; on submit firefeedback_submitted+feedback_rated; on close/dismiss with a rating and no prior submit, firefeedback_rated(outcome: "dismissed"). Guard so a single open can never emitfeedback_ratedtwice (e.g. submit followed by the close handler).- Do not touch
ocv_feedback_submittedsemantics except to confirm a dismissed star-only open leaves it unset.
Acceptance criteria
- Picking a star and closing the dialog fires
feedback_ratedexactly once (outcome: "dismissed") and does NOT firefeedback_submittedor setocv_feedback_submitted - Submitting a note after a star fires
feedback_submittedonce andfeedback_ratedonce (outcome: "submitted"), sharing the sameopen_id; the rating is not double-counted - Changing the star before the open ends emits only the final value, and nothing is emitted per star click
- Opening the dialog and closing it with no star picked emits nothing
- Reopening the dialog mints a new
open_id -
feedback_submittedproperties are otherwise unchanged (existing insights keep working) - Analytics stays env-gated and dead-code-eliminated when
VITE_POSTHOG_KEYis unset - Event-name/property tests in
src/lib/analytics.test.tsandFeedbackDialog.test.tsxupdated alongside the shape change
- Dominant language
- TypeScript
- Stars
- 11
- Forks
- 4
- PR merge metrics
- No merged PRs in 30d
Getting set up
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from offlinecv/OfflineCV
-
fix(heuristics): unit number before a Saint-named city drops "St." from the locationPossibly taken @gaal-agent claimed this 12 days ago. Openbug gaal ux:parsing
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
-
Migrate Gaal implement/review/revise to the local gaal watch; keep mechanical workflows on ActionsOpenarchitecture chore github_actions needs-human ready-for-agent
Difficulty 5/5 Over a week Newbie friendliness 8/100
-
Parser: achievement year lost on re-import when '· YYYY' wrapped to its own linePossibly taken @gaal-agent claimed this 7 days ago. Openbug gaal ready-for-agent ux:parsing
Difficulty 3/5 1-2 days Newbie friendliness 25/100
-
Export: auto-bolded metric bullets extract one word per line in stream-order parsers (pypdf/Drive)Possibly taken @gaal-agent claimed this 7 days ago. Openbatch:export-standards bug gaal ready-for-agent ux:edit-export
Difficulty 3/5 1-2 days Newbie friendliness 25/100
-
bug duplicate improvement
Difficulty 3/5 Half a day Newbie friendliness 66/100
All issues in offlinecv/OfflineCV
Similar issues
-
[BUG] rag: sentence content can cross the reported sentence boundariesPossibly taken @LJK-ikun claimed this today. Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Maintainers usually reply within 1 day
-
bug needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
README: the Resource URI Schemas example's file://documents/* pattern only matches that literal URIOpen
Difficulty 1/5 Under an hour Newbie friendliness 88/100
platformatic/mcp#361 ·
Maintainers usually reply within 1 day
-
frontend
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Push: sem service worker ou sem VAPID, o interruptor de Notificações fica ligado sem avisar nadaOpen
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
melgarafael/DeskcommCRM#3164 ·
Maintainers usually reply within 1 day