Public: anyone can read this; the crew can change it.
The /audit page speaks the home page's language #9729
Check · Review · Land · Live done — Landed and live in production.
`/audit` no longer puts its findings in boxes. Each app's section (policy table, an unsound contract's problems, the Unread rows) and each part of "What changed" (pulls at the wall, contract changes, doors over time) is now a heading over its rows on the page's one background. The audit's read path in `auditPage` and the CSV export are unchanged; only markup changed.
shipped production is serving it deploy a5a2512
/audit no longer puts its findings in boxes. Each app's section (policy table, an unsound contract's problems, the Unread rows) and each part of "What changed" (pulls at the wall, contract changes, doors over time) is now a heading over its rows on the page's one background. The audit's read path in auditPage and the CSV export are unchanged; only markup changed.
What changed in src/web/pages/audit.ts
- All six card sites now go through one small
section()helper. It draws the shared.card.bare, which the pull, explore and repository pages already use: no frame, no fill, no lines between rows. No new class and no new CSS. - The coloured border is gone (red on a contract that is unsound or doesn't match how the app behaves, amber on pulls at the wall). The state is still shown in words by the existing badges ("contract unsound", "1 door disobeys", "at the wall"), so nothing is lost.
- The icons before each heading are gone. The row icons in "What changed" stay.
listCardis no longer used here; the Unread rows are a plain.listinside the same section.- The functions are renamed
…Card→…Section. Nothing else referred to them. - These stay the same: the
resource × verb × identitytable, each app'sid(so/audit#owner-namelinks still land), the "Knock now" form, and the page's wording.
Tests and docs
test/audit.test.ts: the page test asserted the old card head (icon before<h3>). I updated it to the new markup; that change is because the test pinned the old look, not because it was wrong.- The same test now checks that each app section (notes, broken, secret) is
class="card bare"with its id, that nothing on the page is a framed card or carries a coloured border, and that Unread is a heading over a.list. I ran it against the old markup and it fails there. docs/design/areas/lists.mdhas a short entry describing the page and naming the test that pins it.
Not done
- The page's own terms ("door", "knock", "at the wall") stay. The terminal audit and the flash messages share them, and changing them is a wording change across those places, not markup.
- No hand-made screenshots; the forge puts main's look beside this one on the pull.
Checks run: bun scripts/gate.ts, bun x tsc --noEmit and bun scripts/design-lint.ts all pass. scripts/fast.ts named 1275 test files, too many to run here, so I picked the 13 that cover the audit page and design docs (audit, audit-timing, probe/probes, policy, contract-audit-cache, design-audit, og-tags, strangers, forge-looks, tui-audit, design-lint, cold-read): 118 tests, all pass. That includes the warm-timing test.
To try it: open /audit on the preview. Each app reads as a heading over its table, with the last check's result as a line beneath; it works with JavaScript off.
🤖 Generated with Claude Code
/audit no longer puts its findings in boxes. Each app's section and each part of "What changed" is now a heading over its rows on the page's one background. Only markup changed: the audit's read path in auditPage and the CSV export are untouched.
What changed in src/web/pages/audit.ts
- All six card sites go through one small
section()helper. It draws the shared.card.barethat the pull, explore and repository pages already use: no frame, no fill, no lines between rows. That covers each app's policy table, an unsound contract's problems, the Unread rows, pulls at the wall, contract changes and doors over time. No new class and no new CSS. - The coloured border is gone: red where a contract is unsound or the app disobeys its table, amber on pulls at the wall. The existing badges still say the state in words ("contract unsound", "1 door disobeys", "at the wall"), so nothing is lost.
- The icons before each heading are gone. The row icons in "What changed" stay.
- The Unread rows are a plain
.listinside the section, solistCardis no longer used here. - The functions are renamed
…Card→…Section. Nothing else referred to them. - These stay the same: the resource × verb × identity table, each app's
id(so links like/audit#alice-notesstill land), the "Knock now" form, and the page's wording.
Tests and docs
test/audit.test.tsasserted the old card head, with an icon before the<h3>. I updated it because it pinned the old look, not because it was wrong.- The same test now checks four things: each app section is
class="card bare"with its id, nothing on the page is a framed card, nothing has a coloured border, and Unread is a heading over a.list. Run against the old markup, it fails. docs/design/areas/lists.mdhas a short entry describing the page.- A second, empty commit adds the
Try:line the gate requires; the first push's check failed without it.
Not done
- The page's terms ("door", "knock", "at the wall") stay. The terminal audit and the flash messages use them too, so changing them is a wording change across all three, not this markup pass.
Checks run: bun scripts/gate.ts (also run with FORGE_CHECK_BASE set to main), bun x tsc --noEmit and bun scripts/design-lint.ts all pass. scripts/fast.ts named 1275 test files, too many to run here, so I chose the 13 that cover the audit page and the design docs: 118 tests, all passing, including the warm-timing test. After the second commit I re-ran test/audit.test.ts (9 pass). I couldn't confirm that the gate reads commit messages when run locally: it also passed on the first push, which the forge's check failed. The forge's run on this push is the real test.
Try: open /audit on the preview. Each app reads as a heading over its policy table, with the last check's result on a line below. It works with JavaScript off.
🤖 Generated with Claude Code
Clean markup-only change: six card sites go through one section() helper onto the existing .card.bare, tones and heading icons dropped, state still carried by badge words, ids/table/probe form untouched, no new class, lists.md entry added, no README change, terminal audit unaffected. The test pins card bare with ids, no framed card, no tone, and Unread as heading over list. Preview /audit answers 200 with no data-tone; the preview has no audited apps so only the empty state renders there. Minor nit, not blocking: unreadSection list indentation is off from the formatter.
/auditno longer puts its findings in boxes. Each app's section (policy table, an unsound contract's problems, the Unread rows) and each part of "What changed" (pulls at the wall, contract changes, doors over time) is now a heading over its rows on the page's one background. The audit's read path inauditPageand the CSV export are unchanged; only markup changed.What changed in
src/web/pages/audit.tssection()helper. It draws the shared.card.bare, which the pull, explore and repository pages already use: no frame, no fill, no lines between rows. No new class and no new CSS.listCardis no longer used here; the Unread rows are a plain.listinside the same section.…Card→…Section. Nothing else referred to them.resource × verb × identitytable, each app'sid(so/audit#owner-namelinks still land), the "Knock now" form, and the page's wording.Tests and docs
test/audit.test.ts: the page test asserted the old card head (icon before<h3>). I updated it to the new markup; that change is because the test pinned the old look, not because it was wrong.class="card bare"with its id, that nothing on the page is a framed card or carries a coloured border, and that Unread is a heading over a.list. I ran it against the old markup and it fails there.docs/design/areas/lists.mdhas a short entry describing the page and naming the test that pins it.Not done
Checks run:
bun scripts/gate.ts,bun x tsc --noEmitandbun scripts/design-lint.tsall pass.scripts/fast.tsnamed 1275 test files, too many to run here, so I picked the 13 that cover the audit page and design docs (audit, audit-timing, probe/probes, policy, contract-audit-cache, design-audit, og-tags, strangers, forge-looks, tui-audit, design-lint, cold-read): 118 tests, all pass. That includes the warm-timing test.To try it: open
/auditon the preview. Each app reads as a heading over its table, with the last check's result as a line beneath; it works with JavaScript off.🤖 Generated with Claude Code
Closes #9710