Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit 5446f83b25e10ab61faffa0d857f7ca5a7a4d1bb
parent a3509ee318f7580ed1ad75e2402caa2e3948ab8f
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Sun, 27 Sep 2026 00:37:22 -0400

plans: release 10 — accent colours as shipped: no five accents pass as a chart palette, so the cards and the hint wear them and the chart keeps its own; FACTS' official-instance colour line

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Diffstat:
Mplans/FACTS.md | 7++++++-
Mplans/release-10.md | 93+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 99 insertions(+), 1 deletion(-)

diff --git a/plans/FACTS.md b/plans/FACTS.md @@ -6701,7 +6701,12 @@ S4, as shipped"; `release-10.md` "Slice L2 / L1, as shipped". Every anchor below by their index in `summary.sites` (tiebreak: the `hub-sites.json` order), then appends any member the summary does not name. Colour: the site's accent, else the summary's, else `seriesColor(index in the summary)` — the homepage card's colour; an unnamed member takes - `seriesColor(listed + k)`, so it never shares a named one's. `useHubSites` lists the official + `seriesColor(listed + k)`, so it never shares a named one's. Since release 10's accent slice + it goes through `siteColor` (`common/lib/siteColor.ts`): a NAMED accent is + `var(--swatch-<id>)` (per base) from the summary's `accentId`, used only when `hub-sites.json`'s + hex (on-dark only) is absent or equal to the summary's; the homepage's `ArchiveCards` use the + same helper. The growth chart, its legend and `/stats` (`SiteGrid`, `homepageChartData`) stay on + `seriesColor`: no five accents with Brass and Blue pass the dataviz validator as a chart palette. `useHubSites` lists the official instances only once `/hub-summary.json` has SETTLED (found, missing or unreadable; `useHubSummary.ts:45`, `networkMode: "always"`), so they never reorder a moment later. The order is applied in the browser: `hub-sites.json` on disk is unchanged. diff --git a/plans/release-10.md b/plans/release-10.md @@ -1849,6 +1849,99 @@ least C1b's text link) until they are rebuilt and redeployed; no site was ever d so their release 10 rebuild simply does not add it. An installed PWA picks up the worker change on its next update check, and no data cache moves. +### Accent colours (2026-09-27) + +The operator's asks (2026-09-27): every site gets a unique accent (Archilyzer's bone mark is not one; +**Jeralyzer = Brass**, **Hasanalyzer = Blue**, the rest the parent's pick); the search bar's +"Press Enter or click Search to apply" in the site's accent instead of `text-warning`; the +homepage's official-instance cards show each site's accent in their left stripe. Branch +`r10/accent-colors` off `main` `154817f6`, worktree `/home/user/Projects/r10-accent-colors` +(block #11), one Opus implementer. Scratch files `ac-*` in the job's `tmp/brand`. + +**The palette: no assignment passes, so the chart keeps its palette.** Validated first with the +dataviz skill's `validate_palette.js`, `--pairs all` (the homepage order moves with transcript +counts), each base's own swatch values against its `--chart-surface`, contrast also against the +page ground; all ten sets {Brass, Blue} + three of {Vermilion, Violet, Sakura, Green, Signal}. +None passes. Brass fails with Vermilion (ΔE **1.0** deutan on light/sepia), Green (1.8 protan on +dark) and Signal; Blue with Violet (normal **8.5–9.0**, CVD 1.3–1.9) and Signal. Only Sakura passes +with both, so no passing set has more than three colours. On dark every accent is also above the +validator's band (L 0.70–0.79 > 0.67): they are text colours, not a categorical palette. The +least-bad set is {Brass, Blue, Sakura, Violet, Green}: three failing pairs (Brass–Green, Blue–Violet, +Violet–Sakura on dark only) and one floor pair (Sakura–Green). The proposed mapping, which the +parent sets through the site form: + +``` +jeralyzer=brass +hasanalyzer=blue +anilyzer=sakura +bonnellyzer=violet +rekietalyzer=green +jasolyzer=vermilion (unpublished: on neither the chart nor the hub; unique) +``` + +The planned Rekietalyzer = Vermilion with Bonnellyzer = Green passes every ADJACENT pair in +today's order, but fails Brass–Vermilion and Vermilion–Green over all pairs and goes red if +Hasanalyzer and Rekietalyzer (3,048 vs 2,855 transcripts) swap places. + +Per the slice's fallback, the growth chart and its legend stay on `seriesColor`, and only the cards +and the hint change, so **a card no longer matches its chart layer** unless its site has no accent. +With the mapping above that is visible: Jeralyzer's card is gold and its layer blue, Hasanalyzer's +card blue and its layer amber. **A follow-up option, not implemented:** the proposed set is exactly +the chart palette's five hues (blue, green, violet, amber, magenta), so the chart could draw each +site in the `--chart-N` whose hue matches its accent and keep the validated values. In today's +order that passes every adjacent pair on every base (CVD ≥ 11.1, normal ≥ 15.3), and over all pairs +it is `--chart-1..5`'s own result in any order (CVD WARN 6.1–6.9, normal ≥ 15.3). + +**What shipped** +- **The hint** (`common/components/SearchBar.tsx`) is `text-brand`: the site's accent, or the + reader's, at its value for the base, ≥ 4.5:1 on each page ground by construction + (`MIN_ACCENT_CONTRAST`). The editor renders no `SearchBar`; the hub's accent is Signal. +- **`accentIdOf`** (`common/lib/accent.ts`) and an optional per-site **`accentId`** in + `homepage-summary.json` (still v5) and `hub-summary.json` (still v1; `parseHubSummary` keeps only + a known id). The published hex is unchanged. +- **`siteColor(site, i)`** (`common/lib/siteColor.ts`): a named accent → `var(--swatch-<id>)`, a + custom hex → that hex, neither → `seriesColor(i)`. +- **Homepage:** `ArchiveCards` stripes use it; `ArchiveGrowthChart` (layers, legend, `STACK_ORDER`) + is unchanged, and both header comments state the rule and the validation. `/stats`' `SiteGrid` is + its chart's legend, so it stays on `seriesColor` too. +- **Hub:** `officialInstances` colours through `siteColor`, so the card, chip, result edge and + channel group wear a named accent per base. `hub-sites.json` carries only the on-dark hex, so the + summary's id is used when the two name the same colour; a site's own different hex still wins. +- **e2e fixture:** the homepage dev server reads a copy of the summary on disk with fixture accents + on its first sites (`HOMEPAGE_SUMMARY_FILE`, set only by `homepage/playwright.config.ts`; + `homepage/e2e/fixture-accents.ts`, gitignored output `homepage/e2e/.e2e-summary.json`): Brass, a + custom hex, then none. Every other number is the real summary's. + +| sha | what | +|---|---| +| `b9b010f7` | `search:` the hint is `text-brand`; `theme-accent.spec` checks class, colour and contrast on light, sepia and dark | +| `69f5b251` | `common:` `accentIdOf`, `accentId` in both summaries, `siteColor`, `officialInstances` through it; 8 unit tests | +| `7667e8d5` | `homepage:` `ArchiveCards` stripes through `siteColor`; header comments; the fixture summary; `instance-colours.spec` | +| `152ade49` | `hub:` comments; `official-instances.spec` checks a Brass member on dark, light and sepia | +| `e39eb7ea` | `changelogs:` export, editor and homepage `[Unreleased]` (new sections above `[0.9.1]` in export and editor) | +| _this_ | `plans:` this record; `FACTS.md`'s official-instance colour line | + +**Gates** (logs `ac-*.log`): +- **tsc** clean on the code tree (33 s) before the four code commits, which were staged from it + with no type dependency on the unstaged rest; the later commits are Markdown only. +- **common 2,021/2,021** (2,013 + 8), editor unit **85/85**, `test:scripts` **174 + 1 skipped**, + mcp **269/269**. +- **Builds:** editor ok (42 s); export site ok (25 s); export hub ok (28 s, `out/ask` present); + homepage ok (14 s; its `public/` data copied from the primary; with the real summary, which sets + no accents, the stripes are `var(--chart-1..5)`, as before). `export/public` linked per path; the + primary's `export/public` byte-identical before and after every run. +- **e2e** (no queue wait): export full **205 passed** (8.2 min), `e2e:hub` **25 passed** (1.1 min), + homepage **28 passed** (46 s). **They bite:** with the three guarded files at `154817f6`, each new + test fails for its reason (the card stripe `rgb(53, 97, 200)` = `--chart-1`, not Brass; the hint + `text-warning`; the hub stripe on light still Brass's on-dark hex). +- **Visual:** the homepage built with the five real sites carrying the proposed accents, on dark, + light and sepia at 1280 (`ac-cards-*.png`, `ac-chart-*.png`): each stripe is the accent's value + for its base, and the chart is unchanged. + +**Left.** The accents themselves are the parent's (site form); until they are set, every stripe is +its chart colour, as today. The chart follow-up above is the parent's call. Rollout: every export +site and the hub rebuilt for the hint; the homepage and the hub rebuilt after the accents are set. + ## Rollout Nothing is rolled out, except that **Jeralyzer is already on the brand, in Signal** (a build-deploy