fix(places): phase-grouped tables, plain-English measures, styled links #119

Merged
tudor merged 1 commits from fix/place-presentation-to-main into main 2026-08-21 20:57:14 +00:00
Owner

Re-targets #118, which merged into fix/place-title-brand-doubling rather than main and so never reached the trunk. Same content, cherry-picked onto current main. No changes beyond the rebase.

Verified with git merge-base --is-ancestor, not the merged flag: main has the title fix from #117 but not this.

What it fixes

Three presentation faults on the place pages, all found by looking at a rendered page rather than at a test.

Links were unstyled. They carried no class at all, rendering as default blue underlined browser links. RankingsView sets .schoolLink to --text-primary with no underline and --brand-strong on hover; the place tables now follow that convention, and running-copy links take the brand colour.

The heading was jargon I invented. RWM expected appears nowhere else on the site. METRIC_DEFINITIONS already names the measure — Reading, Writing & Maths Combined % — surfaced at /api/metrics. The heading now reads Reading, writing & maths with the definition in the tooltip; secondary tables read Attainment 8.

The column was 30% empty, structurally. On /schools/brentwood, 8 of 27 rows were blank — an unphased page listed both phases but showed a single primary-only measure, so every secondary row was empty. Picking the other measure only inverts which rows are blank, and one shared column mixes a percentage with a 0–90 score. Each phase now gets its own table, and a blank cell inside one means the school genuinely has no published result, so it says Not published rather than a bare dash.

Verification

Backend 100 · frontend 253 · tsc --noEmit clean · next build green · 84 e2e journeys. Five component tests covering the three faults, including one that fails if the jargon heading returns.

Also verified every CSS class the component references exists in the stylesheet — a missing CSS-module class fails silently, which is how unstyled links shipped in the first place.

🤖 Generated with Claude Code

https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj

Re-targets #118, which merged into `fix/place-title-brand-doubling` rather than `main` and so never reached the trunk. Same content, cherry-picked onto current `main`. No changes beyond the rebase. Verified with `git merge-base --is-ancestor`, not the merged flag: `main` has the title fix from #117 but not this. ## What it fixes Three presentation faults on the place pages, all found by looking at a rendered page rather than at a test. **Links were unstyled.** They carried no class at all, rendering as default blue underlined browser links. `RankingsView` sets `.schoolLink` to `--text-primary` with no underline and `--brand-strong` on hover; the place tables now follow that convention, and running-copy links take the brand colour. **The heading was jargon I invented.** `RWM expected` appears nowhere else on the site. `METRIC_DEFINITIONS` already names the measure — *Reading, Writing & Maths Combined %* — surfaced at `/api/metrics`. The heading now reads **Reading, writing & maths** with the definition in the tooltip; secondary tables read **Attainment 8**. **The column was 30% empty, structurally.** On `/schools/brentwood`, 8 of 27 rows were blank — an unphased page listed both phases but showed a single primary-only measure, so every secondary row was empty. Picking the other measure only inverts which rows are blank, and one shared column mixes a percentage with a 0–90 score. Each phase now gets its own table, and a blank cell inside one means the school genuinely has no published result, so it says **Not published** rather than a bare dash. ## Verification Backend 100 · frontend 253 · `tsc --noEmit` clean · `next build` green · 84 e2e journeys. Five component tests covering the three faults, including one that fails if the jargon heading returns. Also verified every CSS class the component references exists in the stylesheet — a missing CSS-module class fails silently, which is how unstyled links shipped in the first place. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj
tudor added 1 commit 2026-08-21 20:56:37 +00:00
fix(places): phase-grouped tables, plain-English measures, styled links
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 1m2s
PR Checks / Backend Smoke (pull_request) Successful in 8s
PR Checks / Build Backend (no push) (pull_request) Successful in 11s
PR Checks / Build Frontend (no push) (pull_request) Successful in 45s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 10s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 10s
3365ebcb3a
Three presentation faults on the place pages, all found by looking at a
rendered page rather than at a test.

An unphased place page showed one primary-only measure for a list holding both
phases: 8 of 27 rows on /schools/brentwood were blank, because secondaries
have no reading-writing-maths score. Picking the other measure would only have
inverted which rows were empty, and putting both in one column would have
mixed a percentage with a 0-90 score. Each phase now gets its own table, so a
blank cell means the school genuinely has no published result — which is worth
saying, and now says "Not published" rather than a bare dash.

"RWM expected" was invented here. The site already names the measure in
METRIC_DEFINITIONS, surfaced at /api/metrics: "Reading, Writing & Maths
Combined %". The heading now reads "Reading, writing & maths" with the full
definition in the tooltip.

Links carried no class at all, so they rendered as default blue underlined
browser links beside a site that styles table links as body colour with a
brand hover. They now follow RankingsView's convention, and running-copy links
take the brand colour.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj
tudor merged commit 9545aec7f4 into main 2026-08-21 20:57:14 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tudor/school_compare#119