Archilyzer · Source

archilyzer

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

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:
Meditor/e2e/tags.spec.ts | 11+++++++++++
Mplans/STATE.md | 5+++++
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