2026-10-16 - 2026-10-23

Overview

0 Active Pull Requests
89 Active Issues
Excluding merges, 1 author has pushed 88 commits to main and 88 commits to all branches. On main, 105 files have changed and there have been 13156 additions and 8532 deletions.

6 Releases published by 1 user

Published v1.5.0 ipx 1.5.0 2026-10-23 09:41:57 -07:00

Published directory-v1.4.0 ipx-directory 1.4.0 2026-10-23 09:41:57 -07:00

Published web-v1.3.0 ipx-web 1.3.0 2026-10-23 09:41:57 -07:00

Published v1.4.0 ipx 1.4.0 2026-10-19 11:40:00 -07:00

Published directory-v1.3.0 ipx-directory 1.3.0 2026-10-19 11:40:00 -07:00

Published web-v1.2.0 ipx-web 1.2.0 2026-10-19 11:40:00 -07:00

89 Issues closed from 1 user

Closed #356 Rust: the root modules hold most of the code 2026-10-23 18:54:11 -07:00

Closed #355 Rust: types written with their full path instead of imported 2026-10-23 18:19:15 -07:00

Closed #354 Rust: ipx-feed and ipx-directory have public items without doc comments 2026-10-23 18:12:04 -07:00

Closed #353 Rust: small departures from the style guide (imports, unwrap, for headers, must_use, bool parameters, SAFETY) 2026-10-23 18:07:23 -07:00

Closed #352 Unread counts still hash every read-state row a person has 2026-10-23 09:16:11 -07:00

Closed #347 Unread lists and counts read all of a person's items to find the few unread 2026-10-23 09:06:56 -07:00

Closed #349 Two requests for the same missing artwork fetch it twice 2026-10-23 08:35:35 -07:00

Closed #345 Artwork kept on disk is read from FUSE, blocking the async threads 2026-10-23 08:35:34 -07:00

Closed #348 A Signal's counts run the same verdict query twice 2026-10-23 08:35:33 -07:00

Closed #346 The item list and feed list wait on queries one at a time that could run together 2026-10-23 08:35:32 -07:00

Closed #344 A page of items reads every enclosure in the database to find its files 2026-10-23 08:35:28 -07:00

Closed #323 ipx-web strips only the Cf-Access header names, while ipx trusts whatever header trusted_header names from Caddy's address 2026-10-23 08:21:32 -07:00

Closed #342 One rw snapshot with an enormous subscriber count breaks the directory's listings for everyone 2026-10-23 08:19:56 -07:00

Closed #343 On the server's key, one user's Signal text shares a Jev call with other users' Signals and may steer their verdicts 2026-10-23 08:14:14 -07:00

Closed #340 Any signed-in user can make unlimited TypeSafe calls on the server's key through the icon route, even with signals_on_server off 2026-10-23 08:14:13 -07:00

Closed #324 Disconnecting sign-in requests escape the password-check limit and run unbounded Argon2 work on the blocking pool 2026-10-23 08:04:29 -07:00

Closed #338 One OPML upload of many same-titled outlines does quadratic work while holding the catalogue lock, and adds tens of thousands of permanent feeds to the shared scan 2026-10-23 08:01:56 -07:00

Closed #333 Any signed-in user can mark a feed they do not subscribe to private, and promote an OPML-derived feed out of its OPML 2026-10-23 07:57:45 -07:00

Closed #335 An open /api/events stream keeps sending daemon events to an account after it is removed 2026-10-23 07:53:05 -07:00

Closed #325 Private feed keys in the URL path reach every signed-in user through /api/events 2026-10-23 07:53:04 -07:00

Closed #334 Changing a password leaves every existing session and API token valid 2026-10-23 07:47:03 -07:00

Closed #336 Bodyless POST routes accept cross-origin simple requests carrying ambient credentials 2026-10-23 07:37:07 -07:00

Closed #337 A subscribed OPML with very many outlines causes quadratic sync work and an unbounded set of child feeds scanned on the shared worker 2026-10-23 07:20:01 -07:00

