Commands /upload_photo_file, /upload_file now resolve from fixtures/ by default. Drop your own files in storage/uploads/ to override without touching git. audio.mp3 and video.mp4 still need to be added manually (no ffmpeg locally to generate).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Stale app.log owned by UID 82 (from previous image) blocked the UID-1000 php-fpm workers from writing. Entrypoint fixes ownership on every start, surviving migrations.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
webhook:subscribe is idempotent — MAX refreshes the endpoint on repeat calls. Skipped automatically when WEBHOOK_URL is empty or still default.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
php-fpm runs workers as www-data, so master stays root and drops to a UID matching host files. storage bind-mount is writable without runtime chmod hacks.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Fixes Monolog 'Failed to open stream: Permission denied' on storage/logs when host files are owned by pkirillw but php-fpm runs as www-data.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>