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:
@@ -30,7 +30,7 @@ test.describe("channel view", () => {
|
||||
await expect(page.getByTestId("video-card").first()).toBeVisible();
|
||||
});
|
||||
|
||||
// Bug 1 (Platform S4): opening a channel and coming Back restores the feed's scroll position
|
||||
// Opening a channel and coming Back restores the feed's scroll position
|
||||
// rather than dumping you at the top. The shell owns the scroller and remembers each view's offset.
|
||||
test("Back restores the feed scroll position", async ({ page }) => {
|
||||
await openApp(page);
|
||||
@@ -60,7 +60,7 @@ test.describe("channel view", () => {
|
||||
.toBeGreaterThan(saved - 500);
|
||||
});
|
||||
|
||||
// Bug 2 (Platform S5): opening a channel no longer FORCES Live/Upcoming on — the channel view
|
||||
// Opening a channel no longer FORCES Live/Upcoming on — the channel view
|
||||
// seeds its content-type prefs (normal / shorts / live) from the global feed. Locked both ways so
|
||||
// a future refactor can't silently re-hardcode it.
|
||||
test("the channel view inherits the feed's content filters (no forced Live/Upcoming)", async ({
|
||||
@@ -86,7 +86,7 @@ test.describe("channel view", () => {
|
||||
await expectContentType(page, "includeLive", true);
|
||||
});
|
||||
|
||||
// Bug 2 (Platform S5): the channel view is its OWN filter scope — a content toggle made there
|
||||
// The channel view is its OWN filter scope — a content toggle made there
|
||||
// must NOT leak back into the global feed. (FeedFiltersProvider owns the feed's filters; the
|
||||
// channel page keeps a separate local cell.)
|
||||
test("a channel's content toggle does not leak into the feed", async ({ page }) => {
|
||||
@@ -106,7 +106,7 @@ test.describe("channel view", () => {
|
||||
await expectContentType(page, "includeLive", false);
|
||||
});
|
||||
|
||||
// Platform S4b + E31 S4c: the channel chrome sits outside the scroller. Scrolling into the videos
|
||||
// The channel chrome sits outside the scroller. Scrolling into the videos
|
||||
// folds the banner and identity once (the name moves into the tab row); from then on the folded
|
||||
// chrome stays put while only the video grid scrolls.
|
||||
test("the channel chrome folds once, then stays fixed while the grid scrolls", async ({
|
||||
|
||||
@@ -51,7 +51,7 @@ test.describe("feed", () => {
|
||||
.toBe(true);
|
||||
});
|
||||
|
||||
// Bug 4 (Platform S4): the toolbar (show/content chips, count, sort, view) is fixed chrome — it
|
||||
// The toolbar (show/content chips, count, sort, view) is fixed chrome — it
|
||||
// pins in the shell's toolbar band above the scroller, so it stays put while the cards scroll.
|
||||
test("the feed toolbar stays pinned while cards scroll", async ({ page }) => {
|
||||
await openApp(page);
|
||||
@@ -66,7 +66,7 @@ test.describe("feed", () => {
|
||||
expect(Math.abs(topAfter - topBefore)).toBeLessThan(4);
|
||||
});
|
||||
|
||||
// Bug 3 (Platform S4): changing a filter is a fresh result set, so the scroll jumps back to the
|
||||
// Changing a filter is a fresh result set, so the scroll jumps back to the
|
||||
// top rather than stranding you deep in the old list's offset.
|
||||
test("a new filter resets the scroll to the top", async ({ page }) => {
|
||||
await openApp(page);
|
||||
|
||||
@@ -76,7 +76,7 @@ setup("seed + authenticate", async ({ page }) => {
|
||||
|
||||
// 4. Pin the UI locale, suppress the first-login onboarding wizard (a full-screen overlay
|
||||
// that would intercept every click — the test account has no YouTube connection, so it
|
||||
// auto-opens), and opt the account out of starting on Home. Since E24 a bare URL lands on
|
||||
// auto-opens), and opt the account out of starting on Home. A bare URL lands on
|
||||
// Home, and the feed, channel and player flows this net locks all open "/" expecting the
|
||||
// feed; the opt-out is the one Settings → Appearance → Startup writes. Both flags are
|
||||
// per-account: `siftlode.onboarding.dismissed.<id>`, `siftlode.startOnHome.<id>`.
|
||||
|
||||
@@ -18,7 +18,7 @@ export async function gotoPage(page: Page, id: string): Promise<void> {
|
||||
* Playwright would scroll it into view to click it, moving the scroll position — fatal to any test
|
||||
* that then asserts on where the feed was. Being inside the viewport is not enough either: a card
|
||||
* can sit under the page chrome above the scroller (the update banner, the toolbar band), and the
|
||||
* covered click makes Playwright scroll and retry — the same move (E32 S2: webkit failed 3 in 24).
|
||||
* covered click makes Playwright scroll and retry — the same move (webkit failed 3 in 24).
|
||||
* So the link must be the element hit at its own centre. Returns false if none found.
|
||||
*/
|
||||
export async function clickVisibleChannelLink(page: Page): Promise<boolean> {
|
||||
|
||||
@@ -6,9 +6,9 @@ import { openApp } from "./helpers";
|
||||
// this exercises is precisely what the module-registry refactor replaces.
|
||||
test.describe("page switching", () => {
|
||||
// Core + admin modules (the E2E account is an admin, matching the real primary user), so this
|
||||
// also exercises the admin pages. Since E31 those sit behind ONE rail row ("Administration",
|
||||
// also exercises the admin pages. They sit behind ONE rail row ("Administration",
|
||||
// `nav-admin`) that opens a panel of them — the spec still listed them as rail rows of their own,
|
||||
// and it failed on every run from E31 to E32 without anyone seeing it, because e2e was in no
|
||||
// and it failed on every run for a while without anyone seeing it, because e2e was in no
|
||||
// required gate (it is now part of `release`).
|
||||
const RAIL = ["channels", "playlists", "stats", "settings", "feed"];
|
||||
const ADMIN = ["scheduler", "config", "users", "audit"];
|
||||
|
||||
@@ -2,7 +2,7 @@ import { test, expect } from "@playwright/test";
|
||||
import { openApp, openFirstVideo } from "./helpers";
|
||||
|
||||
// Locks the in-app player's open/close contract. The player is a portaled overlay whose
|
||||
// inconsistent mounting caused an E3 regression — exactly the kind of thing the refactor's
|
||||
// inconsistent mounting caused a regression — exactly the kind of thing the refactor's
|
||||
// overlay-root convention must not break. We assert the modal shell, not YouTube playback.
|
||||
test.describe("player modal", () => {
|
||||
test.beforeEach(async ({ page }) => {
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
// E32: an index read is `T | undefined` here, as it really is (0 errors when switched on).
|
||||
// An index read is `T | undefined` here, as it really is (0 errors when switched on).
|
||||
"noUncheckedIndexedAccess": true,
|
||||
"esModuleInterop": true,
|
||||
"resolveJsonModule": true
|
||||
|
||||
Reference in New Issue
Block a user