Closed #339 One feed listing many distinct http artwork hosts holds the shared scan worker for hours, on every scan 2026-10-23 07:20:00 -07:00

Closed #329 The directory's refresher fetches LAN and container-network addresses named by an rw peer or by a listed feed's redirect 2026-10-23 07:14:20 -07:00

Closed #341 Anonymous directory pages each run an unpaged query over the whole catalogue on a shared 10-connection pool 2026-10-23 07:08:47 -07:00

Closed #327 Feeds listed in a password-protected OPML inherit its username and password and send them to their own, unrelated hosts 2026-10-23 07:03:36 -07:00

Closed #328 Enclosure downloads send the feed's basic-auth password to whatever host the feed names, unlike feed fetches 2026-10-23 07:03:36 -07:00

Closed #332 A kept feed from a private OPML loses its private mark when the OPML is removed and is shared to the directory 2026-10-23 07:00:10 -07:00

Closed #321 Every fresh install seeds an admin account with the public password 'ipodderx', usable through the unauthenticated login endpoint 2026-10-23 06:56:57 -07:00

Closed #351 cargo deny: RUSTSEC-2026-0385 (ctutils 0.4.2) and RUSTSEC-2026-0382 (rustls-webpki 0.103.15) 2026-10-23 06:48:57 -07:00

Closed #330 A feed's .torrent URL, or a tracker it names, can make the daemon buffer an unbounded body in memory 2026-10-23 06:40:33 -07:00

Closed #320 Feed, enclosure, OPML and artwork fetches reach any internal address, and the responses come back to the user 2026-10-23 06:32:29 -07:00

Closed #322 A deeply nested OPML, uploaded by any signed-in user or served by any feed publisher, can overflow the stack and abort the whole daemon 2026-10-23 06:13:03 -07:00

Closed #326 Item and enclosure links from feeds are used as href and window.open targets without a scheme check 2026-10-23 06:08:37 -07:00

Closed #319 Downloaded enclosure served same-origin with an extension-guessed type allows stored XSS 2026-10-23 06:02:56 -07:00

Closed #331 Torrent enclosures write with overwrite enabled straight into a folder other feeds share, so one publisher can replace another feed's downloaded episodes 2026-10-23 05:56:58 -07:00

Closed #318 A multi-file torrent's name is recorded unchecked as the enclosure path, so a feed publisher can point Delete, reap and media serving at any path 2026-10-23 05:56:57 -07:00

Closed #350 Traces of some routes show their time with nothing under it 2026-10-23 05:48:00 -07:00

Closed #317 WordPress.com sites answer the feed with a browser check, and the feed fails for hours 2026-10-23 05:14:08 -07:00

Closed #316 A feed's page keeps showing an error after a check succeeds 2026-10-20 08:37:52 -07:00

Closed #315 The Directory's cover fan names the wrong property in will-change 2026-10-20 08:17:51 -07:00

Closed #314 The tab bar's corners do not nest around its tabs 2026-10-20 08:17:50 -07:00

Closed #313 Cover artwork has no edge, and dark covers melt into dark themes 2026-10-20 08:17:49 -07:00

Closed #310 Reduced motion leaves no sign that a check for new items is running 2026-10-20 08:17:48 -07:00

Closed #311 Hover styles stick on a phone after a tap 2026-10-20 08:17:48 -07:00

Closed #312 Scrolling past the end of a dialog or the phone drawer scrolls the page behind 2026-10-20 08:17:48 -07:00

Closed #309 iPX's and the page's versions are only in a hover tooltip 2026-10-19 13:13:51 -07:00

Closed #308 An off switch is nearly invisible in every light theme 2026-10-19 13:13:50 -07:00

Closed #307 Fields in dialogs have labels that are not tied to them 2026-10-19 13:13:49 -07:00

Closed #306 Dialogs are not dialogs: focus is not moved in, kept in, or given back 2026-10-19 13:13:48 -07:00

