The log view splits into All / Daemon I/O / Scans / HTTP. Daemon I/O is the control protocol itself, logged where every command funnels through so it covers socket clients, the CLI and the web UI alike. stderr and the in-app buffer now have separate filters, so the UI can keep debug detail the terminal should not carry. Playwright drives a real browser against a daemon on fixture feeds. Eight tests, each mapping to a bug that reached a user -- the Rust tests and the stub-DOM smoke test cannot see a wrong selector or a dead handler. It immediately found one: OPML folders rendered expanded by default, because the code stored closed groups, so any folder never toggled counted as open. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AdXho5tTkjFLeUXKbEjKBh
31 lines
1.1 KiB
YAML
31 lines
1.1 KiB
YAML
services:
|
|
iPodderX:
|
|
build: .
|
|
# image: ipx:latest # swap build: for image: once you have published one
|
|
container_name: iPodderX
|
|
restart: unless-stopped
|
|
environment:
|
|
# Unraid shares expect these; downloads land owned by nobody:users.
|
|
PUID: "99"
|
|
PGID: "100"
|
|
TZ: "America/Toronto"
|
|
# ipx=debug for verbose, or add librqbit=info to watch torrents.
|
|
IPX_LOG: "ipx=info"
|
|
ports:
|
|
- "8099:8099" # web UI
|
|
- "6881:6881/tcp" # BitTorrent peers
|
|
- "6881:6881/udp" # DHT
|
|
volumes:
|
|
- ./config:/config # config.toml, and the web token
|
|
- ./data:/data # state.db
|
|
- /mnt/user/audio/ipx:/downloads
|
|
healthcheck:
|
|
# `ipx status` proxies through the control socket to the command worker, so this
|
|
# catches a daemon that is alive but wedged -- not just one that has died. (A
|
|
# blocked worker is a real failure mode: a torrent used to be able to cause it.)
|
|
test: ["CMD", "ipx", "status"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|