Runner has no sudo binary but already runs as root, and no pipx. Call
apt-get directly and pip install --user semgrep instead.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Wrap GridLayout with WidthProvider (already ships with react-grid-layout, no
new dep) so tiles reflow to actual container width on resize/sidebar-collapse
instead of leaving dead space or overflowing on a hardcoded 1200px canvas.
compactType=vertical already auto-packs the bento-style variable-size tiles.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The SPA nginx overwrote the reverse proxy's X-Forwarded-Proto with $scheme (http on the
traefik->frontend hop), so the API built http:// OAuth redirects that Google rejects. Map
the incoming proto through (fallback to $scheme for direct access). Needed for login via
https://inboxintel.cesnimda.uk behind traefik.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The Pi stack stayed down after a reboot (services had no restart policy). Add
restart:unless-stopped to postgres/backup/api/frontend (not the init-keys one-shot).
Also commits todo.md (running follow-ups: drafts fetch, live OAuth/subdomain, sent re-sync).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>