From fb83c585e9958c30a34fed2c9755ee254c644a0f Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 22 Oct 2026 20:18:54 +0000 Subject: [PATCH 1/9] Review follow-up 10: the decorative plate (WP8) on the explorer, breach and spec pages A deterministic, label-free drawing under the page head, seeded from the page id and title: 3 to 5 columns of nodes, one highlighted path that draws in once (M4), one dashed trust boundary, one of eight plate hues. Hidden from assistive technology and drawn complete under reduced motion. Social cards for /explorer/ and /breaches/ from the same generator. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01KKEUnk7StdtBTMTCACbji3 --- public/og-breaches.png | Bin 0 -> 40462 bytes public/og-explorer.png | Bin 0 -> 46725 bytes scripts/generate-brand-assets.ts | 37 +++++ specs/016-visual-redesign/plan.md | 10 +- specs/016-visual-redesign/tasks.md | 18 ++- src/components/Plate.astro | 90 +++++++++++ src/layouts/Base.astro | 6 +- src/lib/plate.ts | 164 ++++++++++++++++++++ src/pages/accessibility.astro | 5 + src/pages/breaches/index.astro | 5 + src/pages/explorer/index.astro | 5 + src/pages/standards/[id].astro | 3 + src/styles/tokens.css | 10 ++ tests/e2e/plate.spec.ts | 61 ++++++++ tests/unit/__snapshots__/plate.test.ts.snap | 3 + tests/unit/plate.test.ts | 53 +++++++ 16 files changed, 465 insertions(+), 5 deletions(-) create mode 100644 public/og-breaches.png create mode 100644 public/og-explorer.png create mode 100644 src/components/Plate.astro create mode 100644 src/lib/plate.ts create mode 100644 tests/e2e/plate.spec.ts create mode 100644 tests/unit/__snapshots__/plate.test.ts.snap create mode 100644 tests/unit/plate.test.ts diff --git a/public/og-breaches.png b/public/og-breaches.png new file mode 100644 index 0000000000000000000000000000000000000000..b29079985bce73e297bf0905808c3fae9fd09999 GIT binary patch literal 40462 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 literal 0 HcmV?d00001 diff --git a/public/og-explorer.png b/public/og-explorer.png new file mode 100644 index 0000000000000000000000000000000000000000..dd8ebf18383bc26b94d90f84a3c662177c432ba0 GIT binary patch literal 46725 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 XtSvlecLHNN9-gACnhadZ{L}vdQz$T% literal 0 HcmV?d00001 diff --git a/scripts/generate-brand-assets.ts b/scripts/generate-brand-assets.ts index 761c226..e46571a 100644 --- a/scripts/generate-brand-assets.ts +++ b/scripts/generate-brand-assets.ts @@ -2,6 +2,7 @@ import { readFileSync, writeFileSync } from "node:fs"; import { chromium } from "@playwright/test"; import { cellKey, currentRevision, matrixFor } from "../src/lib/atlas"; import { getDataset } from "../src/lib/data"; +import { plate, plateSvg, SECTION_PLATES, sectionCard } from "../src/lib/plate"; // Run with `pnpm generate:brand` after changing public/brand, the tokens or the data. No network // requests are made. @@ -95,6 +96,42 @@ try {

letsauth.eu

`); await page.evaluate(() => document.fonts.ready); await page.screenshot({ path: "public/og.png" }); + + // The section roots that carry a decorative plate (WP8) get a card of their own: the same layout + // as the home card, with the headline over the page's drawing on a plate. + for (const [id, section] of Object.entries(SECTION_PLATES)) { + const drawing = plate(id, section.title); + await page.setContent(` + +
+

${section.eyebrow}

+

${section.title}

+
+
${plateSvg(drawing)}
+

letsauth.eu/${id}/

