2026-10-15 - 2026-10-22

Overview

34 Active Pull Requests
44 Active Issues
Excluding merges, 0 authors have pushed 0 commits to main and 34 commits to all branches. On main, 0 files have changed and there have been 0 additions and 0 deletions.

1 Release published by 1 user

Published v1.0.0-rc3 2026-10-20 15:20:22 +02:00

33 Pull requests merged by 1 user

Merged #325 Serve a cache hit with no database read or write (closes #309) 2026-10-21 18:12:56 +02:00

Merged #324 Store a source the way a variant is stored, one row and one file per source URL (closes #308) 2026-10-21 16:31:34 +02:00

Merged #323 One image request type instead of five (closes #307) 2026-10-21 14:41:08 +02:00

Merged #322 Run only script/cibuild in the Gitea workflow (closes #203) 2026-10-21 13:23:00 +02:00

Merged #278 Keep WebP, AVIF and JPEG XL encodes at the limits under 40 seconds (closes #272) 2026-10-20 15:19:08 +02:00

Merged #273 Answer 415 for a source whose first bytes do not match its Content-Type (closes #253) 2026-10-20 14:40:52 +02:00

Merged #306 Let a bug fix change the test that pins the behavior the bug calls wrong (closes #280) 2026-10-20 14:25:08 +02:00

Merged #304 Re-vendor the canonical files from sneak/prompts at 0653579 (closes #221) 2026-10-19 06:11:44 +02:00

Merged #305 Read a trusted_proxies entry in the IPv4-mapped form as its IPv4 range (closes #303) 2026-10-19 05:29:06 +02:00

Merged #279 Space reconciliation passes by ten times the last pass's time (closes #250) 2026-10-19 05:00:49 +02:00

Merged #302 Read a blocked_networks entry in the IPv4-mapped form as its IPv4 range (closes #301) 2026-10-19 03:00:44 +02:00

Merged #300 Refuse local-use NAT64 addresses, and IPv4-compatible ones in blocked_networks (closes #299) 2026-10-16 06:52:18 +02:00

Merged #298 Refuse an IPv6 address that holds an internal IPv4 address (closes #297) 2026-10-16 05:31:56 +02:00

Merged #296 Fetch an IPv6 source host written without a port (closes #295) 2026-10-16 05:00:47 +02:00

Merged #292 Escape state_dir in the db_url derived from it (closes #290) 2026-10-16 04:37:55 +02:00

Merged #291 Keep a side computed for a size with one side 0 at 1 or more (closes #283) 2026-10-16 04:18:00 +02:00

Merged #294 Make one image URL per source on the generator page for host case and an empty path (closes #293) 2026-10-16 04:04:19 +02:00

Merged #289 Fetch the source path and query URL-encoded, not joined as text (closes #288) 2026-10-16 03:31:16 +02:00

Merged #284 Crop the centre before resizing for fit=cover (closes #282) 2026-10-16 02:23:19 +02:00

Merged #287 Refuse an image URL whose source path or query holds a # (closes #286) 2026-10-16 01:36:57 +02:00

Merged #285 Refuse an image URL whose host is not a host name or IP address (closes #275) 2026-10-16 01:14:51 +02:00

Merged #281 Document how a source query goes into an image URL, and accept it (closes #255) 2026-10-16 00:17:34 +02:00

Merged #261 Default max_concurrent_processing to half the CPUs pixa sees (closes #242) 2026-10-15 23:07:23 +02:00

Merged #276 Re-vendor the canonical files from sneak/prompts at e3f79c4 (closes #221) 2026-10-15 22:40:39 +02:00

Merged #277 Label request metrics with standard HTTP methods only (closes #274) 2026-10-15 21:47:11 +02:00

Merged #265 Logging out ends every login session (closes #256) 2026-10-15 20:44:44 +02:00

Merged #263 Sync cached files and refuse ones left empty or partial (closes #252) 2026-10-15 19:27:33 +02:00

Merged #271 Stop a transcode whose request has ended before it encodes (closes #243) 2026-10-15 18:44:12 +02:00

Merged #270 Tell upaas operators to set the cache size limit (closes #251) 2026-10-15 18:16:19 +02:00

