An image whose on-disk path contains # (post folders like BLUE#59) served its hash-named thumbnail fine but 404'd the original: the unencoded # in image_url was parsed by the browser as a URL fragment, so #59/01_timelapse.jpg never reached the /images route. Adds a shared image_url(path) helper that percent-encodes the path (safe='/') and routes the 3 raw builders (gallery detail + 2 in series) through it. Not a cleanup-tool deletion — the file is on disk; only the URL was wrong.
Regression test on the encoder. CI green on dev (run 970).
An image whose on-disk path contains `#` (post folders like `BLUE#59`) served its hash-named thumbnail fine but 404'd the original: the unencoded `#` in `image_url` was parsed by the browser as a URL fragment, so `#59/01_timelapse.jpg` never reached the `/images` route. Adds a shared `image_url(path)` helper that percent-encodes the path (`safe='/'`) and routes the 3 raw builders (gallery detail + 2 in series) through it. Not a cleanup-tool deletion — the file is on disk; only the URL was wrong.
Regression test on the encoder. CI green on dev (run 970).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
An image whose on-disk path contains '#' (post folders like 'BLUE#59')
served its hash-named thumbnail fine but 404'd the original: the unencoded
'#' in image_url was parsed by the browser as a URL fragment, so
'#59/01_timelapse.jpg' never reached the /images route. Add a shared
image_url(path) helper that percent-encodes the path (safe='/') and route
the 3 raw builders (gallery detail + 2 in series) through it. Not a
cleanup-tool deletion — the file is on disk; only the URL was wrong.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
An image whose on-disk path contains
#(post folders likeBLUE#59) served its hash-named thumbnail fine but 404'd the original: the unencoded#inimage_urlwas parsed by the browser as a URL fragment, so#59/01_timelapse.jpgnever reached the/imagesroute. Adds a sharedimage_url(path)helper that percent-encodes the path (safe='/') and routes the 3 raw builders (gallery detail + 2 in series) through it. Not a cleanup-tool deletion — the file is on disk; only the URL was wrong.Regression test on the encoder. CI green on dev (run 970).
🤖 Generated with Claude Code