`); + await page.evaluate(() => document.fonts.ready); + await page.screenshot({ path: `public${sectionCard(id as keyof typeof SECTION_PLATES)}` }); + } } finally { await browser.close(); } diff --git a/specs/016-visual-redesign/plan.md b/specs/016-visual-redesign/plan.md index b866429..e1a019b 100644 --- a/specs/016-visual-redesign/plan.md +++ b/specs/016-visual-redesign/plan.md @@ -616,7 +616,13 @@ per page; the draw-in (M4) runs once and is static under reduced motion; the dra appears on a page that already has a data view above the fold (matrix, map, chain, report); a `plate: false` prop removes it. -Decision for Jan: ship this, or keep letsauth's visuals strictly data-derived. The plan +Decided (22 October 2026, review follow-up 10): Jan chose to ship it on `/explorer/`, +`/breaches/` and the spec pages only. `/mcp/` and `/standards/` keep their data view as the one +visual, so the drawing stays off them; the cards are per section root (explorer and breaches), +and spec pages keep the home card. A page leaves the plate out by not placing ``, so no +`plate: false` prop is needed. + +Original decision for Jan: ship this, or keep letsauth's visuals strictly data-derived. The plan recommends shipping it on the four section roots and spec pages only, because those pages have no diagram of their own and the drawing is what makes the two sites read as a family. Skipping it costs nothing else in the plan. @@ -673,7 +679,7 @@ Decisions for Jan before WP1 starts Grotesque for h1 only. 2. **Neutral hue**: cool graphite like the blog (recommended, hue 250 to 255) or keep the warm paper of today (hue 85) with the new flat treatment. -3. **WP8 plate**: ship or skip (section WP8). +3. **WP8 plate**: ship or skip (section WP8). Decided: ship, on the explorer, breach and spec pages. 4. **Search palette**: in WP10 scope or not at all. If no answer arrives, the packages proceed with the recommended option in each case. diff --git a/specs/016-visual-redesign/tasks.md b/specs/016-visual-redesign/tasks.md index 2d5b980..7efb1b1 100644 --- a/specs/016-visual-redesign/tasks.md +++ b/specs/016-visual-redesign/tasks.md @@ -170,7 +170,22 @@ Taken as review follow-up 9. Legal content keeps its substance; only the wording - [x] W9-T04 `README.md` and `docs/*.md` pass `check:prose`; `FAIL` is true in `scripts/check-prose.ts`, which also bans "game-changer" and "holistic" from the review's list; `docs/development.md` says the check fails - [x] W9-T05 `/about/`, `/contribute/`, `/made-in-europe/`: one idea per sentence, no semicolons, no "X, not Y" principle names, no "yours to download" - [x] W9-T06 `/privacy/`, `/imprint/`, `/disclaimer/`, `/404`: wording only, no semicolons in body copy, headings without the colon-and-triad pattern; legal content unchanged -- [ ] W9-T07 Screenshot baselines for the pages whose head changed, through the `refresh-screenshots` label +- [x] W9-T07 Screenshot baselines for the pages whose head changed, through the `refresh-screenshots` label (on the WP8 pull request, which refreshes the same pages) + +## WP8: Decorative plate + +One calm, label-free drawing under the head of the pages that have no diagram of their own, as +the blog does. Jan chose to ship it on `/explorer/`, `/breaches/` and the spec pages only (review +follow-up 10); `/mcp/` and `/standards/` keep their data view as the one visual. + +- [x] W8-T01 `src/lib/plate.ts`: the pure generator. An FNV-1a hash of the page id and title seeds a small generator; 3 to 5 columns of 2 to 4 nodes, links between neighbouring columns, one highlighted path from the first column to the last along existing links, one dashed trust boundary around one or two columns, one of eight hues. `plateSvg()` writes the SVG with classes only, no colours, `aria-hidden` +- [x] W8-T02 `src/styles/tokens.css`: `--plate-0` to `--plate-7`, eight hues at one lightness and chroma per theme, used for nothing else +- [x] W8-T03 `src/components/Plate.astro`: the drawing on a `.plate`, 48rem wide at most and left-aligned with the head; the path draws in once on load with a halo that fades after (M4, `--dur-draw`, `--ease-draw`), only under `prefers-reduced-motion: no-preference` +- [x] W8-T04 Placed under the page head of `/explorer/`, `/breaches/` and every `/standards//` page +- [x] W8-T05 `scripts/generate-brand-assets.ts`: `public/og-explorer.png` and `public/og-breaches.png` from the same generator and seed; `Base.astro` takes an `image` prop for the card +- [x] W8-T06 `tests/unit/plate.test.ts` (same input, same SVG, as a snapshot; different pages, different drawings; every plate in bounds, its path on existing links and under 4 kB) and `tests/e2e/plate.spec.ts` (present and hidden on the three page types, absent on home, `/mcp/`, `/standards/` and a chain, the section cards, axe, the reduced-motion end state) +- [x] W8-T07 `src/pages/accessibility.astro` lists the draw-in and its reduced-motion form; the plan records the decision +- [x] W8-T08 Screenshot baselines for `explorer.spec.ts`, `breaches.spec.ts` and `spec-page.spec.ts`: refreshed through the `refresh-screenshots` label on the pull request ## Review follow-ups (21 October 2026) @@ -186,3 +201,4 @@ Items from the redesign review, one pull request each, in order. - [x] R-07 Home figures and copy: the facts read Servers, Requirements, Cells observed and Specifications. "Cells observed" counts the current matrix cells that have an observation, beside the total (611 of 897), in place of the 1,664 entries of the append-only history, which counted every scan of the same cell again; `Facts.astro` takes an optional `of` total that stands still while the figure counts up. "Latest observations" shows the six newest observations of the current revision with one row per requirement and per server, so one scan run no longer fills the panel with six rows of the same feature. The seed-data sentence under the list is gone (the server page and `/contribute/` no longer carried one). No baseline changes: the home screenshot stops above the facts - [x] R-08 The explorer as a scene: one Web Animations API timeline (a target-less scene clock) holds the playhead for Play, Pause, Previous, Next, a scrub bar in the stepper, the arrow keys, a click on a step and the decision log (M6). Auto-advance starts once the chain has sat in view for 1 s with no input, stops for good on hover, touch, focus, scroll or a key, never restarts and never runs under reduced motion; M6 in the plan is amended. Per step the sender and receiver light up in the actor head, the message draws in over 300ms, earlier steps keep a quieter arrow and later ones a hairline (colour, not opacity, so axe passes while stepping) (M5). The changed claims get their rail 40ms apart once the message lands (M7), now through the Web Animations API instead of an `is-fresh` class. A toggle swaps the chain in place through a same-document view transition of 220ms and pushes its URL; back and forward swap again, the analytics count the swap as a pageview (M17). A quiet log under the chain gains one line per step (M18). Durations come from the motion tokens (`--dur-message`, `--stagger` and `--dur-step` are new) through `durationToken()` in `src/lib/motion.ts`. Baselines through the `refresh-screenshots` label - [x] R-09 Content pass (WP9 above): section-root headlines under 24 characters, the title suffix and footer statement, an accessibility statement that lists every motion with its reduced-motion form, `check:prose` as a gate, and the about, contribute, made-in-Europe, legal and 404 pages in plain English +- [x] R-10 Decorative plate (WP8 above): a deterministic drawing under the head of the explorer and breach indexes and every spec page, drawn in once (M4) and complete under reduced motion, with social cards for the two section roots from the same generator diff --git a/src/components/Plate.astro b/src/components/Plate.astro new file mode 100644 index 0000000..fbe4d43 --- /dev/null +++ b/src/components/Plate.astro @@ -0,0 +1,90 @@ +--- +import { plate, plateSvg } from "@/lib/plate"; + +// The decorative plate (plan WP8): one calm, label-free drawing under the head of a page that has +// no diagram of its own. Derived from the page's id and title, so it never changes between builds. +// Hidden from assistive technology. The highlighted path draws in once on load (M4); under reduced +// motion it is drawn complete. A page that shows data above the fold does not place it. +interface Props { + id: string; + title: string; +} + +const { id, title } = Astro.props; +const drawing = plate(id, title); +--- + +
+ + diff --git a/src/layouts/Base.astro b/src/layouts/Base.astro index dc19314..2b15c30 100644 --- a/src/layouts/Base.astro +++ b/src/layouts/Base.astro @@ -15,9 +15,11 @@ interface Props { path?: string; /** When set, the page is excluded from search indexing and the sitemap hint. */ noindex?: boolean; + /** The social card, a path under public/. Defaults to the home card. */ + image?: string; } -const { title, description, path, noindex = false } = Astro.props; +const { title, description, path, noindex = false, image = "/og.png" } = Astro.props; const site = Astro.site ?? new URL("https://letsauth.eu"); const canonical = new URL(path ?? Astro.url.pathname, site); const plausibleDomain = import.meta.env.PUBLIC_PLAUSIBLE_DOMAIN as string | undefined; @@ -101,7 +103,7 @@ const nav = [ - + {/* --ground in sRGB: oklch(98.5% 0.003 250) and oklch(21% 0.008 255) (pnpm check:contrast --hex) */} diff --git a/src/lib/plate.ts b/src/lib/plate.ts new file mode 100644 index 0000000..0a55125 --- /dev/null +++ b/src/lib/plate.ts @@ -0,0 +1,164 @@ +/** + * The decorative plate (specs/016-visual-redesign plan, WP8): a small label-free drawing of a + * delegation graph, derived from a page's id and title so that the same page always gets the + * same drawing and two pages rarely share one. Three to five columns of nodes, the links between + * neighbouring columns, one highlighted path from the first column to the last, one dashed trust + * boundary around a column or two, and one of eight hues. Pure: no randomness, no clock, no DOM. + */ + +export const PLATE_WIDTH = 800; +export const PLATE_HEIGHT = 168; +export const PLATE_HUES = 8; + +const PAD_X = 40; +const NODE_GAP = 38; + +export interface PlateNode { + x: number; + y: number; + /** On the highlighted path. */ + path: boolean; +} + +export interface Plate { + /** 0 to PLATE_HUES - 1: which `--plate-N` token colours the path. */ + hue: number; + nodes: PlateNode[]; + /** Pairs of indexes into `nodes`, always from a column to the next one. */ + links: [number, number][]; + /** Indexes into `nodes`, one per column, left to right. */ + path: number[]; + /** The dashed trust boundary, a rounded rectangle. */ + boundary: { x: number; y: number; width: number; height: number }; +} + +/** FNV-1a, 32 bit. */ +function hash(text: string): number { + let h = 0x811c9dc5; + for (let i = 0; i < text.length; i++) { + h ^= text.charCodeAt(i); + h = Math.imul(h, 0x01000193); + } + return h >>> 0; +} + +/** mulberry32: a small seeded generator, so the drawing depends on the seed alone. */ +function random(seed: number): (n: number) => number { + let a = seed; + return (n) => { + a = (a + 0x6d2b79f5) >>> 0; + let t = a; + t = Math.imul(t ^ (t >>> 15), t | 1); + t ^= t + Math.imul(t ^ (t >>> 7), t | 61); + return Math.floor((((t ^ (t >>> 14)) >>> 0) / 4294967296) * n); + }; +} + +export function plate(id: string, title: string): Plate { + const seed = hash(`${id}\n${title}`); + const pick = random(seed); + const hue = seed % PLATE_HUES; + const columnCount = 3 + pick(3); + const step = (PLATE_WIDTH - 2 * PAD_X) / (columnCount - 1); + + const nodes: PlateNode[] = []; + const columns: number[][] = []; + for (let c = 0; c < columnCount; c++) { + const count = 2 + pick(3); + const top = PLATE_HEIGHT / 2 - ((count - 1) * NODE_GAP) / 2; + const column: number[] = []; + for (let k = 0; k < count; k++) { + column.push(nodes.length); + nodes.push({ + x: Math.round(PAD_X + c * step + pick(17) - 8), + y: Math.round(top + k * NODE_GAP + pick(13) - 6), + path: false, + }); + } + columns.push(column); + } + + const path = columns.map((column) => column[pick(column.length)] as number); + for (const i of path) (nodes[i] as PlateNode).path = true; + + // Each node links to the node at the same height in the next column and, now and then, to one + // more; every node of the next column gets at least one incoming link; the path's links exist. + const links = new Map(); + const link = (a: number, b: number) => links.set(`${a}-${b}`, [a, b]); + for (let c = 0; c + 1 < columnCount; c++) { + const from = columns[c] as number[]; + const to = columns[c + 1] as number[]; + from.forEach((a, k) => { + link(a, to[Math.round((k * (to.length - 1)) / Math.max(1, from.length - 1))] as number); + if (pick(3) === 0) link(a, to[pick(to.length)] as number); + }); + to.forEach((b, k) => { + if (![...links.values()].some(([, t]) => t === b)) { + link(from[Math.round((k * (from.length - 1)) / Math.max(1, to.length - 1))] as number, b); + } + }); + link(path[c] as number, path[c + 1] as number); + } + + // The boundary holds one column, or two neighbours when there are four or five. + const span = columnCount > 3 && pick(2) === 0 ? 2 : 1; + const first = pick(columnCount - span + 1); + const inside = columns.slice(first, first + span).flat(); + const xs = inside.map((i) => (nodes[i] as PlateNode).x); + const ys = inside.map((i) => (nodes[i] as PlateNode).y); + const x = Math.min(...xs) - 22; + const y = Math.max(8, Math.min(...ys) - 20); + const boundary = { + x, + y, + width: Math.max(...xs) + 22 - x, + height: Math.min(PLATE_HEIGHT - 8, Math.max(...ys) + 20) - y, + }; + + return { hue, nodes, links: [...links.values()], path, boundary }; +} + +/** A horizontal S-curve from one node to another. */ +function curve(a: PlateNode, b: PlateNode, move = true): string { + const mid = Math.round((a.x + b.x) / 2); + return `${move ? `M${a.x} ${a.y}` : ""}C${mid} ${a.y} ${mid} ${b.y} ${b.x} ${b.y}`; +} + +/** + * The drawing as SVG markup. Classes, not colours: `.pb` boundary, `.pl` links, `.ph` the halo + * under the path, `.pp` the path, `.pn` nodes, `.po` nodes on the path. The page or the social + * card generator styles them with tokens and sets `--plate` to the hue. + */ +export function plateSvg(p: Plate): string { + const node = (i: number) => p.nodes[i] as PlateNode; + const links = p.links.map(([a, b]) => curve(node(a), node(b))).join(""); + const route = p.path + .slice(1) + .map((b, k) => curve(node(p.path[k] as number), node(b), k === 0)) + .join(""); + const { x, y, width, height } = p.boundary; + const circles = p.nodes + .map((n) => ``) + .join(""); + return ( + `` + ); +} + +/** + * The section roots that carry a plate, with what their social card says. The page and the card + * generator (`scripts/generate-brand-assets.ts`) seed the drawing from the same id and title, so + * the card shows the page's drawing. + */ +export const SECTION_PLATES = { + explorer: { title: "Delegation chains", eyebrow: "Delegation chain explorer" }, + breaches: { title: "Agent auth failures", eyebrow: "Breach anatomy" }, +} as const; + +/** The social card of a section root, written by `pnpm generate:brand`. */ +export const sectionCard = (id: keyof typeof SECTION_PLATES) => `/og-${id}.png`; diff --git a/src/pages/accessibility.astro b/src/pages/accessibility.astro index 31800ff..dd2c745 100644 --- a/src/pages/accessibility.astro +++ b/src/pages/accessibility.astro @@ -19,6 +19,11 @@ const motions = [ what: "The longest builds-on path draws itself in once, with a soft halo that fades after.", reduced: "The path is drawn complete, with no halo.", }, + { + where: "Explorer, breaches and standard pages", + what: "A small drawing under the page title draws its coloured path in once, with a soft halo that fades after. It is decoration and screen readers skip it.", + reduced: "The drawing shows complete, with no halo.", + }, { where: "Explorer: steps", what: "On each step the sender and receiver light up and the message arrow draws in over 300 ms. The changed token claims get a rail that fades over 480 ms.", diff --git a/src/pages/breaches/index.astro b/src/pages/breaches/index.astro index 3ae63ad..b73b12d 100644 --- a/src/pages/breaches/index.astro +++ b/src/pages/breaches/index.astro @@ -1,8 +1,10 @@ --- +import Plate from "@/components/Plate.astro"; import Base from "@/layouts/Base.astro"; import { breachList } from "@/lib/breaches"; import { getDataset } from "@/lib/data"; import { PARTY_LABEL, TOGGLE_KIND_LABEL, VULNERABILITY_CLASS_LABEL } from "@/lib/labels"; +import { SECTION_PLATES, sectionCard } from "@/lib/plate"; import { REPO } from "@/lib/site"; const data = getDataset(); @@ -21,6 +23,7 @@ const date = (d: string) => title="Breach anatomy" description={`${breaches.length} published vulnerabilities and incidents in how agents were authorized, each traced to the control that was missing and the atlas requirements that name it.`} path="/breaches/" + image={sectionCard("breaches")} >
@@ -47,6 +50,8 @@ const date = (d: string) =>
+ +
    { breaches.map(({ vulnerability: v, features, replay }) => ( diff --git a/src/pages/explorer/index.astro b/src/pages/explorer/index.astro index 2f4c7fe..8aa5ea4 100644 --- a/src/pages/explorer/index.astro +++ b/src/pages/explorer/index.astro @@ -1,8 +1,10 @@ --- +import Plate from "@/components/Plate.astro"; import Base from "@/layouts/Base.astro"; import { getDataset } from "@/lib/data"; import { scenarioList } from "@/lib/explorer"; import { TOGGLE_KIND_LABEL } from "@/lib/labels"; +import { SECTION_PLATES, sectionCard } from "@/lib/plate"; const data = getDataset(); const scenarios = scenarioList(data); @@ -23,6 +25,7 @@ for (const { scenario } of scenarios) { title="Delegation chain explorer" description={`${scenarios.length} scenarios of how authority moves through agent systems: ${stepCount} steps, each with the decoded token and the specification section it follows, and ${toggleCount} attack and misconfiguration toggles.`} path="/explorer/" + image={sectionCard("explorer")} >
    @@ -53,6 +56,8 @@ for (const { scenario } of scenarios) {
    + +