Closed #305 Text fields' borders fail 3:1 in every theme but High contrast 2026-10-19 13:13:47 -07:00

Closed #304 Error toasts show the browser's or server's raw text, with no next step 2026-10-19 13:13:46 -07:00

Closed #303 Toasts are not announced, and error toasts vanish after six seconds 2026-10-19 13:13:45 -07:00

Closed #302 Search and filter placeholders fail contrast in 20 of 25 palettes 2026-10-19 13:13:43 -07:00

Closed #301 The player's seek bar has no name 2026-10-19 13:13:42 -07:00

Closed #300 The read toggle on an item row is named "●" 2026-10-19 13:13:41 -07:00

Closed #299 Play and Delete on an item row are invisible while focused 2026-10-19 13:13:39 -07:00

Closed #298 An item can't be opened from the keyboard or a screen reader 2026-10-19 13:13:37 -07:00

Closed #297 CLAUDE.md's test counts are out of date 2026-10-19 11:17:41 -07:00

Closed #295 A feed address that serves a large file is read whole into memory 2026-10-19 11:17:40 -07:00

Closed #296 Searching items for % or _ matches more than was typed 2026-10-19 11:17:40 -07:00

Closed #294 Other people's download failures and progress show on everyone's page 2026-10-19 11:17:39 -07:00

Closed #293 Downloads folder missing for a moment makes ipx forget every downloaded file 2026-10-19 11:17:38 -07:00

Closed #292 Patreon's signed download links go to every open page and the log 2026-10-19 11:17:37 -07:00

Closed #291 A search box has no button to clear what was typed 2026-10-19 07:56:01 -07:00

Closed #290 Redesign a feed's settings dialog 2026-10-19 07:48:47 -07:00

Closed #289 Keep a feed, an OPML or a Patreon creator out of Signals 2026-10-19 07:48:46 -07:00

Closed #288 Keep a feed, an OPML or a Patreon creator out of All Subscriptions 2026-10-19 07:22:07 -07:00

Closed #287 A slow item list's trace does not say which list it was 2026-10-19 07:08:33 -07:00

Closed #286 ipx-web's spans are all named ipx-web 2026-10-18 13:05:25 -07:00

Closed #285 Switch an item between its HTML and its Markdown when a feed sends both 2026-10-18 11:41:41 -07:00

Closed #268 App-icon tiles for Signals and DeadAir, drawn as the logo is 2026-10-18 11:40:08 -07:00

Closed #273 The Directory shows initials for podcasts nobody here subscribes to: their artwork is refused 2026-10-18 11:33:32 -07:00

Closed #272 Every artwork request scans the whole entries table: no index on entries.image 2026-10-18 11:33:31 -07:00

Closed #284 A feed written in Markdown shows the Markdown as text, not formatted 2026-10-18 11:28:53 -07:00

Closed #283 An OPML's page lists its shows, not their items together 2026-10-18 10:46:08 -07:00

Closed #282 ipx lists atom_syndication, quick-xml and rss but does not use them 2026-10-17 15:40:12 -07:00

Closed #281 Dependencies with known security advisories: ammonia, rustls, h2, ringbuf 2026-10-17 15:40:11 -07:00

Closed #280 Keep a podcast from an OPML subscription when the OPML drops it 2026-10-17 14:39:41 -07:00

Closed #279 Artwork served without an image type is refused, so the podcast shows initials 2026-10-17 14:29:01 -07:00

Closed #278 Signals' metrics are not broken out by person, so the server's bill cannot be split 2026-10-17 08:28:08 -07:00

Closed #277 Signals can outrun TypeSafe's rate limits, and a 429 is retried as any other error 2026-10-17 07:40:12 -07:00

Closed #276 Signals: a look-back window an admin sets, a week by default, and an edit that asks again only what was picked out 2026-10-17 07:21:20 -07:00

