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.
41 lines
1.8 KiB
TypeScript
41 lines
1.8 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import videoCard from "./VideoCard.tsx?raw";
|
|
|
|
import {
|
|
MEDIA_BAR,
|
|
MEDIA_HOVER_LAYER,
|
|
MEDIA_PICTURE_CONTAINER,
|
|
MEDIA_RESUME_LAYER,
|
|
mediaPictureBox,
|
|
} from "./ui/mediaCardStyles";
|
|
|
|
// Measured: at text size 1.3 a 242px feed thumbnail put the 63px Play 13px into the 37px hover
|
|
// row (the Play and the row grow with the root font, the picture's height does not). A narrow picture
|
|
// (under 14rem, so the cut moves with the text size) centres what it carries above the row instead.
|
|
describe("a media picture", () => {
|
|
it("is a size container, so what sits on it answers its width", () => {
|
|
expect(mediaPictureBox("wide")).toContain(MEDIA_PICTURE_CONTAINER);
|
|
expect(mediaPictureBox("poster")).toContain(MEDIA_PICTURE_CONTAINER);
|
|
// The video card draws its own box (it is not a mediaPictureBox).
|
|
expect(videoCard).toContain('clsx("relative min-h-0", MEDIA_PICTURE_CONTAINER, className)');
|
|
});
|
|
|
|
it.each([
|
|
["the Play", MEDIA_HOVER_LAYER],
|
|
["the Continue + Restart pair", MEDIA_RESUME_LAYER],
|
|
])("leaves the hover row its band when narrow: %s", (_, layer) => {
|
|
expect(layer.split(" ")).toContain("@max-[14rem]/pic:pb-(--bar-room)");
|
|
});
|
|
|
|
// The lift once applied to every narrow picture, and the feed's row and tile views (a
|
|
// 10rem thumbnail, no hover row) showed their Play 1.25rem above centre over an empty band. The band
|
|
// is now the row's own: set only by a box that holds one.
|
|
it("lifts it only where a hover row is there to clear", () => {
|
|
expect(MEDIA_BAR.split(" ")).toContain("media-bar");
|
|
expect(MEDIA_PICTURE_CONTAINER.split(" ")).toContain("has-[.media-bar]:[--bar-room:2.5rem]");
|
|
for (const layer of [MEDIA_HOVER_LAYER, MEDIA_RESUME_LAYER])
|
|
expect(layer).not.toMatch(/pic:pb-\d/);
|
|
});
|
|
});
|