Files
adr-sml/docs/reference/brand-assets.md
T
Pouya LajevardiandClaude Opus 5 165d259f5c feat: build step 2 — the home page; close Q35, Q37, Q39; Q39's answer corrected the register
Pouya's rulings and the page are one commit, not two, because they are not
separable: Q37 changed the credential label the page renders, Q39 scoped the
arbitration copy, and Q35 gave Med-Arb the row that lets the footer link stand.
Splitting them would produce a commit where the register says one thing and the
page says another.

RULINGS

Q39 — ANSWERED, and my assertion was FALSE as a universal. Pouya checked
rather than defended. Family arbitration in Ontario is gated: prescribed
training, 14h on screening for domestic violence and power imbalances, 30h of
Ontario family law for arbitrators outside the bar, 10h ongoing per two years.
claims-auditor produced that counter-example from inside the repo on 2026-08-26
and it was right. The source is now IN the repo per R14 —
docs/reference/ontario-family-arbitration-training.md, retrieved with its
provenance — and §4 states which half it establishes: the family gate directly,
the commercial half only by absence. So "commercial arbitration in Ontario
requires no licence and no designation" is recorded as Pouya's stated position,
unstamped. What disposes of the question is the scope exclusion: he does not do
family arbitration, so it is NOT OFFERED and the gate never bears on the
practice.

The false universal survived in three more live places, found by grep, not
recall: §4's NOT-NEGOTIABLE boundary bullet (the boundary paragraph breaching
its own boundary), §9's Q33 closure row, and a comment in SiteHeader.astro.

Q35 — ANSWERED, all four items, and the answer supplied a gate that was
missing. Med-Arb gets an Offerings row and stays in the footer sitemap. The six
subject-matter labels pass test 1. §4 gains "Subject-matter areas — the
publication gate": competence to accept an appointment, AND a page that frames
it as positioning without claiming history. Nothing in the nav or footer is
unrowed any more.

Q37 — ANSWERED. "Law and engineering" becomes "Legal training and engineering
practice". A degree is not a practice; the parallel was doing the implying.

Q38/R13 — the committed SVG does not close it; the walk-back went too far. It
renders faithfully BECAUSE it is the raster. R13 stays open.

R1 — surfaced and acknowledged; the interim licensure framing is now carried by
a shipped page rather than a spec, which raises the stakes.

BUILD STEP 2

Seven of docs/01's eight home sections, six new components, zero JavaScript.
Section 7 (Latest insights) ships at step 7 with the collection it lists —
recorded in docs/01 and in the page, not just here. Four credential slots, not
three: §4's paired-disclosure condition requires the Q.Arb stage on any page
that offers arbitration. No booking link (R6). The masthead tagline is
suppressed on / (it duplicated the hero eyebrow). The step-1 proof sheet is
deleted, and five live references to it were found by grep.

WHAT THE REVIEWS FOUND — 24 findings across the two passes

claims-auditor FAILED it on ten, every one implication or scope rather than
fabrication, which is where D13 says the risk lives. The four that mattered:
"I mediate and arbitrate" asserted a track record §4 does not hold for
arbitration; the JSON-LD asserted arbitration twice and stated the stage
nowhere (a crawler-only claim is still a claim); "at one published rate with
preparation time included" misdescribed money against docs/07's two day rates
and capped prep allowance; and "Law and engineering are not blended here" was
Q37's struck parallel relocated into prose one day after Pouya struck it.
It also found the Canadian Tax Foundation missing from §9 Q8 — a stale second
copy of a fact that would have bitten at step 3.

adversarial-reviewer found fourteen, three blocking. The first was
class="section-head" on <SectionHeading> never matching — the parent-cannot-
style-a-child defect for the FOURTH time, written into a diff where I had just
added fresh warnings about it to two other components. Measured: 0px margin,
0px gap, headings over the card edges, with astro check and eslint both clean.
I had looked at a screenshot of that section and passed over it. Fixed with a
page-owned wrapper (48px, measured) and the prop is deleted from six components
so it is now a build error. Also: the credential row was never "two up on a
phone" and its comment said it was; PROCESS was hardcoded in the page against
the reason written in site.ts; 83px of residual overflow at a 200% default font
size, now 3px.

Seven more I found myself first, including <Picture widths> declaring the
untouched 1600px master as the <img src> fallback (254,626 B for a 476px slot,
and the build log said "before: 349kB" either way), and a prop named `as`
silently turning off type-checking for a whole component.

VERIFICATION — run, not asserted. Full figures in AGENTS.md entry (w).

npx tsc 6.0.3 · check 0/0/0 · lint clean · build clean · audit 0
1 <script> and it is JSON-LD; non-JSON-LD scripts 0; no JS bundle; identical
page with script execution disabled (444 nodes, 6,578 chars)
Phase 5 minifier check: no `animation` shorthand beside animation-timeline
overflow 0 at 14 widths, AND every mark measured at 1.5654-1.5657 vs 1.5657
one h1, no heading skips, focus order == DOM order across 44 focusables
31 painted contrast pairs at 3 widths, 0 failures
72/72 hit-test points across 8 cards resolve to the card's link
print 0 hidden, reduced-motion 0 hidden
Lighthouse NOT RUN — tool unavailable until step 7 (R11)
HTML validator NOT RUN, and 4 of 12 srcsets carry a duplicate 1x descriptor

Opened for Pouya: Q40 (one OG image for nineteen pages), Q41 (does Q37 reach
prose; may the comparative be restored; what LAT pre-hearing mediation means),
Q42 (the four "also offered" processes have no row), Q43 (the process timings
are published commitments with no row).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0148NztQskLKKApP5SzAA78e
2026-08-27 16:31:56 -04:00

6.2 KiB
Raw Blame History

Brand assets — provenance

