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:
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`
+ : ""),
);
}