The detection pipeline already returned result === 'not_vine' but the
app rendered it the same as a low-confidence positive, which was
confusing (a coffee cup classified at 35% would show up as "uncertain
vine"). Surface non-vine results explicitly across the app:
- New ScanStatus 'not_vine' branch in types/detection.getScanStatus()
- StatusTag, ScanListItem fill, MapBottomSheet row icon (HelpCircle)
and MapView marker color get a neutral grey palette for not_vine
- ResultScreen short-circuits to a centered "Aucune vigne détectée"
layout with a single CTA "Reprendre une photo" (instead of pretending
the model has a meaningful prediction to show)
- MapBottomSheet learns an isLoading prop and renders 4 row skeletons
while useHistory rehydrates, instead of flashing the "no plants" empty
state. MapScreen plumbs historyLoading through
Bundles the i18n additions (FR + EN) for this commit and the next
two: result.notVineTitle/Message, myPlants.status.notVine, plus the
network.* and scanner.galleryComingSoon* keys used by follow-up
commits — splitting JSON hunks would have been more churn than
signal.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>