Commit Graph
337 Commits
Author SHA1 Message Date
Outis 70abc9430b Merge pull request #99 from outis1one/claude/zealous-heisenberg-8ylloi
wolf: make 'games' interactive — pick a number to apply the EA fix
2026-06-20 20:41:00 -04:00
Claude 3f6e359c7b wolf: make 'games' interactive — pick a number to apply the EA fix
./manage.sh games now lists installed games numbered with their AppIDs,
then prompts for a number to apply the EA App install-script fix to that
game (Enter to skip). Factored the reg-fix into a shared _apply_ea_fix
helper used by both 'games' and 'fix-ea-game'. The EA Desktop installed
marker is shared across all EA titles, so the same fix works for any EA
game — the picker just supplies the right per-game AppID.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-21 00:02:48 +00:00
Outis bbaa0e63df Merge pull request #98 from outis1one/claude/zealous-heisenberg-8ylloi
Claude/zealous heisenberg 8ylloi
2026-06-20 19:55:34 -04:00
Claude d32832ec75 wolf: add tab-completion + clarify fix-ea-game is universal for EA titles
- install-completion: writes a bash completion script to
  ~/.bash_completion.d/manage-wolf and registers it, so double-tab
  after './manage.sh ' shows all available commands.
- fix-ea-game kept as general name (not fix-swbf2-2017): the EA Desktop
  registry key is shared across all EA games; the Valve has-run key
  follows the same EADesktopSetup pattern across EA's catalog.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 23:53:00 +00:00
Claude 3a09c6b6ea wolf: add 'games' AppID lister + GE-Proton version pin + README docs
- ./manage.sh games: lists installed Steam games with their AppIDs
  (parsed from appmanifest_*.acf) so users can find the AppID to pass to
  fix-ea-game instead of hunting for it.
- ./manage.sh ge-proton [version]: optional arg pins a specific
  GE-Proton release for reproducibility; still defaults to latest.
- Document the full EA-games flow + AppID/version notes in the generated
  ~/docker/wolf/README.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 23:47:03 +00:00
Claude dcb28adc4f wolf: add ge-proton + fix-ea-game manage commands for EA titles
Add two manage.sh commands that bake in the workarounds needed to run
EA Steam titles (e.g. Star Wars Battlefront II 2017) under Proton in a
container:

- ge-proton: downloads the latest GE-Proton into Steam's
  compatibilitytools.d (the path Steam actually scans) and chowns it to
  uid 1000 so the in-container user can launch it. GE-Proton carries the
  EA App installer fixes stock Proton/Experimental lack.

- fix-ea-game [appid]: pre-satisfies the EA App install-script markers
  in the game's Proton prefix (InstallSuccessful + Valve EADesktopSetup
  has-run key) so Steam stops looping on 'running install script (EA
  app)'. Opt-in per AppID, defaults to SWBF2 1237950, no-ops if the
  prefix doesn't exist, idempotent, and keeps the prefix owned by uid
  1000 so Wine accepts it.

Also document the EA-game flow in the post-install summary.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 23:42:51 +00:00
Claude 2b6cf7700c wolf: drive app-container timezone from .env (WOLF_TZ) to fix Steam/EA time
App containers were defaulting to a non-local timezone (e.g. BST), showing the
wrong local time in Steam — and a skewed clock can stall EA App's installer.
The kernel clock is shared with the host, so this is a display/TZ issue: fix
it by setting each app's TZ env var, sourced from SITE_TZ at install and from
WOLF_TZ in .env for ./manage.sh apps.

Also generalize the array updater to rewrite both `mounts` and `env` (Wolf
reformats either as multi-line), so re-running apps updates the TZ on
already-installed entries without corrupting the TOML.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 18:44:10 +00:00
Outis 2603432851 Merge pull request #97 from outis1one/claude/zealous-heisenberg-8ylloi
Claude/zealous heisenberg 8ylloi
2026-06-20 13:19:50 -04:00
Claude dd7df8ce18 wolf: mount host timezone into Steam container
/etc/localtime and /etc/timezone are bind-mounted read-only so the Steam
container shows the correct local time. A wrong clock causes EA App install
scripts to hang indefinitely (SSL/token validation against EA's servers fails
when the client clock is skewed).

Fix the host clock first: sudo timedatectl set-ntp true

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 17:19:04 +00:00
Claude 9d2e0848e6 wolf: make add-web actually open the URL (firefox policy) + replace on re-add
The GoW firefox image launches `firefox` with no URL and ignores START_URL,
so add-web tiles opened a blank default tab. Instead generate a per-app
Firefox enterprise policy (policies.json) that sets the homepage to the
target URL and bind-mount it over /etc/firefox/policies/policies.json so the
site loads on launch.

