From 928e1e37f7dc05c809126a9deeb3c5d3e22b237b Mon Sep 17 00:00:00 2001 From: Saim Shafique Date: Sat, 14 Nov 2026 05:38:11 +0000 Subject: [PATCH] fix(check): report text_below_floor once per size instead of once per file On a film built from many sub-composition scene files, text_below_floor reported the same style problem once for every file: 74 warnings for one 27 px label class, each anchored on its smallest text in its own file. The findings buried any real line_unread or dead_stretch findings under the repeats, and one CSS change fixes them all. Group SmallText entries by rounded rendered size before building findings, so one finding covers a style across files and lists every affected element with its sourceFile. Elements at different sizes stay separate findings. The craft layer carries no class list or font family, so the rounded size is the style key. Update the cli.mdx craft table and the lint-validate-inspect skill reference, which documented the old one-finding-per-file behavior. Fixes #7710 --- docs/packages/cli.mdx | 2 +- packages/cli/src/utils/checkTypes.ts | 9 ++- packages/cli/src/utils/craftAudit.test.ts | 71 +++++++++++++++++-- packages/cli/src/utils/craftAudit.ts | 32 ++++++--- .../references/lint-validate-inspect.md | 2 +- 5 files changed, 99 insertions(+), 17 deletions(-) diff --git a/docs/packages/cli.mdx b/docs/packages/cli.mdx index 092ea058ce5..decbb904f40 100644 --- a/docs/packages/cli.mdx +++ b/docs/packages/cli.mdx @@ -1374,7 +1374,7 @@ edges re-measured to about 0.01 s, and skipped for a `--range` check. | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `line_unread` | A reading-size line (30 px or taller at 1080) is on screen for less than its floor: 0.4 s for one or two words, otherwise three quarters of 0.5 s + 0.3 s a word. The film's last line needs 2 s. | | `dead_stretch` | Nothing on screen changes for more than 3 s, by the same classifier `keepsMoving` uses. | -| `text_below_floor` | Text under 2.6% of the frame's short side (28 px on 1080) stays on screen 0.5 s or more. One finding per file lists every such element. | +| `text_below_floor` | Text under 2.6% of the frame's short side (28 px on 1080) stays on screen 0.5 s or more. One finding per rendered size lists every such element across files. | | `first_frame_empty` | Frame 0 paints nothing but the background (no text, image, video, canvas or SVG), or an opaque element covers every other clip and is named. The first frame is the thumbnail on social players. | | `film_silent` | A film longer than 15 s has no unmuted `