2026-08-09 - 2026-09-09

Overview

3 Active Pull Requests
8 Active Issues
Excluding merges, 1 author has pushed 1 commit to main and 2 commits to all branches. On main, 15 files have changed and there have been 2597 additions and 41 deletions.

2 Pull requests merged by 1 user

Merged #54 Update golangci-lint to v2.12.2 with canonical config 2026-08-10 16:12:23 +02:00

Merged #55 feat: cache size management and LRU eviction (closes #51) 2026-08-09 13:22:51 +02:00

1 Pull request proposed by 1 user

Proposed #105 next -> main (1.0.0 milestone) 2026-08-10 16:12:36 +02:00

4 Issues closed from 1 user

6 Issues created by 1 user

46 Unresolved Conversations

Open #101 script/cibuild can report a green it did not earn: docker layer cache can skip make check entirely 2026-09-03 20:06:21 +02:00

Open #100 Markdown is never formatted: script/fmt covers only Go, and no prettier config exists 2026-08-10 16:14:39 +02:00

Open #57 Migrate .golangci.yml from deprecated gomodguard to gomodguard_v2 2026-08-09 16:28:32 +02:00

Open #79 internal/middleware: CORS, logging, and the metrics auth gate are untested 2026-08-09 16:10:39 +02:00

Open #78 httpfetcher: redirect-to-private-IP SSRF and semaphore release are untested 2026-08-09 16:10:39 +02:00

Open #80 No integration test of the end-to-end image proxy flow 2026-08-09 16:10:39 +02:00

Open #81 No load test verifying the documented 1k-5k req/s target 2026-08-09 16:10:39 +02:00

Open #82 P1 privacy: EXIF and other metadata are not stripped from processed images 2026-08-09 16:10:39 +02:00

Open #83 Capture upstream Last-Modified/ETag and support conditional revalidation 2026-08-09 16:10:39 +02:00

Open #84 Response header gaps: no Vary, X-Request-ID not returned or propagated, /v1/e/ lacks ETag/HEAD/304 2026-08-09 16:10:39 +02:00

Open #85 No pixa-specific Prometheus metrics, and metrics are not collected at all unless credentials are configured 2026-08-09 16:10:39 +02:00

Open #86 Shutdown correctness: exit code always 0, two competing signal handlers, Sentry calls os.Exit from a goroutine 2026-08-09 16:10:39 +02:00

Open #87 httpfetcher.hostSems grows without bound, and VariantStorage.Delete orphans the .meta sidecar 2026-08-09 16:10:39 +02:00

Open #88 Implement format=auto (Accept-header content negotiation) 2026-08-09 16:10:39 +02:00

Open #89 Write the deployment guide and an example reverse proxy config 2026-08-09 16:10:39 +02:00

Open #90 Implement referer blocklist to prevent hotlinking 2026-08-09 16:10:39 +02:00

Open #91 Blocks 1.0: missing HSTS, CSP, and Permissions-Policy security headers 2026-08-09 16:10:39 +02:00

Open #92 Blocks 1.0: http.Server missing IdleTimeout and ReadHeaderTimeout (slowloris), no request body size limits 2026-08-09 16:10:39 +02:00

Open #93 Blocks 1.0: no CSRF protection on the cookie-authenticated POST / and POST /generate forms 2026-08-09 16:10:39 +02:00

Open #94 Blocks 1.0: no trusted-proxy handling — every log line and login record shows the proxy's IP 2026-08-09 16:10:39 +02:00

Open #96 Migrations are not at the mandated internal/db/migrations/ path or filenames 2026-08-09 16:10:39 +02:00

Open #97 Repo layout: non-canonical root files, a confusing scripts/ directory, and a stale reformatted CONVENTIONS.md 2026-08-09 16:10:39 +02:00

Open #98 CORS wildcard is applied at the router root, covering the cookie-authenticated routes 2026-08-09 16:10:39 +02:00

Open #99 Port is not overridable with the PORT environment variable 2026-08-09 16:10:39 +02:00

Open #67 P1: blocked networks config + SSRF gaps (CGNAT, benchmark, NAT64 ranges not blocked) 2026-08-09 16:10:39 +02:00

Open #39 Refactor: split internal/imgcache into focused packages 2026-08-09 16:10:39 +02:00

Open #56 Cache.Stats reads never-populated output_content/request_cache tables, so TotalItems and TotalSizeBytes are always 0 2026-08-09 16:10:39 +02:00

Open #59 script/test doesn't follow the REPO_POLICIES conditional-verbose-rerun pattern (always runs -v) 2026-08-09 16:10:39 +02:00

Open #60 P1 security: q and fit are outside the HMAC signature, allowing 500x cache/transcode amplification from one signed URL 2026-08-09 16:10:39 +02:00

Open #61 P1: four config keys documented in README do not exist and now abort startup 2026-08-09 16:10:39 +02:00

Open #62 P1: /v1/e/ encrypted URLs bypass dimension and fit-mode validation 2026-08-09 16:10:39 +02:00

Open #63 Expiring URLs are served with Cache-Control: max-age=31536000, immutable 2026-08-09 16:10:39 +02:00

Open #64 P1: no global cap on concurrent image processing — unbounded memory under load 2026-08-09 16:10:39 +02:00

Open #65 No request coalescing: K concurrent misses for the same variant cause K upstream fetches and K transcodes 2026-08-09 16:10:39 +02:00

Open #66 P1 security: no rate limiting or lockout on the signing-key login form 2026-08-09 16:10:39 +02:00

Open #17 µPaaS deployment setup 2026-08-09 16:10:39 +02:00

Open #68 Decide on SVG: it is accepted and rendered by libvips, and format=orig silently returns JPEG 2026-08-09 16:10:39 +02:00

Open #69 CacheConfig.CacheTTL is configured but never read — cached variants never expire 2026-08-09 16:10:39 +02:00

Open #70 Cache.metaCache is dead: every cache hit does open+stat+ReadFile+JSON parse instead of the in-memory lookup README promises 2026-08-09 16:10:39 +02:00

Open #71 maintenance_mode is configurable and reported by the healthcheck but does not affect any request 2026-08-09 16:10:39 +02:00

Open #72 Silently swallowed errors: unparseable exp yields 401 instead of 400, sidecar write failures logged nowhere 2026-08-09 16:10:39 +02:00

Open #73 Remove dead abstractions in imgcache: unimplemented Purge and three interfaces with no implementers 2026-08-09 16:10:39 +02:00

Open #74 README describes storage paths, formats, and features that do not match the code 2026-08-09 16:10:39 +02:00

Open #75 Document the auth UI, encrypted-URL routes, q/fit parameters, and the undocumented config keys 2026-08-09 16:10:39 +02:00

Open #76 internal/handlers has 4 tests: the 401 signature boundary and every error path are untested 2026-08-09 16:10:39 +02:00

Open #77 The auth UI and encrypted-URL flows have zero Go tests — only a manual shell script 2026-08-09 16:10:39 +02:00