Also make add-web replace an existing tile of the same name instead of
erroring, so re-running it repairs a previously broken tile in place.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 16:23:38 +00:00
Outis 1f678af744 Merge pull request #96 from outis1one/claude/zealous-heisenberg-8ylloi
wolf: fix config.toml corruption when re-running on an existing install
2026-06-20 12:08:39 -04:00
Claude 3aab169fbc wolf: fix config.toml corruption when re-running on an existing install
Wolf rewrites config.toml on every start and reformats `mounts` as a
multi-line TOML array. update_mounts() only replaced the single line
starting with `mounts =`, leaving the remaining array elements and the
closing `]` orphaned — producing invalid TOML ("Expected '=' after a key")
that crashed Wolf on the next start. This bit any re-run of the installer
(or `./manage.sh apps`) against a config Wolf had already reformatted.

Replace the entire array (from `mounts =` to its closing `]`), and also
clean up orphaned remnants left by a previously corrupted single-line
rewrite so re-running the script repairs a broken config in place.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 15:55:44 +00:00
Outis f22d5207d8 Merge pull request #95 from outis1one/claude/zealous-heisenberg-8ylloi
Claude/zealous heisenberg 8ylloi
2026-06-20 11:29:02 -04:00
Claude 37f85d6adf wolf: add ./manage.sh add-web — URL shortcut tiles in Moonlight via Firefox kiosk
Prompts for a display name and URL, auto-fetches the site's apple-touch-icon
or favicon.png, falls back to a manual URL/local-PNG prompt, then injects a
[[profiles.apps]] block using ghcr.io/games-on-whales/firefox:edge with
START_URL set to the target URL. Wolf's virtual gamepad injection means
controller-aware sites (Gamepad API) work naturally through the stream.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 15:21:30 +00:00
Claude b72e2bf549 wolf: add interactive 'manage.sh reorder' for Moonlight tile order
Moonlight shows app tiles in config.toml order with no in-client reordering.
Add ./manage.sh reorder: lists the current [[profiles.apps]] blocks by title,
prompts for a new order (read from /dev/tty since stdin is the heredoc),
rewrites config.toml preserving each block's nested runner subtable and
spacing, then restarts Wolf. Updated help text and README.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 15:11:34 +00:00
Claude f71edf1aad wolf: read WOLF_STATE_DIR from .env at runtime, not baked into compose
docker compose reads variables from .env automatically. Use ${WOLF_STATE_DIR}
in docker-compose.yml so the state folder path is dynamic — editing .env is
enough to relocate it without regenerating the compose file. IP/MAC/render
node stay baked in (hardware-specific, not in .env).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 13:56:22 +00:00
Outis aad6470f0f Merge pull request #94 from outis1one/claude/zealous-heisenberg-8ylloi
wolf: relocate Wolf's state folder to the game drive (no symlinks/vdf)
2026-06-20 09:56:04 -04:00
Claude 1a85ddf063 wolf: relocate Wolf's state folder to the game drive (no symlinks/vdf)
The right fix, finally. Instead of fighting Steam's libraryfolders.vdf or
symlinking individual app session homes, point Wolf's entire state folder at
the game drive. Steam's install, downloaded games, and Proton prefixes are
born there because Wolf creates every app's session home under
HOST_APPS_STATE_FOLDER.

- docker-compose.yml: mount $WOLF_STATE_DIR (=<game_dir>/wolf-state) at the
  SAME path inside and outside the wolf container, set HOST_APPS_STATE_FOLDER
  and WOLF_CFG_FOLDER to it. Same-path mount is required because Wolf hands
  host paths to the Docker daemon when spawning sibling app containers.
- config.toml now lives at $WOLF_STATE_DIR/cfg/config.toml; all WOLF_CFG
  references updated (install + manage.sh, via WOLF_STATE_DIR in .env).
- Optional migration: move existing /etc/wolf data onto the drive on upgrade.
- Removed all symlink machinery: relocate_steam_home, steam-home dir,
  _relocate_steam_home in manage.sh, and the fix-perms relocation step.
  fix-perms now just re-owns the state folder + game storage.
