Per #1226: once a channel is marked Invalid ([x]), nothing ever probes
it again, so a source that comes back online stays listed as dead
forever, and the scheduled fast/deep runs plus the PR check only ever
look at [>] rows.
- ROW now captures which marker (`>` or `x`) a row carries.
- --invalid probes only the Invalid-flagged rows; anything that now
answers alive/flaky is printed as "RECOVERED?" instead of being
judged dead/unreachable (the expected, uninteresting outcome for a
row that's supposed to be broken).
- --include-invalid runs both passes together in one worker pool.
- The exit code still only reflects dead [>] channels - a dead [x]
channel is the status quo, not a regression - so --invalid alone
always exits 0 and is safe to add to any workflow without risking a
spurious failure.
- --json records now carry the row's marker too.
Deliberately not wired into check_channels_deep.yml yet: the history
file and generate_dashboard.py's "most recent row per (list, channel)"
view assume every row is a working channel. Mixing in hundreds of
Invalid rows per run would bloat the dashboard's "not currently alive"
table with already-known-dead noise, and - worse - an Invalid channel
that comes back alive wouldn't show there either, since that table
only lists rows that are *not* alive. That's a second, separate change
to generate_dashboard.py; flagging it here rather than shipping it
half-done.
Tried --invalid on bulgaria/latvia (channels this account's own PR
moved to Invalid days ago, confirmed dead at the time) - correctly
reported dead/blocked, not recovered. Tried --include-invalid on
hungary and it immediately surfaced 4 real recovery candidates
(AlföldTV, Lóverseny közvetítés, Bajai TV, Tisza TV); re-checked those
4 by hand afterwards with a longer timeout and they went straight back
to unreachable, which is itself a useful data point - exactly the kind
of flaky intermittent case the tool is supposed to hand to a human
rather than silently act on, so none were restored. pylint: 10.00/10.
Same 141.94.193.53 host as the M1/M2/M5/Duna/RTL/TV2/ATV fixes in this
branch, per #1228. Re-tested all three live just now. TV4 is a genuine
free-to-air DVB-T2 channel; Cool and Film+ are RTL Group's
subscription-tier channels in official distribution, included here
since this mirror serves them without auth (same basis other
already-listed subscription channels in this repo are included on).
Re-tested every URL below just now (curl + real HLS manifest body check)
before restoring, per issue #1226's finding that some Invalid rows have
working streams again:
- Italy: K2, Frisbee, Canale 58 — live again (closes#1205)
- Lebanon: ALWifak News TV, Arabica TV — live again
- Hungary: Hír TV — old onlinestream.live link now serves a player error;
replaced with the working videa.hu relay
- Hungary: M1, M2/Petőfi TV, M5, Duna TV, RTL Klub, TV2, ATV — old
88.212.15.19 links are dead; replaced with the 141.94.193.53 mirror
URLs reported working in #1228 (verified live here too), moved back
out of Invalid
Regenerated playlist.m3u8 and the per-country playlists via
make_playlist.py.