Commit Graph

24 Commits

Author SHA1 Message Date
Miguel Palhas 64e711feec fix(core): guard movie id lane against episode tags 2026-08-23 19:13:49 +01:00
Miguel Palhas b51386e004 core: carry season number on Episode
derive_series_status identified specials by looking the episode's
season up in a parallel seasons slice, so a caller passing an
incomplete slice silently reverted to pre-#118 behaviour. The season
number now rides on each episode and the slice is gone.
2026-08-23 18:18:26 +01:00
Miguel Palhas 8d79c7c378 fix(parse): pack titles and degenerate ranges
COMPLETE before the season tag was weak junk, so it stayed in
the title and exact-title matching failed silently (#135). It
now closes the boundary wherever it lands.

S01-S01 produced no claim because the dash-range branch required
last > season; a degenerate range is one season's pack, matching
the rule match_episode lifted.
2026-08-23 18:02:39 +01:00
Miguel Palhas e6d3ea4964 feat(core): episode and season-pack matching 2026-08-23 17:06:04 +01:00
Miguel Palhas def9650489 style: cargo fmt 2026-08-23 16:50:53 +01:00
Miguel Palhas 135d4b8247 feat(core): season tracked rule over revealed episodes 2026-08-23 16:46:26 +01:00
Miguel Palhas 93ccea2de0 fix(api): specials stay out of episode counters 2026-08-23 16:40:38 +01:00
Miguel Palhas 3bd613ec63 feat(core): derived status ignores season 0 2026-08-23 16:32:13 +01:00
Miguel Palhas 2fca8ec09f feat(core): auto-track skips season 0 2026-08-23 16:32:13 +01:00
Miguel Palhas a5b3680746 feat(core): rank resolutions in the score
ci / web (push) Successful in 42s
e2e / e2e (push) Successful in 1m13s
ci / rust (push) Successful in 1m18s
`resolution_pref` only gated eligibility, so every release was scored
against its own resolution's size band and a 23 GB 4K lost to an
at-target 1080p. Each step up the list is now worth `resolution_step`
points, seeded at 300: five gibibytes of 4K overshoot, so a 4K up to
27 GB wins and a bloated one still does not.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 12:01:24 +01:00
Miguel Palhas 54b3ea8a4d fix(daemon): park vanished grabs instead of re-grabbing
ci / web (push) Successful in 42s
ci / rust (push) Successful in 1m22s
e2e / e2e (push) Successful in 1m39s
Overrides #86: removing a torrent by hand in Transmission is human
intent, not a gap to refill. Clear `wanted` and mark the target
`parked` (a new movies/episodes state) rather than reopening it as
`missing`, so neither targeted search nor RSS matching pick it back
up. Blacklist stays untouched, since the release never failed policy.

Closes #108
2026-08-23 09:13:37 +01:00
naps62-yolo 02d99ae558 feat: match RSS results by IMDb id (#99)
ci / web (push) Successful in 28s
e2e / e2e (push) Successful in 53s
ci / rust (push) Successful in 2m15s
2026-08-23 02:44:42 +01:00
naps62-yolo 9f812fac11 feat: season-pack vs per-episode grab selection (#94)
ci / web (push) Successful in 24s
e2e / e2e (push) Successful in 54s
ci / rust (push) Successful in 2m11s
2026-08-23 01:40:53 +01:00
naps62-yolo 225be33b55 feat: RSS sync worker (#91)
ci / web (push) Successful in 26s
e2e / e2e (push) Successful in 53s
ci / rust (push) Successful in 2m13s
2026-08-23 01:04:15 +01:00
naps62-yolo ffb8485939 Import pipeline: probe, hardlink, rename, layout (#82)
ci / rust (push) Failing after 1m43s
ci / web (push) Successful in 58s
e2e / e2e (push) Successful in 1m25s
2026-08-22 23:21:30 +01:00
naps62-yolo f26f278a75 feat(core): derive series status (#80)
ci / rust (push) Successful in 1m49s
ci / web (push) Successful in 31s
e2e / e2e (push) Successful in 2m1s
2026-08-22 22:38:36 +01:00
naps62-yolo fc2a8de58d Propagate auto-track intent to new seasons (#76)
ci / web (push) Successful in 33s
ci / rust (push) Successful in 1m1s
e2e / e2e (push) Successful in 1m41s
2026-08-22 22:26:23 +01:00
naps62-yolo ac6ed8b798 feat(db): add series, season and episode model (#71)
ci / rust (push) Successful in 1m36s
ci / web (push) Successful in 34s
e2e / e2e (push) Successful in 1m41s
2026-08-22 22:04:27 +01:00
naps62-yolo 29d6831c83 feat(core): score by distance from target size (#63)
ci / web (push) Successful in 48s
ci / rust (push) Successful in 1m13s
e2e / e2e (push) Successful in 1m15s
2026-08-22 21:15:26 +01:00
naps62-yolo c7cb3652e5 Enforce Dolby Vision profile policy (#61)
ci / rust (push) Successful in 58s
ci / web (push) Successful in 8s
e2e / e2e (push) Successful in 1m23s
2026-08-22 20:52:06 +01:00
naps62-yolo 302b7cfe72 Language rule: original language, dubs and pt-BR detection (#57)
ci / web (push) Successful in 8s
ci / rust (push) Successful in 1m5s
e2e / e2e (push) Successful in 1m51s
2026-08-22 20:33:02 +01:00
naps62-yolo 45cd30ae69 Policy filter and verdict pipeline (#54)
ci / web (push) Successful in 5s
ci / rust (push) Failing after 12s
e2e / e2e (push) Successful in 1m5s
2026-08-22 20:18:28 +01:00
naps62-yolo 7b57c387fb feat(core): add movie domain types (#47)
ci / web (push) Successful in 6s
ci / rust (push) Successful in 36s
e2e / e2e (push) Successful in 1m10s
2026-08-22 19:40:48 +01:00
Claude f4e63f1ac5 chore: cargo workspace skeleton
Eleven empty crates per DESIGN.md §11, versions and lints pinned once in the
root manifest, Justfile carrying the §12 gate, nix dev shell.

The frontend steps in `just ci` no-op until web/ exists. arr-core carries one
placeholder test because `cargo nextest` fails a zero-test run, and relaxing
that would let a broken filter go green later.

Closes #1

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-22 19:20:47 +01:00