Image generation was failing with "Generated image storage or migration unavailable". The real cause was a 403 the catch block was swallowing: the generated-images-app MinIO policy had lost its s3:ListBucket statement, so the storage preflight's HeadBucket was denied while writes still worked. Re-running the storage bootstrap tonight did it. The operator image carries its own baked-in /opt/storage/check.py, and that copy is older than the file beside the compose: the host copy grants ListBucket with a comment saying the preflight needs it, the image copy does not, and running the image overwrote the good policy. The image's copy also still resolves the store as "clinical-milvus", from before that service was renamed. The policy is restored, and the compose now mounts the host check.py (and bootstrap_basic.py) over the image's, so what runs is what can be read and reviewed here. Verified: bootstrap re-runs are idempotent again and storage readiness passes after one. Also styles the model choice as a real control — a matching chevron, hover and focus states in the app accent — instead of a bare form element, in both the composer pill and the Create image popup. Adds a test that admin rows stack on a phone and that every flex block added inside one can shrink, so the panel cannot start scrolling sideways. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WjVc5oaAaYFNbZGLeJp6TX |
||
|---|---|---|
| .. | ||
| .well-known | ||
| audio | ||
| components | ||
| css | ||
| data | ||
| icons | ||
| images/pe-guide | ||
| img | ||
| js | ||
| vendor | ||
| 404.html | ||
| e2e-harness.html | ||
| favicon.ico | ||
| index.html | ||
| manifest.json | ||
| sw.js | ||
| template-guide.md | ||