commit c900ba870ab782c4d75c2c126f1bff8e013324e0
parent 05c5867d1f19a9bb7fc0fcf05fbc0ad5c7809aaa
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date: Tue, 6 Oct 2026 20:36:33 -0400
e2e: the /tags Sites box saves sites (sorted, deduplicated) and reads it back; plans: STATE owes the Eva tags' data change
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Diffstat:
2 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/editor/e2e/tags.spec.ts b/editor/e2e/tags.spec.ts
@@ -36,6 +36,7 @@ type TagsFile = {
label: string;
color?: string;
hidden?: boolean;
+ sites?: string[];
rules?: { id: string; kind: string; channelsExclude?: string[] }[];
}[];
assignments: Record<
@@ -107,6 +108,16 @@ test("a tag is defined, edited and removed, and the file holds what the form sai
file = await tagsFile();
expect(file.tags[0]).toMatchObject({ label: "On mic", group: "eva" });
+ // Sites: the tag exists on these only (curated `sites`), saved sorted and
+ // deduplicated, and read back into the box.
+ await page.goto("/tags");
+ await page.getByTestId("tag-card").first().getByLabel("tag sites").fill("testsite, Testsite");
+ await page.getByRole("button", { name: "save tags" }).click();
+ await expect(page.getByTestId("tags-saved")).toBeVisible();
+ expect((await tagsFile()).tags[0]).toMatchObject({ sites: ["testsite"] });
+ await page.goto("/tags");
+ await expect(page.getByTestId("tag-card").first().getByLabel("tag sites")).toHaveValue("testsite");
+
await page.goto("/tags");
await page.getByRole("button", { name: "remove tag eva-collab" }).click();
await page.getByRole("button", { name: "save tags" }).click();
diff --git a/plans/STATE.md b/plans/STATE.md
@@ -16,6 +16,11 @@ the status, the queue and the publish lane; S4 the surfaces; S5 the image half;
then policies (`build` for all six; `preview` where wanted; `production` for none until a week of lane runs reads
clean) and the lane on (`checkEveryMinutes` 10, `refreshEveryMinutes` 360); `archilyzer doctor`; build
`runtime-vulkan` and `runtime-cuda` once.
+- **The Eva tags leak (found 2026-10-06):** `eva-topic` is published on hasanalyzer (1, hasanabi) and bonnellyzer
+ (3, omnibased) — the three Eva rules fire on every channel but Eva's own. Ruled: they exist on Anilyzer only (and
+ a future VTuber site). Fixed in code on `tags/site-scope` (a tag's `sites`, merged here); the DATA change is
+ owed once the new code is live: `~/reports/release-18/scripts/r18-eva-sites.sh` (scopes the three to anilyzer,
+ updates the index, rebuilds the three sites), then production deploys of hasanalyzer and bonnellyzer.
- **What changes for the operator:** /sites → **Publish** replaces "Build all sites" and the hub/homepage sections
(Publish now, Build all stale, a row per target with index | built | deployed | live chips); **Build stats dataset is
gone** (the index update builds the stats); `/operations/publish` is the lane; a site's **Publish policy** is on its