fix(release/parser): collapse chained multi-episode markers to full range

S14E09E10E11 previously parsed to episode=9, episode_end=10 — E11
was silently dropped. The parser now takes episodes[-1] as
episode_end so the full chain is captured (episode=9, episode_end=11).
Intermediate values stay implied.

Fixture shitty/archer_multi_episode/ updated from anti-regression of
the bug to anti-regression of the fix.
This commit is contained in:
2026-05-20 23:23:08 +02:00
parent 5d7b214af2
commit 5bbdc9081f
3 changed files with 15 additions and 5 deletions
+9
View File
@@ -15,6 +15,15 @@ callers).
## [Unreleased]
### Fixed
- **Multi-episode chain (e.g. `S14E09E10E11`) now collapses to a full
range.** The parser previously captured `episode=9, episode_end=10`
and dropped E11+. It now returns `episode=first, episode_end=last`,
with intermediate values implied. Fixture
`shitty/archer_multi_episode/` updated from anti-regression-of-bug
to anti-regression-of-fix.
### Added
- **`LanguageRepository` port** in `alfred.domain.shared.ports`. Structural
+3 -1
View File
@@ -113,7 +113,9 @@ def _parse_season_episode(text: str) -> tuple[int, int | None, int | None] | Non
if not episodes:
return None
return season, episodes[0], episodes[1] if len(episodes) >= 2 else None
# For chained multi-episode markers (E09E10E11), the range is the
# first → last episode. Intermediate values are implied.
return season, episodes[0], episodes[-1] if len(episodes) >= 2 else None
# NxNN form
if "X" in upper:
@@ -1,14 +1,13 @@
release_name: "Archer.S14E09E10E11.1080p.WEB.h264-ETHEL"
# Tech debt: triple-episode chain (E09E10E11) — current parser captures
# episode=9 and episode_end=10, but E11 is lost. Anti-regression: lock in
# the partial behavior so any future improvement is intentional.
# Triple-episode chain (E09E10E11) — the parser collapses the chain to a
# range (episode=first, episode_end=last). Intermediate values are implied.
parsed:
title: "Archer"
year: null
season: 14
episode: 9
episode_end: 10
episode_end: 11
quality: "1080p"
source: "WEB"
codec: "h264"