diff --git a/site/assets/judgmentkit-social-thumbnail.png b/site/assets/judgmentkit-social-thumbnail.png index 53272c1..86d5510 100644 Binary files a/site/assets/judgmentkit-social-thumbnail.png and b/site/assets/judgmentkit-social-thumbnail.png differ diff --git a/site/build-site.mjs b/site/build-site.mjs index e0c1ddf..8dcbe17 100755 --- a/site/build-site.mjs +++ b/site/build-site.mjs @@ -26,7 +26,7 @@ const JUDGMENTKIT_PACKAGE_VERSION = require("../package.json").version; const SYSTEM_MAP_FLOW_ASSET_VERSION = "judgmentkit-flow-design-source-authority"; const SITE_ORIGIN = "https://judgmentkit.ai"; const SOCIAL_THUMBNAIL_SOURCE_FILENAME = "judgmentkit-social-thumbnail.png"; -const SOCIAL_THUMBNAIL_FILENAME = "judgmentkit-social-thumbnail-20260723.png"; +const SOCIAL_THUMBNAIL_FILENAME = "judgmentkit-social-thumbnail-20260723-v2.png"; const SOCIAL_THUMBNAIL_PATH = `/assets/${SOCIAL_THUMBNAIL_FILENAME}`; const SOCIAL_THUMBNAIL_ALT = "JudgmentKit. Before the UI."; const HOMEPAGE_HERO_ART_FILENAME = "judgment-lens-hero.webp"; diff --git a/tests/site.test.mjs b/tests/site.test.mjs index 7149eaa..d75fa5d 100644 --- a/tests/site.test.mjs +++ b/tests/site.test.mjs @@ -460,15 +460,15 @@ assert.equal(homepage.includes("Open system map"), false); assert.equal(homepage.includes("not the final renderer"), false); assert.ok(homepage.includes('rel="canonical" href="https://judgmentkit.ai/"')); assert.ok(homepage.includes('rel="icon" href="/favicon.svg"')); -assert.ok(homepage.includes('rel="image_src" href="https://judgmentkit.ai/assets/judgmentkit-social-thumbnail-20260723.png"')); -assert.ok(homepage.includes('property="og:image" content="https://judgmentkit.ai/assets/judgmentkit-social-thumbnail-20260723.png"')); -assert.ok(homepage.includes('property="og:image:secure_url" content="https://judgmentkit.ai/assets/judgmentkit-social-thumbnail-20260723.png"')); +assert.ok(homepage.includes('rel="image_src" href="https://judgmentkit.ai/assets/judgmentkit-social-thumbnail-20260723-v2.png"')); +assert.ok(homepage.includes('property="og:image" content="https://judgmentkit.ai/assets/judgmentkit-social-thumbnail-20260723-v2.png"')); +assert.ok(homepage.includes('property="og:image:secure_url" content="https://judgmentkit.ai/assets/judgmentkit-social-thumbnail-20260723-v2.png"')); assert.ok(homepage.includes('property="og:image:type" content="image/png"')); assert.ok(homepage.includes('property="og:image:width" content="1200"')); assert.ok(homepage.includes('property="og:image:height" content="630"')); assert.ok(homepage.includes('property="og:image:alt" content="JudgmentKit. Before the UI."')); assert.ok(homepage.includes('name="twitter:card" content="summary_large_image"')); -assert.ok(homepage.includes('name="twitter:image" content="https://judgmentkit.ai/assets/judgmentkit-social-thumbnail-20260723.png"')); +assert.ok(homepage.includes('name="twitter:image" content="https://judgmentkit.ai/assets/judgmentkit-social-thumbnail-20260723-v2.png"')); assert.ok(homepage.includes('name="twitter:image:alt" content="JudgmentKit. Before the UI."')); assert.ok(llms.includes("- /evals/judgmentkit-mcp/")); assert.ok(llms.includes("- /evals/site-rebuild-log/")); @@ -1883,10 +1883,25 @@ const socialThumbnail = fs.readFileSync(path.join(tempDir, "assets", "judgmentki assert.equal(socialThumbnail.subarray(1, 4).toString("ascii"), "PNG"); assert.equal(socialThumbnail.readUInt32BE(16), 1200); assert.equal(socialThumbnail.readUInt32BE(20), 630); -const versionedSocialThumbnail = fs.readFileSync(path.join(tempDir, "assets", "judgmentkit-social-thumbnail-20260723.png")); +assert.equal( + crypto.createHash("sha256").update(socialThumbnail).digest("hex"), + "969df7ef71c748a151f58357b67d4100e3ee2dbf799da0cd22dbb3c5bc0375ea", + "social thumbnail must match the visually approved direct SVG render", +); +const socialThumbnailSvg = fs.readFileSync( + new URL("../site/assets/judgmentkit-social-thumbnail.svg", import.meta.url), + "utf8", +); +assert.match( + socialThumbnailSvg, + /JudgmentKit<\/text>/, + "social thumbnail wordmark must retain its optically balanced baseline", +); +const versionedSocialThumbnail = fs.readFileSync(path.join(tempDir, "assets", "judgmentkit-social-thumbnail-20260723-v2.png")); assert.equal(versionedSocialThumbnail.subarray(1, 4).toString("ascii"), "PNG"); assert.equal(versionedSocialThumbnail.readUInt32BE(16), 1200); assert.equal(versionedSocialThumbnail.readUInt32BE(20), 630); +assert.deepEqual(versionedSocialThumbnail, socialThumbnail); const homepageHeroArt = fs.readFileSync(path.join(tempDir, "assets", "judgment-lens-hero.webp")); const homepageHeroArtSource = fs.readFileSync( new URL("../site/assets/judgment-lens-hero.webp", import.meta.url),