# Board, design pass 8: what changed in the situations you care about

*W-design-pass8-board, Opus 5.5, 2026-09-27 23:37 Beirut onward. Brief: `briefs/W-design-pass8-board.md`. Built on copies of the pass 7 files (`now.html`, `situation.html`, `scripts/`, `palette-cvd.txt`). New file `board.html`; `now.html` and `situation.html` changed by the Board nav line only (d). Design choices, the five example rows and TALLOW are grade C. SPRING prices are grade A, SPRING market cap grade B (1B supply assumed, `~` everywhere). Verification numbers are grade A, from our own script output. Re-run: `NODE_PATH=/home/botbox/node_modules node scripts/verify.cjs` (Board checks, writes `scripts/verify-board-output.txt` and the four `shots/board-*.jpg`) and `node scripts/shots.cjs` (pass 7 script, extended with the four Board shots; re-verifies Now and Situation into `scripts/verify-output.txt`).*

**Look first:** `shots/board-desktop.jpg` (live, SPRING entered at 17:11Z), `board-desktop-1657.jpg`, `board-phone.jpg`, `board-phone-why.jpg`.

## (a) Design decisions, and where Board departs from T8 §6 and §9

**The card leads with the delta, not the token.** The delta line is the largest text on the card (21 px / 600, you-yellow; 19 px on the phone), one pixel over the 20 px symbol, which keeps its Now size. Its strings are Now's For you, produced by the same `forYou()` function copied byte for byte from pass 7, so the two pages cannot disagree at the same `t` (verified at three moments, two widths, with and without an entry). The headline links to Situation compare exactly as For you does.

**Checkpoints mirror the frozen Now, not the brief's authored split.** The brief asked for authored checkpoints giving `In 1 · Changed 2 · Watching 2 · Archived 1`. Now's looks are frozen (SPRING 16:57Z, AGRIPPA 16:47Z, LUMEN 17:02Z, MARLIN 17:12Z; KESTREL and OBOL never opened) and only SPRING can carry an entry on Now. Any other split would make the delta line differ from Now's For you, which the brief makes a hard check, and changing Now was out of bounds. So Board reads the same looks and the same `caverio.spring.entry` key. Result: live with the entry is `In 1 · Changed 3 · Watching 0 · Archived 1`; 16:57Z is `Watching 2` (SPRING, AGRIPPA); 16:42Z has no open card and shows the empty state plus Archived. The one situation that is not on Now, the archived example TALLOW, is new and left the surface at 16:18Z, before the hour, so it never contradicts Now at any `t`. KESTREL and OBOL are not on the board (never looked), which About says. Without a stored entry SPRING sits under Changed (`3 material since look`), also byte-equal with Now.

**One card per situation.** Contract §8 allows a situation under In and Changed at once. Board shows it once, under In, and the change since the look rides as For you's second small line (`3 since look`). Two cards for one token would split the moment line and the order freeze for no new fact.

**Top changes.** The first two material lines since the checkpoint, each a fact with a clock. SPRING's lines use the Situation page's own rule and wording (`Price $0.00168 to $0.00266, up 58% · 17:27Z`, `Wallets entered 861 to 939 · 17:27Z`, `First profiled trader entered, after 876 wallets · 17:08Z`), and the line count equals `matSince()` by construction. Pick order by weight, then newest: safety change, state change, holders and top-20 share, profiled or watched trader, price, wallets entered. **Departure from T8 §6 H2:** H2 is a newest-first list of up to 8 hold events with liquidity, deployer, caller and net-flow rules; the frozen data has none of liquidity reads, deployer ids, stance or flow, so the weights are restricted to what the data carries, and the list is two lines plus `and N more`. Calls and mentions are material (they are in the count) but never printed as a top change: the caller line would be a caller count, which is not on Board. Holder weakening (`41% of the first 50 wallets reduced`) is printed under the holders weight; it is T8's early-holder exodus line and the data carries it. MARLIN's safety line says `the deployer removed 38% of the pool` rather than naming the pool metric that is barred from Board. `and N more` links to Situation compare (`situation.html?a=<checkpoint>&t=<m>`) on SPRING; example rows have no Situation page, so it is plain text, as For you is on Now.

