Archilyzer · Source

archilyzer

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

commit 349854ab07761dc1816481b1fb8783eecd83680a
parent be311a8e4d9f6a6c691f6b9ea8240e0e35fd65ef
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Mon, 31 Aug 2026 12:41:40 -0400

editor: the slice-5 leftovers — the nav timer names live routes, the pool lists its eight kinds, the aliases tab always has a site

measure-nav.mjs listed ten routes, five of them retired: /actionable,
/auto-queue, /build, /charts and /aliases all answer 307 now, and with
redirect: "manual" the >= 400 check timed a millisecond redirect stub and
called it a page. It names the eleven single-segment sidebar pages instead,
and a 3xx is flagged.

The Pool's running-jobs filter was six kinds and wrong in both directions:
it missed the three live-chat kinds its own buttons enqueue and carried
build-export, which is a site's Publish tab's. It is the eight the Pool
enqueues.

EditorAliasesClient took siteConfig/siteId as nullable and hid the site
section when either was absent. Its one renderer is the site's Search
aliases tab, which always has both.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Diffstat:
Meditor/app/sites/components/EditorAliasesClient.tsx | 24+++++++++++-------------
Meditor/app/sites/page.tsx | 14++++++++------
Meditor/scripts/measure-nav.mjs | 32+++++++++++++++++++++++---------
3 files changed, 42 insertions(+), 28 deletions(-)

diff --git a/editor/app/sites/components/EditorAliasesClient.tsx b/editor/app/sites/components/EditorAliasesClient.tsx @@ -1,8 +1,8 @@ "use client"; // Authoring UI for search aliases. Two independent sections — the global -// dictionary and (when a site is selected) that site's overrides — each edits a -// list of concept rows and saves the whole list via a server action. Triggers +// dictionary and the site's overrides — each edits a list of concept rows and +// saves the whole list via a server action. Triggers // are entered comma-separated and shown back as chips. Suggestions are // validated as regex when the row is in regex mode, mirroring the viewer's // leaf-input guard. @@ -79,8 +79,8 @@ export function EditorAliasesClient({ siteId, }: { globalConfig: AliasConfig; - siteConfig: AliasConfig | null; - siteId: string | null; + siteConfig: AliasConfig; + siteId: string; }) { return ( <div className="flex flex-col gap-8"> @@ -91,15 +91,13 @@ export function EditorAliasesClient({ onSave={(cfg) => saveGlobalAliasesAction(cfg)} testid="global" /> - {siteId && siteConfig && ( - <AliasSection - title={`This site — ${siteId}`} - subtitle="Adds to the global list. An entry that reuses a global id overrides it (set it disabled to hide that global alias here)." - initial={siteConfig.aliases} - onSave={(cfg) => saveSiteAliasesAction(siteId, cfg)} - testid="site" - /> - )} + <AliasSection + title={`This site — ${siteId}`} + subtitle="Adds to the global list. An entry that reuses a global id overrides it (set it disabled to hide that global alias here)." + initial={siteConfig.aliases} + onSave={(cfg) => saveSiteAliasesAction(siteId, cfg)} + testid="site" + /> </div> ); } diff --git a/editor/app/sites/page.tsx b/editor/app/sites/page.tsx @@ -26,18 +26,20 @@ import { DeleteSiteButton, MigrateButton } from "./components/SiteListActions"; export const dynamic = "force-dynamic"; export const metadata: Metadata = { title: "Sites" }; -// Which live jobs the Pool section lists. SIX KINDS, AND THE SET IS WRONG IN -// BOTH DIRECTIONS: the three live-chat kinds the buttons below enqueue are -// missing, and build-export (enqueued from a site's Publish tab, never here) -// is in. Carried as-is from /build — recorded in plans/editor-ia-slice-5.md, -// not fixed by it. +// Which live jobs the Pool section lists: the eight kinds the Pool's own +// buttons enqueue (BuildButtons.tsx → sites/lib/buildAction.ts), and only +// those. build-export and build-deploy are a site's Publish tab's, build-all +// and build-deploy-all are the batch panel's above — each has its own console +// and is not repeated here. const BUILD_KINDS = new Set([ "build-index", "build-stats", - "build-export", "normalize-transcripts", "archive-transcripts", "archive-combined-transcripts", + "normalize-live-chat", + "archive-live-chat", + "archive-combined-live-chat", ]); function loadExportChangelog(): string | null { diff --git a/editor/scripts/measure-nav.mjs b/editor/scripts/measure-nav.mjs @@ -35,18 +35,27 @@ const argOf = (name, fallback) => { const BASE = argOf("base", "http://localhost:3001").replace(/\/$/, ""); const RUNS = Number(argOf("runs", "3")); -// Routes worth timing, with the segment name used to build a state tree. +// Routes worth timing, with the segment name used to build a state tree. THE +// ELEVEN SINGLE-SEGMENT PAGES IN THE SIDEBAR (editor/app/lib/nav.ts), and +// only those: stateTree() below encodes ONE segment, so /sites/<id>/charts +// and /operations/<id> cannot be listed — each would need the nested +// [segment, {children: [param, …]}] form, a different tree per route. A +// RETIRED ROUTE ANSWERS 307 (editor/next.config.ts redirects); with +// redirect: "manual" that is a millisecond stub, not a page timing, and the +// >= 400 check below let five of them pass silently for a while. A 3xx is +// flagged now. const ROUTES = [ ["/", "__PAGE__"], ["/channels", "channels"], - ["/actionable", "actionable"], - ["/saved-videos", "saved-videos"], - ["/auto-queue", "auto-queue"], - ["/cleanup", "cleanup"], + ["/review", "review"], + ["/operations", "operations"], + ["/sites", "sites"], ["/jobs", "jobs"], - ["/build", "build"], - ["/charts", "charts"], - ["/aliases", "aliases"], + ["/workers", "workers"], + ["/cleanup", "cleanup"], + ["/saved-videos", "saved-videos"], + ["/settings", "settings"], + ["/changelog", "changelog"], ]; const APIS = [ @@ -130,6 +139,7 @@ for (const [route, segment] of ROUTES) { }), ); const bad = [doc, nav, refresh, pre].find((r) => r.status >= 400 || r.status === 0); + const moved = [doc, nav, refresh, pre].find((r) => r.status >= 300 && r.status < 400); console.log( route.padEnd(16) + fmt(doc.ms) + @@ -141,7 +151,11 @@ for (const [route, segment] of ROUTES) { fmt(pre.ms) + " " + kb(pre.bytes) + - (bad ? ` ⚠️ status ${bad.status}${bad.error ? ` ${bad.error}` : ""}` : ""), + (bad + ? ` ⚠️ status ${bad.status}${bad.error ? ` ${bad.error}` : ""}` + : moved + ? ` ⚠️ ${moved.status} redirect — a stub, not a page timing` + : ""), ); }