github cenodude/CrossWatch v0.2.3
Version 0.2.3

10 hours ago

CrossWatch – v0.2.3

Sorry—another update. The coming weeks I’ll push more frequent fixes to squash those small annoying bugs that have been bugging me for way too long 🙂

🔧 Fixes & Changes

Main

  • Sync output honors debug: Beautifier is disabled when runtime.debug or runtime.debug_mods is true.
  • Live log reliability: Added SSE watchdog + auto-reconnect when the stream goes quiet; flushes the remaining buffer on error and preserves slider/stick-to-bottom.

Analyzer

  • Counts match reality: Issues are filtered by enabled pairs from /api/pairs and by enabled features (history/watchlist/ratings).
  • Clear footer totals: Footer now shows Issues: N • H:x • W:y • R:z so feature backlogs can’t hide real deltas.
  • Pair map: Analyzer understands the new pairs schema (source/target, per-feature enable)

CrossWatch – v0.2.2

🧪 Analyzer added (early-access / best effort ... whatever)

  • Helps spot items that are stuck across providers (PLEX, JELLYFIN, TRAKT, SIMKL).
  • Shows Issues: N based on your sync pairs (e.g. missing peers), plus per-item suggestions and where to fix (typically Plex/Jellyfin).
  • Practical UI: search, toggle IDs, resizable columns, and a footer with provider counts.
  • It won’t edit SIMKL/TRAKT for you; it guides you to fix metadata at the source and then re-sync.
  • If it works great—awesome. If not… at least you tried 🙂. (It’s early; feedback welcome)
  • Tip: Add TMDb/Trakt keys to get smarter suggestions.

Docs: Analyzer Wiki


CrossWatch – v0.2.1

✨ Focus

  • Numbers that match reality in statistics and insight
  • Multi-arch images (AMD64 + ARM64)

🔧 Fixes & Changes

  • No more double counting: We stop stacking the same totals; we keep the highest number instead of adding.
  • Watchlist is fair: Title tweaks/renames are shown as updated (~), not fake added (+).
  • Ratings with meaning: Badges now show **+ / − / ~** (add, remove, update).
  • Don’t miss events: Ratings/History no longer require a title, so silent providers don’t cause undercounts.
  • Smarter matching: “Dune Part 2” ≈ “Dune: Part Two” (fewer bogus add+remove combos).
  • Improved stability: various fixes

CrossWatch v0.2.0 — Big, refactored, and yes… probably many new bugs 🙂

Faster syncs, safer writes, cleaner UI. Two-way flows are steadier, SIMKL + Jellyfin behave better, Trakt refreshes itself, progress bar is sane, scheduler is actually useful. Breakage risk is low but back up /config anyway.


Highlights

  • Big refactor: FastAPI split into lean routers; providers + orchestrator modules cleaned up for speed and reliability.
  • Safer syncs: Mass-delete guard rails, health status and “suspect shrink” protection; additions/updates chunked; smarter delta reuse.
  • Two-way sync that sticks: Less flip-flop from weak IDs; better source-of-truth handling across mixed pairs.
  • Scheduling 2.0: Hourly / every-N-hours / daily time, per-timezone, optional jitter, manual “run now”, resilient loop.
  • Debug levels: Off · On · On + MOD debug · On (full HTTP) best is On + MOD debug
  • Auth mod Plex improvement: in authentication providers there is now a new settings menu for Plex (server settings, user settings and whitelisting of libraries)
  • Sync mod Jellyfin improvement: many fixes, should work better now. Also watchlist can now sync to favorites, Playlist and Collections
  • Watchlist: new GUID normalizations will provide better results

What’s new (user-visible)

UI/UX

  • Progress bar partly fixed: No early jump to 90%. “Apply” phase is shown only after all snapshots complete.
  • Run safety: Start/stop visuals are guarded (no more startRunVisuals is not defined).
  • Troubleshoot panel: One-click Clear cache, Reset stats, Reset state.
  • Auth flows: Plex PIN and SIMKL OAuth are smoother; clearer status + error toasts.
  • Wiki surfaced: Help links right in the app (Getting Started, Config, FAQ).

Providers

  • Plex
    • Server URL is sticky: Suggestions won’t override a value already saved in config.
    • Better library scoping and discovery hints.
  • SIMKL
    • Fresh “present” snapshots when activity changes (bypasses stale ETag/304). Fewer “why didn’t my add propagate?” moments.
  • Trakt
    • Auto token refresh before/after calls; 401/403 retries wired in.
  • Jellyfin
    • Capability reporting cleaned up; fewer re-add loops via smarter ID/shadow handling.

Orchestrator

  • Faster snapshots; smarter enrichment ordering; fewer duplicate passes.
  • Safer writes with chunking + tiny pauses to avoid API spikes.
  • Telemetry (opt-in) trimmed and less noisy.

Scheduling

  • Modes: disabled | hourly | every_n_hours | daily_time.
  • Timezone-aware start; optional jitter_seconds to avoid herd starts.
  • Visible “next run at” + last result in the UI.

Config (still JSON, still simple)

  • New debug trio: runtime.debug, runtime.debug_mods, runtime.debug_http.
  • Stability knobs: snapshot_ttl_sec, apply_chunk_size, apply_chunk_pause_ms,
    and mass-shrink guards (suspect_min_prev, suspect_shrink_ratio).

Fixed (the greatest hits)

  • Watchlist delete (SIMKL/Trakt): actually removes items and stays removed.
  • Endless re-adds from weak/agent IDs reduced (IMDb/TMDb/TVDb priority).
  • Insight/List noise reduced (hide disconnected providers).
  • UI errors from timing/race conditions hardened.

Breaking/behavior changes

  • Internal API/routers were refactored; external endpoints remain the same for normal use.
  • If you see odd counts after upgrade: use Maintenance → Clear cache and hard-refresh the UI.

Upgrade notes

  1. Stop container; back up your /config.
  2. Remove your complete /config
  3. Pull latest: ghcr.io/cenodude/crosswatch:latest.
  4. Start; visit Settings → verify tokens + library scopes.
  5. Test one pair first; then enable Scheduling if desired.

Known rough edges (being honest)

  • Stats can be off in edge cases (work in progress).
  • Some UI sections don’t auto-refresh perfectly (do manual refresh).
  • SIMKL & Jellyfin are still maturing; report weirdness with logs.
  • see WIKI for more issues: https://github.com/cenodude/CrossWatch/wiki

Don't miss a new CrossWatch release

NewReleases is sending notifications on new releases.