Frontend-wide sweep replaces generic empty/loading/error strings with action-oriented copy
A 25-file frontend pass rewrites the generic developer-default strings that ship in the upstream codebase. Empty states now describe what the user can do, not what's absent. Error boundaries grow a working Try Again button. Loading strings name what's actually happening.
The most functionally significant change is in error.tsx and global-error.tsx. Previously a Next.js error boundary rendered a dead page with no recovery path. Now it surfaces Next's reset() function as a Try Again button alongside a return-home link and the message "Gary hit a problem." This is a real usability fix - users get a recovery path instead of a wall.
On the empty-state side: the tabular reviews page now reads "No reviews yet" instead of "Tabular Reviews" when there are no entries, the subtitle describes what a tabular review does ("Gary fills a table with parties, dates, key terms, risks, and anything else you ask for"), and the "No reviews found" fallback for empty search results becomes "Nothing matched that search or filter." Similar rewrites hit the documents list, projects page, sidebar chat history, and workflow modal. "Processing..." becomes "Reading the document...". "Upload files" becomes "Uploading your document..." in the upload spinner.
Alert and save-failure strings are softened throughout: alert("Failed to save ${label}.") -> alert("Could not save your ${label}. Try again.") consistently across account, models, and project creation flows.
No backend changes, no removed functionality, no console log changes. The product name "Gary"/"GaryOSS" is embedded in some of the new strings, particularly the error boundary and a handful of empty states.
Spotted something wrong? Or know the PR text has fresher detail than the writeup above?