Archilyzer · Source

archilyzer

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

commit 716a84ec98f1adefc87b6ca5801dc9192eaf7acc
parent 50fdaf00042dcabf1e0323176f143a85949196c4
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Mon, 28 Sep 2026 03:06:38 -0400

plans: FACTS — release 10 "L1 — hub lows" amended for release 11 O1: the subs rule keys on errorUpdateCount (and waits on /ask for a refetch), the zero-archive and live-chat lows are closed, builtinsLoaded / listed / the DRAFT constants anchored

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

Diffstat:
Mplans/FACTS.md | 31+++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+), 0 deletions(-)

diff --git a/plans/FACTS.md b/plans/FACTS.md @@ -6698,6 +6698,21 @@ S4, as shipped"; `release-10.md` "Slice L2 / L1, as shipped". Every anchor below the archive is `ready`, its videos are searched, only its live chat is missing, and nothing says so (a new low). Official members send CORS on their 404s (checked live on `https://jeralyzer.pages.dev/subs/<missing>.json`). + **AMENDED 2026-09-28 (release 11 O1; `release-11.md`, "Slice O1, as shipped"): the rule keys on + `errorUpdateCount`, and the low is closed.** "Has errored" is `subs.data === undefined && + subs.errorUpdateCount > 0` (`SearchDataContext.tsx:461`), not `isError`. TanStack (query-core + 5.100.5, `fetchState`) puts an errored query with no data back to `pending` / `error: null` on + refetch but keeps the count, and the count moves only on the final `error` dispatch (after + `retry: 1`). Settled is `data !== undefined || (errored && (progressive || !isFetching))` + (`:462-464`): the progressive front page stays ready through a refetch, while `/ask` waits for one. + The count survives in the shared query client into `/ask`'s own mount (`retryOnMount`), a scope + toggle off→on, or a whole-archive Retry. A ready archive whose subs errored carries + `liveChatMissing: {retrying, error?}` (`:477`). Its scope chip shows `LIVE_CHAT_MISSING` + (`export/app/ask/hubScopeCopy.ts:24`, a DRAFT) in `data-testid="hub-scope-live-chat"`, with a Retry + (`Retry live chat from <title>`, `HubScope.tsx:106-115`). The Retry calls + `federation.retryLiveChat(origin)`, which refetches `["subs-manifest", origin]` exactly (`:799-802`). + `resetQueries` would zero the count; nothing in `common/` or `export/` calls it, and `gcTime` is + Infinity. - **An empty scope is never ready unless the provider is `progressive`** (`SearchDataContext.tsx:456-466`: `allSettled = (progressive || scoped.length > 0) && …`). `MultiSiteDataProvider` has two users: the hub's front page (`HubHome.tsx:40`, `progressive`: @@ -6709,6 +6724,22 @@ S4, as shipped"; `release-10.md` "Slice L2 / L1, as shipped". Every anchor below forever on `/ask` (a new low). Both surfaces take their list from `useFederatedSites()` (`export/app/components/hub/useHubSites.ts:49`), so an archive off on the front page is not fetched on `/ask`. + **AMENDED 2026-09-28 (release 11 O1): the zero-archive low is closed, and `/ask` waits for the + hub's list.** + - `siteRegistry.ts` has `builtinsLoaded` (`:76`; `getBuiltinsLoaded` `:106`; `useRegistry()` returns + it). `loadBuiltins` (`:195`, exported) sets it once `/hub-sites.json` has answered in any way — a + list, `[]`, a 404, a 500, a network error or bad JSON — in the same `emit` that adds the + built-ins. It is still never retried. + - `useHubSites().listed = builtinsLoaded && summary settled` (`useHubSites.ts:36`) is passed + through `useFederatedSites` to `MultiSiteDataProvider`'s `listed` prop (default `true`, + `SearchDataContext.tsx:310`), where `allSettled = listed && …` (`:527`). `federation.listed` + carries it. Only `AskHub` passes it (`AskHub.tsx:48`); the progressive front page is unchanged. + - Once `listed`, `AskChat` (`:40`) blocks the composer with `NO_ARCHIVES_ON_HUB` (an empty list) or + `NO_ARCHIVES_IN_SCOPE` (every chip off). Before `listed`, it reads "Loading transcripts…". + - `AskScope` (`AskHub.tsx:49`) renders `ASK_SCOPE_LINE(inScope, total)` in + `data-testid="ask-scope"` once `listed` with at least one archive in scope. `null` hides it. + - `NO_ARCHIVES_ON_HUB`, `LIVE_CHAT_MISSING` and `ASK_SCOPE_LINE` (`hubScopeCopy.ts:16/24/33`) are + DRAFTs awaiting the operator's ruling. `LinkedCopy` renders a line's one [bracketed] link to `/`. - **The official instances' order is the homepage's key and tiebreak.** The homepage sorts its public sites by `transcribed.total` descending, then `siteTitle.localeCompare` (`common/lib/homepageSummary.ts:437-441`); `hub-summary.json` keeps that order, and