Merged #260 Label request metrics by route, not by path (closes #254) 2026-10-15 16:37:21 +02:00

Merged #262 Remove expired negative cache rows in the eviction loop (closes #244) 2026-10-15 15:02:28 +02:00

Merged #268 Serve a cached variant while its source URL is in the negative cache (closes #245) 2026-10-15 13:45:26 +02:00

Merged #266 Lower-case the image URL's host and require a signature for a port (closes #246) 2026-10-15 12:31:15 +02:00

1 Pull request proposed by 1 user

32 Issues closed from 1 user

Closed #309 Serve a cache hit with no database read or write 2026-10-21 18:12:57 +02:00

Closed #308 Store a source the way a variant is stored: one row and one file per source URL 2026-10-21 16:31:35 +02:00

Closed #307 One image request type instead of five 2026-10-21 14:41:09 +02:00

Closed #203 The Gitea workflow runs script/docker-smoke besides script/cibuild 2026-10-21 13:23:01 +02:00

Closed #272 WebP, AVIF and JPEG XL outputs with an alpha channel take longer to encode than the request may wait 2026-10-20 15:19:08 +02:00

Closed #253 A source whose first bytes do not match its Content-Type answers 500 and is fetched again on every request 2026-10-20 14:40:53 +02:00

Closed #280 May a bug fix change a test that pins exactly the behaviour the bug calls wrong, without asking each time? 2026-10-20 14:25:09 +02:00

Closed #221 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-19 06:11:44 +02:00

Closed #303 A trusted_proxies entry written in the IPv4-mapped form is accepted but never matches 2026-10-19 05:29:06 +02:00

Closed #250 The reconciliation pass costs one database query per cached file and runs back to back on a large cache 2026-10-19 05:00:49 +02:00

Closed #301 A blocked_networks entry written in the IPv4-mapped form is accepted but refuses nothing 2026-10-19 03:00:44 +02:00

Closed #299 The local-use NAT64 range and the operator's blocked_networks list miss IPv4 addresses embedded in IPv6 2026-10-16 06:52:18 +02:00

Closed #297 The private-address check misses an IPv4 address embedded in an IPv6 one 2026-10-16 05:31:57 +02:00

Closed #295 An IPv6 source host written without a port is refused by the fetcher and answers 500 2026-10-16 05:00:48 +02:00

Closed #290 A state_dir holding %, ? or # breaks the database URL pixa derives from it 2026-10-16 04:37:55 +02:00

Closed #283 A size with one side 0 whose computed side rounds down to 0 comes out square, can ask for tens of GB, or answers 500 2026-10-16 04:18:00 +02:00

Closed #293 The generator page gives one upstream image several cache keys for host case and an empty path 2026-10-16 04:04:20 +02:00

Closed #288 The source URL is built by joining the decoded path and query as text, so some characters reach the upstream wrong 2026-10-16 03:31:16 +02:00

Closed #282 A thin source requested with fit=cover makes libvips allocate a huge uncropped image 2026-10-16 02:23:19 +02:00

Closed #286 A # written into the source path or query gives another unsigned spelling of an allowlisted image 2026-10-16 01:36:58 +02:00

Closed #275 A ? written into the host segment of an image URL gives another unsigned spelling of an allowlisted source 2026-10-16 01:14:51 +02:00

Closed #255 The README gives no way to put a source query into a signed image URL, and the in-tree builder makes one that fails 2026-10-16 00:17:34 +02:00

Closed #242 Memory per image and the default number of images processed at once are not bounded or documented for the container 2026-10-15 23:07:24 +02:00

Closed #274 The request metrics label every distinct HTTP method name, so made-up methods grow memory without bound when metrics are on 2026-10-15 21:47:11 +02:00

Closed #256 Logging out does not end the login session 2026-10-15 20:44:45 +02:00

Closed #252 A cached file left empty or partial by a crash is served or re-fetched forever 2026-10-15 19:27:34 +02:00

Closed #243 Image processing runs past the request's deadline and keeps its slot 2026-10-15 18:44:13 +02:00

Closed #251 The upaas section calls the cache size limit optional, but its default takes three quarters of a shared filesystem 2026-10-15 18:16:19 +02:00