**Intact line.** No material line since the checkpoint: look gives `Nothing material since your look; still <state at m>`; entry gives `Reasons at entry still hold: <state at the entry>, as at HH:MMZ`. A state difference would itself be material, so the intact line only prints when the state is unchanged. **Departure from the brief's example** (`Money first, attention rising`): attention is not rising on SPRING (no public mention seen), so the line prints only the state.

**H1 entry line.** `entry ~$1.68M · +58% since entry · held 16 min · at the high since entry`. **Departure from T8 §6 H1:** no entry price input, no change large; the entry cap is the last read at or before the tap (`last(entry)`), as Situation's entry snapshot stores it. `-N% from the high since entry` prints when below the high; at the high the line says so (SPRING's only read after 17:11Z is the high). No dollar result, no size.

**Order.** In and Changed use Now's bucket order against the card's own changes (a safety line in the last 60 min, then a material line in the last 30 min, then the rest; newest material line first inside). Live: MARLIN (safety 17:19Z), LUMEN (17:21Z), AGRIPPA (17:17Z). Watching: newest look first. **Departure from T8 §9 M1/M2:** T8 splits Watching / In / Out into three columns ordered by newest change and by H2 severity; Board is one finite column of four groups, because the phone is the primary shape and a column cannot scan severity across three lists. M3 Out is not built: the `In → Out` control records `outAt` in this browser (`caverio.spring.out`), the card stays under In with `Out · HH:MMZ` added to the delta line, and `Undo out` clears it; Out treatment is next pass. M4 alerts: one About line, `Alerts: not in this pass`. M5 limits: `watching N of 30 · in N of 10`, small, beside the counts. M1's `lights lit` and `change since I started watching` are not printed (lights live in the Situation drawer since §11.2; the scale line already carries `since seen`).

**Mini Clock.** Now's `strip()` unchanged, plus one layer: a 2.5 px you-yellow line at .5 on the baseline from the checkpoint to the moment (`Since your look, HH:MMZ` title), under the price line and glyphs. The readout under the strip is dropped on Board: it carries entered and holder counts, and the card's changes already name what moved. The strip sits in column 4 of the same grid as the rail, so `stripX` is identical to the rail's (890 at 1280, 195 at 390).

**Archived.** A collapsed group (`Archived 1`, `1 archived`, `aria-expanded`), opening to a quieter card on `--s1`: symbol, chain, `left the surface 16:18Z`, `last state Early money leaving · looked 15:52Z`, and the frozen room. TALLOW is an example with no room, so the link is a disabled label `Frozen room, 16:18Z`; when `room` is set the card renders `Open frozen room`.

**Historical behaviour.** At `t` a situation is on the board only if it surfaced by `t` and has a checkpoint at or before `t`; a later look does not exist yet. Rewound, one line under the groups says `Situations you look at after HH:MMZ join the board at that look.` (a rule, no names, so nothing after `t` leaks). The empty state (`Nothing on your board yet. Open a situation from Now; a look puts it here, I'm in keeps it.`) replaces the three open groups when all are empty.

**Nav edits.** One line in each frozen page: `<span>Board</span>` becomes a link to `board.html` whose inline `onclick` appends `?t=` from the current URL. Both pages already write `?t=` when rewound, so no other line changes. Consequence: on Now, Tab now stops on the Board link before Play (visible in `verify-output.txt`, the only non-timing difference from pass 7).

**Minor, not fixed.** The small lines of the delta (`· 17:11Z`, `· 3 since look`) keep their leading dot when they wrap to a new line on desktop. The nav links keep the browser's default focus ring (as on Now).

## (b) Board specification

