2026-10-16 - 2026-10-23
Overview
6 Releases published by 1 user
Published
v1.5.0
ipx 1.5.0
Published
directory-v1.4.0
ipx-directory 1.4.0
Published
web-v1.3.0
ipx-web 1.3.0
Published
v1.4.0
ipx 1.4.0
Published
directory-v1.3.0
ipx-directory 1.3.0
Published
web-v1.2.0
ipx-web 1.2.0
88 Issues closed from 1 user
Closed
#356 Rust: the root modules hold most of the code
Closed
#355 Rust: types written with their full path instead of imported
Closed
#354 Rust: ipx-feed and ipx-directory have public items without doc comments
Closed
#353 Rust: small departures from the style guide (imports, unwrap, for headers, must_use, bool parameters, SAFETY)
Closed
#352 Unread counts still hash every read-state row a person has
Closed
#347 Unread lists and counts read all of a person's items to find the few unread
Closed
#349 Two requests for the same missing artwork fetch it twice
Closed
#345 Artwork kept on disk is read from FUSE, blocking the async threads
Closed
#348 A Signal's counts run the same verdict query twice
Closed
#346 The item list and feed list wait on queries one at a time that could run together
Closed
#344 A page of items reads every enclosure in the database to find its files
Closed
#323 ipx-web strips only the Cf-Access header names, while ipx trusts whatever header trusted_header names from Caddy's address
Closed
#342 One rw snapshot with an enormous subscriber count breaks the directory's listings for everyone
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
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
Closed
#324 Disconnecting sign-in requests escape the password-check limit and run unbounded Argon2 work on the blocking pool
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
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
Closed
#335 An open /api/events stream keeps sending daemon events to an account after it is removed
Closed
#325 Private feed keys in the URL path reach every signed-in user through /api/events
Closed
#334 Changing a password leaves every existing session and API token valid
Closed
#336 Bodyless POST routes accept cross-origin simple requests carrying ambient credentials
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
Closed
#339 One feed listing many distinct http artwork hosts holds the shared scan worker for hours, on every scan
Closed
#329 The directory's refresher fetches LAN and container-network addresses named by an rw peer or by a listed feed's redirect
Closed
#341 Anonymous directory pages each run an unpaged query over the whole catalogue on a shared 10-connection pool
Closed
#327 Feeds listed in a password-protected OPML inherit its username and password and send them to their own, unrelated hosts
Closed
#328 Enclosure downloads send the feed's basic-auth password to whatever host the feed names, unlike feed fetches
Closed
#332 A kept feed from a private OPML loses its private mark when the OPML is removed and is shared to the directory
Closed
#321 Every fresh install seeds an admin account with the public password 'ipodderx', usable through the unauthenticated login endpoint
Closed
#351 cargo deny: RUSTSEC-2026-0385 (ctutils 0.4.2) and RUSTSEC-2026-0382 (rustls-webpki 0.103.15)
Closed
#330 A feed's .torrent URL, or a tracker it names, can make the daemon buffer an unbounded body in memory
Closed
#320 Feed, enclosure, OPML and artwork fetches reach any internal address, and the responses come back to the user
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
Closed
#326 Item and enclosure links from feeds are used as href and window.open targets without a scheme check
Closed
#319 Downloaded enclosure served same-origin with an extension-guessed type allows stored XSS
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
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
Closed
#350 Traces of some routes show their time with nothing under it
Closed
#317 WordPress.com sites answer the feed with a browser check, and the feed fails for hours
Closed
#316 A feed's page keeps showing an error after a check succeeds
Closed
#315 The Directory's cover fan names the wrong property in will-change
Closed
#314 The tab bar's corners do not nest around its tabs
Closed
#313 Cover artwork has no edge, and dark covers melt into dark themes
Closed
#310 Reduced motion leaves no sign that a check for new items is running
Closed
#311 Hover styles stick on a phone after a tap
Closed
#312 Scrolling past the end of a dialog or the phone drawer scrolls the page behind
Closed
#309 iPX's and the page's versions are only in a hover tooltip
Closed
#308 An off switch is nearly invisible in every light theme
Closed
#307 Fields in dialogs have labels that are not tied to them
Closed
#306 Dialogs are not dialogs: focus is not moved in, kept in, or given back
Closed
#305 Text fields' borders fail 3:1 in every theme but High contrast
Closed
#304 Error toasts show the browser's or server's raw text, with no next step
Closed
#303 Toasts are not announced, and error toasts vanish after six seconds
Closed
#302 Search and filter placeholders fail contrast in 20 of 25 palettes
Closed
#301 The player's seek bar has no name
Closed
#300 The read toggle on an item row is named "●"
Closed
#299 Play and Delete on an item row are invisible while focused
Closed
#298 An item can't be opened from the keyboard or a screen reader
Closed
#297 CLAUDE.md's test counts are out of date
Closed
#295 A feed address that serves a large file is read whole into memory
Closed
#296 Searching items for % or _ matches more than was typed
Closed
#294 Other people's download failures and progress show on everyone's page
Closed
#293 Downloads folder missing for a moment makes ipx forget every downloaded file
Closed
#292 Patreon's signed download links go to every open page and the log
Closed
#291 A search box has no button to clear what was typed
Closed
#290 Redesign a feed's settings dialog
Closed
#289 Keep a feed, an OPML or a Patreon creator out of Signals
Closed
#288 Keep a feed, an OPML or a Patreon creator out of All Subscriptions
Closed
#287 A slow item list's trace does not say which list it was
Closed
#286 ipx-web's spans are all named ipx-web
Closed
#285 Switch an item between its HTML and its Markdown when a feed sends both
Closed
#268 App-icon tiles for Signals and DeadAir, drawn as the logo is
Closed
#273 The Directory shows initials for podcasts nobody here subscribes to: their artwork is refused
Closed
#272 Every artwork request scans the whole entries table: no index on entries.image
Closed
#284 A feed written in Markdown shows the Markdown as text, not formatted
Closed
#283 An OPML's page lists its shows, not their items together
Closed
#282 ipx lists atom_syndication, quick-xml and rss but does not use them
Closed
#281 Dependencies with known security advisories: ammonia, rustls, h2, ringbuf
Closed
#280 Keep a podcast from an OPML subscription when the OPML drops it
Closed
#279 Artwork served without an image type is refused, so the podcast shows initials
Closed
#278 Signals' metrics are not broken out by person, so the server's bill cannot be split
Closed
#277 Signals can outrun TypeSafe's rate limits, and a 429 is retried as any other error
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
Closed
#274 The Signals judge scans the whole entries table on every pass, outside any trace
Closed
#275 Signals call Jev one item at a time, so a new Signal takes about 20 minutes to fill
Closed
#269 The API reference on ipxreader.app has no Signals
Closed
#271 Signals: an admin setting for whose TypeSafe key pays for Jev
86 Issues created by 0 users
Opened
#271 Signals: an admin setting for whose TypeSafe key pays for Jev
Opened
#272 Every artwork request scans the whole entries table: no index on entries.image
Opened
#273 The Directory shows initials for podcasts nobody here subscribes to: their artwork is refused
Opened
#274 The Signals judge scans the whole entries table on every pass, outside any trace
Opened
#275 Signals call Jev one item at a time, so a new Signal takes about 20 minutes to fill
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
Opened
#277 Signals can outrun TypeSafe's rate limits, and a 429 is retried as any other error
Opened
#278 Signals' metrics are not broken out by person, so the server's bill cannot be split
Opened
#279 Artwork served without an image type is refused, so the podcast shows initials
Opened
#280 Keep a podcast from an OPML subscription when the OPML drops it
Opened
#281 Dependencies with known security advisories: ammonia, rustls, h2, ringbuf
Opened
#282 ipx lists atom_syndication, quick-xml and rss but does not use them
Opened
#283 An OPML's page lists its shows, not their items together
Opened
#284 A feed written in Markdown shows the Markdown as text, not formatted
Opened
#285 Switch an item between its HTML and its Markdown when a feed sends both
Opened
#286 ipx-web's spans are all named ipx-web
Opened
#287 A slow item list's trace does not say which list it was
Opened
#288 Keep a feed, an OPML or a Patreon creator out of All Subscriptions
Opened
#289 Keep a feed, an OPML or a Patreon creator out of Signals
Opened
#290 Redesign a feed's settings dialog
Opened
#291 A search box has no button to clear what was typed
Opened
#292 Patreon's signed download links go to every open page and the log
Opened
#293 Downloads folder missing for a moment makes ipx forget every downloaded file
Opened
#294 Other people's download failures and progress show on everyone's page
Opened
#295 A feed address that serves a large file is read whole into memory
Opened
#296 Searching items for % or _ matches more than was typed
Opened
#297 CLAUDE.md's test counts are out of date
Opened
#298 An item can't be opened from the keyboard or a screen reader
Opened
#299 Play and Delete on an item row are invisible while focused
Opened
#300 The read toggle on an item row is named "●"
Opened
#301 The player's seek bar has no name
Opened
#302 Search and filter placeholders fail contrast in 20 of 25 palettes
Opened
#303 Toasts are not announced, and error toasts vanish after six seconds
Opened
#304 Error toasts show the browser's or server's raw text, with no next step
Opened
#305 Text fields' borders fail 3:1 in every theme but High contrast
Opened
#306 Dialogs are not dialogs: focus is not moved in, kept in, or given back
Opened
#307 Fields in dialogs have labels that are not tied to them
Opened
#308 An off switch is nearly invisible in every light theme
Opened
#309 iPX's and the page's versions are only in a hover tooltip
Opened
#310 Reduced motion leaves no sign that a check for new items is running
Opened
#311 Hover styles stick on a phone after a tap
Opened
#312 Scrolling past the end of a dialog or the phone drawer scrolls the page behind
Opened
#313 Cover artwork has no edge, and dark covers melt into dark themes
Opened
#314 The tab bar's corners do not nest around its tabs
Opened
#315 The Directory's cover fan names the wrong property in will-change
Opened
#316 A feed's page keeps showing an error after a check succeeds
Opened
#317 WordPress.com sites answer the feed with a browser check, and the feed fails for hours
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
Opened
#319 Downloaded enclosure served same-origin with an extension-guessed type allows stored XSS
Opened
#320 Feed, enclosure, OPML and artwork fetches reach any internal address, and the responses come back to the user
Opened
#321 Every fresh install seeds an admin account with the public password 'ipodderx', usable through the unauthenticated login endpoint
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
Opened
#323 ipx-web strips only the Cf-Access header names, while ipx trusts whatever header trusted_header names from Caddy's address
Opened
#324 Disconnecting sign-in requests escape the password-check limit and run unbounded Argon2 work on the blocking pool
Opened
#325 Private feed keys in the URL path reach every signed-in user through /api/events
Opened
#326 Item and enclosure links from feeds are used as href and window.open targets without a scheme check
Opened
#327 Feeds listed in a password-protected OPML inherit its username and password and send them to their own, unrelated hosts
Opened
#328 Enclosure downloads send the feed's basic-auth password to whatever host the feed names, unlike feed fetches
Opened
#329 The directory's refresher fetches LAN and container-network addresses named by an rw peer or by a listed feed's redirect
Opened
#330 A feed's .torrent URL, or a tracker it names, can make the daemon buffer an unbounded body in memory
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
Opened
#332 A kept feed from a private OPML loses its private mark when the OPML is removed and is shared to the directory
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
Opened
#334 Changing a password leaves every existing session and API token valid
Opened
#335 An open /api/events stream keeps sending daemon events to an account after it is removed
Opened
#336 Bodyless POST routes accept cross-origin simple requests carrying ambient credentials
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
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
Opened
#339 One feed listing many distinct http artwork hosts holds the shared scan worker for hours, on every scan
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
Opened
#341 Anonymous directory pages each run an unpaged query over the whole catalogue on a shared 10-connection pool
Opened
#342 One rw snapshot with an enormous subscriber count breaks the directory's listings for everyone
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
Opened
#344 A page of items reads every enclosure in the database to find its files
Opened
#345 Artwork kept on disk is read from FUSE, blocking the async threads
Opened
#346 The item list and feed list wait on queries one at a time that could run together
Opened
#347 Unread lists and counts read all of a person's items to find the few unread
Opened
#348 A Signal's counts run the same verdict query twice
Opened
#349 Two requests for the same missing artwork fetch it twice
Opened
#350 Traces of some routes show their time with nothing under it
Opened
#351 cargo deny: RUSTSEC-2026-0385 (ctutils 0.4.2) and RUSTSEC-2026-0382 (rustls-webpki 0.103.15)
Opened
#352 Unread counts still hash every read-state row a person has
Opened
#353 Rust: small departures from the style guide (imports, unwrap, for headers, must_use, bool parameters, SAFETY)
Opened
#354 Rust: ipx-feed and ipx-directory have public items without doc comments
Opened
#355 Rust: types written with their full path instead of imported
Opened
#356 Rust: the root modules hold most of the code