Closed #254 The request metrics label every distinct URL path, so unauthenticated requests grow memory without bound when metrics are on 2026-10-15 16:37:21 +02:00

Closed #244 Negative-cache rows are never purged, so the database grows without bound 2026-10-15 15:02:28 +02:00

Closed #245 A cached variant is refused while its source URL is in the negative cache 2026-10-15 13:45:26 +02:00

Closed #246 The host segment is not normalized before the allowlist, the per-host limit and the cache keys 2026-10-15 12:31:16 +02:00

29 Issues created by 1 user

Opened #274 The request metrics label every distinct HTTP method name, so made-up methods grow memory without bound when metrics are on 2026-10-15 11:31:14 +02:00

Opened #275 A ? written into the host segment of an image URL gives another unsigned spelling of an allowlisted source 2026-10-15 12:31:47 +02:00

Opened #280 May a bug fix change a test that pins exactly the behaviour the bug calls wrong, without asking each time? 2026-10-15 22:53:52 +02:00

Opened #282 A thin source requested with fit=cover makes libvips allocate a huge uncropped image 2026-10-15 23:23:59 +02:00

Opened #283 A size with one side 0 whose computed side rounds down to 0 comes out square, can ask for tens of GB, or answers 500 2026-10-15 23:46:28 +02:00

Opened #286 A # written into the source path or query gives another unsigned spelling of an allowlisted image 2026-10-16 00:47:30 +02:00

Opened #288 The source URL is built by joining the decoded path and query as text, so some characters reach the upstream wrong 2026-10-16 01:37:27 +02:00

Opened #290 A state_dir holding %, ? or # breaks the database URL pixa derives from it 2026-10-16 02:11:49 +02:00

Opened #293 The generator page gives one upstream image several cache keys for host case and an empty path 2026-10-16 03:31:19 +02:00

Opened #295 An IPv6 source host written without a port is refused by the fetcher and answers 500 2026-10-16 03:48:23 +02:00

Opened #297 The private-address check misses an IPv4 address embedded in an IPv6 one 2026-10-16 04:49:04 +02:00

Opened #299 The local-use NAT64 range and the operator's blocked_networks list miss IPv4 addresses embedded in IPv6 2026-10-16 05:32:00 +02:00

Opened #301 A blocked_networks entry written in the IPv4-mapped form is accepted but refuses nothing 2026-10-16 06:38:19 +02:00

Opened #303 A trusted_proxies entry written in the IPv4-mapped form is accepted but never matches 2026-10-19 01:28:55 +02:00

Opened #307 One image request type instead of five 2026-10-21 12:48:50 +02:00

Opened #308 Store a source the way a variant is stored: one row and one file per source URL 2026-10-21 12:49:02 +02:00

Opened #309 Serve a cache hit with no database read or write 2026-10-21 12:49:18 +02:00

Opened #310 Make the schema file describe only the tables and columns pixa uses 2026-10-21 12:49:55 +02:00

Opened #311 Count hits, misses, fetches and transforms as Prometheus counters instead of the cache_stats table 2026-10-21 12:50:03 +02:00

Opened #312 Remove the code nothing in production uses 2026-10-21 12:50:16 +02:00

Opened #313 Build the image pipeline in the fx graph, with each default declared once in the config 2026-10-21 12:50:24 +02:00

Opened #314 Take the signature, the expiry and the URL scheme off the image request 2026-10-21 12:50:31 +02:00

Opened #315 Derive every key from the signing key in one place 2026-10-21 12:50:41 +02:00

Opened #316 One handler body and one error mapping for the two image routes 2026-10-21 12:50:47 +02:00

Opened #317 Split internal/imgcache into the image proxy and the cache 2026-10-21 12:50:57 +02:00

Opened #318 One file store type for cached sources and variants 2026-10-21 12:51:08 +02:00

Opened #319 Decide a fetched image's format from its bytes once 2026-10-21 12:51:15 +02:00

Opened #320 One table of settings in internal/config 2026-10-21 12:51:21 +02:00

Opened #321 Describe the implemented model in README.md with a list of its concepts 2026-10-21 12:51:27 +02:00

6 Unresolved Conversations