Closed #274 The Signals judge scans the whole entries table on every pass, outside any trace 2026-10-17 07:21:19 -07:00

Closed #275 Signals call Jev one item at a time, so a new Signal takes about 20 minutes to fill 2026-10-17 07:21:19 -07:00

Closed #269 The API reference on ipxreader.app has no Signals 2026-10-17 06:41:50 -07:00

Closed #271 Signals: an admin setting for whose TypeSafe key pays for Jev 2026-10-17 06:20:45 -07:00

Closed #270 Signals have no metrics, and failed Jev calls do not show as failed traces 2026-10-16 19:59:42 -07:00

87 Issues created by 0 users

Opened #270 Signals have no metrics, and failed Jev calls do not show as failed traces 2026-10-16 19:55:31 -07:00

Opened #271 Signals: an admin setting for whose TypeSafe key pays for Jev 2026-10-17 06:06:42 -07:00

Opened #272 Every artwork request scans the whole entries table: no index on entries.image 2026-10-17 06:54:27 -07:00

Opened #273 The Directory shows initials for podcasts nobody here subscribes to: their artwork is refused 2026-10-17 06:54:27 -07:00

Opened #274 The Signals judge scans the whole entries table on every pass, outside any trace 2026-10-17 06:58:32 -07:00

Opened #275 Signals call Jev one item at a time, so a new Signal takes about 20 minutes to fill 2026-10-17 06:58:32 -07:00

Opened #276 Signals: a look-back window an admin sets, a week by default, and an edit that asks again only what was picked out 2026-10-17 07:03:45 -07:00

Opened #277 Signals can outrun TypeSafe's rate limits, and a 429 is retried as any other error 2026-10-17 07:34:26 -07:00

Opened #278 Signals' metrics are not broken out by person, so the server's bill cannot be split 2026-10-17 08:23:53 -07:00

Opened #279 Artwork served without an image type is refused, so the podcast shows initials 2026-10-17 14:05:30 -07:00

Opened #280 Keep a podcast from an OPML subscription when the OPML drops it 2026-10-17 14:32:00 -07:00

Opened #281 Dependencies with known security advisories: ammonia, rustls, h2, ringbuf 2026-10-17 15:23:56 -07:00

Opened #282 ipx lists atom_syndication, quick-xml and rss but does not use them 2026-10-17 15:23:57 -07:00

Opened #283 An OPML's page lists its shows, not their items together 2026-10-18 09:17:49 -07:00

Opened #284 A feed written in Markdown shows the Markdown as text, not formatted 2026-10-18 11:01:25 -07:00

Opened #285 Switch an item between its HTML and its Markdown when a feed sends both 2026-10-18 11:17:43 -07:00

Opened #286 ipx-web's spans are all named ipx-web 2026-10-18 13:03:52 -07:00

Opened #287 A slow item list's trace does not say which list it was 2026-10-19 07:04:41 -07:00

Opened #288 Keep a feed, an OPML or a Patreon creator out of All Subscriptions 2026-10-19 07:14:55 -07:00

Opened #289 Keep a feed, an OPML or a Patreon creator out of Signals 2026-10-19 07:27:05 -07:00

Opened #290 Redesign a feed's settings dialog 2026-10-19 07:27:06 -07:00

Opened #291 A search box has no button to clear what was typed 2026-10-19 07:51:35 -07:00

Opened #292 Patreon's signed download links go to every open page and the log 2026-10-19 10:40:15 -07:00

Opened #293 Downloads folder missing for a moment makes ipx forget every downloaded file 2026-10-19 10:40:15 -07:00

Opened #294 Other people's download failures and progress show on everyone's page 2026-10-19 10:40:16 -07:00

Opened #295 A feed address that serves a large file is read whole into memory 2026-10-19 10:40:16 -07:00

Opened #296 Searching items for % or _ matches more than was typed 2026-10-19 10:40:17 -07:00

Opened #297 CLAUDE.md's test counts are out of date 2026-10-19 11:06:29 -07:00

