Miguel Palhas
384e260d72
Merge #121 : daily series metadata refresh
...
Closes #121
2026-08-23 17:47:46 +01:00
Miguel Palhas
0c58aae707
feat(daemon): daily series metadata refresh lane
2026-08-23 17:45:09 +01:00
Miguel Palhas
808145d73b
feat(db): stamp series metadata refresh time
2026-08-23 17:45:09 +01:00
Miguel Palhas
360a4bf43c
Merge #127 : unified search covers series and episodes
...
Closes #127
2026-08-23 17:41:22 +01:00
Miguel Palhas
58f2f8361a
feat(web): mirror tv results in search client
2026-08-23 17:39:49 +01:00
Miguel Palhas
9f8d58fd58
feat(api): unified search covers series and episodes
2026-08-23 17:35:40 +01:00
Miguel Palhas
237696417b
Merge #123 : episode and season-pack matching in arr-core
...
Closes #123
2026-08-23 17:10:05 +01:00
Miguel Palhas
e6d3ea4964
feat(core): episode and season-pack matching
2026-08-23 17:06:04 +01:00
Miguel Palhas
8b8e1dcec9
Merge #126 : TV titles in the needs-a-decision queue
...
Closes #126
2026-08-23 16:58:08 +01:00
Miguel Palhas
bb75750548
fix(web): reword comment tripping the token gate
2026-08-23 16:56:19 +01:00
Miguel Palhas
24f5295e87
chore(db): refresh offline query data
2026-08-23 16:55:58 +01:00
Miguel Palhas
28e7dd9a20
Merge #119 : seasons.tracked governs episode intent
...
Closes #119
2026-08-23 16:54:47 +01:00
Miguel Palhas
e3d41c24e1
refactor(daemon): extract tv queue roll-up
2026-08-23 16:53:52 +01:00
Miguel Palhas
8c7c785c74
Merge #125 : season search, deck and grab
...
Closes #125
2026-08-23 16:52:45 +01:00
Miguel Palhas
7632140ef2
fix(api): hoist test helper above statements
2026-08-23 16:52:13 +01:00
Miguel Palhas
8ec1506098
refactor: split long functions in tv attention work
2026-08-23 16:51:29 +01:00
Miguel Palhas
def9650489
style: cargo fmt
2026-08-23 16:50:53 +01:00
Miguel Palhas
fa3b5226e7
feat(api): season tracked toggle marks revealed episodes
2026-08-23 16:50:45 +01:00
Miguel Palhas
75bf6fb14e
feat(api): season search, deck and grab endpoints
2026-08-23 16:49:42 +01:00
Miguel Palhas
42a0895975
feat(db): season_releases table and season policy loader
2026-08-23 16:49:42 +01:00
Miguel Palhas
e8cea4aec5
refactor(api): extract tv attention lanes
2026-08-23 16:47:38 +01:00
Miguel Palhas
135d4b8247
feat(core): season tracked rule over revealed episodes
2026-08-23 16:46:26 +01:00
Miguel Palhas
b801bfbcc3
style: cargo fmt
2026-08-23 16:44:32 +01:00
Miguel Palhas
24f6dab109
feat(api): tv series in the attention queues endpoint
2026-08-23 16:44:16 +01:00
Miguel Palhas
93ccea2de0
fix(api): specials stay out of episode counters
2026-08-23 16:40:38 +01:00
Miguel Palhas
a1971ed82c
feat(daemon): tv series in the needs-a-decision queue
2026-08-23 16:39:06 +01:00
Miguel Palhas
fc93d27f7e
Merge #120 : series.tvdb_id and tvsearch by ID
...
Closes #120
2026-08-23 16:35:34 +01:00
Miguel Palhas
b911f31b03
Merge #118 : exclude season 0 from tracking and status
...
Closes #118
2026-08-23 16:35:30 +01:00
Miguel Palhas
9f4943a01b
style: cargo fmt
2026-08-23 16:34:43 +01:00
Miguel Palhas
1c9caa7478
chore(db): refresh offline query data
2026-08-23 16:32:28 +01:00
Miguel Palhas
a5706cf1b4
feat(tv): search indexers by series tvdb id
2026-08-23 16:32:28 +01:00
Miguel Palhas
46de061e68
feat(db): nullable unique series.tvdb_id
2026-08-23 16:32:25 +01:00
Miguel Palhas
fa3f9cbd91
feat(meta): look up series external ids
2026-08-23 16:32:25 +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
da42467539
Merge #117 : amend DESIGN.md for TV tracking
...
Closes #117
2026-08-23 16:24:17 +01:00
Miguel Palhas
248870bcd0
docs(design): amend TV tracking rules
2026-08-23 16:23:28 +01:00
Miguel Palhas
b96fa2486e
chore(arr): add tracker config for blitz
2026-08-23 16:17:45 +01:00
Miguel Palhas
0c87bf9436
Merge branch 'issue/116-settings'
ci / web (push) Successful in 31s
e2e / e2e (push) Successful in 59s
ci / rust (push) Successful in 1m3s
2026-08-23 15:15:09 +01:00
Miguel Palhas
71c2741d08
feat(web): settings view for roots and policies
...
Own route beside library and queues. Roots edit kind, audience, path
and their policy; policies get a form over the real fields — size
bands as number inputs, score and source weights as numbers,
resolution preference and audio/HDR rules as validated lists. Delete
arms before firing; a 409 from a referenced policy or occupied root
surfaces its message.
2026-08-23 15:14:34 +01:00
Miguel Palhas
9fa1f0cc51
feat(api): policy and root CRUD endpoints
...
Policies and roots were editable only via SQL inside the container.
Full CRUD over both, validated against the vocabulary the policy
engine knows — unknown resolutions or sources answer 422 naming the
field, malformed JSON answers 422, deleting a referenced policy or an
occupied root answers 409. Closes #116 (API half).
2026-08-23 14:56:51 +01:00
Miguel Palhas
951669749b
Merge remote-tracking branch 'origin/main' into issue/114-read-score
ci / web (push) Successful in 53s
ci / rust (push) Successful in 2m10s
e2e / e2e (push) Successful in 2m20s
2026-08-23 12:25:08 +01:00
Miguel Palhas
8f8431eed0
fix(api): rescore release decks at read time
...
GET .../releases returned the stored score column, frozen at
search time. Policy tuning never reached an existing deck. Recompute
from parsed/size/seeders against the current policy and re-sort by
bucket then score; the stored column stays for the daemon's grab-time
winner pick.
Closes #114
2026-08-23 12:25:04 +01:00
Miguel Palhas
401afe5aad
Merge branch 'issue/115-avail-search'
ci / web (push) Successful in 34s
e2e / e2e (push) Successful in 1m6s
ci / rust (push) Successful in 1m11s
2026-08-23 12:23:10 +01:00
Miguel Palhas
aa6961f56c
fix(daemon): search available movies refreshes deck
...
MovieCommand::Search loaded the movie through the gap filter, so an
available movie fell out and the search was a silent no-op. Split the
lane: a gap still searches and grabs, anything already satisfied
refreshes the release deck (DESIGN.md 9.3) without grabbing, and a
blocked movie still refuses.
Closes #115
2026-08-23 12:22:56 +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
532eee7dbe
Merge branch 'issue/112-name-truncate'
ci / web (push) Successful in 38s
e2e / e2e (push) Successful in 1m33s
ci / rust (push) Successful in 1m42s
2026-08-23 11:26:20 +01:00
Miguel Palhas
24be8eb8d2
fix(web): keep grab on the row at every width
2026-08-23 11:26:07 +01:00
Miguel Palhas
9f0ccb0416
feat(web): score heat scale, drop release row expand
...
ci / web (push) Successful in 1m28s
ci / rust (push) Successful in 2m33s
e2e / e2e (push) Successful in 3m13s
Score cells interpolate red-to-green relative to the scores in the
current deck; the click-to-expand panel only repeated row content.
2026-08-23 11:13:11 +01:00
Miguel Palhas
d6345c5305
fix(api,web): movie delete always removes files
...
ci / web (push) Successful in 1m5s
ci / rust (push) Successful in 1m30s
e2e / e2e (push) Successful in 1m27s
Drop the delete_files choice: removing a movie now always unlinks
its §7.4 library folder. Removes the query flag from DELETE
/api/movies/{id} and the OpenAPI params, and the toggle from the UI
confirmation panel — the confirmation itself stays. Path-safety and
torrent-untouched behaviour are unchanged.
Closes #110
2026-08-23 10:21:03 +01:00