chore(comments): drop epic, sprint and review-round ids from the code

The code cited its plan instead of saying why: `E28 review J4`, `(R6 S3b)`, `S1 justified…`,
`deep-review round 5`. That plan lives in the private ops repo, so for every reader of this one the
citation was noise, and a sentence whose subject was the plan step ("round 2 showed…") hid its
lesson behind an id. Each one is gone and the "why" kept: a bare citation is deleted, a sentence
carrying a lesson is reworded around it ("a later attempt showed…").

Measured (`scripts/audit_metrics.py`, product code): 652 lines in 270 files carried an epic code by
the definition the next commit holds (507 / 241 by the old, two-digit-only one) -> 0. Across all
code, tests, scripts and configs: ~1100 epic-code lines plus ~320 sprint/round ids.

Behaviour unchanged, checked mechanically: every changed .py file has the same AST once docstrings
are blanked; css/sh/toml/yml/json files are identical once comments are stripped; the only
non-comment changes in TS/JS are test titles, one description string in a contract table, and five
ESLint messages, whose text is all the gates snapshot diff holds. Not touched: Markdown (docs and
the changelog keep their history), Alembic migrations, TV episode notation (`S2 · E5`), DESIGN.md
ids (`C1`, `B4`, `S3h`), tracker ids (`SEC-16`, `DX-17`).

One stale claim fixed on the way: test_hls_reaper's docstring said the player checkpoints "every
10 s whether or not it is playing", which plex/stream.py calls wrong; it now says what the code does.
This commit is contained in:
2026-10-05 00:19:39 +02:00
parent c73d8be094
commit 4aaaaa7860
669 changed files with 1831 additions and 1904 deletions
+10 -10
View File
@@ -122,12 +122,12 @@ export function PlexInfoView({
);
}
// How often, and for how long, a person page asks again for a bio that is on its way (E30 S6). The
// How often, and for how long, a person page asks again for a bio that is on its way. The
// background fetch takes a second or two; twenty seconds covers a slow TMDB without waiting on a dead one.
const BIO_POLL_MS = 1500;
// From this many "Known for" titles the rail gets half the hero. Fewer (about one person in five) sit
// right beside the text, at their posters' width, and what is left over is the panel's end — not a hole
// between the text and a lone poster at the far edge (E30 S6, owner pick "b").
// between the text and a lone poster at the far edge (owner pick "b").
const KNOWN_FOR_HALF = 4;
const BIO_WAIT_MS = 20_000;
@@ -158,8 +158,8 @@ export function PlexPersonView({
const menu = useContextMenu<PlexCard>();
const lang = plexLang(i18n.language);
const personKey = qk.plexPerson(name, lang);
// A person the people_enrich job hasn't reached yet gets their bio fetched when the page opens (E30
// S6); the answer says so (`enriching`) and the page asks again until it lands — for a while, not
// A person the people_enrich job hasn't reached yet gets their bio fetched when the page opens;
// the answer says so (`enriching`) and the page asks again until it lands — for a while, not
// forever: BIO_WAIT_MS after the page opened (by the clock, not by the last answer — a failing ask
// leaves that where it was) a TMDB that is down stops being waited on, and a failing ask ends it at
// once (the next open tries again). The page is keyed on the person, so the wait starts per person;
@@ -179,7 +179,7 @@ export function PlexPersonView({
: false,
});
const bioOnItsWay = !!q.data?.enriching && !waitOver && !q.isError;
// E5 S8: cross-dissolve the backdrop through the person's films' art (the touch the roadmap calls
// Cross-dissolve the backdrop through the person's films' art (the touch the roadmap calls
// out). Reuses the shared art-backdrop / crossfade prefs the detail pages own — no per-page control.
const { artBg, crossfade } = useDetailPrefs();
const pd = q.data;
@@ -264,7 +264,7 @@ export function PlexPersonView({
<LoadingState label={t("plex.loading")} />
) : (
<div className="p-4">
{/* Hero (E30 S6, owner pick "A"): the person — headshot, facts, a clamped bio — on the left,
{/* Hero (owner pick "A"): the person — headshot, facts, a clamped bio — on the left,
what they are known for on the right, so the bio doesn't sit in a full-width panel with an
empty half beside it. One column where the panel is narrow. */}
<section className={`${SURFACE.panel} @container p-4 sm:p-5 mb-6`}>
@@ -357,7 +357,7 @@ export function PlexPersonView({
)}
</div>
{/* "Known for" — the person's most-popular titles that are in our library (E5 S6). */}
{/* "Known for" — the person's most-popular titles that are in our library. */}
{d.known_for.length > 0 && (
<div className="min-w-0">
<Carousel
@@ -453,7 +453,7 @@ export function PlexShowView({
toggleRelated,
toggleCrossfade,
} = useDetailPrefs();
// The facts / keywords / crew (E31): TMDB enriches shows too, and the page showed none of it.
// The facts / keywords / crew: TMDB enriches shows too, and the page showed none of it.
const aside = useDetailAside(show ?? {});
useCrossfadeBackdrop(
[
@@ -494,7 +494,7 @@ export function PlexShowView({
title: `${show.title} — ${seasonTitle(se, t)}`,
})
: undefined;
// A season's one action list (E28 C1): the rows its card shows on hover, plus copy.
// A season's one action list: the rows its card shows on hover, plus copy.
const seasonItems = (se: PlexSeasonDetail) => {
const seWatched = se.status === "watched";
const add = addSeason(se);
@@ -607,7 +607,7 @@ export function PlexShowView({
)}
{(() => {
// IMDb score when present, else the Plex audience score — mirrors PlexInfo so a show
// with no imdb:// entry (imdb_rating NULL after the S6 IMDb-only change) still shows a
// with no imdb:// entry (imdb_rating NULL since the IMDb-only change) still shows a
// rating instead of dropping the badge entirely.
const badge = pickRatingBadge(show.imdb_rating, show.rating);
if (!badge) return null;