Opened #298 An item can't be opened from the keyboard or a screen reader 2026-10-19 12:39:45 -07:00

Opened #299 Play and Delete on an item row are invisible while focused 2026-10-19 12:39:46 -07:00

Opened #300 The read toggle on an item row is named "●" 2026-10-19 12:39:47 -07:00

Opened #301 The player's seek bar has no name 2026-10-19 12:39:47 -07:00

Opened #302 Search and filter placeholders fail contrast in 20 of 25 palettes 2026-10-19 12:39:48 -07:00

Opened #303 Toasts are not announced, and error toasts vanish after six seconds 2026-10-19 12:39:49 -07:00

Opened #304 Error toasts show the browser's or server's raw text, with no next step 2026-10-19 12:39:50 -07:00

Opened #305 Text fields' borders fail 3:1 in every theme but High contrast 2026-10-19 12:39:51 -07:00

Opened #306 Dialogs are not dialogs: focus is not moved in, kept in, or given back 2026-10-19 12:49:02 -07:00

Opened #307 Fields in dialogs have labels that are not tied to them 2026-10-19 12:49:02 -07:00

Opened #308 An off switch is nearly invisible in every light theme 2026-10-19 12:49:03 -07:00

Opened #309 iPX's and the page's versions are only in a hover tooltip 2026-10-19 12:49:04 -07:00

Opened #310 Reduced motion leaves no sign that a check for new items is running 2026-10-19 16:22:19 -07:00

Opened #311 Hover styles stick on a phone after a tap 2026-10-19 16:22:19 -07:00

Opened #312 Scrolling past the end of a dialog or the phone drawer scrolls the page behind 2026-10-19 16:22:20 -07:00

Opened #313 Cover artwork has no edge, and dark covers melt into dark themes 2026-10-19 16:22:20 -07:00

Opened #314 The tab bar's corners do not nest around its tabs 2026-10-19 16:22:21 -07:00

Opened #315 The Directory's cover fan names the wrong property in will-change 2026-10-19 16:22:22 -07:00

Opened #316 A feed's page keeps showing an error after a check succeeds 2026-10-20 08:34:51 -07:00

Opened #317 WordPress.com sites answer the feed with a browser check, and the feed fails for hours 2026-10-20 08:42:36 -07:00

Opened #318 A multi-file torrent's name is recorded unchecked as the enclosure path, so a feed publisher can point Delete, reap and media serving at any path 2026-10-23 05:26:41 -07:00

Opened #319 Downloaded enclosure served same-origin with an extension-guessed type allows stored XSS 2026-10-23 05:26:42 -07:00

Opened #320 Feed, enclosure, OPML and artwork fetches reach any internal address, and the responses come back to the user 2026-10-23 05:26:43 -07:00

Opened #321 Every fresh install seeds an admin account with the public password 'ipodderx', usable through the unauthenticated login endpoint 2026-10-23 05:26:43 -07:00

Opened #322 A deeply nested OPML, uploaded by any signed-in user or served by any feed publisher, can overflow the stack and abort the whole daemon 2026-10-23 05:26:44 -07:00

Opened #323 ipx-web strips only the Cf-Access header names, while ipx trusts whatever header trusted_header names from Caddy's address 2026-10-23 05:26:44 -07:00

Opened #324 Disconnecting sign-in requests escape the password-check limit and run unbounded Argon2 work on the blocking pool 2026-10-23 05:26:45 -07:00

Opened #325 Private feed keys in the URL path reach every signed-in user through /api/events 2026-10-23 05:26:45 -07:00

Opened #326 Item and enclosure links from feeds are used as href and window.open targets without a scheme check 2026-10-23 05:26:46 -07:00

Opened #327 Feeds listed in a password-protected OPML inherit its username and password and send them to their own, unrelated hosts 2026-10-23 05:26:47 -07:00

Opened #328 Enclosure downloads send the feed's basic-auth password to whatever host the feed names, unlike feed fetches 2026-10-23 05:26:47 -07:00

