This restores the interrupted stash work on a dedicated feature branch, including backend decoding support, Dockerized build scripts, and staging channel artifacts for end-to-end OTA validation.
Co-authored-by: Cursor <cursoragent@cursor.com>
Three card links (reports, git, tickets) match crash console styling with stronger hover lift; nginx serves index.html at /app/androidcast_project/ instead of redirecting to crashes.
Co-authored-by: Cursor <cursoragent@cursor.com>
The script lived under examples/crash_reporter/backend/scripts but pointed at examples/tmp/; smoke notes live at project root tmp/alpha_smoke_round1.txt.
Co-authored-by: Cursor <cursoragent@cursor.com>
Auth: :user() returns early when companies are cached, so requireTicketsTable() ran with no PDO and always failed. Always open the connection before checking tickets.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use SHOW TABLES/COLUMNS instead of information_schema so requireTicketsTable() works when the table exists but the app user cannot read metadata catalogs.
Co-authored-by: Cursor <cursoragent@cursor.com>
App user cannot CREATE TABLE on production MariaDB; add migrate-003-tickets.sh,
wire init-mariadb and base schema, and return 503 with migration hint when tickets
is missing instead of opaque SQL errors.
Co-authored-by: Cursor <cursoragent@cursor.com>
Tickets use a clipboard-with-check glyph instead of a document stack.
Locale control shows country flag only when the shell is collapsed,
and flag plus two-letter code when expanded (login always shows both).
Co-authored-by: Cursor <cursoragent@cursor.com>