utils/unified-design-system/DOCS-screen-size.md
Krzysztof kuhy Rudnicki a10d190b65
Some checks failed
file length / file-length (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
palette drift / palette (push) Waiting to run
design_system tests / test (push) Has been cancelled
gatelock pre-commit / pre-commit (push) Has been cancelled
gatelock tests / test (3.10) (push) Has been cancelled
gatelock tests / test (3.11) (push) Has been cancelled
gatelock tests / test (3.12) (push) Has been cancelled
web_ui tests / test (push) Has been cancelled
Add the shared markdown-naming gate and migrate utils' own docs
Markdown across every repo had accumulated a dozen ad-hoc names
(refactor_claude_todo.md x23, DESIGN_AUDIT_TODO.md, NEXT_SESSION,
HANDOFF, PLAN, SPEC) with nothing distinguishing a live task from a
finished record. An audit found docs asserting work was pending that
shipped months earlier, and one asserting completion while the work
was open.

Four namespaces now: README.md, CLAUDE*.md, DOCS*.md, TODO*.md. Task
files carry the literal "REMOVE ME AFTER FINISH" and are deleted when
the work lands.

Enforced bidirectionally -- a TODO without the marker fails, AND any
file carrying the marker that is not named TODO*.md fails. Without the
reverse rule a task can be renamed into the permanent namespace and
quietly live forever, which is the failure being fixed.

md_naming/ mirrors the file_length topology and imports its tables
(EXCLUDED_DIRS, THIRD_PARTY_REPOS, VENDORED_ANYWHERE, GENERATED_PATTERN)
rather than restating them, so the two gates cannot disagree about the
same file. 71 tests, 100% branch coverage.

stale.py warns on TODOs past 90 days but never fails: no machine can
prove a task is finished, so the honest mechanism is a nudge.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A47aX5DJwmA3QFn3pkEWi7
2026-08-24 15:53:12 +02:00

1.8 KiB
Raw Blame History

Screen size (required)

Split out of tokens.md on 2026-08-15 to hold every file under the shared 250-line cap, when the categorical ramp was added. Both are part of the same token spec — this is a filing change, not a scoping change.

Target Requirement
1366x768 Fully usable. Nothing clipped, nothing unreachable. This is the primary machine.
1024x600 Degrades gracefully — scrolls rather than clips. No hard minimum size above this.

Rules:

  1. Budget the height, don't assume it. 768px is the design target, not 1080. Mixing a proportional content area with fixed chrome (height = 0.7·H above a fixed-height button row) silently works at 1080 and fails at 768 — compute the content budget as available − measured chrome.
  2. Any view that can grow must scroll. Lists, forms, anything whose height depends on data (a day's log, an error string, accumulated history). An unbounded error message is a real overflow source.
  3. Never centre unscrollable content that can overflow. A centre-anchored container clips symmetrically when it is too tall — losing the header and the submit button, with no scrollbar and no indication anything is missing. Top-anchor it inside a scroll container instead.
  4. Clamp width as well. Prose stays at the 40rem/640px cap (rule 21) and single-purpose inputs get a sensible max — a 4-digit number field stretched to 1334px is a violation even though nothing is clipped.
  5. Don't let text scale break layout. Rows that must not overflow use Wrap/ Flexible rather than a bare Row.

1366x768 and 1024x600 are landscape and short. Phone-portrait test sizes do not exercise either constraint, so both belong in the test matrix explicitly.