2026-05-31 — PRD-16 Image Recognition / Alt Text

Implemented the planned v1 shape for image descriptions. The relay now expands BlueBubbles attachments into stable pseudo-messages, returns generic placeholders for non-image attachments, and uses a local cache plus background MiniMax jobs for image descriptions. The RG client renders image-description bubbles distinctly and can hide/show them from the Start menu.

Runtime contract: - Relay host config: ~/.config/aquaping/config.json - Required MiniMax keys: minimax_api_key and image_descriptions_consent: true - Optional limit: image_descriptions_daily_limit, default 100 - Relay cache: ~/.cache/aquaping/image_descriptions.json - MiniMax runtime: official mmx vision describe CLI on the Mac relay host

No raw MiniMax keys belong in Forgejo, Pearl Brain, or the FROM House feed. Shared surfaces should document only the key names, paths, and operational procedure.

Deployment record: - Implementation commit prepared locally as 04f14f0. - Local validation passed: python3 -m unittest discover, python3 -m py_compile client.py relay/server.py tests/test_live_updates.py tests/test_relay_images.py, and git diff --check. - Mac relay host has mmx 1.0.15 installed. Non-secret relay config now has image_descriptions_consent: true and image_descriptions_daily_limit: 100. - MiniMax activation is still blocked until ~/.config/aquaping/config.json receives minimax_api_key; mmx quota currently reports no credentials. - Forgejo push and Pi4 workspace deployment are blocked because 100.120.38.37:3001 and 100.120.38.37:2223 are down and /mnt/kitchen is mounted emergency_ro,shutdown with ext4 I/O errors. - RG40XXV deployment is blocked: aqua.tail347b6c.ts.net and 100.118.36.108 timed out over SSH, and the LAN fallback had no route.