Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
473 commits
Select commit Hold shift + click to select a range
fc246b8
Merge pull request #682 from blurbery/agent/protect-s3-credentials
Quick104 Aug 20, 2026
e0fa219
fix(catalog): move the person photo triple as a unit during enrichment
Quick104 Aug 20, 2026
672981e
Merge pull request #685 from blurbery/fix/person-photo-cache-enrichment
Quick104 Aug 20, 2026
1fde20d
docs(contrib): require a readability prose pass and vendor the unslop…
Quick104 Aug 21, 2026
21bed94
Merge pull request #663 from tomislav/codex/fix-request-poster-hover-…
Quick104 Aug 21, 2026
0b87888
Merge branch 'main' into cursor/critical-bug-management-446d
Quick104 Aug 21, 2026
78b5d39
Merge pull request #679 from Silo-Server/cursor/critical-bug-manageme…
Quick104 Aug 21, 2026
97dbf53
fix(access): ungroup accounts promoted to admin
cursoragent Aug 21, 2026
4c94812
fix(access): make admin accounts ungrouped everywhere
Quick104 Aug 21, 2026
537cb1b
fix(access): enforce admin ungrouping atomically and in list responses
Quick104 Aug 21, 2026
b8fcaa1
fix(access): stage the admin-ungrouped constraint and clear pending a…
Quick104 Aug 21, 2026
91c3d7b
Merge pull request #705 from Silo-Server/cursor/critical-bug-manageme…
Quick104 Aug 21, 2026
a88b434
fix(web): smooth detail action interactions
blurbery Aug 22, 2026
29ae198
test(web): cover detail interaction variants
blurbery Aug 22, 2026
07383f7
feat(playback): add header-authenticated media transport
Quick104 Aug 22, 2026
d762264
feat(playback): negotiate bounded software decode
Quick104 Aug 22, 2026
559b0f2
fix(web): scale poster overlays with card width
blurbery Aug 22, 2026
6d4fc90
fix(web): scale poster overlay shadows
blurbery Aug 22, 2026
c64eef2
fix(web): prevent detail action hover repaints
blurbery Aug 22, 2026
67420b1
fix(web): keep detail action hover compositor-only
blurbery Aug 22, 2026
dcefe29
fix(web): preserve disabled action affordance
blurbery Aug 22, 2026
97b9833
fix(abs): key the login rate limiter on the transport peer
Quick104 Aug 22, 2026
ef565d8
fix(jellycompat): key stream telemetry on the upstream playback session
Quick104 Aug 22, 2026
9bd8c31
fix(streamtelemetry): make Truncated recoverable and hold early realt…
Quick104 Aug 22, 2026
6ec97c1
fix(httpstream): give every ReadFrom slice a full stall window
Quick104 Aug 22, 2026
5a9e6e7
fix(proxy): credit the egress meter often enough to measure slow viewers
Quick104 Aug 22, 2026
ff19ab6
fix(downloads): roll the direct-download deadline and carry the profile
Quick104 Aug 22, 2026
fc46ad8
fix(streamtelemetry): fold ranged transfers, guard delta publishes, s…
Quick104 Aug 22, 2026
813509d
refactor(httpstream): one ForwardReadFrom helper for all nine wrappers
Quick104 Aug 22, 2026
f25ef9b
refactor(streamtelemetry): share viewer-IP, env and client-info helpers
Quick104 Aug 22, 2026
88451ee
docs: document the admin stream-telemetry parity endpoint
Quick104 Aug 22, 2026
a1ba4d6
docs: distill the streaming write-deadline design into architecture
Quick104 Aug 23, 2026
d116d49
Merge branch 'main' into feat/stream-telemetry-enforcer
Quick104 Aug 23, 2026
6b3bca2
chore: ignore skill secrets and state paths
Quick104 Aug 23, 2026
5b7cb63
feat(playback): tokenless V3 playback, DV7 client transforms, admin t…
Quick104 Aug 23, 2026
94122d6
perf(metadata): bulk persist seasons and episodes
blurbery Aug 23, 2026
9f22011
test(metadata): fix localized fixture spelling
blurbery Aug 23, 2026
a98b87d
perf(web): reduce detail interaction latency
blurbery Aug 23, 2026
fa67b3a
test(metadata): adapt query-count coverage to upstream API
blurbery Aug 23, 2026
bbca34f
fix(playback): regenerate conformance matrix for software_video_decod…
Quick104 Aug 23, 2026
4036543
fix: address latency review feedback
blurbery Aug 23, 2026
8e3f03f
fix(downloads): apply the coarse resolution ceiling when the detailed…
Quick104 Aug 23, 2026
d6ba68b
feat(playback): restore proxy and transcode-node egress for header-au…
Quick104 Aug 23, 2026
5875949
fix(playback): address automated review findings on tokenless proxy e…
Quick104 Aug 23, 2026
9b09ae3
fix(playback): survive transcode-node restarts on tokenless attempts …
Quick104 Aug 23, 2026
413ec6b
test(transcodenode): check CloseProcess error in tokenless reconstruc…
Quick104 Aug 23, 2026
f7ec1e1
Merge pull request #723 from Silo-Server/codex/aether-tokenless-playb…
Quick104 Aug 23, 2026
f12fa1c
Merge branch 'main' into feat/stream-telemetry-enforcer
Quick104 Aug 23, 2026
080c577
fix(streamtelemetry): enrol tokenless /stream/v3 proxy routes
Quick104 Aug 23, 2026
003e9ba
feat(streamtelemetry): enable by default and derive distributed mode …
Quick104 Aug 23, 2026
6301b7e
feat(streamtelemetry): observe every route family by default
Quick104 Aug 23, 2026
cfaab97
Merge pull request #667 from Silo-Server/feat/stream-telemetry-enforcer
Quick104 Aug 23, 2026
5af2a09
feat(scanner): persist H.264 copy-safety verdicts and move analysis o…
Quick104 Aug 23, 2026
f027119
feat(playback): optimistic remux race with server-initiated plan inva…
Quick104 Aug 23, 2026
38ce1a3
fix(playback): sweep sessions that register after a copy-unsafe verdi…
Quick104 Aug 23, 2026
d917f59
fix(playback): harden copy-safety invalidation against review findings
Quick104 Aug 23, 2026
fc09195
fix(playback): validate realtime command ownership before consuming it
Quick104 Aug 23, 2026
cd0c31f
fix(playback): close copy-safety races in replan commits, transport s…
Quick104 Aug 23, 2026
aa0bf35
fix(playback): gate copy-unsafe revivals before reconstruction and pe…
Quick104 Aug 23, 2026
120547b
fix(playback): re-engage the copy-safety race on revival and close ge…
Quick104 Aug 23, 2026
6f8db02
Merge pull request #734 from Silo-Server/feat/optimistic-remux-copy-s…
Quick104 Aug 23, 2026
b6a504d
feat(playback): let original players manage HDR
Quick104 Aug 23, 2026
820eef7
Merge pull request #737 from Silo-Server/codex/aether-managed-original
Quick104 Aug 24, 2026
5043fd7
fix(catalog): reject disabled dual-library items
blurbery Aug 23, 2026
045a51d
chore(catalog): satisfy changed-lines lint
blurbery Aug 23, 2026
0047d50
fix(sections): enforce disabled episode hydration scope
blurbery Aug 24, 2026
a7b59dc
fix(scanner): scope file reconciliation to changed path
Quick104 Aug 24, 2026
3e9ddfb
fix(scanner): unify present-state repair and drop dead extras sync call
Quick104 Aug 24, 2026
970ebf7
Merge pull request #741 from Silo-Server/t3code/investigate-database-…
Quick104 Aug 24, 2026
4858946
Merge branch 'main' into feat/add-hdr-sdr-tonemapping
Quick104 Aug 24, 2026
93a88fa
docs: remove committed tone-map implementation plan
Quick104 Aug 24, 2026
90d1459
docs: add feature-changelog entry for HDR tone mapping
Quick104 Aug 24, 2026
432cbcc
test(playback): widen gpudetect probe deadline to deflake capability …
Quick104 Aug 24, 2026
406ccfd
fix(jellycompat): default omitted IsRequired to true and evaluate rea…
Quick104 Aug 24, 2026
3bdc9bf
docs: drop committed plan artifacts and add changelog entry
Quick104 Aug 24, 2026
ebaf6c2
fix(jellycompat): let unknown condition values honor IsRequired
Quick104 Aug 24, 2026
0eab2f2
fix(playback): clean stale copy output on recipe-changing restarts so…
Quick104 Aug 24, 2026
eb6ee2a
Merge branch 'main' into codex/fix-webos-anamorphic-condition
Quick104 Aug 24, 2026
056a06d
Merge pull request #654 from tomislav/codex/fix-webos-anamorphic-cond…
Quick104 Aug 24, 2026
69b6d86
fix(web): resume playback after a server-invalidated plan swaps the t…
Quick104 Aug 24, 2026
da87016
fix(playback): use native HLS for Safari HDR remuxes
tomislav Aug 15, 2026
c857d4e
fix(playback): harden copy-remux startup
tomislav Aug 15, 2026
b908b35
fix(playback): address review findings on Safari native HLS remux
Quick104 Aug 24, 2026
80d3b9e
Merge pull request #653 from tomislav/codex/issue-648-safari-native-hls
Quick104 Aug 24, 2026
ae11ed3
feat(playback): add tiered quality ladder
Quick104 Aug 24, 2026
7b0d2b2
fix(playback): prefer local hardware tone mapping
Quick104 Aug 24, 2026
721e7cd
fix(playback): preserve Intel tone-map brightness
Quick104 Aug 24, 2026
4b6c05e
fix(web): avoid duplicate playback initialization
Quick104 Aug 25, 2026
becbdf6
fix(web): include subtitles in initial playback plan
Quick104 Aug 25, 2026
dfe5847
fix(web): show active quality selection
Quick104 Aug 25, 2026
ba28655
fix(web): keep player menus above timeline
Quick104 Aug 25, 2026
174be99
Merge branch 'main' into feat/add-hdr-sdr-tonemapping
Quick104 Aug 25, 2026
a0a31e8
Merge pull request #634 from neurekadev/feat/add-hdr-sdr-tonemapping
Quick104 Aug 25, 2026
6318c49
fix(web): avoid duplicate audiobook playback starts
Quick104 Aug 25, 2026
20ae82a
Merge pull request #744 from Silo-Server/t3code/fix-audiobook-duplica…
Quick104 Aug 25, 2026
194c26a
fix(playback): boost stereo downmix loudness
Quick104 Aug 25, 2026
e01d720
fix(playback): fence stereo downmix executors
Quick104 Aug 25, 2026
67e76d6
fix(playback): bind stereo downmix recipe shape
Quick104 Aug 25, 2026
2d688c1
fix(web): omit bitmap subtitles from the initial playback start
cursoragent Aug 25, 2026
621ff08
fix(web): recognize legacy bitmap subtitle codecs
Quick104 Aug 25, 2026
987eb6f
fix(web): avoid initial subtitle transport reload
Quick104 Aug 25, 2026
da1de46
Merge pull request #713 from blurbery/fix/web-detail-action-hover-polish
Quick104 Aug 25, 2026
327c84a
Merge pull request #738 from blurbery/fix/disabled-library-dual-membe…
Quick104 Aug 25, 2026
3609eb3
fix(playback): speed bitmap subtitle startup
Quick104 Aug 25, 2026
c9923b2
fix(scanner): clear stale skipped roots
Quick104 Aug 25, 2026
dc0d703
Merge pull request #755 from Silo-Server/codex/fix-stale-skipped-roots
Quick104 Aug 25, 2026
e085bb1
Merge pull request #748 from Silo-Server/codex/playback-stereo-downmi…
Quick104 Aug 25, 2026
72ce865
fix(web): disable native MKV playback in Firefox
Quick104 Aug 25, 2026
55ff5fe
fix(playback): respect progressive audio codec scope
Quick104 Aug 25, 2026
4c1bbf1
fix(playback): choose audio adaptation per delivery
Quick104 Aug 25, 2026
44cee69
chore(playback): deduplicate HLS adaptation reason
Quick104 Aug 25, 2026
6498d42
fix(playback): preserve scoped audio invariants
Quick104 Aug 25, 2026
3d33e8a
fix(playback): isolate remux delivery candidates
Quick104 Aug 25, 2026
370a5cc
fix(web): keep card menus visible without hover (#759)
Quick104 Aug 25, 2026
27b1824
fix(playback): prefer source-preserving remux
Quick104 Aug 25, 2026
819a18f
Merge pull request #757 from Silo-Server/codex/fix-firefox-mkv-streaming
Quick104 Aug 25, 2026
481dc4d
perf(playback): reduce startup latency safely
Quick104 Aug 25, 2026
5f37963
perf(playback): reduce startup latency safely
Quick104 Aug 25, 2026
6bbdb5a
Revert "perf(playback): reduce startup latency safely"
Quick104 Aug 25, 2026
1c8048b
Merge remote-tracking branch 'origin/main' into codex/pr-751-bitmap-a…
Quick104 Aug 25, 2026
1685bc1
fix(playback): harden bitmap startup fallback
Quick104 Aug 25, 2026
fcf910f
Merge pull request #751 from Silo-Server/cursor/critical-bug-manageme…
Quick104 Aug 25, 2026
48ed658
fix(playback): harden startup latency paths
Quick104 Aug 25, 2026
e9dcfa8
Merge remote-tracking branch 'origin/main' into codex/general-playbac…
Quick104 Aug 25, 2026
0fca5ab
fix(playback): complete startup shutdown hardening
Quick104 Aug 25, 2026
8be07be
Merge pull request #761 from Silo-Server/codex/general-playback-startup
Quick104 Aug 25, 2026
4215c98
feat(web): improve poster card action controls
blurbery Aug 22, 2026
e29b9ad
fix(web): refine watched indicator placement
blurbery Aug 22, 2026
29d77ff
feat(web): add watched shortcuts to media cards
blurbery Aug 22, 2026
8c089b3
fix(web): correct compact card and overlay layouts
blurbery Aug 22, 2026
0abc2cc
fix(web): refresh card overlay defaults after save
blurbery Aug 22, 2026
fcea830
feat(web): add watched shortcuts to episode cards
blurbery Aug 22, 2026
464eabb
fix(web): show watched shortcuts for untouched episodes
blurbery Aug 22, 2026
76dc5d5
fix(web): address review feedback
blurbery Aug 22, 2026
82533c8
fix(web): support hybrid-pointer card actions
blurbery Aug 22, 2026
1be582c
refactor(web): centralize poster action sizing
blurbery Aug 22, 2026
742074f
fix(web): address poster quick action review findings
Quick104 Aug 26, 2026
f7f66a2
fix: address code review findings
Quick104 Aug 26, 2026
4b05b16
Merge origin/main into perf/season-episode-latency
Quick104 Aug 26, 2026
6ba6479
feat(images): client-selectable artwork size via image_size (#742)
Quick104 Aug 26, 2026
8d6ec86
test(web): align ActionBar expectations with unified glass hover
Quick104 Aug 26, 2026
4b0c4e3
Merge pull request #724 from blurbery/perf/season-episode-latency
Quick104 Aug 26, 2026
745b767
docs: remove feature changelog requirement
Quick104 Aug 26, 2026
e4aad35
fix(playback): surface 4K-transcode policy in errors and version fall…
Quick104 Aug 25, 2026
9453138
Merge pull request #719 from blurbery/fix/proportional-card-overlays
Quick104 Aug 26, 2026
a1a2ca2
Merge remote-tracking branch 'origin/main' into feat/web-watched-indi…
Quick104 Aug 26, 2026
9074aea
Merge pull request #714 from blurbery/feat/web-watched-indicator-sett…
Quick104 Aug 26, 2026
af39018
fix(playback): rank 4K alternate versions safely
Quick104 Aug 26, 2026
9e09675
fix(web): stop carousel hover clipping and inset card progress bars
Quick104 Aug 26, 2026
282a5f6
fix(playback): classify 8K under 4K policy
Quick104 Aug 26, 2026
44d1e62
fix(playback): exhaust alternate version candidates
Quick104 Aug 26, 2026
9acea53
Merge pull request #763 from Silo-Server/t3code/fix-carousel-hover-cl…
Quick104 Aug 26, 2026
f3b95fc
perf(web): split and precompress bootstrap assets
blurbery Aug 23, 2026
a682c31
chore(web): reuse content encoding constants
blurbery Aug 23, 2026
d2fbdac
fix(web): set compressed asset content length
blurbery Aug 23, 2026
22792a6
fix(web): honor encoding and loading semantics
blurbery Aug 23, 2026
387285a
fix(web): preserve lazy player boundary
Quick104 Aug 26, 2026
a2b47e8
fix(collections): restrict MDBList sync fetches to mdblist.com
cursoragent Aug 26, 2026
af68239
feat(web): optimize video player UI for mobile touch devices
Quick104 Aug 26, 2026
9d66b52
fix(web): mobile layout fixes for item detail pages and seek bar
Quick104 Aug 26, 2026
e82dc4c
Merge pull request #775 from Silo-Server/t3code/mobile-playback-ui
Quick104 Aug 26, 2026
1fb966f
Merge pull request #728 from blurbery/perf/web-bootstrap-upstream
Quick104 Aug 26, 2026
a68ec92
fix(catalog): hide episodes of disabled dual-library series (#762)
cursor[bot] Aug 26, 2026
91a6341
docs: update Discord invite link (#777)
Quick104 Aug 26, 2026
22e4d24
docs: use HTTPS for Discord invite (#778)
Quick104 Aug 26, 2026
25ac08c
fix(collections): align template URL validation
Quick104 Aug 26, 2026
0a3702e
feat(branding): support light/dark theme logo variants (#779)
Quick104 Aug 26, 2026
a036caa
feat(web): replace touch card overlays with long-press action sheet (…
Quick104 Aug 26, 2026
0213fb3
fix(catalog): bound search outbox retention
Quick104 Aug 26, 2026
dfc16c2
Merge pull request #784 from Silo-Server/t3code/cleanup-search-event-…
Quick104 Aug 26, 2026
fc53c35
feat(taskmanager): add bounded task history retention cleanup
Quick104 Aug 27, 2026
24bcabd
refactor(taskmanager): address review findings on history retention
Quick104 Aug 27, 2026
eaf87ff
Merge pull request #785 from Silo-Server/t3code/task-execution-retention
Quick104 Aug 27, 2026
6865cba
feat(catalog): persist Watchlist and Favorites browse sort per profile
Quick104 Aug 27, 2026
6700ccd
fix(web): serialize an explicit Date Added pick on Favorites
Quick104 Aug 27, 2026
1d21b3c
Merge pull request #787 from Silo-Server/t3code/persist-user-profile-…
Quick104 Aug 27, 2026
cda8327
fix(catalog): close review gaps in personal-list sort preferences
Quick104 Aug 27, 2026
f1f3595
fix(catalog): keep sort-preference credentials and paging sort stable
Quick104 Aug 27, 2026
87821e7
Merge pull request #788 from Silo-Server/t3code/personal-sort-prefere…
Quick104 Aug 27, 2026
e7a15c1
Merge pull request #769 from Silo-Server/cursor/critical-bug-manageme…
Quick104 Aug 27, 2026
e9b48b2
Merge pull request #747 from Silo-Server/t3code/improve-4k-transcode-…
Quick104 Aug 27, 2026
8164fd5
chore: centralize agent skills
Quick104 Aug 27, 2026
97362b0
fix(catalog): address review findings on TV recents and poster playback
Quick104 Aug 27, 2026
d9ec5e8
Merge remote-tracking branch 'origin/main' into pr-561
Quick104 Aug 27, 2026
956d797
perf(catalog): let playable-target leaf lookups use media_files indexes
Quick104 Aug 27, 2026
c820a8f
perf(catalog): single availability pass for recently-added TV events
Quick104 Aug 27, 2026
39c587f
perf(catalog): rank recently-added TV events before computing page co…
Quick104 Aug 27, 2026
3c82a48
fix(catalog): type the recently-added rank cutoff parameters
Quick104 Aug 27, 2026
3242f76
Merge pull request #561 from Rhainland/feature/home-categories-rework
Quick104 Aug 27, 2026
f3da0f1
feat(playback): VideoToolbox hardware transcoding on macOS (#439)
Quick104 Aug 27, 2026
b29aaf9
perf(web): eliminate item detail interaction jank (#540)
Rhainland Aug 27, 2026
1dfab25
fix(playback): accept constrained baseline decoders
Rhainland Aug 11, 2026
b4e4ed5
Merge pull request #597 from Rhainland/suspense/fix-h264-constrained-…
Quick104 Aug 27, 2026
83b354e
feat(web): make card quick actions configurable
blurbery Aug 27, 2026
85ded4c
fix(web): address code review findings for card quick actions
Quick104 Aug 27, 2026
1682a25
feat(web): default card quick actions off with per-profile override
Quick104 Aug 27, 2026
00329ce
fix(web): satisfy noUncheckedIndexedAccess in overlay settings test
Quick104 Aug 27, 2026
72545d1
feat(web): let profiles override the server-wide overlay default
Quick104 Aug 27, 2026
72cba1c
Optimize Docker dependency caching
Quick104 Aug 28, 2026
a36a3be
refactor(settings): dedupe card quick-action and overlay plumbing
Quick104 Aug 28, 2026
3e42ff5
Merge pull request #786 from blurbery/feat/configurable-card-quick-ac…
Quick104 Aug 28, 2026
35b93b4
test(jellycompat): synchronize terminal fallback assertion
Quick104 Aug 28, 2026
930d86d
feat: sync silo-server main upstream (~413 commits)
cursoragent Aug 28, 2026
79a0f47
fix(ci): restore green main CI checks
cursoragent Aug 28, 2026
0fecce0
fix(web): bump pdfjs-dist to patch GHSA-hq66-cqwq-w95j
cursoragent Aug 28, 2026
cd16528
chore(deps): pin prairie-plugin-sdk for watch-sync device auth
cursoragent Aug 28, 2026
a11d981
Merge origin/main into cursor/sync-silo-server-d673
cursoragent Aug 28, 2026
5d60c49
fix(config): use prairie.local jellycompat server ID default
cursoragent Aug 28, 2026
7ce9d7b
fix(sync): restore build after main merge and CI blockers
cursoragent Aug 28, 2026
6a6ee8a
fix(sync): resolve PR #174 CI failures across Go and web
cursoragent Aug 28, 2026
0a9f7b4
fix(ci): resolve Go lint and web typecheck failures on PR #174
cursoragent Aug 28, 2026
d7b038c
fix(notifications): add ApplePushTopicPrairie for push sender tests
cursoragent Aug 28, 2026
d6e4a10
fix(metadata): align image cache tests with silo implementation
cursoragent Aug 28, 2026
e485ff5
fix(artworkstore): drop main-only WaitAVIFBackfill from local cache test
cursoragent Aug 28, 2026
16b8a23
feat(images): restore AVIF backfill while keeping silo libvips WebP
cursoragent Aug 28, 2026
6ceb671
fix(ci): align tests with hybrid WebP/AVIF and silo handler shapes
cursoragent Aug 28, 2026
8209f2d
fix(ci): resolve all merge-base golangci-lint findings
cursoragent Aug 28, 2026
f6bab58
fix: restore prairie wiring dropped in silo sync
cursoragent Aug 28, 2026
26a0abb
feat(admin): reorganize admin settings into 9 tabs with Essential/Adv…
Quick104 Aug 21, 2026
f499b28
fix(admin): rename S3 Image Caching and require a public bucket to en…
Quick104 Aug 21, 2026
b126ae1
feat(admin): redesign settings around a status overview and row-based…
Quick104 Aug 21, 2026
9793ffd
refactor(admin): strip decoration and prose from the settings redesign
Quick104 Aug 21, 2026
95ebb69
fix(admin): match overview card titles to the rail and show one resta…
Quick104 Aug 22, 2026
7d3be3b
style(admin): give each settings group its own inset panel so groups …
Quick104 Aug 22, 2026
524d0b9
fix(admin): improve settings overview hierarchy
Quick104 Aug 26, 2026
d76aa0c
fix(admin): expose settings groups on overview
Quick104 Aug 26, 2026
d4de19d
fix(admin): remove settings state previews
Quick104 Aug 26, 2026
feb4bb0
fix(admin): make settings categories standalone pages
Quick104 Aug 26, 2026
a7a386a
feat(admin): list watch-provider plugins on the renamed Watch Provide…
Quick104 Aug 26, 2026
e756db5
feat(admin): replace the secret Replace flow with a masked always-edi…
Quick104 Aug 26, 2026
d722de2
feat(admin): reuse the user settings shell and panels across admin se…
Quick104 Aug 26, 2026
803276d
feat(admin): address settings UX review feedback
Quick104 Aug 27, 2026
1b0a461
fix(admin): address PR review findings and lint on the settings redesign
Quick104 Aug 27, 2026
47be5e4
fix(admin): register tile drafts with the unsaved guard and gate plug…
Quick104 Aug 27, 2026
81376e6
fix(admin): address second-round review findings on the redesign
Quick104 Aug 27, 2026
6cf6e5e
fix(admin): scope restart warnings per key, single rate-limit snapsho…
Quick104 Aug 27, 2026
b2d044d
fix(admin): register remaining credential drafts with the guard; hone…
Quick104 Aug 27, 2026
6ecd792
fix(admin): count a saved false as configured plugin state
Quick104 Aug 27, 2026
580e11b
fix(admin): validate bucket clears on the single-key route; document …
Quick104 Aug 27, 2026
7532542
fix(admin): include derived jellyfin restart in the reasons list; ded…
Quick104 Aug 27, 2026
8cdf4a6
feat(admin): opt-in clear for stored secrets; email readiness require…
Quick104 Aug 27, 2026
457d6f6
fix(web): coalesce progress ticks into one trailing home refresh
Quick104 Aug 27, 2026
c068949
fix(web): reconcile settings changes after rebase
Quick104 Aug 28, 2026
69d6a89
fix(admin): register the push relay URL draft with the unsaved guard
Quick104 Aug 28, 2026
8b12db1
Merge pull request #708 from Silo-Server/t3code/simplify-admin-settin…
Quick104 Aug 28, 2026
ac2bcc7
merge: sync silo/main through admin settings UX (#708)
cursoragent Aug 28, 2026
8a9cee8
merge: link silo upstream history and sync admin UX
cursoragent Aug 28, 2026
56f3862
fix: finish silo upstream merge for prairie-only features
cursoragent Aug 28, 2026
24b2ecb
fix: resolve PR #175 CI failures after silo upstream merge
cursoragent Aug 28, 2026
08dbaf9
fix: restore ContinueWatchingCard artwork srcSet and format setup step
cursoragent Aug 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion cmd/prairie/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -1180,7 +1180,13 @@ func main() {
s.SetLiteraryWorkLinker(literaryWorkService)
s.SetEbookEnrichmentQueue(ebooks.NewEnrichmentQueue(deps.DB))
deps.Scanner = s
deps.ProbeEnsurer = scanner.NewPlaybackProbeEnsurer(fileRepo, ffprobePath, cfg.Playback.FFmpegPath, 10*time.Second)
probeEnsurer := scanner.NewPlaybackProbeEnsurer(fileRepo, ffprobePath, cfg.Playback.FFmpegPath, 10*time.Second)
// Probe repair and the copy-safety scan follow playback.ffmpeg_path
// without a restart; the scanner's own ffprobe path above still does not.
configWatcher.OnChange(func(_, updated *config.Config) {
probeEnsurer.SetFFmpegPath(updated.Playback.FFmpegPath)
})
deps.ProbeEnsurer = probeEnsurer
slog.Info("scanner initialized")
}

Expand Down
145 changes: 144 additions & 1 deletion contracts/settings/v1/conformance.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"fixture_version": 1,
"manifest_revision": 7,
"manifest_revision": 8,
"description": "Cross-platform conformance cases for settings resolution. Every case runs against the shipped manifest in this directory: definitions are referenced by key, never restated, so an expectation can only be satisfied by resolving the real contract. Each platform's resolver (Go in internal/settingsresolve, TypeScript in web/src/lib/settingsResolve.ts, Kotlin and Swift in the client repos) runs every case through a hand-written runner; a runner must fail on any fixture field it does not know, because schema drift in the fixture itself is drift. A case's constraint_bindings attach a constraint to a copy of a real definition so constraint semantics stay testable even while no shipped definition carries that constraint kind. In expected entries, constrained:true requires stored_value and constraint_kind to be present, and stored_value may be null to mean the authored value was JSON null.",
"cases": [
{
Expand Down Expand Up @@ -733,6 +733,149 @@
"source": "default"
}
]
},
{
"name": "card_overlays_enabled_profile_opt_out",
"description": "A profile that turned its own overlay badges off resolves false at profile scope; the server-wide default is not part of settings resolution.",
"keys": ["ui.card_overlays_enabled"],
"context": { "profile_id": "p1" },
"stored": [
{
"key": "ui.card_overlays_enabled",
"scope": "profile",
"profile_id": "p1",
"value": false
}
],
"expected": [
{
"key": "ui.card_overlays_enabled",
"value": false,
"source": "profile"
}
]
},
{
"name": "card_overlays_enabled_profile_opt_in",
"description": "A profile that turned its own overlay badges on resolves true at profile scope, which is what lets it override a server-wide default of off.",
"keys": ["ui.card_overlays_enabled"],
"context": { "profile_id": "p1" },
"stored": [
{
"key": "ui.card_overlays_enabled",
"scope": "profile",
"profile_id": "p1",
"value": true
}
],
"expected": [
{
"key": "ui.card_overlays_enabled",
"value": true,
"source": "profile"
}
]
},
{
"name": "card_overlays_absent_express_no_preference",
"description": "Nothing stored resolves both card-overlay keys to null with source \"default\", which is what lets the server-wide admin defaults apply.",
"keys": ["ui.card_overlays", "ui.card_overlays_enabled"],
"context": { "profile_id": "p1" },
"stored": [],
"expected": [
{
"key": "ui.card_overlays",
"value": null,
"source": "default"
},
{
"key": "ui.card_overlays_enabled",
"value": null,
"source": "default"
}
]
},
{
"name": "card_quick_actions_profile_choice_wins",
"description": "A profile that picked favorites-only shortcuts resolves at profile scope instead of falling through to the server-wide default.",
"keys": ["ui.card_quick_actions"],
"context": { "profile_id": "p1" },
"stored": [
{
"key": "ui.card_quick_actions",
"scope": "profile",
"profile_id": "p1",
"value": "favorites"
}
],
"expected": [
{
"key": "ui.card_quick_actions",
"value": "favorites",
"source": "profile"
}
]
},
{
"name": "card_quick_actions_enabled_profile_opt_out",
"description": "A profile that turned its own quick actions off resolves false at profile scope; the server-wide default is not part of settings resolution.",
"keys": ["ui.card_quick_actions_enabled"],
"context": { "profile_id": "p1" },
"stored": [
{
"key": "ui.card_quick_actions_enabled",
"scope": "profile",
"profile_id": "p1",
"value": false
}
],
"expected": [
{
"key": "ui.card_quick_actions_enabled",
"value": false,
"source": "profile"
}
]
},
{
"name": "card_quick_actions_enabled_profile_opt_in",
"description": "A profile that turned its own quick actions on resolves true at profile scope, which is what lets it override a server-wide default of off.",
"keys": ["ui.card_quick_actions_enabled"],
"context": { "profile_id": "p1" },
"stored": [
{
"key": "ui.card_quick_actions_enabled",
"scope": "profile",
"profile_id": "p1",
"value": true
}
],
"expected": [
{
"key": "ui.card_quick_actions_enabled",
"value": true,
"source": "profile"
}
]
},
{
"name": "card_quick_actions_absent_express_no_preference",
"description": "Nothing stored resolves both quick-action keys to null with source \"default\", which is what lets the server-wide admin defaults apply.",
"keys": ["ui.card_quick_actions", "ui.card_quick_actions_enabled"],
"context": { "profile_id": "p1" },
"stored": [],
"expected": [
{
"key": "ui.card_quick_actions",
"value": null,
"source": "default"
},
{
"key": "ui.card_quick_actions_enabled",
"value": null,
"source": "default"
}
]
}
]
}
57 changes: 55 additions & 2 deletions contracts/settings/v1/manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"api_version": 1,
"revision": 7,
"revision": 8,
"option_sets": {
"playback_audio_languages": {
"type": "language_tag",
Expand Down Expand Up @@ -828,7 +828,60 @@
"category": "appearance",
"label": "Poster badges",
"description": "Which badges appear on poster cards, and where.",
"notes": "Registered from the legacy unprefixed key card_overlays, which reached the server only through the unknown-key extension bag — stored as an arbitrary string with no validation. null means the user has expressed no preference, which is what lets the server-wide admin default in the overlay-config endpoint apply; writing a resolved-but-unchosen value would silently pin them. The admin default and the enabled kill switch stay in server_settings and are not user settings."
"notes": "Registered from the legacy unprefixed key card_overlays, which reached the server only through the unknown-key extension bag — stored as an arbitrary string with no validation. null means the user has expressed no preference, which is what lets the server-wide admin default in the overlay-config endpoint apply; writing a resolved-but-unchosen value would silently pin them. The server-wide default configuration stays in server_settings and is not a user setting. This key describes which badges to show, not whether to show them — that is ui.card_overlays_enabled."
},
{
"key": "ui.card_overlays_enabled",
"introduced_in": 8,
"persistence": "remote",
"allowed_scopes": ["profile"],
"resolution_order": ["profile", "default"],
"value_schema": { "type": "boolean", "nullable": true },
"default_value": null,
"platforms": ["web"],
"category": "appearance",
"label": "Card overlays enabled",
"description": "Show overlay badges on media cards.",
"recommended_control": "switch",
"notes": "null means the profile has not chosen whether overlay badges are enabled, so the server-wide default from the overlay-config endpoint applies. An explicit profile choice overrides the server-wide default in either direction."
},
{
"key": "ui.card_quick_actions",
"introduced_in": 8,
"persistence": "remote",
"allowed_scopes": ["profile"],
"resolution_order": ["profile", "default"],
"value_schema": {
"type": "enum",
"nullable": true,
"values": [
{ "value": "both", "label": "Both" },
{ "value": "favorites", "label": "Favorites only" },
{ "value": "watched", "label": "Watch indicator only" }
]
},
"default_value": null,
"platforms": ["web"],
"category": "appearance",
"label": "Card quick actions",
"description": "Which favorite and watched shortcuts appear on media cards.",
"recommended_control": "select",
"notes": "null means the user has not chosen a mode, so the server-wide default from the overlay-config endpoint applies. The mode applies whenever quick actions are effectively enabled for the profile."
},
{
"key": "ui.card_quick_actions_enabled",
"introduced_in": 8,
"persistence": "remote",
"allowed_scopes": ["profile"],
"resolution_order": ["profile", "default"],
"value_schema": { "type": "boolean", "nullable": true },
"default_value": null,
"platforms": ["web"],
"category": "appearance",
"label": "Card quick actions enabled",
"description": "Show the selected favorite and watched shortcuts on media cards.",
"recommended_control": "switch",
"notes": "null means the profile has not chosen whether quick actions are enabled, so the server-wide default from the overlay-config endpoint applies. An explicit profile choice overrides the server-wide default in either direction."
},
{
"key": "ui.next_up_mode",
Expand Down
Loading
Loading