# Status & Roadmap **For the v2 pillar lens feature matrix, see the dedicated [v2/features.md](../v2/features.md).** Where the project is and the de-risked path to the full vision. Architecture is in [architecture.md](./architecture.md); the mesh design origin is [`../.project/history/20260608_fleet-manager-mesh-design.md`](../.project/history/20260608_fleet-manager-mesh-design.md). ## Status at a glance | Area | Status | Note | |---|---|---| | App — playback (VLC / mpv / QuickTime) | ✅ Shipped | helper retired → mpv; no NFS — local players play downloads, else route to the always-on host | | App — library browser | ✅ Shipped | central index fast-path + local `MEDIA_ROOTS` walk + registry fallback (no NFS) | | App — downloads (search + transmission) | ✅ Shipped | via `mcp` CLI; search needs FlareSolverr | | App — metadata enrichment + artwork | ✅ Shipped | regex parse + TMDB/IMDb/keyless + ffmpeg frame-grab | | App — all UI (Home/Player/Library/Search/Downloads/Metadata/Adult/Devices/Logs/Settings) | ✅ Shipped | wired, no TODO/FIXME/`fatalError` debt | | App — device registry (Devices tab) | ✅ Shipped (registry only) | `DeviceConfig`: type→services presets mapping to fleet classes, per-device load badge; duty *engine* still unbuilt (see fleet below) | | App — adult content tab | ✅ Shipped | `porn-rotation.py` ported to `PornCollectionService`; `ENABLE_ADULT` compile flag + runtime `pornFeature` setting, concealed by default | | App — VPN subsystem | ✅ Shipped | OVPN profile/credential stores (Keychain), controller, settings UI | | App — offline cache + Now Playing/media keys | ✅ Shipped | `OfflineCacheController`, `NowPlayingController`, bandwidth policy | | iOS app (`TVAnarchyiOS`) | ✅ Shipped (companion) | VLCKit player, library, downloads, remote control via HTTP bridge (default `:8787`); the bridge *server* is not in this repo's `mcp/` tree | | Distribution (release/update) | ✅ Shipped (macOS) / 🟡 scaffolded (rest) | `tools/release.sh` → Forgejo; `tools/update.sh` resolves per-OS asset+dest (mac/linux/windows/android/iOS) via the single-source `tools/platform.sh`. Only the macOS asset can exist until the client is cross-platform (see north star) | | Universal client (one app, all devices) | ❌ Designed | the spine: control-plane HTTP daemon on the always-on host → thin web client → wrap (Tauri/Capacitor) → retire Swift UIs; adult becomes a backend-entitled module. See "North star" | | `governor` (`portable-net-tv`) | ✅ Shipped (single-host) | watch tracking + prefetch buffer | | `mcp` (`tv-anarchy-mcp`) | ✅ Shipped | VLC / helper / transmission / display tools | | `recommender` | ✅ Shipped | enrichment + local recs | | MLX title refiner | ✅ Shipped | `LocalLLMTitleRefiner` → `media_rec/title_refiner.py` (MLX Qwen); cached, self-disabling, wired at app startup | | `governor` → fleet orchestrator (stage 1) | ✅ Shipped | `governor/src/fleet/`: registry ingest, duty assignment, custody floor-check, zombie reaper, **re-pin actuation** (`fleet repin --apply`: rsync holder→target + recorded holdings), capacity probes (`fleet probe`: ssh df + EWMA uptime), periodic daemon (`fleet daemon`), research feed into `mcp` search | | `peers_for` / `custodians_of` (stage 3 core) | ✅ Shipped (single-fleet) | source model + both policy gates enforced; unions fleet ∪ seedbox ∪ live DHT, provenance-tagged; served over HTTP by `fleet serve` (`/peers_for/`, bearer-token) — runnable on any node until a real broadcast host exists | | Fleet WireGuard fabric (plane 1) | ❌ Designed | blocked on the `10.9.0.4` open question + root on each node | | Seedbox source + off-home face | ❌ Blocked external | engine supports the class/duty today; needs an actual provisioned seedbox | | Friend-mesh / F2F relay (stage 4) | ❌ Designed | needs other fleets to exist | | Private-tracker source (stage 5) | ❌ Designed | gates already enforced in `peers.ts`; ships last, after F2F is battle-tested | | Discord planes | ❌ Designed | control/QA/announce + availability bot; needs bot tokens/servers | | Multi-identity / cross-fleet | ❌ Designed | single-fleet foundation must land first | **Verdict:** the media-client layer is complete and production-grade. The fleet/mesh layer now has its single-fleet core (registry → duties → custody → reaper → `peers_for`) implemented and tested in the governor; what remains is actuation (cross-host copies), the WG fabric, and every stage that requires infrastructure outside this repo (seedbox, friends, Discord). ## North star — one client, every device The goal: **one app we install on every device** — iOS, Android, macOS, Ubuntu, Bluefin, Windows — controlling the display endpoints (Roku, smart TVs) it can't run on, **with the adult feature as an opt-in package on entitled devices only**. **Why today's app can't be that.** It is Swift + SwiftUI/AppKit/UIKit + VLCKit — structurally Apple-only (29 UI files; the core leans on Observation/AppKit/ MediaPlayer). It reaches only 2 of the 6 install targets. The per-platform branches in `tools/update.sh` (linux/windows/android) are honest scaffolding for release assets a Swift+SwiftUI build **cannot produce**. No amount of packaging fixes that; the *client technology* is the constraint. **The unlock is already on the roadmap.** ~20% of `TVAnarchyCore` exists only to reach the always-on host over ssh/Process, and most of the rest *fronts* state that truly lives on the always-on host (the index, the watchlog, transmission, porn-rotation). Once the control-plane HTTP daemon (below) exposes those as HTTP, the client keeps almost no logic — it becomes **browse + control + a `