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
+3 -3
View File
@@ -8,14 +8,14 @@ import { Chip } from "../components/ui/Chip";
import { Slider } from "../components/ui/NativeControls";
import { SURFACE } from "../components/ui/surfaces";
// The design lab (E28): the living style guide. Dev-only — see main.tsx and devOnlyGuard.ts. It sits
// The design lab: the living style guide. Dev-only — see main.tsx and devOnlyGuard.ts. It sits
// OUTSIDE <App>, so it owns the theme attributes on <html> itself, through the same data-theme /
// data-scheme / --font-scale / data-backdrop switches the app's PrefsProvider drives. Nothing here
// is saved: the lab's bar changes this tab only.
type Look = { mode: "dark" | "light"; scheme: Scheme; fontScale: number; backdrop: boolean };
// The owner's own daily look (E28 S1 inventory) is the starting point — decisions are taken on it.
// The owner's own daily look (as inventoried) is the starting point — decisions are taken on it.
const START: Look = { mode: "dark", scheme: "midnight", fontScale: 1.02, backdrop: true };
function applyLook(l: Look) {
@@ -114,7 +114,7 @@ export default function DesignLab() {
<header id="decided-c" className="mt-6 scroll-mt-20">
<h2 className="text-xl font-bold">Decided · batch C, behaviour and device</h2>
<p className="text-sm text-muted">
C1 is the action classification S3 builds each object&apos;s one action list from.
C1 is the action classification each object&apos;s one action list is built from.
</p>
</header>
<BatchC />
+3 -3
View File
@@ -20,13 +20,13 @@ import { fieldClass } from "../components/ui/fieldStyles";
import { SelectTrigger } from "../components/ui/SelectTrigger";
import { SwitchRow } from "../components/ui/form";
// E28 S2 · Batch A — controls, DECIDED (owner, 2026-09-24: all six as recommended), rendered with the
// Batch A — controls, DECIDED (owner, 2026-09-24: all six as recommended), rendered with the
// batch B decisions that refine them: B1's compact ladder and B3's state layers. Only the chosen
// rendering of each stays, as the reference the S3 primitives are built to. Wired to no data.
// rendering of each stays, as the reference the ui/ primitives are built to. Wired to no data.
type Tone = "primary" | "ghost" | "outline" | "glass" | "danger";
// The lab renders the shipped primitives (E28 S3b), so a reference can never drift from the app.
// The lab renders the shipped primitives, so a reference can never drift from the app.
export function Btn({
tone,
size,
+1 -1
View File
@@ -27,7 +27,7 @@ import { SelectTrigger } from "../components/ui/SelectTrigger";
import { SkeletonShapes } from "../components/ui/Skeleton";
import { Button } from "../components/ui/Button";
// E28 S2 · Batch B — surfaces, chrome and colour, DECIDED (owner, 2026-09-24): every recommendation,
// Batch B — surfaces, chrome and colour, DECIDED (owner, 2026-09-24): every recommendation,
// except B7, where the owner combined the soft tint + edge bar with optional labels. B1 (density) and
// B3 (state layers) render inside batch A's references. Only the chosen rendering of each stays.
+2 -2
View File
@@ -31,8 +31,8 @@ import { fieldClass } from "../components/ui/fieldStyles";
// The ui/ primitives' own classes on static spans: the lab draws what the app ships, not a copy.
const ICON = iconButtonClass({ variant: "ghost", size: "sm" });
// E28 S2 · Batch C — behaviour on touch and on a narrow window, DECIDED (owner, 2026-09-24): C1–C4 as
// proposed; C5 is the owner's reworked Plex control set (found by the live player pass, E28 S2d: the
// Batch C — behaviour on touch and on a narrow window, DECIDED (owner, 2026-09-24): C1–C4 as
// proposed; C5 is the owner's reworked Plex control set (found by the live player pass: the
// old row ran off-screen below 1024) with the two refinements they accepted. References only.
const ico = "w-4 h-4";
+4 -4
View File
@@ -5,9 +5,9 @@ import { LAYER } from "./labTokens";
import { iconButtonClass } from "../components/ui/buttonStyles";
import { SURFACE } from "../components/ui/surfaces";
// E28 S2 · Batch C, part 1 — action placement: the classification table (object × action → where it
// lives), DECIDED (owner, 2026-09-24: accepted as proposed). It is the source S3 builds each object's
// ONE action list from. It applies
// Batch C, part 1 — action placement: the classification table (object × action → where it
// lives), DECIDED (owner, 2026-09-24: accepted as proposed). It is the source each object's
// ONE action list is built from. It applies
// the decided guard rails (DESIGN.md "Action placement"): ONE action list per object feeds every
// trigger; the primary action and visible state stay on the object; rare, secondary and destructive
// actions go to the menu; nothing is gesture-only, because the "…" button opens the same menu.
@@ -19,7 +19,7 @@ type Row = {
mouse: Where;
/** touch card / row: visible, or reached through "…" */
touch: "visible" | "…";
/** what changes against today (the S2 inventory), empty when nothing does */
/** what changes against today's actions, empty when nothing does */
change?: string;
danger?: boolean;
};
+1 -1
View File
@@ -13,7 +13,7 @@ import {
import { iconButtonClass } from "../components/ui/buttonStyles";
import { HOVER_YIELD } from "../components/ui/reveal";
// E28 S3h — the one media card, DECIDED (owner, 2026-09-26/27: anatomy C, shelf density, the preview
// The one media card, DECIDED (owner, 2026-09-26/27: anatomy C, shelf density, the preview
// C, the Home hero A, list row B, info layout B). Drawn with the real ui/MediaCard and its classes;
// hover a card to see its Play and its hover row. The preview panel, the hero and the info page are
// live in the app (Plex, Home), not copied here.
+2 -2
View File
@@ -2,9 +2,9 @@ import { useSyncExternalStore, type ReactNode } from "react";
import clsx from "clsx";
import { SURFACE } from "../components/ui/surfaces";
// Building blocks of the design lab. Every E28 decision is taken, so the lab is the reference half
// Building blocks of the design lab. Every decision is taken, so the lab is the reference half
// only: each <Reference> is the chosen rendering with the rule it became. A new design round brings
// back the side-by-side <Decision>/<Variant> pair (E28 S2 history) for its open questions. Everything
// back the side-by-side <Decision>/<Variant> pair (as before) for its open questions. Everything
// is static markup on purpose: a rendering that only exists here must not need app state.
/** A decision already taken: the chosen rendering only, with the rule it became. The lab's
+1 -1
View File
@@ -1,5 +1,5 @@
// The decided values the lab's reference renderings share (batches A and B, 2026-09-24). The colour
// rules are real now (E28 S3a): each constant below names the index.css utility or token that holds
// rules are real now: each constant below names the index.css utility or token that holds
// it, so the lab renders what the app ships. The height ladder lives in the primitives (ui/buttonStyles,
// ui/fieldStyles), and a lab drawing takes their classes (F31).