peter
bf98b48517
fix(plex): re-probe on file replace, HU parity, public class const, playback-class test gaps
...
Deep-review round 1 on feature/plex-playback-class-filter:
- Sticky watermark (medium): _apply_item reset the bit-depth probe watermark
only on a codec-string change, so a same-codec re-encode (8-bit->10-bit HEVC)
kept a stale video_bit_depth/transcode_hw forever (the backfill only re-probes
media_probed_at IS NULL rows). Also reset when the Plex Part key changes (the
file was replaced), not just the codec.
- i18n parity (medium): the HU playback-class labels were mixed-language (only
'direct' translated). Translated remux/transcode_hw/transcode_sw and the
tooltips consistently to Hungarian (Kozvetlen streameles / Atkodolas).
- Layering (low): _PLAYBACK_CLASSES was module-private yet imported across into
routes.plex.browse; renamed to public PLAYBACK_CLASSES (it is the shared
source of truth for facet order + zero-fill).
- a11y (low): the browse-card playback-class dot conveyed meaning only via a
mouse-hover title; added role=img + aria-label so SR/touch users get the class.
- tests: the NULL/unprobed transcode_hw -> SW fold (filter + facet), facet
self-exclusion under an active playable filter, the migration codec-set ==
HW_DECODABLE_CODECS drift guard, the probe-batch bound + oldest-first order,
the transient probe-failure retry path, and the same-codec re-encode re-probe.
Backend gate green (ruff + full pytest); FE gate green (tsc/lint/knip/prettier/
vitest). NOTE: the facet-vs-runtime disagreement for 10-bit HEVC (C1) is the
known merge-order constraint — this branch's runtime is codec-only; the facet
becomes truthful once BUG1/tonemap's bit-depth-aware routing lands with it. Left
as a sequencing constraint, not code-changed here.
2026-08-30 17:51:33 +02:00
..
2026-07-21 02:26:40 +02:00
2026-08-29 03:52:13 +02:00
2026-08-11 04:04:06 +02:00
2026-08-19 01:13:40 +02:00
2026-08-15 04:45:32 +02:00
2026-08-15 04:45:32 +02:00
2026-08-23 23:22:52 +02:00
2026-08-09 17:43:42 +02:00
2026-08-21 19:13:38 +02:00
2026-08-21 08:11:18 +02:00
2026-08-21 05:43:36 +02:00
2026-08-09 03:18:04 +02:00
2026-08-09 03:18:04 +02:00
2026-06-12 18:01:43 +02:00
2026-08-08 09:28:23 +02:00
2026-08-11 04:20:10 +02:00
2026-08-20 08:50:47 +02:00
2026-08-23 21:59:58 +02:00
2026-08-08 00:50:05 +02:00
2026-08-25 01:44:34 +02:00
2026-08-27 03:29:42 +02:00
2026-08-21 19:13:38 +02:00
2026-07-21 02:26:40 +02:00
2026-08-15 05:28:59 +02:00
2026-08-28 02:59:21 +02:00
2026-08-21 17:01:41 +02:00
2026-08-26 05:25:47 +02:00
2026-08-27 23:54:44 +02:00
2026-08-27 23:54:44 +02:00
2026-08-15 04:45:32 +02:00
2026-08-15 04:09:30 +02:00
2026-08-26 02:39:00 +02:00
2026-08-27 04:02:25 +02:00
2026-08-08 09:28:23 +02:00
2026-08-11 04:04:06 +02:00
2026-08-13 23:24:59 +02:00
2026-08-22 06:33:48 +02:00
2026-08-22 07:56:05 +02:00
2026-08-09 17:43:42 +02:00
2026-08-28 03:12:29 +02:00
2026-08-15 01:37:05 +02:00
2026-08-15 05:31:55 +02:00
2026-08-15 05:28:59 +02:00
2026-08-25 02:55:12 +02:00
2026-06-19 11:18:20 +02:00
2026-08-28 03:12:29 +02:00
2026-07-27 22:10:03 +02:00
2026-08-29 21:52:13 +02:00
2026-08-28 03:12:29 +02:00
2026-08-28 03:12:29 +02:00
2026-08-29 18:38:21 +02:00
2026-08-29 18:38:21 +02:00
2026-07-21 02:26:40 +02:00
2026-08-28 03:12:29 +02:00
2026-08-14 00:49:09 +02:00
2026-08-22 05:42:45 +02:00
2026-08-23 23:05:24 +02:00
2026-08-25 01:44:34 +02:00
2026-08-22 03:29:15 +02:00
2026-08-19 03:07:25 +02:00
2026-08-15 00:35:22 +02:00
2026-08-15 01:37:05 +02:00
2026-08-22 06:33:48 +02:00
2026-08-22 01:06:22 +02:00
2026-08-22 01:06:22 +02:00
2026-08-09 03:18:04 +02:00
2026-08-22 18:02:55 +02:00
2026-08-21 22:41:57 +02:00
2026-08-21 20:33:55 +02:00
2026-08-11 04:04:06 +02:00
2026-08-09 03:18:04 +02:00
2026-08-29 21:52:13 +02:00
2026-08-29 21:52:13 +02:00
2026-08-19 21:35:52 +02:00
2026-08-20 05:12:33 +02:00
2026-08-20 03:26:19 +02:00
2026-08-22 06:33:48 +02:00
2026-08-20 05:21:13 +02:00
2026-08-20 05:40:59 +02:00
2026-08-27 04:37:53 +02:00
2026-08-11 03:29:08 +02:00
2026-08-21 19:13:38 +02:00
2026-08-18 05:01:27 +02:00
2026-07-18 19:11:38 +02:00
2026-08-09 17:43:42 +02:00
2026-08-23 08:04:00 +02:00
2026-08-23 06:57:33 +02:00
2026-08-22 01:06:22 +02:00
2026-08-21 22:41:57 +02:00
2026-08-22 05:42:30 +02:00
2026-08-22 05:42:30 +02:00
2026-08-27 23:54:44 +02:00
2026-08-28 03:12:29 +02:00
2026-08-23 21:59:58 +02:00
2026-08-19 05:41:52 +02:00
2026-08-09 03:18:04 +02:00
2026-08-28 05:20:34 +02:00
2026-08-20 05:40:59 +02:00
2026-08-20 05:40:59 +02:00
2026-08-20 05:24:11 +02:00
2026-08-20 00:47:09 +02:00
2026-08-27 02:50:41 +02:00
2026-08-23 21:59:41 +02:00
2026-08-20 20:30:30 +02:00
2026-08-30 17:51:33 +02:00
2026-08-23 18:39:22 +02:00
2026-08-24 22:38:35 +02:00
2026-08-24 22:09:52 +02:00
2026-08-23 04:08:28 +02:00
2026-08-23 04:08:28 +02:00
2026-08-21 08:11:18 +02:00
2026-08-30 04:45:11 +02:00
2026-08-23 18:39:22 +02:00
2026-08-23 21:59:41 +02:00
2026-08-21 00:08:19 +02:00
2026-08-30 02:04:17 +02:00
2026-08-30 00:09:36 +02:00
2026-08-30 00:28:50 +02:00
2026-08-09 17:43:42 +02:00
2026-08-15 01:01:03 +02:00
2026-08-27 23:54:44 +02:00
2026-08-22 18:19:08 +02:00
2026-08-22 18:19:08 +02:00
2026-08-17 22:18:07 +02:00
2026-08-17 22:18:07 +02:00
2026-08-30 04:45:11 +02:00
2026-08-30 02:04:17 +02:00
2026-08-23 04:40:09 +02:00
2026-08-23 04:40:09 +02:00
2026-08-22 18:19:08 +02:00
2026-08-24 22:09:52 +02:00
2026-08-23 02:23:09 +02:00
2026-08-23 02:23:09 +02:00
2026-08-23 03:52:21 +02:00
2026-07-27 22:10:03 +02:00
2026-08-27 23:54:44 +02:00
2026-08-27 03:29:42 +02:00
2026-08-29 06:08:21 +02:00
2026-08-09 01:03:53 +02:00
2026-08-19 01:32:26 +02:00
2026-08-19 01:32:26 +02:00
2026-08-09 03:18:04 +02:00
2026-08-22 04:03:58 +02:00
2026-08-24 23:41:49 +02:00
2026-08-27 04:22:07 +02:00
2026-08-19 21:35:52 +02:00
2026-08-17 22:18:07 +02:00
2026-08-17 21:31:22 +02:00
2026-08-14 22:58:42 +02:00
2026-08-14 22:58:42 +02:00
2026-08-22 04:03:58 +02:00
2026-08-29 03:52:13 +02:00
2026-08-29 03:52:13 +02:00
2026-08-11 04:04:06 +02:00
2026-08-29 06:36:07 +02:00
2026-08-25 02:55:12 +02:00
2026-08-22 06:33:48 +02:00
2026-08-22 01:06:22 +02:00
2026-08-28 02:06:06 +02:00
2026-08-15 01:04:59 +02:00
2026-08-09 17:43:43 +02:00
2026-08-09 17:46:13 +02:00
2026-08-15 01:37:05 +02:00
2026-08-25 02:30:28 +02:00
2026-08-09 17:43:42 +02:00
2026-08-09 03:18:04 +02:00
2026-08-11 02:20:52 +02:00
2026-07-21 02:26:40 +02:00
2026-08-29 18:53:53 +02:00
2026-08-29 21:52:13 +02:00
2026-08-30 02:04:17 +02:00
2026-08-30 02:04:17 +02:00
2026-08-23 01:53:33 +02:00
2026-08-30 04:45:11 +02:00
2026-08-26 05:25:47 +02:00
2026-08-26 05:25:47 +02:00
2026-06-19 11:18:20 +02:00
2026-08-26 00:44:27 +02:00
2026-08-29 05:43:41 +02:00
2026-08-26 00:44:27 +02:00
2026-08-26 00:44:27 +02:00
2026-08-21 19:53:14 +02:00
2026-07-27 22:40:11 +02:00
2026-08-19 01:32:26 +02:00
2026-08-29 19:51:58 +02:00
2026-08-29 19:51:58 +02:00
2026-08-11 04:04:06 +02:00
2026-07-27 22:10:03 +02:00
2026-08-26 05:25:47 +02:00