docs: server comments say what the code does, not how it came to be (#6277)
Comment blocks in cmd/minstrel and 30 smaller internal packages, rewritten
to rule 32's standard with each citation read in context: task, milestone
and rule ids go, and so do the stories they were attached to ("used to",
"Before #N", measurements from one install, quotes, pointers to Fabled
Librarian's records and to docs/superpowers files that are not in the
repo). Where a story wrapped a real constraint, the constraint stays as a
present-tense fact.
Comments that had gone stale are corrected:
- taste.Config: the tuned values are overlaid by internal/recsettings;
it is no longer "a later follow-up".
- StorageConfig: the data dir holds art, caches and the stream secret,
not only playlist covers.
- the Subsonic album list and getUser comments describe what they do
today rather than a milestone that would change it.
Checked: the non-comment token stream of every changed file matches
HEAD, and gofmt -l is empty.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+16
-18
@@ -65,34 +65,34 @@ type Server struct {
|
||||
// When nil, Router() constructs a local fallback (test contexts).
|
||||
Bus *eventbus.Bus
|
||||
// PlaylistScheduler fires per-user daily system-playlist builds at
|
||||
// 03:00 in each user's stored timezone (#392 Half B). Constructed
|
||||
// 03:00 in each user's stored timezone. Constructed
|
||||
// in cmd/minstrel/main.go and threaded into the API handlers so
|
||||
// PUT /api/me/timezone and POST /api/auth/register can call
|
||||
// Refresh synchronously.
|
||||
PlaylistScheduler *playlists.Scheduler
|
||||
// RecSettings is the DB-backed recommendation tuning lab (#1250):
|
||||
// RecSettings is the DB-backed recommendation tuning:
|
||||
// scoring-weight profiles + taste-build knobs. Constructed in
|
||||
// cmd/minstrel/main.go (it pushes daily-mix weights into package
|
||||
// playlists at boot); the API layer reads radio weights per request
|
||||
// and serves the admin tuning endpoints from it. Router() constructs
|
||||
// a fallback when nil (tests).
|
||||
RecSettings *recsettings.Service
|
||||
// FingerprintSettings is the DB-backed fingerprinting policy (M400 #3913).
|
||||
// FingerprintSettings is the DB-backed fingerprinting policy.
|
||||
// Constructed in cmd/minstrel/main.go and shared with the scanner and the
|
||||
// fingerprint workers, so a save from the admin card reaches them without a
|
||||
// restart. Router() constructs a fallback when nil (tests).
|
||||
FingerprintSettings *library.FingerprintSettingsService
|
||||
// LoudnessSettings is the DB-backed loudness analysis policy (M464 #4995),
|
||||
// LoudnessSettings is the DB-backed loudness analysis policy,
|
||||
// shared with the loudness backfill. Nil makes the router load its own.
|
||||
LoudnessSettings *library.LoudnessSettingsService
|
||||
// AcoustIDLookup is the AcoustID lookup worker (M401), whose settings,
|
||||
// AcoustIDLookup is the AcoustID lookup worker, whose settings,
|
||||
// status and "look up now" the admin card drives. Nil in test contexts;
|
||||
// one is built (and never run) so the admin routes still answer.
|
||||
AcoustIDLookup *library.AcoustIDLookupWorker
|
||||
// ReacqSettings is the DB-backed missing-file re-acquisition policy
|
||||
// (milestone #290) — the same instance the sweeper in cmd/minstrel/main.go
|
||||
// reads, so a save from the admin card reaches it without a restart
|
||||
// (#3936). Router() constructs a fallback when nil (tests).
|
||||
// ReacqSettings is the DB-backed missing-file re-acquisition policy — the
|
||||
// same instance the sweeper in cmd/minstrel/main.go reads, so a save from
|
||||
// the admin card reaches it without a restart. Router() constructs a
|
||||
// fallback when nil (tests).
|
||||
ReacqSettings *reacquisition.SettingsService
|
||||
// StreamSecret is the HMAC key used by /api/cast/stream-token to
|
||||
// mint signed UPnP / Sonos stream URLs and by /api/tracks/{id}/stream
|
||||
@@ -154,13 +154,11 @@ func (s *Server) Router() http.Handler {
|
||||
tracksSvc := tracks.NewService(s.Pool, s.Logger, s.DataDir)
|
||||
playlistsSvc := playlists.NewService(s.Pool, s.Logger, s.DataDir)
|
||||
smtpSender := mailer.NewSMTPSender(s.Pool, s.Logger.With("component", "mailer"))
|
||||
// Live-event bus for SSE subscribers (#392). Constructed per-process;
|
||||
// producers in playevents / requests / scanner publish into
|
||||
// the same instance. Background workers (request reconciler, scan
|
||||
// scheduler) live in cmd/minstrel/main.go where they're constructed
|
||||
// before Router() runs; they read s.Bus directly so they share this
|
||||
// process's bus. When Router() runs before main set the bus (tests,
|
||||
// or future contexts) we fall back to a fresh local instance.
|
||||
// Live-event bus for SSE subscribers, one per process: producers in
|
||||
// playevents / requests / scanner publish into the same instance.
|
||||
// Background workers are built in cmd/minstrel/main.go before Router()
|
||||
// runs and share s.Bus. With no bus set (tests), a fresh local one is
|
||||
// used.
|
||||
bus := s.Bus
|
||||
if bus == nil {
|
||||
bus = eventbus.New()
|
||||
@@ -240,8 +238,8 @@ func (s *Server) handleHealthz(w http.ResponseWriter, _ *http.Request) {
|
||||
}
|
||||
|
||||
// handleAdminScan runs a scan synchronously and returns the resulting stats.
|
||||
// Kept synchronous for v1: libraries are small and the operator can tell when
|
||||
// it's done. Async jobs with status polling are a later-milestone concern.
|
||||
// Synchronous, so the caller can tell when it's done; the scan's progress is
|
||||
// also published as scan-run events.
|
||||
func (s *Server) handleAdminScan(w http.ResponseWriter, r *http.Request) {
|
||||
stats, err := s.Scanner.Scan(r.Context(), nil)
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
Reference in New Issue
Block a user