pre torch.compile -chkpoint made
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
# 07. Post-Diagnosis Feedback Component (Accuracy / Unsure / Store Consent)
|
||||
|
||||
meta:
|
||||
id: multi-image-user-feedback-07
|
||||
feature: multi-image-user-feedback
|
||||
priority: P1
|
||||
depends_on: [multi-image-user-feedback-01, multi-image-user-feedback-06]
|
||||
tags: [ui, frontend, feedback]
|
||||
|
||||
objective:
|
||||
|
||||
- Create a feedback panel that appears after the diagnosis results, asking the user to rate accuracy (✓ / ✗ / ?) and optionally consent to storing their images for model retraining.
|
||||
|
||||
deliverables:
|
||||
|
||||
- `src/components/PostDiagnosisFeedback.tsx` — new feedback component
|
||||
- `src/components/ResultsDashboard.tsx` — updated to include feedback panel
|
||||
|
||||
steps:
|
||||
|
||||
1. Create `src/components/PostDiagnosisFeedback.tsx`:
|
||||
|
||||
Component structure (vertically stacked in a card):
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ 💬 How accurate was this diagnosis? │
|
||||
│ │
|
||||
│ [ ✅ Correct ] [ ❌ Incorrect ] [ ❓ Unsure ] │
|
||||
│ │
|
||||
│ ── (if Incorrect or Unsure selected) ── │
|
||||
│ What did you expect? (optional) │
|
||||
│ [_____________________________] text input │
|
||||
│ │
|
||||
│ ──────────────────────────────────────────── │
|
||||
│ │
|
||||
│ ☐ Allow us to store these images to │
|
||||
│ improve future diagnoses? │
|
||||
│ (Your privacy matters — images stored │
|
||||
│ securely and never shared) │
|
||||
│ │
|
||||
│ [ Submit Feedback ] → sent to /api/feedback │
|
||||
│ │
|
||||
│ ───── (after submission) ───── │
|
||||
│ ✓ Thank you! Your feedback helps us improve. │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
Props: `{ sessionId: string, imageIds: string[], predictedDiseaseId: string, userSpecies?: string, modelVersion: string, onSubmit?: () => void }`
|
||||
|
||||
States:
|
||||
- **Pending**: not yet rated, three large buttons (✓/✗/?)
|
||||
- **Rated**: accuracy selected, showing optional text input + consent checkbox
|
||||
- **Submitting**: loading spinner on submit button
|
||||
- **Submitted**: success message with thank-you text
|
||||
- **Error**: submission failed, retry button
|
||||
|
||||
Implementation details:
|
||||
- Accuracy buttons are large and touch-friendly (min 48px tap target)
|
||||
- Selected button fills with its color: green (✓), red (✗), amber (?)
|
||||
- Text input is an optional free-text field for user comments
|
||||
- Consent checkbox has a brief privacy notice below it
|
||||
- Submit button disabled until accuracy is rated
|
||||
- On submit, POST to `/api/feedback` with `DiagnosisFeedback` body
|
||||
- Animated transitions between states
|
||||
|
||||
2. Update `src/components/ResultsDashboard.tsx`:
|
||||
- Import and render `PostDiagnosisFeedback` at the bottom of the results area
|
||||
- Pass sessionId (generated from first imageId), imageIds, predictedDiseaseId, userSpecies
|
||||
- Show feedback panel after all prediction cards
|
||||
- If no predictions at all, still show feedback (they may want to tell us the model was wrong)
|
||||
|
||||
3. Handle edge cases:
|
||||
- Feedback submission fails → show inline error with retry
|
||||
- User refreshes page → already-submitted state persists if submission completed (could use sessionStorage)
|
||||
- Consent unchecked → still submit feedback (just with consent=false)
|
||||
- No predictions returned → show feedback anyway with "No disease identified" context
|
||||
|
||||
tests:
|
||||
|
||||
- Unit: all four states render correctly (pending/rated/submitting/submitted)
|
||||
- Unit: accuracy selection toggles correctly (only one selected at a time)
|
||||
- Unit: submit button disabled until accuracy is rated
|
||||
- Unit: consent checkbox unchecked by default
|
||||
- Unit: text input only shown when accuracy is "incorrect" or "unsure"
|
||||
- Unit: submission calls /api/feedback with correct payload shape
|
||||
- Integration: feedback flow from rating to submission to success
|
||||
|
||||
acceptance_criteria:
|
||||
|
||||
- Three accuracy rating buttons are always visible after results
|
||||
- Rating is required before submission
|
||||
- Optional text input appears for "Incorrect" or "Unsure" ratings
|
||||
- Consent checkbox allows opting in to image storage
|
||||
- Submit sends correct payload to /api/feedback
|
||||
- Success message shown after submission
|
||||
- Error state with retry if submission fails
|
||||
|
||||
validation:
|
||||
|
||||
- `npx tsc --noEmit` passes
|
||||
- Manual test: rate accuracy, type notes, toggle consent, submit
|
||||
- Manual test: verify API receives correct data
|
||||
- A11y: verify all interactive elements have accessible labels
|
||||
|
||||
notes:
|
||||
|
||||
- The `sessionId` ties together upload → identify → feedback for the same session
|
||||
- Privacy notice text should be reviewed for legal compliance
|
||||
- Consider adding a "Share with the community" option in a future iteration
|
||||
- Debounce the submit button to prevent double-submission
|
||||
Reference in New Issue
Block a user