peregrine/app/pages
pyr0ball 8166204c05 fix: Settings widget crash, stale setup banners, Docker service controls
- Settings → Search: add-title (+) and Import buttons crashed with
  StreamlitAPIException when writing to _sp_titles_multi after it was
  already instantiated. Fix: pending-key pattern (_sp_titles_pending /
  _sp_locs_pending) applied before widget renders on next pass.

- Home setup banners: fired for email/notion/keywords even when those
  features were already configured. Add 'done' condition callables
  (_email_configured, _notion_configured, _keywords_configured) to
  suppress banners automatically when config files are present.

- Services tab start/stop buttons: docker CLI was unavailable inside
  the container so _docker_available was False and buttons never showed.
  Bind-mount host /usr/bin/docker (ro) + /var/run/docker.sock into the
  app container so it can control sibling containers via DooD pattern.
2026-03-04 12:11:23 -08:00
..
0_Setup.py feat: BYOK unlocks LLM features regardless of tier 2026-03-02 11:34:36 -08:00
1_Job_Review.py chore: seed Peregrine from personal job-seeker (pre-generalization) 2026-02-24 18:25:39 -08:00
2_Settings.py fix: Settings widget crash, stale setup banners, Docker service controls 2026-03-04 12:11:23 -08:00
4_Apply.py fix: resume CID glyphs, resume YAML path, PyJWT dep, candidate voice & mission UI 2026-02-26 12:32:28 -08:00
5_Interviews.py feat: extract hard-coded personal references from all app pages via UserProfile 2026-02-24 19:00:47 -08:00
6_Interview_Prep.py feat: extract hard-coded personal references from all app pages via UserProfile 2026-02-24 19:00:47 -08:00
7_Survey.py chore: seed Peregrine from personal job-seeker (pre-generalization) 2026-02-24 18:25:39 -08:00