- Dropped the redundant Steam app mount; updated README/summary text.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 13:44:10 +00:00
Outis eab010e0b7 Merge pull request #93 from outis1one/claude/zealous-heisenberg-8ylloi
wolf: put Steam home on the game drive via symlink, not libraryfolder…
2026-06-20 09:16:12 -04:00
Claude df988cca3c wolf: put Steam home on the game drive via symlink, not libraryfolders.vdf
Seeding libraryfolders.vdf never stuck: Steam rewrites that file on every
launch and forces its primary library back to its own install dir
(/home/retro/.local/share/Steam), which is the Wolf session home on the OS
drive. That's why Steam Storage kept showing /home/retro with the OS drive's
size no matter how many times we seeded the vdf.

New approach: relocate_steam_home symlinks each Wolf Steam session home
(/etc/wolf/<id>/Steam, bind-mounted to /home/retro) at
$GAME_STORAGE_DIR/steam-home. Steam's one and only library is then the game
drive, so installs, game files, and Proton prefixes all land there and the
Storage screen reports the game drive's free space. An existing Steam install
is moved over once (no re-download) before the symlink is created.

Wired into first install, manage.sh start (self-heals on reboot), and
manage.sh fix-perms. Dropped the redundant /mnt/games/steam mount and the
vdf seeding everywhere; updated the README heredoc with the one-time
connect / fix-perms / reconnect sequence.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 13:13:50 +00:00
Outis cf96dc0798 Merge pull request #92 from outis1one/claude/zealous-heisenberg-8ylloi
Claude/zealous heisenberg 8ylloi
2026-06-20 09:01:18 -04:00
Claude 2ac7d6898d wolf: seed Steam libraryfolders.vdf into session dirs after first install
After app injection + docker compose restart, Wolf creates per-app session
dirs under /etc/wolf/<id>/Steam. Wait up to 30s for those dirs to appear,
then copy the pre-built libraryfolders.vdf into each one so Steam sees the
game storage location on its very first launch — no manual setup needed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 12:53:50 +00:00
Claude b3b5cc9b6e wolf: auto-seed Steam library config on manage.sh start
Wolf creates /etc/wolf/<id>/Steam/ session dirs when the container starts,
not at install time. Previously the user had to manually run fix-perms after
first start to propagate libraryfolders.vdf.

manage.sh start now calls _seed_steam_library() after docker compose up,
which copies libraryfolders.vdf from game storage into any Wolf session dir
that doesn't have it yet — so the correct library path (/mnt/games/steam)
is in place before the first Moonlight connection.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 12:17:02 +00:00
Claude 16f4f56168 wolf: seed Steam libraryfolders.vdf into Wolf session home dir
Steam reads libraryfolders.vdf from /home/retro/.local/share/Steam/steamapps/
which Wolf serves from /etc/wolf/<session-id>/Steam/. Seeding it only in
/mnt/games/steam/steamapps/ was ignored since Steam doesn't know to look there.

- Seed the VDF into any existing /etc/wolf/<id>/Steam session dirs at install time
- manage.sh fix-perms now propagates the VDF from game storage into every
  Wolf session dir so running fix-perms is the one-command remedy on existing
  installs

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 06:11:44 +00:00
Outis 37df6d4750 Merge pull request #91 from outis1one/claude/zealous-heisenberg-8ylloi
wolf: list mounted drives via lsblk -P so whole-disk mounts show in p…
2026-06-20 02:01:44 -04:00
Claude f735825ad9 wolf: list mounted drives via lsblk -P so whole-disk mounts show in picker
The drive picker enumerated mounts with `lsblk MOUNTPOINT | df` round-trips,
which could miss a whole-disk mount (e.g. an nvme formatted directly with no
partition table). Switch to `lsblk -Pno NAME,MOUNTPOINT,SIZE,LABEL,UUID` and
parse the key="value" pairs directly — handles whole-disk mounts and empty
LABEL/UUID fields reliably, so every mounted data drive appears as a numbered
choice.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 06:00:46 +00:00
Outis 4509c1a452 Merge pull request #90 from outis1one/claude/zealous-heisenberg-8ylloi
Claude/zealous heisenberg 8ylloi
2026-06-20 01:53:18 -04:00
Claude bd84f1df1e wolf: pre-seed Steam libraryfolders.vdf so game storage dir is set on first launch
Creates steamapps/libraryfolders.vdf pointing at /mnt/games/steam during
install so Steam uses the correct library path without needing the user to
navigate Settings → Storage on first launch.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 05:50:19 +00:00
Claude e7f65d127c wolf: add fix-perms command and document app home-dir ownership fix
Wolf mounts each app's home dir from /etc/wolf/<session-id>/<App> into the
container as /home/retro. If anything there is root-owned (e.g. left over
from an earlier mount layout), the in-container retro user (uid 1000) hits
"Permission denied" creating ~/.steam and the app exits on launch.

