commit 6a141cc31237ae91790d7164ab208715c64e4492
parent 78c1ab1894b46557299653a8bd2be1217b8856f7
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Fri, 25 Sep 2026 20:15:37 -0400
plans: release 9 slice C1b as shipped — Title Case, no subtitles, no card descriptions, bare Ko-fi on hub + homepage; gates + CHANGELOG
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat:
2 files changed, 79 insertions(+), 0 deletions(-)
diff --git a/editor/CHANGELOG.md b/editor/CHANGELOG.md
@@ -1,6 +1,7 @@
# Changelog
## [Unreleased]
+- **The hub and the homepage drop their subtitles, and both carry a Ko-fi link.** The headings are in Title Case on both pages: **Official Instances**, **Archives You Added** (hub) and **What It Does** (homepage). The line "The archives I run. Anyone can run their own." is gone from both, and the official-instance cards no longer show the site's description under its name; the four figures stay. The footer of the homepage and of the hub has a plain link reading "Ko-fi" to `https://ko-fi.com/archilyzer`. A published site's footer does not: an archive someone else hosts never carries it. Needs a rebuild and deploy of the hub and the homepage.
- **A job that waited in a queue no longer ends `failed` after doing its work.** A sync, download or other job queued behind another on the same platform ran its final page refresh outside any request, where Next refuses it, so the job read `failed` and `pnpm ops … --wait` exited 1 even though the work was done (the teamrcn sync on 2026-09-25). The refresh is now skipped there with one warning in the server log; the pages re-read disk on their next load anyway.
- **Downloads no longer sleep after a video the download filter declined.** The "sleep between downloads" (30 s by default) ran after every video, including each one the channel's download filter declined before fetching anything. A filtered channel's download-missing slept 193 times for 14 downloads on 2026-09-25. It still sleeps after every real fetch and after every failure, per-video ones included.
- **YouTube requests are paced at one per second.** Every yt-dlp run against YouTube now carries `--sleep-requests 1`, as Rumble's already did: the 429 investigation found YouTube had no request-level pacing at all. A channel's own `ytdlpExtraArgs` still wins, because it comes after.
diff --git a/plans/release-9.md b/plans/release-9.md
@@ -376,6 +376,84 @@ Bonnellyzer 2, Hasanalyzer 3, Rekietalyzer 0 — identical before and after on t
left as a fetch so the e2e can stub it.
- The chart-3 change repaints the homepage's third instance too; it needs a homepage rebuild to show.
+### Slice C1b, as shipped — copy rulings + Ko-fi link (2026-09-25)
+
+Branch `one-core/c1b-hub-copy` off `main` `6820bd21`. **The operator's rulings (2026-09-25), amending
+C1:** Title Case on the h2 headings of the hub shelf and the homepage, so the two pages share one style;
+no subtitle where the title implies it ("The archives I run. Anyone can run their own." removed on
+both); no per-site description on the official-instance cards (hub and homepage), the four figures
+stay; a bare `Ko-fi` link, no copy, on the project's own surfaces only. The hub's H1 and its paragraph
+and the homepage's hero paragraph stay (they are not subtitles). C2's files (`SearchDataContext`,
+`SearchResults`, `SearchSessionContext`, `siteRegistry`, `HubHome`, `HubStats`, the `ask-grounding` /
+`federation` / `ask` hub specs) were not touched.
+
+**Copy, final:**
+- Hub (`ArchiveShelf.tsx`): h2 **Official Instances** (no paragraph under it; the grid's top margin
+ moved onto the h2), h2 **Archives You Added**. The card is title (+ Remove on an added archive), then
+ the figures and the `Installable`/`Data-only` badge; `siteDescription` is no longer read.
+ `AddArchive.tsx`'s comment names the new heading.
+- Homepage (`page.tsx`, `ArchiveCards.tsx`): h2 **Official Instances** (no paragraph), h2 **What It
+ Does**; the card is title then figures. The page's copy-rule comment now says so.
+- `FamilyStats`' cell label "Official instances" is a stat label, not a heading, and stays in the
+ strip's sentence case (like "Hours of speech"); not in the ruling.
+
+**Ko-fi.** `KOFI_URL = "https://ko-fi.com/archilyzer"` beside `PROJECT_URL` in `common/lib/project.ts`.
+Export footer (`export/app/components/Footer.tsx`): `<a target="_blank" rel="noopener noreferrer">Ko-fi</a>`
+in the "Built with Archilyzer" row, rendered **only when `instanceMode() === "hub"`** — a site build
+shows nothing. Homepage footer (`homepage/app/components/Footer.tsx`): the homepage has no "Built with"
+row, so the link sits in the **Elsewhere** column under the social icons; that column now always
+renders (it was gated on social links), the icon row only when links are set.
+
+**Layout without the description** (built hub served statically with the primary's `hub-sites.json` +
+`hub-summary.json` stubbed in; built homepage with the primary's `homepage/public` data), 1280 and 390,
+dark: the cards shorten by the description line; the figures stay aligned across a row (`mt-auto` on
+the figure block unchanged), and at 390 each card is title, figures, badge with no gap. Shots:
+`$T/c1b-hub-1280.png`, `$T/c1b-hub-390.png`, `$T/c1b-homepage-1280.png`, `$T/c1b-homepage-390.png`.
+
+**Changed locators:** `e2e-hub/official-instances.spec.ts` — `heading {level: 2, name: "Official
+instances"}` → `{level: 2, name: "Official Instances", exact: true}`; the card's `toContainText("Every
+word the member said.")` → `not.toContainText(…)` (the stub still carries a description, so the
+absence is proved); `getByText("The archives I run")` count 0; `heading "Archives you added"` →
+`"Archives You Added"`; new test "the hub footer carries a bare Ko-fi link" (href `KOFI_URL`,
+`_blank`, `noopener noreferrer`, text exactly `Ko-fi`). `homepage/e2e/marketing.spec.ts` — `heading
+"Official instances"` → `{level: 2, name: "Official Instances", exact: true}` + "The archives I run"
+count 0; new "the headings after the H1 are in Title Case" (`What It Does`, exact) and "the footer
+carries a bare Ko-fi link". `export/e2e/site-branding.spec.ts` — new "a site build carries no Ko-fi
+link" (no link named Ko-fi, no `a[href=KOFI_URL]`). **Left unchanged deliberately:**
+`e2e-hub/federation.spec.ts:151` `heading {level: 2, name: "Archives you added"}` (C2's file) — a
+Playwright role name without `exact` is a case-insensitive substring, so it matches "Archives You
+Added" and passes (it did: e2e:hub 12/12); C2 or a later slice may make it exact. Its test title still
+says "Archives you added" (a string, not a locator).
+
+| sha | what |
+|---|---|
+| `764f770e` | `common/lib/project.ts` `KOFI_URL`; Ko-fi in the hub footer (hub only) and the homepage footer's Elsewhere column |
+| `0e9192e9` | Title Case h2s, the "archives I run" line removed, no description on the official cards — hub `ArchiveShelf` (+ `AddArchive` comment), homepage `page.tsx` + `ArchiveCards` |
+| `35aafad3` | the spec locators above; Ko-fi specs (hub, homepage, site-mode absence) |
+
+**Gates** (on `35aafad3`): tsc clean (per commit). Common tests **1,845/1,845**. `pnpm --filter export
+exec next build` (site) ok; `compose:hub` (worktree, no corpus: "0 built-in pool site(s) …;
+hub-summary.json skipped") + `INSTANCE_MODE=hub … next build` ok (the known Turbopack warning) — the
+seven compose-hub outputs in `export/public` swapped for copies before and relinked after, primary's
+files untouched (`hub-sites.json` / `hub-summary.json` still 19:42); the built hub `index.html` carries
+the Ko-fi anchor. `pnpm --filter homepage exec next build` ok. e2e, queued (no wait): **`e2e:hub` 12
+passed** (11 + 1), 45 s; export `site-branding.spec.ts theme.spec.ts` **8 passed**, 26 s; **homepage
+suite 24 passed**, 57 s, with the Official Instances branch exercised (summary present). Editor build,
+editor unit, test:scripts and mcp not run: nothing they build or test changed beyond a new constant in
+`common/lib/project.ts`, which tsc covers. **Numbers tools: none.**
+
+**Found and left:**
+- **Homepage worktree data must be COPIED, not symlinked.** `homepage/app/lib/snapshot.ts` reads
+ `public/downloads/snapshot.json` at build, and Turbopack refuses a symlink that leaves the project
+ root ("Symlink … is invalid, it points out of the filesystem root"). The four gitignored entries
+ (`channel-sites.json`, `downloads/`, `homepage-summary.json`, `stats/`; ~60 MB) were copied from the
+ primary. `export/public`'s per-path links work only because nothing there is imported at build.
+ Worth a line in FACTS / WORKTREES.md.
+- The homepage lists instances in the summary's order (Jeralyzer first), the hub in `hub-sites.json`
+ order (Anilyzer first); the colours agree per site. Pre-existing (C1), not a ruling.
+- Needs a rebuild + deploy of the hub AND the homepage; this slice did not run build-hub, deploy-hub
+ or deploy homepage.
+
## Rollout
## Rollout 2026-09-25 (evening) — `0213f6c8` live on :3001 (third restart of the day)