2026-07-18 - 2026-08-18

Overview

8 Active Pull Requests
54 Active Issues
Excluding merges, 1 author has pushed 6 commits to main and 7 commits to all branches. On main, 35 files have changed and there have been 4517 additions and 420 deletions.

7 Pull requests merged by 1 user

1 Pull request proposed by 1 user

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

5 Issues closed from 1 user

54 Issues created by 1 user

Opened #47 Fix remaining gosec lint findings on main 2026-08-04 02:28:06 +02:00

Opened #49 P0: manual test pass of the auth and encrypted URL flows 2026-08-07 17:44:56 +02:00

Opened #51 P0: implement cache size management and eviction 2026-08-07 18:06:42 +02:00

Opened #52 P0: validate configuration on startup, fail fast on bad config 2026-08-07 18:06:54 +02:00

Opened #56 Cache.Stats reads never-populated output_content/request_cache tables, so TotalItems and TotalSizeBytes are always 0 2026-08-07 23:13:03 +02:00

Opened #57 Migrate .golangci.yml from deprecated gomodguard to gomodguard_v2 2026-08-07 23:14:45 +02:00

Opened #58 script/lint does not pin the golangci-lint binary version, so local runs can false-green against a stale linter 2026-08-09 03:00:19 +02:00

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

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

Opened #61 P1: four config keys documented in README do not exist and now abort startup 2026-08-09 03:43:07 +02:00

Opened #62 P1: /v1/e/ encrypted URLs bypass dimension and fit-mode validation 2026-08-09 03:43:23 +02:00

Opened #63 Expiring URLs are served with Cache-Control: max-age=31536000, immutable 2026-08-09 03:43:32 +02:00

Opened #64 P1: no global cap on concurrent image processing — unbounded memory under load 2026-08-09 03:43:51 +02:00

Opened #65 No request coalescing: K concurrent misses for the same variant cause K upstream fetches and K transcodes 2026-08-09 03:44:03 +02:00

Opened #66 P1 security: no rate limiting or lockout on the signing-key login form 2026-08-09 03:44:20 +02:00

Opened #67 P1: blocked networks config + SSRF gaps (CGNAT, benchmark, NAT64 ranges not blocked) 2026-08-09 03:44:32 +02:00

Opened #68 Decide on SVG: it is accepted and rendered by libvips, and format=orig silently returns JPEG 2026-08-09 03:44:54 +02:00

Opened #69 CacheConfig.CacheTTL is configured but never read — cached variants never expire 2026-08-09 03:45:06 +02:00

Opened #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 03:45:28 +02:00

Opened #71 maintenance_mode is configurable and reported by the healthcheck but does not affect any request 2026-08-09 03:45:38 +02:00

Opened #72 Silently swallowed errors: unparseable exp yields 401 instead of 400, sidecar write failures logged nowhere 2026-08-09 03:45:56 +02:00

Opened #73 Remove dead abstractions in imgcache: unimplemented Purge and three interfaces with no implementers 2026-08-09 03:46:08 +02:00

Opened #74 README describes storage paths, formats, and features that do not match the code 2026-08-09 03:47:33 +02:00

Opened #75 Document the auth UI, encrypted-URL routes, q/fit parameters, and the undocumented config keys 2026-08-09 03:47:47 +02:00

Opened #76 internal/handlers has 4 tests: the 401 signature boundary and every error path are untested 2026-08-09 03:48:01 +02:00

Opened #77 The auth UI and encrypted-URL flows have zero Go tests — only a manual shell script 2026-08-09 03:48:12 +02:00

Opened #78 httpfetcher: redirect-to-private-IP SSRF and semaphore release are untested 2026-08-09 03:48:28 +02:00

Opened #79 internal/middleware: CORS, logging, and the metrics auth gate are untested 2026-08-09 03:48:37 +02:00

Opened #80 No integration test of the end-to-end image proxy flow 2026-08-09 03:48:52 +02:00

Opened #81 No load test verifying the documented 1k-5k req/s target 2026-08-09 03:49:02 +02:00

Opened #82 P1 privacy: EXIF and other metadata are not stripped from processed images 2026-08-09 03:49:19 +02:00

Opened #83 Capture upstream Last-Modified/ETag and support conditional revalidation 2026-08-09 03:49:30 +02:00

Opened #84 Response header gaps: no Vary, X-Request-ID not returned or propagated, /v1/e/ lacks ETag/HEAD/304 2026-08-09 03:49:48 +02:00

Opened #85 No pixa-specific Prometheus metrics, and metrics are not collected at all unless credentials are configured 2026-08-09 03:50:01 +02:00

Opened #86 Shutdown correctness: exit code always 0, two competing signal handlers, Sentry calls os.Exit from a goroutine 2026-08-09 03:50:20 +02:00

Opened #87 httpfetcher.hostSems grows without bound, and VariantStorage.Delete orphans the .meta sidecar 2026-08-09 03:50:32 +02:00

Opened #88 Implement format=auto (Accept-header content negotiation) 2026-08-09 03:50:49 +02:00

Opened #89 Write the deployment guide and an example reverse proxy config 2026-08-09 03:51:01 +02:00

Opened #90 Implement referer blocklist to prevent hotlinking 2026-08-09 03:51:22 +02:00

Opened #91 Blocks 1.0: missing HSTS, CSP, and Permissions-Policy security headers 2026-08-09 07:02:29 +02:00

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

Opened #93 Blocks 1.0: no CSRF protection on the cookie-authenticated POST / and POST /generate forms 2026-08-09 07:02:57 +02:00

Opened #94 Blocks 1.0: no trusted-proxy handling — every log line and login record shows the proxy's IP 2026-08-09 07:03:11 +02:00

Opened #95 Dockerfile duplicates dependency installs inline instead of running script/bootstrap, and omits -trimpath / -s -w 2026-08-09 07:03:29 +02:00

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

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

Opened #98 CORS wildcard is applied at the router root, covering the cookie-authenticated routes 2026-08-09 07:04:11 +02:00

Opened #99 Port is not overridable with the PORT environment variable 2026-08-09 07:04:27 +02:00

Opened #100 Markdown is never formatted: script/fmt covers only Go, and no prettier config exists 2026-08-09 07:04:41 +02:00

Opened #101 script/cibuild can report a green it did not earn: docker layer cache can skip make check entirely 2026-08-09 07:37:54 +02:00

Opened #102 Eviction loop is not context-cancellable; shutdown ignores its deadline 2026-08-09 15:37:46 +02:00

Opened #103 Tracking: 1.0.0 sequencing and critical path 2026-08-09 16:10:39 +02:00

Opened #104 Run all linting in Docker via Dockerfile.lint + script/lint 2026-08-10 13:14:33 +02:00

Opened #106 TODO.md documents a branch-from-main workflow that no longer matches the next branching model 2026-08-10 16:14:39 +02:00

2 Unresolved Conversations

Open #17 µPaaS deployment setup 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