- Add `./manage.sh fix-perms`: chowns every /etc/wolf/<id>/ app home dir
  and the on-disk game storage to uid/gid 1000
- Document the /mnt/games mount layout, first-Steam-launch library step,
  3DS/Azahar emulator path, and the fix-perms troubleshooting flow in the
  generated README

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 05:44:13 +00:00
Outis 51265543b5 Merge pull request #89 from outis1one/claude/zealous-heisenberg-8ylloi
wolf: mount game storage at /mnt/games/* not /home/retro/* paths
2026-06-20 01:20:28 -04:00
Claude 01c4dd8525 wolf: mount game storage at /mnt/games/* not /home/retro/* paths
Mounting into /home/retro subpaths causes Docker to create intermediate
directories (/.local/share/Steam etc.) as root-owned in the container
overlay before init runs. The GoW init chown step doesn't fully fix these,
so the retro user hits Permission denied on first write.

Move all mounts to neutral /mnt/games/* paths that don't interfere with
the container's home directory setup:
  steam    → /mnt/games/steam    (add as Steam Library Folder via UI)
  lutris   → /mnt/games/lutris
  kodi     → /mnt/games/kodi
  firefox  → /mnt/games/firefox
  minecraft → /mnt/games/minecraft
  saves    → /mnt/games/saves
  emulators → /mnt/games/emulators

ROMs stay at /ROMs (GoW ES-DE hardcodes that path).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 05:17:41 +00:00
Outis 5f96b971cb Merge pull request #88 from outis1one/claude/zealous-heisenberg-8ylloi
wolf: fix duplicate /home/retro mount — target Steam library path dir…
2026-06-20 01:00:22 -04:00
Claude c10bf62c79 wolf: fix duplicate /home/retro mount — target Steam library path directly
Mounting steam:/home/retro conflicted with the GoW Steam image's own
internal /home/retro mount. Mount steam:/home/retro/.local/share/Steam
instead — this is where steamapps/ and Proton prefixes actually live,
persists all game data, and doesn't collide.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 04:59:37 +00:00
Outis 14410a5680 Merge pull request #87 from outis1one/claude/zealous-heisenberg-8ylloi
wolf: fix manage.sh apps permission denied on /etc/wolf/cfg/config.toml
2026-06-20 00:56:53 -04:00
Claude 87414bdc44 wolf: fix manage.sh apps permission denied on /etc/wolf/cfg/config.toml
config.toml is root-owned (Wolf container writes it as root). manage.sh
runs as the regular user, so python3 and grep against the file need sudo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 04:56:04 +00:00
Outis 09658eca92 Merge pull request #86 from outis1one/claude/zealous-heisenberg-8ylloi
Claude/zealous heisenberg 8ylloi
2026-06-20 00:49:13 -04:00
Claude 54082ad8b0 wolf: fix Steam storage mount, add Azahar 3DS emulator, emulators/ dir
- Steam mount was steam:/home/retro/.steam — games download to
  /home/retro/.local/share/Steam/steamapps/ which was NOT mounted and
  lived in the ephemeral container layer. Fixed to steam:/home/retro
  so the full home dir (library, user data, Proton prefixes) persists.
- Add emulators/ subdir to game storage layout; mounted into ES-DE
  container at /home/retro/Applications (ES-DE's default AppImage search path)
- Add optional Azahar (open-source Citra fork) AppImage download at
  install time — fetches latest release from GitHub, chmod +x, places
  in emulators/ where ES-DE finds it automatically for nintendo3ds ROMs
- Update README to document new storage layout and 3DS emulation setup

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 04:46:48 +00:00
Claude 73a41e7252 wolf: redesign app selection with numbered menu, ES-DE ROM dirs, and manage.sh apps command
- Drive picker: numbered list with UUID display, mounted + unmounted drives,
  explicit system-path exclusions (no regex bare-/ bug), skip whole disks
  with mounted partitions
- Pre-create ES-DE ROM system directories (~50 systems) so ES-DE detects
  all platforms on first launch
- App selection at install time: numbered menu for Steam, ES-DE, Lutris,
  RetroArch, Prism Launcher, Kodi, Firefox, Desktop
- Python catalog-driven TOML injector shared between install and manage.sh;
  supports update_mounts() to patch paths on re-run without duplicating entries
- manage.sh `apps` command replaces `add-apps` / `update-storage`: shows
  installed apps, interactive picker, updates game storage path from .env
- Game storage written to ~/docker/wolf/.env as GAME_STORAGE_DIR

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 04:41:59 +00:00
Outis 129fa2ebb5 Merge pull request #85 from outis1one/claude/zealous-heisenberg-8ylloi
Claude/zealous heisenberg 8ylloi
2026-06-20 00:19:22 -04:00
Claude fa906186c3 fix(services): conditional caddy_net across all Docker service scripts
Only include the caddy_net network block in generated docker-compose.yml
files when ~/docker/caddy exists. Prevents "network caddy_net declared
as external, but could not be found" on standalone installs without Caddy.

Affected: actualbudget, archivebox, arm, audiobookshelf, calibre-web,
changedetection, drum-rhythm-game, emby, fmd, frigate, frigate-audio,
frigate-notify, gatus, homeassistant, immich, iopaint, jellyfin, joplin,
koha, lyrion, magicmirror, mail-archiver, mattermost, mealie, meshcentral,
n8n, nextcloud, ntfy, onlyoffice, portainer, stirling-pdf, syncthing,
traccar, unifi, uptimekuma, vaultwarden, wg-easy

Skipped: authelia (creates caddy_net itself), caddy, crowdsec, wolf,
wolf-pair, and services using network_mode: host with no caddy_net.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 04:16:41 +00:00
Claude 68a4effad5 fix(services): conditional caddy_net for filebrowser, homebox, watchtower
Only include the caddy_net network block in docker-compose.yml when
~/docker/caddy exists, preventing "network not found" errors on
standalone installs without Caddy.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 04:06:51 +00:00
Outis 2da1c17038 Merge pull request #84 from outis1one/claude/zealous-heisenberg-8ylloi
Claude/zealous heisenberg 8ylloi
2026-06-20 00:00:25 -04:00
Claude 07d09a73fe fix(js99er): missing write_readme stub + conditional caddy_net
- Add write_readme() to the standalone bootstrap stubs (was defined in
  wolf-pair.sh and other services but missing here)
- Only include the caddy_net network block in docker-compose.yml when
  ~/docker/caddy exists; otherwise docker compose up fails with
  "network caddy_net declared as external, but could not be found"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 03:49:53 +00:00
Claude 88ac2ac06a fix(wolf-pair): set allow_reuse_address so restarts don't hit EADDRINUSE
HTTPServer.allow_reuse_address must be set before __init__ calls
server_bind(). Setting it as a class attribute before instantiation
is the correct pattern.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 03:29:58 +00:00
Outis 90c053fff8 Merge pull request #83 from outis1one/claude/zealous-heisenberg-8ylloi
fix(wolf-pair): remove stray networks block from docker-compose.yml
2026-06-19 23:21:40 -04:00
Claude 63ee2e8aff fix(wolf-pair): remove stray networks block from docker-compose.yml
network_mode: host containers cannot join Docker networks, so the
caddy_net networks: block was dead code. The ${CADDY_NET:-caddy_net}
value (colon inside unquoted YAML scalar) was also causing
"mapping values are not allowed in this context" at parse time.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 03:19:38 +00:00
Outis 6a532f849f Merge pull request #82 from outis1one/claude/zealous-heisenberg-8ylloi
fix(wolf): regex bug was skipping all mounted drives in picker
2026-06-19 23:08:22 -04:00
Claude c34dd29cd1 fix(wolf): regex bug was skipping all mounted drives in picker
^(/|/boot|...) — the bare / alternate matches every absolute path,
so every non-home mount was silently skipped. Replace with explicit
glob checks so only root, system paths, and [SWAP] are excluded.
Fixes /home/user/drives/1tb-space (and any other secondary mount)
not appearing in the numbered list.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 03:07:20 +00:00
Outis 1a72637c2a Merge pull request #81 from outis1one/claude/zealous-heisenberg-8ylloi
fix(wolf): show UUIDs in drive picker; fix false-unmounted for whole …
2026-06-19 23:03:47 -04:00
Claude 96e9705c88 fix(wolf): show UUIDs in drive picker; fix false-unmounted for whole disks
- Display UUID under each mounted and unmounted entry so users can
  cross-reference with fstab / blkid output
- Fix detection bug: a whole disk (e.g. sdb) with a mounted partition
  (sdb1) was incorrectly listed as unmounted; now checks lsblk children
  before including a disk in the unmounted list

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8ckUJQtj1pH8jtAddBDZs
2026-06-20 03:02:50 +00:00