Archilyzer · Source

archilyzer

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

commit b9c4a9095d38380c5c23ce948f7c9fb9833afe25
parent 8ac7cd784908570f937de63941258b258b28f957
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Fri, 25 Sep 2026 17:06:32 -0400

plans: release 8 slice E — (review fix) record the page-life gate, the hub /ask note and the re-gate

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

Diffstat:
Meditor/CHANGELOG.md | 2+-
Mplans/release-8.md | 14++++++++++++--
2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/editor/CHANGELOG.md b/editor/CHANGELOG.md @@ -1,7 +1,7 @@ # Changelog ## [Unreleased] -- **Export sites: a search restored from the last visit waits for you.** Opening a site (or `/ask`, or the hub) still loads the last query, the filters and the profile from the browser, but no longer runs the search. The results show the video listing under those filters, and the bar says "Press Enter or click Search to apply", as for any unapplied edit. Search or Enter runs it; so does loading a profile. A link with a query in it (`?qt=`) still runs on arrival. The restored search used to re-fetch transcript shards (up to 8 MB each) on every visit to a device that had not cached them. Needs a rebuild and deploy of every export site. +- **Export sites: a search restored from the last visit waits for you.** Opening a site (or `/ask`, or the hub) still loads the last query, the filters and the profile from the browser, but no longer runs the search on the first page of a visit; moving between pages after a search keeps it running, so the hub's chat still grounds in the search just done on its front page. The results show the video listing under those filters, and the bar says "Press Enter or click Search to apply", as for any unapplied edit. Search or Enter runs it; so does loading a profile. A link with a query in it (`?qt=`) still runs on arrival. Going straight to the hub's `/ask` in a new visit leaves the restored search held, and that page has no search bar: search on the hub's front page first. The restored search used to re-fetch transcript shards (up to 8 MB each) on every visit to a device that had not cached them. Needs a rebuild and deploy of every export site. - **The project homepage is rewritten, and it can be deployed as a preview.** The front page of `archilyzer.pages.dev` now opens on one line and a chart. The chart shows the official instances' transcripts by the month each video was published, from 2009 to now, stacked by instance. It is drawn when the site is built, so no chart script loads. Under it is one strip of numbers for the official instances: hours of speech, transcripts, recordings, channels, instances, and recordings gone at the source but still here. The **Official instances** section has a card for each public site, with its channels, recordings, transcripts and hours. **What it does** is now three short paragraphs. The recent-acquisitions list, "How it works" and "What this isn't" are gone from the page. The homepage summary (`homepage/public/homepage-summary.json`) is version 5. It adds `monthly`, `official` and per-site numbers and removes nothing, so `/stats` is unchanged. `archilyzer deploy homepage --preview <branch>` deploys a preview the way `deploy hub --preview` does. Without the flag it still deploys to production (`main`). - **A channel's video list shows titles, and you can search by them.** On `/channels/<slug>/videos`, each row now shows the video's title, with its id in smaller type underneath. Search matches the title or the id, ignoring case. The title comes from the transcript index for transcribed videos, from the channel's metadata scan for videos that were listed but never downloaded, and otherwise from the video's `metadata.info.json`. A video none of these name shows its id, as before. Each row's selection checkbox and link are named by the id as before, and the order is unchanged (by id). - **An undownloaded video's page shows its title and details.** The video page used to show a bare id for any video without a `metadata.info.json`. If the channel's metadata scan has read the video, the page now shows its title, upload date and duration from the scan, marked *from the listing scan — not downloaded*. Any video page with a description, from either source, has a **Description** section, collapsed by default. diff --git a/plans/release-8.md b/plans/release-8.md @@ -318,8 +318,11 @@ hub get it together). Hydration still COMMITS everything it restores: the query the filters, the channel selection, the tag chips, the profile pointer and the grounding selection. The profile divergence check, the share link and the persisted `working` snapshot therefore see the session exactly as it was left; nothing about what is stored changed. What is new is one boolean, `runHeld`: -- It is set only when the query came from the stored snapshot (`working` or the active profile) and is - non-empty. A query on the URL (`qt=`, or the legacy `q=`/`m=`/`re=`) is never held: a shared link is the +- It is set only when the query came from the stored snapshot (`working` or the active profile), is + non-empty, and no search has run yet in this page life (`ranThisPageLife`, module state set by + `commitSearch`, `applySnapshot` and a URL query that runs; it survives client-side navigation and resets + on a reload or a new visit). That last condition is the review fix: the HUB mounts a separate provider + per route, so `/` → `/ask` re-hydrates, and without it the hub chat lost the search just run. A query on the URL (`qt=`, or the legacy `q=`/`m=`/`re=`) is never held: a shared link is the visitor asking, and it runs as before. - While held, `hasActiveQuery` is false. The pipeline effect returns early (no leaf pipeline, no shard fetch), the results area is the ordinary browse listing under the restored filters (summaries only, the @@ -338,6 +341,7 @@ exactly as it was left; nothing about what is stored changed. What is new is one | sha | what | |---|---| | `00fb567b` | `SearchSessionContext.tsx`: `runHeld` (set by hydration only for a stored query, cleared by `commitSearch`/`applySnapshot`), gating `hasActiveQuery` and `queryDirty`; the pipeline effect keys on `hasActiveQuery`; a held query does not default a restored chart to "search". New `export/e2e/restore-no-refire.spec.ts` (+2): a pre-seeded query + filter loads into the form with no transcript shard requested in 1.5 s after the browse listing is up, and Enter fetches one and shows `Matching videos`; a `?qt=` link with a stored session present still fetches on load | +| `501ee3e2` | (review fix R1) `ranThisPageLife` gates the hold, so hub `/` → `/ask` (per-card Ask / "Ask AI", `router.push`, a NEW `SearchSessionProvider` in `AskHub`) keeps grounding in the search just run. New `export/e2e-hub/ask-grounding.spec.ts` (+1): metadata search on hub `/`, per-card Ask, "Whole search" → `Grounded in 1 result from your current search`; with the gate disabled it fails (not even the selection grounding appears). `ask-chat.spec.ts` now asserts the hold on `/ask` (Search `data-dirty="true"`, no `Grounded in 1 result`) before clicking Search | | `545c7405` | `ask-chat.spec.ts` "Load context enriches the pin and persists": after the reload on `/ask` it clicks Search before asserting `Grounded in 1 result` (the test encoded the old re-run-on-load). Outside the slice's listed ownership; no other release-8 slice touches `export/e2e/` | `filter-profile-persistence.spec.ts` is **unchanged**: it seeds no query and asserts only the profile @@ -352,10 +356,16 @@ hook). `pnpm --filter export exec next build` ok. Export e2e **194 passed, 0 fai not run: the slice touches no file they build or test beyond `common/components/`, which tsc covers and the editor does not render (`SearchSessionContext` is export-only). **Numbers: none.** +**Re-gate after the review fix**, on `501ee3e2` (`e-regate.log`): tsc clean. `pnpm --filter export exec next build` ok. Export e2e `restore-no-refire` + `ask-chat` **25 passed, 0 failed, 1.2 min**. `e2e:hub` in full **9 passed** (8 + 1), 22 s. `e2e:2origin` (`TWO_ORIGIN_REBUILD=1`, swap and relink as before) **3 passed**, 43 s. Common tests not re-run: no common unit covers the hook, and the fix is 16 lines inside it. + **Pending, the parent's:** a rebuild and deploy of every export site (and the hub) for the change to reach visitors. **Found and left.** +- **A cold, direct visit to hub `/ask` still holds the restored query, and nothing there can run it:** + `AskHub` has no search bar. The chat answers ungrounded until the visitor searches on `/` and comes + back. That is the operator's rule ("don't re-fire the search on first load") applied literally; a + single site's `/ask` has the bar and is unaffected. - **Saving a profile while a query is held keeps it held.** `handleSaveProfile` / `Save as…` promote the draft FILTERS to committed but have never committed the query tree, so they do not clear the hold; the saved profile still carries the query. The visitor runs it with Search. Left as is: saving is not searching.