Opened #329 The directory's refresher fetches LAN and container-network addresses named by an rw peer or by a listed feed's redirect 2026-10-23 05:26:48 -07:00

Opened #330 A feed's .torrent URL, or a tracker it names, can make the daemon buffer an unbounded body in memory 2026-10-23 05:26:48 -07:00

Opened #331 Torrent enclosures write with overwrite enabled straight into a folder other feeds share, so one publisher can replace another feed's downloaded episodes 2026-10-23 05:26:49 -07:00

Opened #332 A kept feed from a private OPML loses its private mark when the OPML is removed and is shared to the directory 2026-10-23 05:26:49 -07:00

Opened #333 Any signed-in user can mark a feed they do not subscribe to private, and promote an OPML-derived feed out of its OPML 2026-10-23 05:26:50 -07:00

Opened #334 Changing a password leaves every existing session and API token valid 2026-10-23 05:26:51 -07:00

Opened #335 An open /api/events stream keeps sending daemon events to an account after it is removed 2026-10-23 05:26:51 -07:00

Opened #336 Bodyless POST routes accept cross-origin simple requests carrying ambient credentials 2026-10-23 05:26:52 -07:00

Opened #337 A subscribed OPML with very many outlines causes quadratic sync work and an unbounded set of child feeds scanned on the shared worker 2026-10-23 05:26:52 -07:00

Opened #338 One OPML upload of many same-titled outlines does quadratic work while holding the catalogue lock, and adds tens of thousands of permanent feeds to the shared scan 2026-10-23 05:26:53 -07:00

Opened #339 One feed listing many distinct http artwork hosts holds the shared scan worker for hours, on every scan 2026-10-23 05:26:54 -07:00

Opened #340 Any signed-in user can make unlimited TypeSafe calls on the server's key through the icon route, even with signals_on_server off 2026-10-23 05:26:55 -07:00

Opened #341 Anonymous directory pages each run an unpaged query over the whole catalogue on a shared 10-connection pool 2026-10-23 05:26:55 -07:00

Opened #342 One rw snapshot with an enormous subscriber count breaks the directory's listings for everyone 2026-10-23 05:26:56 -07:00

Opened #343 On the server's key, one user's Signal text shares a Jev call with other users' Signals and may steer their verdicts 2026-10-23 05:26:57 -07:00

Opened #344 A page of items reads every enclosure in the database to find its files 2026-10-23 05:35:26 -07:00

Opened #345 Artwork kept on disk is read from FUSE, blocking the async threads 2026-10-23 05:35:26 -07:00

Opened #346 The item list and feed list wait on queries one at a time that could run together 2026-10-23 05:35:27 -07:00

Opened #347 Unread lists and counts read all of a person's items to find the few unread 2026-10-23 05:35:28 -07:00

Opened #348 A Signal's counts run the same verdict query twice 2026-10-23 05:35:28 -07:00

Opened #349 Two requests for the same missing artwork fetch it twice 2026-10-23 05:35:29 -07:00

Opened #350 Traces of some routes show their time with nothing under it 2026-10-23 05:44:06 -07:00

Opened #351 cargo deny: RUSTSEC-2026-0385 (ctutils 0.4.2) and RUSTSEC-2026-0382 (rustls-webpki 0.103.15) 2026-10-23 06:32:29 -07:00

Opened #352 Unread counts still hash every read-state row a person has 2026-10-23 09:06:57 -07:00

Opened #353 Rust: small departures from the style guide (imports, unwrap, for headers, must_use, bool parameters, SAFETY) 2026-10-23 18:00:02 -07:00

Opened #354 Rust: ipx-feed and ipx-directory have public items without doc comments 2026-10-23 18:00:03 -07:00

Opened #355 Rust: types written with their full path instead of imported 2026-10-23 18:00:04 -07:00

Opened #356 Rust: the root modules hold most of the code 2026-10-23 18:00:04 -07:00