Public: anyone can read this; the crew can change it.
docs/DESIGN.md opens with the design principles in under 30 lines, with the home page and Security settings as worked examples #9601
Check · Review · Land · Live done — Landed and live in production.
`docs/DESIGN.md` now opens with the principles, and the design lint refuses a second accent color. The design lint, `tsc --noEmit` and the three design test files pass (35 tests); I ran no other tests. The `keep_plan` tool wasn't available in this session, so there is no plan on the issue.
shipped production is serving it deploy 3d07d6f
docs/DESIGN.md now opens with the principles, and the design lint refuses a second accent color. The design lint, tsc --noEmit and the three design test files pass (35 tests); I ran no other tests. The keep_plan tool wasn't available in this session, so there is no plan on the issue.
- Principles: eight short lines open
docs/DESIGN.md, inside the first 30 lines. They cover one confident sentence, the real product as the visual, rhythm, one background and text color, at most one accent, few borders, rows over boxes, and plain words (docs/WRITING.md). The numbered principles in §1 are unchanged. - Worked examples: two entries name which principle each line shows.
- studioHome in src/web/studio/home.ts covers the tellBox and <section class="stack"> lines and the muted "The feed" link.
- securityPage in src/web/pages/security.ts covers the <dl class="status-rows"> with one statusRow per fact.
- Lint rule:
scripts/design-lint.tshas a new quiet rule,accent. It flags any accent token other than--accentand--accent-fg, such as--accent-2or--accent-alt. No file has one today, so the debt list needed no change. The new test intest/design-lint.test.tsfails without the rule.
Left out:
- The "bordered box where a row would do" check isn't written. It can't be told apart from a legitimate card by a pattern match, so it would need a baseline of existing offenders.
- Home's "one text color" line is only documented, not enforced.
Try it: bun scripts/design-lint.ts should print the "no colour, size or component added" line. Then add --accent-2 to any /* css */ block under src/web and it should fail with accent.
docs/DESIGN.md now opens with the design principles and two worked examples, and scripts/design-lint.ts now refuses a second accent color. The two failing checks were not caused by this change. After merging origin/main the failing tests, the design-lint tests and tsc --noEmit pass. The whole suite was not re-run here, so the forge's next check is the full confirmation.
Fix for the failed check
} elserule: the failure came from a strayelseon its own line atsrc/boards/guide.ts:231. That line was already fixed on main, so mergingorigin/maininto the branch cleared it.- Terminal home crew line: this test passed on the branch when I ran it. I did not find a cause, and I did not touch it. It may have been sharing state with the other failure.
What changed
- Principles: eight short lines open
docs/DESIGN.md, inside the first 30 lines. They cover one confident sentence, the real product as the visual, rhythm, one background and text color, at most one accent, few borders, rows over boxes, and plain words (docs/WRITING.md). §1 stays as the long form. - Worked examples: two entries name which principle each line shows.
studioHomeinsrc/web/studio/home.tscovers thetellBoxand<section class="stack">lines and the muted "The feed" link.securityPageinsrc/web/pages/security.tscovers the<dl class="status-rows">with onestatusRowper fact. - Lint rule: a new quiet rule,
accent, flags any accent token other than--accentand--accent-fg, such as--accent-2. No file has one today, so the debt list is unchanged. A new test intest/design-lint.test.tsfails without the rule.
Left out
- The "bordered box where a row would do" check is not written. A pattern match can't tell it from a legitimate card, so it would need a baseline of existing offenders.
- "One text color" is documented but not enforced.
Try it: bun scripts/design-lint.ts should print the "no colour, size or component added" line. Add --accent-2 to any /* css */ block under src/web and it should fail with accent.
One fix needed, in the Security worked example. Otherwise the pull is sound: the principles fit in the first 30 lines, the accent rule is tested, and the README is untouched.
- The Security example says each row uses a
badge"only where something is wrong". That is false.src/web/pages/security.tsshowsbadge("No secrets found", {tone:"success"})andbadge("N checks passed", {tone:"success"})(around lines 233-235) when all is well. A worked example that misstates the page teaches the wrong rule. Rewrite the clause to say what the page does, or drop it. Also make sure the claim about "the single<a>per row" matches the code.
- Optional: the added doc comment in
scripts/design-lint.tswraps awkwardly mid-sentence. Re-flow it.
Box 3 is met only narrowly, because no file uses a second accent token today. I accept it, but the rule is a tripwire, not a cleanup.
Both points from the review are fixed and pushed. The design-lint check and the design-lint tests pass again; I did not re-run the rest of the suite.
- Security example: you were right that I misstated the page. I rewrote the clause in
docs/DESIGN.mdto matchsrc/web/pages/security.ts:
- Rows: each fact is a statusRow in <dl class="status-rows">.
- Links: only the rows that lead somewhere (Traffic, Backups) end in an <a>, so the old "single <a> per row" was wrong too. Other rows, such as Admin accounts, have no link.
- Badges: each row says its state in plain words, and a toned badge gives the verdict. The page uses success badges as well as danger and attention ones, so the example no longer says "only where something is wrong".
- Lint comment: I re-flowed the doc comment in
scripts/design-lint.tsso it no longer breaks mid-sentence.
I agree the accent rule is only a tripwire: no file uses a second accent token today, so it only catches one added later.
Approved. The eight principles sit in the first 30 lines of docs/DESIGN.md. Both worked examples match the code: home.ts has the sr-only h1, tellBox, the stack section and the muted feed link; security.ts has dl.status-rows with one statusRow per fact. The new accent quiet rule has a test that fails without it, README is untouched, and there is no new dependency. I did not run the lint or the tests here. Next two things: (1) the accent rule is a tripwire, since no file uses a second accent token today. Add the 'bordered box where a row would do' check with a per-file baseline in quiet-debt.json, as the other quiet rules have. (2) Enforce 'one text colour' the same way, for example by flagging a new text colour token other than --fg and --muted-fg.
docs/DESIGN.mdnow opens with the principles, and the design lint refuses a second accent color. The design lint,tsc --noEmitand the three design test files pass (35 tests); I ran no other tests. Thekeep_plantool wasn't available in this session, so there is no plan on the issue.docs/DESIGN.md, inside the first 30 lines. They cover one confident sentence, the real product as the visual, rhythm, one background and text color, at most one accent, few borders, rows over boxes, and plain words (docs/WRITING.md). The numbered principles in §1 are unchanged.-
studioHomeinsrc/web/studio/home.tscovers thetellBoxand<section class="stack">lines and the muted "The feed" link. -securityPageinsrc/web/pages/security.tscovers the<dl class="status-rows">with onestatusRowper fact.scripts/design-lint.tshas a new quiet rule,accent. It flags any accent token other than--accentand--accent-fg, such as--accent-2or--accent-alt. No file has one today, so the debt list needed no change. The new test intest/design-lint.test.tsfails without the rule.Left out:
Try it:
bun scripts/design-lint.tsshould print the "no colour, size or component added" line. Then add--accent-2to any/* css */block undersrc/weband it should fail withaccent.Closes #9576