2026-06-17updsys-20260617170454
Data integrity / migrations
- Stopped a migration-rerun data-corruption class. 0087, 0049, 0017
- DVR = per-channel only. Removed the platform-wide catchup.retention_days
- Single-line disable (Edit modal) and scheduled bulk disable now queue a kick
- Abuse-shield L3 IP blocks now honor their TTL (no permanent CGNAT lockout).
- Billing POST /record write is now tenant-scoped (R7 fixed only the reads).
- MAG/Stalker radio cmd no longer hands the box the raw upstream URL.
- Unauthenticated QoE beacon now rate-limited + sanity-bounded.
- Provider-sync DDL + full-table UPDATEs moved off the /vod render path
- Web player: content search + favorites; customer-facing **expiry/renewal
2026-06-17updsys-20260617074549
- Web player: every dynamic string now routes through t() (the PT/EN/ES
- Android: Login, the blocking update-gate, Settings, Player errors, Home and
- MAG/STB: "Minha Conta", the now-playing placeholder, and the fallback
- admin-web: /crons partial-status badge bug fixed (Parcial); /crons
2026-06-16updsys-20260616185447
Security / correctness
- Admin 2FA bypass closed — the p2ptv_2fa_pending cookie was HMAC-signed
- Caddy admin API no longer binds 0.0.0.0:2019 (was an unauthenticated
- Edge entitlement gate — /c/,/catchup/,/vod/ now enforce token
- Billing service now requires admin-JWT + tenant-scopes its queries (was
- SSH option-injection RCE on the master closed (install-job user/host
- Legacy /live.ts viewers are now kickable (the continuous-TS pipe
- VOD + transcoder ffmpeg gained source I/O timeouts + a max-encode watchdog (a
- Gateway circuit breaker ejects nodes that fail the data path despite a
- SLA / uptime report (/reports?type=sla) — per-channel/node availability %
- Web player was DEAD in production (a truncated player.js failed to parse)
- Android: release builds no longer fall back to the public debug signing key;
2026-06-16updsys-20260616085617
Security / reliability
- Auth-flood/scan guards no longer apply a permanent whole-IP firewall DROP —
- Public /internal/v1/iptv/auth/invalidate now peerTrusted-gated (was a
- Balance-node no longer mass-closes live sessions on restart/update (was a
- fMP4 mirror: per-segment read size-capped (OOM guard), reconnect keeps the
- player_api no longer masks backend 4xx/5xx as 200 (players retry instead of
- MAG catchup works (empty-password fetch); catchup global-retention honoured;
- Two functional indexes on the hottest auth/MAG lookups (migration 0139);
- 2FA enroll now verifies a code before enabling (no lockout); Telegram bot token
2026-06-05nativefix-20260605-081307
Native muxer: no segment orphans across reconnects
- The native MPEG-TS passthrough (pkg/remux/tspassthrough.go) already deleted
- Fix: PassthroughResume now carries the live segment window
- Real measured bitrate in the heartbeat / admin. The rate-floor watchdog
- Self-calibrating relative floor. live.min_source_ratio trips a source
- Labelled trips. A rate-floor close now surfaces ErrSourceRateFloor, so
- Internals: Run() gained a measuredBPS sink (origin passes nil); the dead
2026-06-05ratefloor-abs-20260604-235859
Self-healing: source bitrate floor (auto reconnect/failover on thin sources)
- Added a source rate-floor watchdog to the native MPEG-TS passthrough path:
- Settings-driven, no restart / no env / no SSH: live.min_source_bps,
- Loop-guard: the sustained-thin time (grace × window) is clamped above the
- Armed: live.min_source_bps=250000, live.source_rate_window_s=20,
- The relative floor (ratio × nominal) was deliberately left inert: ffprobe
- Gateway rebuilt to ship the new allowlist keys.
2026-06-04bnfix2-20260604-002348
Balance-node stability + created channels in production
- created_channels (FAST channels) materialized as live cc-<id> now actually
- Carried the 2026-06-03 audit balance-node fixes (added Flush()), plus VOD
- Consolidated the prior cold-start / micro-freeze tuning.
2026-06-03nodeblocks2-20260603-180336
Node-side blocking + VOD on the remote node
- P2PTV_BLOCK enforcement (iptables DROP) on auto/manual block propagated to
- VOD switched to progressive faststart MP4 (was fragmented → no seek /
- MAG live .ts and VOD now 302-redirect straight to the node (removed