The repository holds the artwork it makes claims about. That is not tidiness: it is CLAUDE.md's rule and AGENTS.md R14, and this file exists because the infinity mark was reconstructed wrongly and two adversarial review passes could not catch it, since the real artwork was not in the repo to compare against.

Every measurement below is [verified 2026-08-26] — computed with sharp against the files in this repository, and re-derivable by anyone from the commands given. Nothing here is quoted from an external source.

Files

File What it is Use
src/assets/brand/sml-infinity-mark-master.png The mark as supplied: 3000 × 3000, alpha, mark inset within the canvas The master. Committed so the crop below can be re-derived and checked in-repo, not taken on trust
src/assets/brand/sml-infinity-mark.png The same mark tight-cropped to its ink bounding box: 2668 × 1704, alpha, 1.5657:1 The render source. InfinityMark.astro feeds it to Astro's <Picture>
src/assets/brand/sml-logo-full.png Mark plus the "SML Company" wordmark, 3000 × 3000, alpha; ink bbox 2414 × 1440 = 1.676:1 Not currently rendered. Held for the OG-image template (docs/04) and print
src/assets/brand/sml-logo-source.svg 1500 × 1500 viewBox, 257,278 bytes Reference. Faithful, but not what is served — see below

Reproducing the crop, in-repo

The crop is derived, so it is re-derivable — and now from a file that is here, which is the whole point of R14. Scan the master for the first and last pixel that is neither transparent (alpha < 24) nor near-white (r,g,b > 243):

ink bbox of sml-infinity-mark-master.png -> 2668 x 1704 at (159, 646)
sharp(master).extract({ left: 159, top: 646, width: 2668, height: 1704 })

Crop to that box and the file's own aspect ratio becomes the mark's, so layout can be tuned against the asset directly rather than against a number written down beside it. InfinityMark.astro pins aspect-ratio: 667 / 426, which is 2668 / 1704 reduced — 1.56573.

Why the SVG is held but not served

It renders faithfully. Rasterised at 8333 px it reproduces the master exactly, at the same 1.566:1. It is not bad artwork, and an earlier version of this file implied it was; that was wrong.

What rules it out is weight and composition:

  • 257,278 bytes, against 3,063 bytes for the AVIF a Retina device actually takes in the header. 84×. (This line said "9,468 bytes... 27×" until 2026-08-27. 9,468 was the DPR-1 figure — the number for the devices the performance budget does not target. Quote the figure for the device the budget is written for.)
  • 7 embedded base64 PNGs (<image> elements), so it is a hybrid rather than pure vector — inlining it would breach CLAUDE.md's rule against base64-inlining images, which is one of the specific faults of the build this project replaces.
  • 10 <linearGradient> carrying 1,225 <stop> elements, 64 <path>, 59 <clipPath>, 23 <mask>, 1 <filter>. Expensive to rasterise.

What AGENTS.md Q38 asks for is a master that is faithful and light.

What the browser actually downloads

<Picture> emits AVIF, WebP and a PNG fallback at densities 1×, 2× and 3× of whatever intrinsic width the call site passes. There are now TWO ladders, because there are two sizes of call site [measured 2026-08-27 — every figure below read from the file on disk].

width={64} — the default. The header (50.1 px wide) and footer (56.4 px).

1× (64 px) 2× (128 px) 3× (192 px)
AVIF 1,720 B 3,063 B 4,843 B
WebP 2,368 B 5,368 B 8,664 B
PNG (fallback) 6,137 B 16,996 B 29,780 B

width={232} — the home page's approach section, which renders at 225.5 px.

1× (232 px) 2× (464 px) 3× (696 px)
AVIF 6,017 B 14,555 B 22,639 B

That instance is loading="lazy": it sits roughly a screen and a half down, so it is not on the LCP path. The header and footer marks stay eager.

THE LADDER HAS NOW BEEN WRONG IN BOTH DIRECTIONS, which is why width is a prop rather than a constant.

  • Too big, 2026-08-26. Sized at 320 px, justified by a 4 rem sample on the proof sheet (a page step 2 has since deleted), with densities stacked on top — so the ladder double-counted its own headroom and every DPR-2 device pulled a 640 px image into a 56 px slot: 20,629 B, while the docs claimed 9 KB because that is what DPR 1 took.
  • Too small, 2026-08-27. The home page added a 225.5 px call site and inherited the 64 px ladder, whose largest file is 192 px: 3.52× upscale at DPR 3. Now 232/464/696, and 696 covers the 676 device px a DPR-3 screen asks for. All three instances measure ≤1.0× upscale at DPR 1, 2 and 3.

Do not measure this with img.naturalWidth. For an image chosen from a srcset with an x descriptor it is density-corrected: the 192 px file selected at 3x reports 64, so reading it at DPR 1, 2 and 3 returns 64 every time — which looks exactly like the ladder not being generated at all. Read the files on disk.

Passing an explicit width is load-bearing: without it Astro emits the untouched 2668 px master as the <img src> fallback — 1,146,406 bytes — which any client without AVIF or WebP support would actually download.

The colours are the artwork's, not the palette's

tokens.css is not involved. The ribbon carries its own gradient and it is close to but not identical with --maroon #5a1a1c and --gold #c9a876. Do not "correct" the artwork toward the tokens, and do not derive tokens from the artwork — D7 keeps the palette and the mark, as they are.

Where these came from

Supplied by Pouya. sml-logo-source.svg was added by him directly to the repo; the PNGs were taken from the smlcompany.ca Google Drive, under SML/Designs/ and Research/Law/ADR Personal Branding Project/. The Drive copies are not the record — these files are. That is the point of R14: an artefact that lives only in Drive cannot be compared against a claim by any reviewer, which is exactly how the traced mark survived two review passes.