Commit Graph

  • 9f1e9f5253 Rewrite AGENTS.md in short plain sentences (#327) next clawbot 2026-10-27 05:06:36 +01:00
  • 8669b5cf04 Rewrite README.md sentence by sentence (closes #327) issue-327-readme-rewrite clawbot 2026-10-27 01:42:48 +00:00
  • 2c90144e7b Go on past cache entries the reconciliation pass cannot read (closes #343) clawbot 2026-10-27 00:16:54 +00:00
  • 26b5160aa8 Test that reconciliation goes on past entries it cannot read clawbot 2026-10-27 00:14:45 +00:00
  • 33045a24b5 Keep a variant's accounting row when its file cannot be read (closes #340) clawbot 2026-10-26 23:56:34 +00:00
  • 701ed9b94b Test that reconciliation drops a variant's row only when its file is missing clawbot 2026-10-26 23:54:24 +00:00
  • 233765033a Answer 499 to a client that goes away while waiting for an image (closes #339) clawbot 2026-10-26 23:26:36 +00:00
  • d33316caf3 Test that a client leaving while another request makes its image gets 499 clawbot 2026-10-26 23:26:07 +00:00
  • 6de69f7349 Name pixa's concepts at the start of the README's Design section (closes #321) clawbot 2026-10-26 23:19:19 +01:00
  • 93b13d6638 Load every setting from one table in internal/config (closes #320) clawbot 2026-10-26 22:32:03 +01:00
  • b73bbde46e Detect a fetched image's format from its bytes once (closes #319) clawbot 2026-10-26 21:21:39 +01:00
  • ac850823f4 Keep cached sources and variants in one FileStore type (closes #318) clawbot 2026-10-26 20:24:33 +01:00
  • 17376d885b Split internal/imgcache into the image proxy and the cache (closes #317) clawbot 2026-10-26 20:00:25 +01:00
  • 87cb1ab5f6 Serve both image routes with one function and one error mapping (closes #316) clawbot 2026-10-26 15:24:24 +01:00
  • 77d55abb7e Derive every key from the signing key in one place (closes #315) clawbot 2026-10-26 14:10:20 +01:00
  • 7b6712538e Take the signature, the expiry and the URL scheme off the image request (closes #314) clawbot 2026-10-26 13:49:12 +01:00
  • 63690a9ec9 Build the image pipeline in pixad's fx graph (closes #313) clawbot 2026-10-26 12:28:23 +01:00
  • ac2bae0489 Remove the code nothing in production calls (closes #312) clawbot 2026-10-26 10:54:14 +01:00
  • b49d0068df Count hits, misses, fetches and transforms as Prometheus counters (closes #311) clawbot 2026-10-26 10:20:42 +01:00
  • 6b19e4c96c Declare only the tables and columns pixa writes and reads (closes #310) clawbot 2026-10-26 09:29:26 +01:00
  • 5f9d624d74 Serve a cache hit with no database read or write (closes #309) clawbot 2026-10-21 18:12:55 +02:00
  • a19cca2f34 Store a source the way a variant is stored, one row and one file per source URL (closes #308) clawbot 2026-10-21 16:31:33 +02:00
  • 00d8ba26c5 One image request type instead of five (closes #307) clawbot 2026-10-21 14:41:07 +02:00
  • 385c0ca76f Run only script/cibuild in the Gitea workflow (closes #203) clawbot 2026-10-21 13:22:59 +02:00
  • 989da78681 Keep WebP, AVIF and JPEG XL encodes at the limits under 40 seconds (closes #272) v1.0.0-rc3 clawbot 2026-10-20 15:19:07 +02:00
  • 4fb6350aa1 Answer 415 for a source whose first bytes do not match its Content-Type (closes #253) clawbot 2026-10-20 14:40:51 +02:00
  • cde9c0d10d Let a bug fix change the test that pins the behavior the bug calls wrong (closes #280) clawbot 2026-10-20 14:25:07 +02:00
  • 957ec85f97 Re-vendor the canonical files from sneak/prompts at 0653579 (closes #221) clawbot 2026-10-19 06:11:43 +02:00
  • 930e43961e Read a trusted_proxies entry in the IPv4-mapped form as its IPv4 range (closes #303) clawbot 2026-10-19 05:29:05 +02:00
  • 9eacfa6406 Space reconciliation passes by ten times the last pass's time (closes #250) clawbot 2026-10-19 05:00:48 +02:00
  • 0ab15324f7 Read a blocked_networks entry in the IPv4-mapped form as its IPv4 range (closes #301) clawbot 2026-10-19 03:00:43 +02:00
  • faad959bea Refuse local-use NAT64 addresses, and IPv4-compatible ones in blocked_networks (closes #299) clawbot 2026-10-16 06:52:17 +02:00
  • 3a6b3bc202 Refuse an IPv6 address that holds an internal IPv4 address (closes #297) clawbot 2026-10-16 05:31:55 +02:00
  • 08d6c3c459 Fetch an IPv6 source host written without a port (closes #295) clawbot 2026-10-16 05:00:47 +02:00
  • efa431ba18 Escape state_dir in the db_url derived from it (closes #290) clawbot 2026-10-16 04:37:54 +02:00
  • 8b4dcda549 Keep a side computed for a size with one side 0 at 1 or more (closes #283) clawbot 2026-10-16 04:17:59 +02:00
  • 6d271d4617 Make one image URL per source on the generator page for host case and an empty path (closes #293) clawbot 2026-10-16 04:04:19 +02:00
  • 4a4bc9758f Fetch the source path and query URL-encoded, not joined as text (closes #288) clawbot 2026-10-16 03:31:15 +02:00
  • 9a96740463 Crop the centre before resizing for fit=cover (closes #282) clawbot 2026-10-16 02:23:18 +02:00
  • 1fd5cf8bd0 Refuse an image URL whose source path or query holds a # (closes #286) clawbot 2026-10-16 01:36:56 +02:00
  • 62b4f4791e Refuse an image URL whose host is not a host name or IP address (closes #275) clawbot 2026-10-16 01:14:51 +02:00
  • 22bfc432b6 Document how a source query goes into an image URL, and accept it (closes #255) clawbot 2026-10-16 00:17:33 +02:00
  • f743930f71 Default max_concurrent_processing to half the CPUs pixa sees (closes #242) clawbot 2026-10-15 23:07:22 +02:00
  • 4e30dc7467 Re-vendor the canonical files from sneak/prompts at e3f79c4 (closes #221) clawbot 2026-10-15 22:40:38 +02:00
  • 16f9d1dfd1 Label request metrics with standard HTTP methods only (closes #274) clawbot 2026-10-15 21:47:11 +02:00
  • 742db9ceb1 Logging out ends every login session (closes #256) clawbot 2026-10-15 20:44:44 +02:00
  • 2ab96155ba Sync cached files and refuse ones left empty or partial (closes #252) clawbot 2026-10-15 19:27:33 +02:00
  • 3ba9ae9c39 Stop a transcode whose request has ended before it encodes (closes #243) clawbot 2026-10-15 18:44:11 +02:00
  • a3aa73f6fd Tell upaas operators to set the cache size limit (closes #251) clawbot 2026-10-15 18:16:17 +02:00
  • 7956da1f59 Label request metrics by route, not by path (closes #254) clawbot 2026-10-15 16:37:20 +02:00
  • 69f65d4302 Remove expired negative cache rows in the eviction loop (closes #244) clawbot 2026-10-15 15:02:27 +02:00
  • 2790125cb2 Serve a cached variant while its source URL is in the negative cache (closes #245) clawbot 2026-10-15 13:45:25 +02:00
  • c23585dd6d Lower-case the image URL's host and require a signature for a port (closes #246) clawbot 2026-10-15 12:31:14 +02:00
  • 5d1e3ea871 Escape : and % in the signed and cached path and query (closes #247) clawbot 2026-10-15 09:37:01 +02:00
  • 761ade2e36 Accept a chunked upstream body of exactly the maximum size (closes #248) clawbot 2026-10-15 07:44:09 +02:00
  • 88e1b1cdfa Allowlist no host in the example config (closes #249) clawbot 2026-10-15 06:26:23 +02:00
  • afb5dc5d0d Refuse a fit=outside size whose output exceeds the maximum (closes #257) v1.0.0-rc2 clawbot 2026-10-13 10:44:45 +02:00
  • d8760c40a1 Refuse a size whose computed side exceeds the maximum (closes #241) clawbot 2026-10-13 09:44:44 +02:00
  • ca512fdb4f Remove the unused cache lifetime setting (closes #69) v1.0.0-rc1 clawbot 2026-10-13 07:58:55 +02:00
  • 52f69d3082 Refuse SVG sources and never save an unknown input as JPEG (closes #68) clawbot 2026-10-13 07:13:17 +02:00
  • 162a2a33ef Keep counts not written by the request's deadline in memory (closes #224) clawbot 2026-10-13 03:07:23 +02:00
  • 40ad39843b Limit each client's requests to the image routes (closes #236) clawbot 2026-10-13 01:36:18 +02:00
  • bdde021b45 Save PNG compressed, WebP at effort 4 and AVIF at effort 1 (closes #232) clawbot 2026-10-08 14:13:25 +02:00
  • db91ab29e6 Serve JPEG XL when a request names no format (closes #222) clawbot 2026-10-08 12:49:56 +02:00
  • 8597253ffd Serve and accept JPEG XL as an image format (part of #222) clawbot 2026-10-08 11:01:12 +02:00
  • 99e4aa3bb2 Run pixad on the Alpine release it is built on (closes #229) clawbot 2026-10-08 09:35:03 +02:00
  • d2944aa891 Eviction no longer reads a whole table while requests wait on the database (closes #227) clawbot 2026-10-08 07:12:02 +02:00
  • 54328377d0 Install libvips JPEG XL support and require it at startup (part of #222) clawbot 2026-10-08 06:19:05 +02:00
  • 5058fd532b Queue SQLite writes on one connection so none fails as locked (closes #223) clawbot 2026-10-08 04:50:31 +02:00
  • 15d95436a5 Serve the format auto, chosen from the Accept header (closes #88) clawbot 2026-10-05 05:24:50 +02:00
  • 01823d27db Format the markdown with prettier in script/fmt and script/fmt-check (closes #100) clawbot 2026-10-05 04:24:45 +02:00
  • a941a80bf9 Run lint and tests as Dockerfile phases built with --no-cache (closes #202) clawbot 2026-10-05 03:41:50 +02:00
  • 55cf7f4fac Add script/loadtest to measure throughput, latency and memory (closes #81) clawbot 2026-10-05 02:58:41 +02:00
  • c434581a54 Fetch the tags in the CI checkout (closes #208) clawbot 2026-10-05 02:07:32 +02:00
  • f77faf13de Keep config.yml out of git and the Docker build context (closes #212) clawbot 2026-10-05 01:58:32 +02:00
  • ae7c3f226d Keep local config files out of the Docker build context (closes #211) clawbot 2026-10-05 01:24:41 +02:00
  • 2beba15ae7 Move pixad's startup from cmd/pixad into internal/app (closes #206) clawbot 2026-10-05 01:07:47 +02:00
  • 23ec4026f6 Ignore .claude/ in .gitignore (closes #204) clawbot 2026-10-05 00:41:42 +02:00
  • ef828f71a5 Keep secrets out of the Docker build context at every depth (closes #205) clawbot 2026-10-05 00:07:37 +02:00
  • f3231a3c5a Replace REPO_POLICIES.md with the canonical copy from sneak/prompts (closes #196) clawbot 2026-10-04 23:59:29 +02:00
  • cca2e3f926 Test the image proxy flow end to end (closes #80) clawbot 2026-10-04 23:24:46 +02:00
  • 708a9bec20 Test that a URL made on the generator page with a ttl expires (closes #199) clawbot 2026-10-04 22:42:03 +02:00
  • 8314099abd Refuse image requests whose Referer is on referer_blocklist (closes #90) clawbot 2026-10-04 22:24:50 +02:00
  • 8568c17d1b Move the example config to configs/, delete scripts/ and CONVENTIONS.md (closes #97) clawbot 2026-10-04 21:07:52 +02:00
  • 625fd42ace Wait on a busy SQLite database and turn on WAL mode (closes #198) clawbot 2026-10-04 20:58:37 +02:00
  • 66e71b4207 Make the periodic reconciliation test wait for the startup pass (closes #189) clawbot 2026-10-04 19:59:36 +02:00
  • 847ad5b428 Count what the cache holds in the default cache_max_bytes (closes #184) clawbot 2026-10-04 19:41:49 +02:00
  • 233a9c05ad Test logging in, logging out, the URL generator and /v1/e/ tokens (closes #77) clawbot 2026-10-04 19:24:39 +02:00
  • 842372250f Remove unsafe-inline from the Content-Security-Policy (closes #125) clawbot 2026-10-04 18:58:40 +02:00
  • 58d601ea48 Replace the deprecated gomodguard with gomodguard_v2 by re-vendoring .golangci.yml (closes #57) clawbot 2026-10-04 18:34:54 +02:00
  • 48f21d4ecf Abort startup on a config file pixa cannot read (closes #176) clawbot 2026-10-04 18:24:43 +02:00
  • f8c437b83f Merge TODO.md with git's union merge (closes #190) clawbot 2026-10-04 17:58:41 +02:00
  • 04093f53ad Stop TestEvictionRunsOnPeriodicSchedule racing the evictor (closes #183) clawbot 2026-10-04 16:58:34 +02:00
  • be6c715b36 Write the deployment guide and an example Caddy config (closes #89) clawbot 2026-10-04 15:08:03 +02:00
  • 604b51eea6 Test metrics auth, CORS preflight, login logging and metrics (closes #79) clawbot 2026-10-04 14:39:27 +02:00
  • ba5a716223 Test the image route's signature check and error answers (closes #76) clawbot 2026-10-04 13:58:29 +02:00
  • c7173c47d8 Return and pass on request IDs, and give /v1/e/ ETag, 304 and HEAD (closes #84) clawbot 2026-10-04 12:41:54 +02:00
  • 363774c058 Document every route, encrypted URLs and the config file search (closes #75) clawbot 2026-10-04 09:58:36 +02:00
  • 1616e91a6a Stop cache eviction in progress at shutdown (closes #102) clawbot 2026-10-04 09:24:42 +02:00
  • 6830bdc5de Remove unimplemented Purge and three unused interfaces (closes #73) clawbot 2026-10-04 08:41:37 +02:00