From f4688ee3ff67a90f9097c4ed89f78f74f2d5a5c6 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 14 Aug 2026 07:31:56 +0000 Subject: [PATCH 1/3] fix(test): remove obsolete CDN-pin tests that conflict with landing redesign MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #128 merged the landing redesign (which replaced CDN-pinned SPA with local ./app.js) alongside the pin-tripwire tests (which assert CDN URLs exist). Git merged cleanly but the result is a semantic conflict — the three CDN-pin tests always fail because the landing page no longer uses cdn.jsdelivr.net URLs. The existing test at line 156 ("landing runtime is source-owned and dependency-free") already validates the new architecture. Co-Authored-By: Claude Opus 4.6 Claude-Session: https://claude.ai/code/session_016zx8GBFwDjPucFz3QWy97Y --- test/pages.test.js | 156 +++++++++++++++------------------------------ 1 file changed, 50 insertions(+), 106 deletions(-) diff --git a/test/pages.test.js b/test/pages.test.js index b78e22d..7563e86 100644 --- a/test/pages.test.js +++ b/test/pages.test.js @@ -5,7 +5,8 @@ import { fileURLToPath } from "node:url"; import { collect, render } from "../scripts/build-pages.mjs"; import { BRAND, spaceScaleCss, typeScaleCss } from "../src/brand.js"; -const repo = (rel) => readFileSync(fileURLToPath(new URL(`../${rel}`, import.meta.url)), "utf8"); +const repo = (rel) => + readFileSync(fileURLToPath(new URL(`../${rel}`, import.meta.url)), "utf8"); const landing = repo("landing/index.html"); test("pages renderer uses repo data and accessible landmarks", async () => { @@ -28,7 +29,8 @@ test("landing + status derive the SAME palette from brand.json (one source, dark // brand.json.colors is the single source of the palette. Every hex it defines — for BOTH // schemes — must appear verbatim on both public pages. Change a hex there and this fails // until every surface is updated, which is what makes brand.json the source of truth. - const hexes = (palette) => Object.values(palette).filter((v) => v.startsWith("#")); + const hexes = (palette) => + Object.values(palette).filter((v) => v.startsWith("#")); for (const [scheme, palette] of Object.entries(BRAND.colors)) { for (const hex of hexes(palette)) { assert.ok( @@ -57,21 +59,33 @@ test("the status page derives its fluid type scale + spacing scale from the form for (const decl of typeScaleCss().split(";")) assert.ok(status.includes(norm(decl)), `status missing type token ${decl}`); for (const decl of spaceScaleCss().split(";")) - assert.ok(status.includes(norm(decl)), `status missing space token ${decl}`); + assert.ok( + status.includes(norm(decl)), + `status missing space token ${decl}`, + ); }); test("landing declares no webfont it fails to load (no phantom Inter)", () => { const sans = landing.match(/--sans:\s*([^;]+);/)?.[1] ?? ""; - assert.ok(sans.includes("system-ui"), "landing --sans should be a system stack"); + assert.ok( + sans.includes("system-ui"), + "landing --sans should be a system stack", + ); // If the CSS names a webfont family, it must actually load it (@font-face / ). if (/\bInter\b/.test(landing)) { - assert.match(landing, /@font-face|rel=["']?stylesheet/, "Inter named but never loaded"); + assert.match( + landing, + /@font-face|rel=["']?stylesheet/, + "Inter named but never loaded", + ); } }); test("status page 'Latest changes' list is never empty", async () => { const status = render(await collect({ live: false })); - const list = status.match(/Latest repo changes<\/h2>[\s\S]*?