commit 4afbc3b72204d4b4172fdf153da8b5c06b1a2252
parent 9d3ab18c93127b1740529654e0c7e3c797eae227
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Fri, 25 Sep 2026 19:13:07 -0400
plans: release 9 — C1 review fixes recorded (9d3ab18c, e2e:hub 11 passed); the hub build's LMDB/data walk noted
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/plans/release-9.md b/plans/release-9.md
@@ -67,17 +67,20 @@ the parent's `build-hub`, whose log line says how many instances it covers.
**The page, top to bottom, with its final copy** (`ArchiveShelf.tsx`, `HubStats.tsx`,
`AddArchive.tsx`, new `useHubSummary.ts`):
1. **H1** `{official.hoursArchived} hours of speech from every official archive, searchable at once.`
- (no summary: `Every official archive, searchable at once.`). **Paragraph:** "One search runs across
- all of them, in your browser. Any Archilyzer archive can join it: add its address below."
+ (no summary: `Every official archive, searchable at once.`; no summary AND no official instances:
+ `Every archive you add, searchable at once.`). **Paragraph:** "One search runs across all of them,
+ in your browser. You can add any other Archilyzer archive to your own search, below. It stays in
+ this browser until you remove it."
2. **`Official instances`** (h2) + "The archives I run. Anyone can run their own." + one card per
built-in member in `hub-sites.json` order: title linking out (`target="_blank"`, ↗), the summary's
description, and channels · recordings · transcripts · hours, each omitted when absent; the
- `Installable`/`Data-only` badge. The stripe is the site's own `accent`, else `var(--brand)` (no
- live site sets an accent today, so all five are the family teal). Figures match by `siteId`, then
- by origin. Zero built-ins: "This hub has no official instances. Add an archive to search it."
+ `Installable`/`Data-only` badge. The stripe is the site's own `accent`; a site with none (all
+ five today) falls back to `seriesColor(i)` at its index in the summary's `sites` — the homepage's
+ `ArchiveCards` and chart order — so each hub card wears its homepage card's colour (the card's own
+ index when there is no summary). Figures match by `siteId`, then by origin. Zero built-ins: "This hub has no official instances. Add an archive to search it."
3. **`Archives you added`** (h2, only with externals) + the same card with the descriptor's channel
- count only and the Remove control (`aria-label="Remove {title}"`), then "Add an archive by its
- address. It stays in this browser until you remove it." + the form. The Add button is the
+ count only and the Remove control (`aria-label="Remove {title}"`), stripe its accent or
+ `var(--brand)`, then the form (the paragraph under the H1 says how adding works, once). The Add button is the
family's CTA (ink on ground, brand on hover), no longer a brand fill.
4. **Live line:** "Searching N archives · N channels · N transcripts right now." — the LIVE federation,
added archives included; the code comment says so, the page does not.
@@ -104,6 +107,7 @@ and no "Archives you added"; with it 404, the card renders with no `dl` and the
| `ec5f8ebe` | `export/app/layout.tsx`: the hub defaults to the archilyzer family, dark, and the homepage's theme colour; sites unchanged |
| `6d847cdc` | `common/styles/tokens.css`: archilyzer `--chart-3` light `#5a9e3a`, dark `#86c86a` |
| `812d1b86` | `common/lib/hubSummary.ts` (+ test, 5), `common/controller/poolSummary.ts`, `compose-hub.ts` writes `hub-summary.json` (+ `compose-hub.test.ts`, 1: no index → no file, stale removed, no index created), `compose-homepage.ts` on `buildPoolSummary`, `compose-site.ts` removes it, `publish/build.ts` doc |
+| `5a1bd3c0` | review fixes: `.gitignore` `/export/public/hub-summary.json`; H1 with no official instances; the add sentence once, scoped to this browser; official cards fall back to `seriesColor` in the homepage's order; generic hours in the CHANGELOG |
| `dc9ba0dd` | the hub page (`ArchiveShelf`, `HubStats`, `AddArchive`, `useHubSummary`, `HubHome` comment), `/ask` wording, registry ALREADY copy, the spec locators, `official-instances.spec.ts` |
**Gates** (on `dc9ba0dd`): tsc clean (per commit). Common tests **1,822/1,822** (1,816 + 6). test:scripts
@@ -120,13 +124,20 @@ summary and the real `hub-sites.json` (members' origins blocked) was checked at
390 dark. The editor build, editor unit and mcp were not run: nothing they build or test changed
beyond `common/`, which tsc and the common tests cover. **Numbers tools: none.**
+**Review (SHIP AFTER FIXES) re-gate** on `5a1bd3c0`: tsc clean; `hubSummary.test.ts` +
+`compose-hub.test.ts` 6/6; `e2e:hub` **11 passed**, 24.5 s.
+
**Found and left:**
+- The hub build now does what the homepage build does: `buildStats` opens the index LMDB read-write
+ and walks every channel's `data/`. An unmounted drive therefore undercounts those channels' figures
+ in `hub-summary.json` with no warning — the same exposure the homepage and a site's `build:stats`
+ already have, not a new one.
- The branch `one-core/r9-fixes` changes `buildHomepageSummary` (`c714bc14`: official.transcripts
counted where transcripts are placed). `hub-summary.json` is a projection of whatever it returns, so
after both merge the hub and the homepage still agree — as long as both are rebuilt from the same
commit. The MATCH above is against the pre-change function.
-- No official site sets `accent`, so every official card wears `var(--brand)`. Giving each archive its
- accent is a `site.json` edit, not code.
+- No official site sets `accent`, so every official card wears its homepage series colour. A
+ `site.json` accent would override it on the hub only (the homepage ignores accents for its cards).
- The live line counts what loaded; while members load it climbs, and a member that fails silently
lowers it with no sign — C2's per-site state is the fix.
- The H1 swaps from the fallback to the hours sentence when `hub-summary.json` arrives (client fetch,