**Page.** Nav `Now · Board · Market` (Now carries `?t=` when rewound). Head `Board` + `In N · Changed N · Watching N · Archived N` (plain counts, `aria-live`) + small `watching N of 30 · in N of 10` (watching = Changed + Watching). The question under the head: `What changed in the situations you care about, since you last looked or entered.` Clock block exactly Now's: Play, `Market time` over `Live · 17:27Z` / `Board at HH:MMZ` + `Historical`, `Back to live`, `Copy link` (`Copied · HH:MMZ` rewound, `Copied` live), the rail over the strip column, Now's landmarks and x mapping. Then the groups, the legend (Now's glyph lines plus `Your colour on the baseline: from your checkpoint to the moment`), About this data, footer `Caverio · Board, 14 Sep 2026, held at 17:27Z`. Geist, tabular figures, no mono (no address on Board). Pass 2 palette, no green or red.

**Groups, in order**, each a finite list with its own end line (`Nothing else you are in, as of HH:MMZ.` / `Nothing else changed since your look, as of HH:MMZ.` / `Nothing else you are watching, as of HH:MMZ.`; empty: `You are in nothing as of`, `No material change since your looks, as of`, `Nothing quiet you are watching, as of`):
1. **In** (`you entered`): entry at or before m. Order: safety line in the last 60 min, then a material line in the last 30 min, then the rest; newest material first.
2. **Changed** (`looked, material change since your look`): look at or before m, no entry, 1+ material since the look. Same order.
3. **Watching** (`looked, nothing material since`): look at or before m, 0 material. Newest look first.
4. **Archived**: collapsed toggle `Archived N` + `N archived`; cards `left the surface HH:MMZ`, `last state <S> · looked HH:MMZ`, frozen room link (`Open frozen room`, or a disabled `Frozen room, HH:MMZ` label when no room exists).
Empty state, when 1 to 3 are all empty: `Nothing on your board yet. Open a situation from Now; a look puts it here, I'm in keeps it.`

**Card, desktop 1280**, grid `292 | 196 | 150 | 306 | 1fr`, the clock on the same grid: column 1 the delta line over the top changes; 2 identity; 3 state pill; 4 Mini Clock (the rail's column); 5 actions, right-aligned. Safety bucket cards carry Now's crimson inset rule.
**Card, phone 390: six elements, top to bottom**: (1) delta line; (2) top changes or intact line; (3) identity and scale (+ H1 for In); (4) state pill + descriptor, tap for Why here; (5) Mini Clock; (6) actions row (`Open Situation`, `Compare since look|entry`, `In → Out`), every control 32 px or more.

**String patterns, all `last(m)`** (the last read at or before m; no interpolation, no future value):
- Delta line = Now For you at m: `In · N material since entry` / `HH:MMZ` / `N since look` (when the look is at or before m); `N material since look` / `HH:MMZ`; `No material change` / `since look HH:MMZ`. Out at or before m appends `Out · HH:MMZ`.
- Top changes: up to two material lines since the checkpoint, `<fact> · HH:MMZ`, by weight (safety, state, holders and top-20, profiled or watched trader, price, wallets entered) then newest; calls and mentions counted, never printed. Then `and N more` (N = material count minus lines printed), linked to `situation.html?a=<checkpoint>&t=<m>` where a Situation page exists.
- Intact line (0 material): `Nothing material since your look; still <state at m>` / `Reasons at entry still hold: <state at entry>, as at HH:MMZ`.
- Identity: Now's cell unchanged: symbol, name when it differs and fits, `<chain> · tracked <age at m>`, `Following`, `MC ~$X · ±N% since seen` (change since `firstSeenAt`, `~` while supply is not read).
- **H1** (In only): `entry ~$X` (last read at or before the entry × 1B) `· ±N% since entry` (last(m) against it) `· held <m − entry, or out − entry>` `· -N% from the high since entry` or `at the high since entry` (high = max of the entry read and reads after the entry up to m).
- State pill, descriptor and Why here: Now's component and wording at m.
- Links: `Open Situation` = `situation.html` + `?t=<m>` when rewound; compare = `situation.html?a=<checkpoint>&t=<m>`.

**Mini Clock**: Now's glyph table unchanged (price line, bars, participant ring, attention ring, weakening tick, safety diamond, look flag, entry diamond, hatch, clean baseline, moment line), plus the checkpoint span: you-yellow .5, 2.5 px, on the baseline from the checkpoint to m. Nothing right of m.

**Historical rule.** At m: a card exists only if the situation surfaced at or before m and has a checkpoint at or before m (entry wins over look; later checkpoints do not exist); every sentence, number, line, glyph, count and clock on the page comes from reads at or before m (verified: no clock later than m on any card at live, 16:57Z, 16:42Z). Rewound, a rule line: `Situations you look at after HH:MMZ join the board at that look.`

**Live stability.** While playing with the pointer or focus in the groups, cards hold their group and place, values update in place, and a pill offers `N new situations on your board` / `Order changed`.

**Not on Board, ever.** Volume, 5m/1h/24h %, the pool metric, holder count, caller count, score, rank, dollar result, position size, wallet link, alert settings.

## (c) Verification (23:53 Beirut; full output in `scripts/verify-board-output.txt`, frozen pages in `scripts/verify-output.txt`)

```
PASS shot board-desktop.jpg: 146 KB (q 80), scrollWidth 1280, fonts Geist
PASS shot board-desktop-1657.jpg: 109 KB (q 80), scrollWidth 1280, fonts Geist
PASS shot board-phone.jpg: 128 KB (q 80), scrollWidth 390, fonts Geist
  hook: tapped SPRING pill, open true
PASS shot board-phone-why.jpg: 130 KB (q 80), scrollWidth 390, fonts Geist
PASS 1280 live groups In [SPRING] Changed [MARLIN,LUMEN,AGRIPPA] Watching [] Archived [TALLOW]
  1280 live visible group order: in > changed > watching > archived; header "In 1 · Changed 3 · Watching 0 · Archived 1" / "watching 3 of 30 · in 1 of 10"; empty state shown: false
PASS 1280 live SPRING delta "In · 2 material since entry | 17:11Z | 3 since look" == Now For you "In · 2 material since entry | 17:11Z | 3 since look"
    SPRING top changes: Price $0.00168 to $0.00266, up 58% · 17:27Z | Wallets entered 861 to 939 · 17:27Z
PASS 1280 live MARLIN delta "1 material since look | 17:12Z" == Now For you "1 material since look | 17:12Z"
    MARLIN top changes: Safety changed: the deployer removed 38% of the pool · 17:19Z
PASS 1280 live LUMEN delta "4 material since look | 17:02Z" == Now For you "4 material since look | 17:02Z"
    LUMEN top changes: State became Early money leaving, 24% of the first 50 wallets reduced · 17:03Z | 41% of the first 50 wallets reduced · 17:18Z | and 2 more
PASS 1280 live AGRIPPA delta "3 material since look | 16:47Z" == Now For you "3 material since look | 16:47Z"
    AGRIPPA top changes: State became Crowd arriving · 17:05Z | Top-20 share fell from 0.52 to 0.37 · 17:17Z | and 1 more
PASS 1280 live SPRING H1 "entry ~$1.68M · +58% since entry · held 16 min · at the high since entry"
PASS 1280 live clocks later than the moment on cards: none
PASS 1280 live checkpoints: SPRING entry 17:11Z; MARLIN look 17:12Z; LUMEN look 17:02Z; AGRIPPA look 16:47Z
PASS 1280 live stripX(16:57Z) rail 890, cards SPRING 890, MARLIN 890, LUMEN 890, AGRIPPA 890
PASS 1280 live banned words (alpha, smart money, signal, score, rank, PnL): zero
PASS 1280 16:57Z groups In [] Changed [] Watching [SPRING,AGRIPPA] Archived [TALLOW]
  1280 16:57Z visible group order: in > changed > watching > archived; header "In 0 · Changed 0 · Watching 2 · Archived 1" / "watching 2 of 30 · in 0 of 10"; empty state shown: false
PASS 1280 16:57Z SPRING delta "No material change | since look 16:57Z" == Now For you "No material change | since look 16:57Z"
    SPRING top changes: Nothing material since your look; still Money first
PASS 1280 16:57Z AGRIPPA delta "No material change | since look 16:47Z" == Now For you "No material change | since look 16:47Z"
    AGRIPPA top changes: Nothing material since your look; still Developing
PASS 1280 16:57Z SPRING H1 null
PASS 1280 16:57Z clocks later than the moment on cards: none
PASS 1280 16:57Z checkpoints: SPRING look 16:57Z; AGRIPPA look 16:47Z
PASS 1280 16:57Z stripX(16:57Z) rail 890, cards SPRING 890, AGRIPPA 890
PASS 1280 16:57Z banned words (alpha, smart money, signal, score, rank, PnL): zero
PASS 1280 16:42Z groups In [] Changed [] Watching [] Archived [TALLOW]
  1280 16:42Z visible group order: archived; header "In 0 · Changed 0 · Watching 0 · Archived 1" / "watching 0 of 30 · in 0 of 10"; empty state shown: true
PASS 1280 16:42Z SPRING H1 null
PASS 1280 16:42Z clocks later than the moment on cards: none
PASS 1280 16:42Z checkpoints: none
PASS 1280 16:42Z stripX(16:57Z) rail 890, cards none
PASS 1280 16:42Z banned words (alpha, smart money, signal, score, rank, PnL): zero
PASS 390 live groups In [SPRING] Changed [MARLIN,LUMEN,AGRIPPA] Watching [] Archived [TALLOW]
  390 live visible group order: in > changed > watching > archived; header "In 1 · Changed 3 · Watching 0 · Archived 1" / "watching 3 of 30 · in 1 of 10"; empty state shown: false
PASS 390 live SPRING delta "In · 2 material since entry | 17:11Z | 3 since look" == Now For you "In · 2 material since entry | 17:11Z | 3 since look"
    SPRING top changes: Price $0.00168 to $0.00266, up 58% · 17:27Z | Wallets entered 861 to 939 · 17:27Z
PASS 390 live MARLIN delta "1 material since look | 17:12Z" == Now For you "1 material since look | 17:12Z"
    MARLIN top changes: Safety changed: the deployer removed 38% of the pool · 17:19Z
PASS 390 live LUMEN delta "4 material since look | 17:02Z" == Now For you "4 material since look | 17:02Z"
    LUMEN top changes: State became Early money leaving, 24% of the first 50 wallets reduced · 17:03Z | 41% of the first 50 wallets reduced · 17:18Z | and 2 more
PASS 390 live AGRIPPA delta "3 material since look | 16:47Z" == Now For you "3 material since look | 16:47Z"
    AGRIPPA top changes: State became Crowd arriving · 17:05Z | Top-20 share fell from 0.52 to 0.37 · 17:17Z | and 1 more
PASS 390 live SPRING H1 "entry ~$1.68M · +58% since entry · held 16 min · at the high since entry"
PASS 390 live clocks later than the moment on cards: none
PASS 390 live checkpoints: SPRING entry 17:11Z; MARLIN look 17:12Z; LUMEN look 17:02Z; AGRIPPA look 16:47Z
PASS 390 live stripX(16:57Z) rail 195, cards SPRING 195, MARLIN 195, LUMEN 195, AGRIPPA 195
PASS 390 live scrollWidth 390, overflowing none, cards: SPRING dl/tc/tk/stc/sp/act; MARLIN dl/tc/tk/stc/sp/act; LUMEN dl/tc/tk/stc/sp/act; AGRIPPA dl/tc/tk/stc/sp/act
PASS 390 live banned words (alpha, smart money, signal, score, rank, PnL): zero
PASS 390 16:57Z groups In [] Changed [] Watching [SPRING,AGRIPPA] Archived [TALLOW]
  390 16:57Z visible group order: in > changed > watching > archived; header "In 0 · Changed 0 · Watching 2 · Archived 1" / "watching 2 of 30 · in 0 of 10"; empty state shown: false
PASS 390 16:57Z SPRING delta "No material change | since look 16:57Z" == Now For you "No material change | since look 16:57Z"
    SPRING top changes: Nothing material since your look; still Money first
PASS 390 16:57Z AGRIPPA delta "No material change | since look 16:47Z" == Now For you "No material change | since look 16:47Z"
    AGRIPPA top changes: Nothing material since your look; still Developing
PASS 390 16:57Z SPRING H1 null
PASS 390 16:57Z clocks later than the moment on cards: none
PASS 390 16:57Z checkpoints: SPRING look 16:57Z; AGRIPPA look 16:47Z
PASS 390 16:57Z stripX(16:57Z) rail 195, cards SPRING 195, AGRIPPA 195
PASS 390 16:57Z scrollWidth 390, overflowing none, cards: SPRING dl/tc/tk/stc/sp/act; AGRIPPA dl/tc/tk/stc/sp/act
PASS 390 16:57Z banned words (alpha, smart money, signal, score, rank, PnL): zero
PASS 390 16:42Z groups In [] Changed [] Watching [] Archived [TALLOW]
  390 16:42Z visible group order: archived; header "In 0 · Changed 0 · Watching 0 · Archived 1" / "watching 0 of 30 · in 0 of 10"; empty state shown: true
PASS 390 16:42Z SPRING H1 null
PASS 390 16:42Z clocks later than the moment on cards: none
PASS 390 16:42Z checkpoints: none
PASS 390 16:42Z stripX(16:57Z) rail 195, cards none
PASS 390 16:42Z scrollWidth 390, overflowing none, cards: none
PASS 390 16:42Z banned words (alpha, smart money, signal, score, rank, PnL): zero
PASS no entry, live: Changed [MARLIN,SPRING,LUMEN,AGRIPPA], SPRING delta "3 material since look | 16:57Z" == "3 material since look | 16:57Z"
PASS entry, 17:15Z: SPRING delta "In · 0 material since entry | 17:11Z | 1 since look" == "In · 0 material since entry | 17:11Z | 1 since look"; intact "Reasons at entry still hold: Money first, as at 17:11Z"; H1 "entry ~$1.68M · 0% since entry · held 4 min · at the high since entry"
PASS 390 tap SPRING pill: aria-expanded true, aria-controls whSPRING, popover x 35,335, inside true
PASS 390 tap outside closes Why here
PASS 390 hit boxes >= 32 px: 19 controls, min 32
PASS In -> Out: confirmation "Out at 17:27Z? Confirm out Keep in"; after confirm In [SPRING], delta "In · 2 material since entry 17:11Z 3 since look Out · 17:27Z", stored {"m":60}
PASS Undo out clears the stored out
PASS Copy link at 16:57Z: "Copied · 16:57Z", board.html?t=16:57Z
PASS 16:57Z links: nav now.html?t=16:57Z; SPRING situation.html?t=16:57Z, situation.html?a=16:57Z&t=16:57Z
  live SPRING links: In · 2 material since entry situation.html?a=17:11Z&t=17:27Z; Open Situation situation.html; Compare since entry situation.html?a=17:11Z&t=17:27Z
PASS now.html?t=16:57Z Board nav opens board.html?t=16:57Z
PASS situation.html?t=16:57Z Board nav opens board.html?t=16:57Z
PASS now.html live Board nav opens board.html
PASS freeze: groups held at {"in":[],"changed":[],"watching":["AGRIPPA"],"archived":["TALLOW"]} while pointer in the groups, pill "3 new situations on your board"; after apply In [SPRING] Changed [MARLIN,LUMEN,AGRIPPA]
PASS aria-live #mT polite, #hCount polite; pills carry aria-expanded true; archived toggle false -> true: "TALLOW Robinhood left the surface 16:18Z last state Early money leaving · looked 15:52Z Frozen room, 16:18Z"
  Tab ring: A auto rgb(16, 16, 16) | play solid rgba(114, 195, 230, 0.55) | btn solid rgba(114, 195, 230, 0.55) | rail solid rgba(114, 195, 230, 0.55) | A solid rgba(114, 195, 230, 0.55) | st solid rgba(114, 195, 230, 0.55) | ab solid rgba(114, 195, 230, 0.55) | ab solid rgba(114, 195, 230, 0.55) | ab solid rgba(114, 195, 230, 0.55) | st solid rgba(114, 195, 230, 0.55) | st solid rgba(114, 195, 230, 0.55) | st solid rgba(114, 195, 230, 0.55) | gtog solid rgba(114, 195, 230, 0.55) | SUMMARY auto rgb(16, 16, 16)
PASS reduced motion: 17:20Z to live in 0.9 s, minute steps
  contrast: delta you-yellow 13.07; no-change delta (ink .74) 8.23; top change ink 14.19; clocks (ink .60) 5.90; actions (ink .74) 8.23; disabled actions (ink .60) 5.90; archived line (ink .74 on #10151A) 8.67; confirm (ice) 8.72
PASS now.html differs from pass 7 by 1 line (line 163), lengths 529/529
PASS situation.html differs from pass 7 by 1 line (line 298), lengths 902/902
PASS em dashes in board.html: 0
PASS em dashes in now.html: 0
PASS em dashes in situation.html: 0
PASS em dashes in palette-cvd.txt: 0
PASS em dashes in scripts/verify.cjs: 0
PASS em dashes in scripts/shots.cjs: 0
PASS em dashes in NOTES.md: 0
  hex colours in board.html: #0A0D10 #10151A #161C22 #1C232B #E6EAED #72C3E6 #C8742E #D6336C #E9E3A4 #EB7AA2
ALL PASS
```

Frozen pages: `scripts/shots.cjs` (pass 7, extended) re-ran every pass 7 check on the pass 8 `now.html` and `situation.html`; against the pass 7 `verify-output.txt` the only differences are the Board shot lines, one reduced-motion timing (1.4 s to 1.3 s) and the Tab order on Now, which now starts at the new Board link.

## (d) Hashes and the one-line diffs against pass 7

```
156fd56e6ade9e9e145173d00a5455ae3c709d9c71588b0255f3e1e7754e863d  board.html
558cdcd505aa7156360cde864fcd56ef751a9fb7b33d7e98e656bf0235a02ac7  now.html
6160a821f1f6239e3973063dd693fc0288c7bc2f14fed9c7bc8cd8ea3c5433ff  situation.html

$ diff ../../design-pass7-2026-09-27/d2-tracks/now.html now.html
163c163
< <header class="bar"><div class="wm"><i></i>CAVERIO</div><nav class="nav"><b>Now</b><span>Board</span><span>Market</span></nav><div class="search">Search a token or paste an address</div></header>
---
> <header class="bar"><div class="wm"><i></i>CAVERIO</div><nav class="nav"><b>Now</b><a href="board.html" onclick="var t=new URLSearchParams(location.search).get('t');this.href='board.html'+(t?'?t='+t:'')">Board</a><span>Market</span></nav><div class="search">Search a token or paste an address</div></header>

$ diff ../../design-pass7-2026-09-27/d2-tracks/situation.html situation.html
298c298
<  <nav class="nav"><a href="now.html" id="navNow">Now</a><b>Situation</b><span>Board</span><span>Market</span></nav>
---
>  <nav class="nav"><a href="now.html" id="navNow">Now</a><b>Situation</b><a href="board.html" onclick="var t=new URLSearchParams(location.search).get('t');this.href='board.html'+(t?'?t='+t:'')">Board</a><span>Market</span></nav>
```

Status: DONE
