Archilyzer · Source

archilyzer

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

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:
Mplans/release-9.md | 29++++++++++++++++++++---------
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,