From f88ced43c12f8476aff992b6d76b928f4650200e Mon Sep 17 00:00:00 2001 From: KitsuneTech1 <182616862+KitsuneTech1@users.noreply.github.com> Date: Fri, 4 Sep 2026 12:57:19 -0500 Subject: [PATCH] fix: drop the Discord usernames from the roster Cards now show the display name and the competitions only. The handle line and its style are gone from the homepage and the team page. The test now asserts no card renders a handle as visible text, so one cannot come back by hand. --- site/assets/theme.css | 2 +- site/index.html | 5 ----- site/team/index.html | 5 ----- tests/site-contract.test.mjs | 12 ++++++++++-- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/site/assets/theme.css b/site/assets/theme.css index c67586a..c459599 100644 --- a/site/assets/theme.css +++ b/site/assets/theme.css @@ -4,5 +4,5 @@ .ready-archive-page .application-page{max-width:46rem;padding-bottom:4rem}.ready-archive-page .application-intro{padding-bottom:2.25rem}.ready-archive-page .application-record{border:1px solid var(--line);background:var(--panel);padding:clamp(1.25rem,4vw,2rem)}.ready-archive-page .application-record__head{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.ready-archive-page .application-record__head h2{color:var(--link);font:1.35rem/1.2 var(--font-name);margin:.2rem 0 0}.ready-archive-page .application-record__head>code{color:var(--muted);font-size:.7rem}.ready-archive-page .record-label{color:var(--status);font:.7rem/1.4 var(--font-data);margin:0}.ready-archive-page .application-steps{list-style:decimal-leading-zero;margin:2rem 0 0;padding-left:3.2rem}.ready-archive-page .application-step{border-left:1px dotted var(--line);padding:0 0 2.25rem 1.25rem}.ready-archive-page .application-step:last-child{padding-bottom:0}.ready-archive-page .application-step::marker{color:var(--link);font:700 .68rem/1 var(--font-data)}.ready-archive-page .application-step h3{color:var(--ink);font:.85rem/1.3 var(--font-data);margin:0 0 .5rem}.ready-archive-page .application-step>p{margin:.5rem 0 0}.ready-archive-page .application-step .ready-status{margin-top:1rem}.ready-archive-page .application-step .field:first-child{margin-top:1rem}@media (width<=44rem){.ready-archive-page .application-record{padding:1.25rem 1rem}.ready-archive-page .application-record__head{align-items:flex-start;flex-direction:column}.ready-archive-page .application-steps{padding-left:2rem}.ready-archive-page .application-step{padding-left:1rem}} .ready-archive-page .competition-records{max-width:46rem;gap:1rem;margin-bottom:.75rem;display:grid}.ready-archive-page .competition-records .archive-record h3{color:var(--link);font:1.25rem/1.25 var(--font-name);margin:.2rem 0 0}.ready-archive-page .ready-reissue{border-top:1px dotted var(--line);margin-top:1rem;padding-top:.8rem}.ready-archive-page .ready-reissue p{margin:.3rem 0}.ready-archive-page .ready-reissue__status{min-height:1.2rem;color:var(--status);font:.72rem/1.5 var(--font-data)} .ready-archive-page .crew-nav a,.ready-archive-page .crew-nav button{align-items:center;display:inline-flex}.ready-archive-page .discord-login{gap:.45rem}.ready-archive-page .discord-login img{width:1.25rem;height:auto;flex:none} -.ready-archive-page .roster{max-width:46rem;grid-template-columns:repeat(auto-fill,minmax(19rem,1fr));gap:1rem;margin:1rem 0 0;padding:0;list-style:none;display:grid}.ready-archive-page .roster-member{border:1px solid var(--line);background:var(--panel);grid-template-columns:auto minmax(0,1fr);align-items:start;gap:1rem;padding:1rem;display:grid}.ready-archive-page .roster-avatar{border:1px solid var(--line);width:3rem;height:3rem;object-fit:cover;background:#050505;flex:none;display:block}.ready-archive-page .roster-identity{min-width:0}.ready-archive-page .roster-member h3{color:var(--link);font:.95rem/1.25 var(--font-name);overflow-wrap:anywhere;margin:0}.ready-archive-page .roster-handle{color:var(--muted);font:.72rem/1.4 var(--font-data);overflow-wrap:anywhere;margin:.3rem 0 0}.ready-archive-page .roster-events{border-top:1px dotted var(--line);color:var(--status);font:.72rem/1.5 var(--font-data);gap:.2rem;margin:.65rem 0 0;padding:.6rem 0 0;list-style:none;display:grid}@media (width<=44rem){.ready-archive-page .roster{grid-template-columns:1fr}} +.ready-archive-page .roster{max-width:46rem;grid-template-columns:repeat(auto-fill,minmax(19rem,1fr));gap:1rem;margin:1rem 0 0;padding:0;list-style:none;display:grid}.ready-archive-page .roster-member{border:1px solid var(--line);background:var(--panel);grid-template-columns:auto minmax(0,1fr);align-items:start;gap:1rem;padding:1rem;display:grid}.ready-archive-page .roster-avatar{border:1px solid var(--line);width:3rem;height:3rem;object-fit:cover;background:#050505;flex:none;display:block}.ready-archive-page .roster-identity{min-width:0}.ready-archive-page .roster-member h3{color:var(--link);font:.95rem/1.25 var(--font-name);overflow-wrap:anywhere;margin:0}.ready-archive-page .roster-events{border-top:1px dotted var(--line);color:var(--status);font:.72rem/1.5 var(--font-data);gap:.2rem;margin:.65rem 0 0;padding:.6rem 0 0;list-style:none;display:grid}@media (width<=44rem){.ready-archive-page .roster{grid-template-columns:1fr}} .ready-archive-page .placement-extra{color:var(--score);margin-top:.2rem;display:block} diff --git a/site/index.html b/site/index.html index 986745a..129273b 100644 --- a/site/index.html +++ b/site/index.html @@ -81,7 +81,6 @@

Team

SHOOTTHEMESSENGER/Moo

-

spookymoo

@@ -89,7 +88,6 @@

SHOOTTHEMESSENGER/Moo

Hoxed

-

hoxed

@@ -97,7 +95,6 @@

Hoxed

romil0xsec

-

romil1998

@@ -105,7 +102,6 @@

romil0xsec

Deva_RP

-

deva_rp

@@ -113,7 +109,6 @@

Deva_RP

Antsy

-

antsyy_

diff --git a/site/team/index.html b/site/team/index.html index 2fb5a8f..cc0ba45 100644 --- a/site/team/index.html +++ b/site/team/index.html @@ -37,7 +37,6 @@

Roster

SHOOTTHEMESSENGER/Moo

-

spookymoo

@@ -45,7 +44,6 @@

SHOOTTHEMESSENGER/Moo

Hoxed

-

hoxed

@@ -53,7 +51,6 @@

Hoxed

romil0xsec

-

romil1998

@@ -61,7 +58,6 @@

romil0xsec

Deva_RP

-

deva_rp

@@ -69,7 +65,6 @@

Deva_RP

Antsy

-

antsyy_

diff --git a/tests/site-contract.test.mjs b/tests/site-contract.test.mjs index 53b91cb..33708b1 100644 --- a/tests/site-contract.test.mjs +++ b/tests/site-contract.test.mjs @@ -226,9 +226,8 @@ test("the roster is published on the homepage and the team page", () => { for (const [index, [file, name, played]] of members.entries()) { assert.ok(html.includes(`src="/brand/team/${file}.png"`), `${page} is missing the ${file} avatar`); assert.ok(html.includes(`

${name}

`), `${page} is missing the name ${name}`); - assert.ok(html.includes(`

${file}

`), `${page} is missing the handle ${file}`); const card = cards[index]; - assert.ok(card.includes(file), `${page} card order drifted at ${file}`); + assert.ok(card.includes(`/brand/team/${file}.png`), `${page} card order drifted at ${file}`); assert.deepEqual( [...card.matchAll(/
  • ([^<]+)<\/li>/g)].map((m) => m[1]), played, @@ -240,6 +239,14 @@ test("the roster is published on the homepage and the team page", () => { assert.match(match[0], /width="128"[^>]*height="128"/, "avatars need intrinsic dimensions"); } assert.equal(html.includes("Romil Patel"), false, `${page} must not publish a real name`); + assert.equal(html.includes("roster-handle"), false, `${page} must not publish Discord usernames`); + for (const [file] of members) { + assert.equal( + new RegExp(`>[^<]*\b${file}\b[^<]*<`).test(html), + false, + `${page} still shows the Discord username ${file} as visible text`, + ); + } assert.equal(html.includes("sp4reparts"), false, `${page} lists only the five players`); assert.equal(html.includes("cdn.discordapp.com"), false, `${page} must self-host avatars`); } @@ -279,6 +286,7 @@ test("the canonical stylesheet contains the current archive theme", () => { assert.match(css, /\.ready-archive-page \.crew-nav a,\.ready-archive-page \.crew-nav button\{[^}]*display:inline-flex/); assert.match(css, /\.ready-archive-page \.roster\{[^}]*display:grid/); assert.match(css, /\.ready-archive-page \.roster-avatar\{[^}]*object-fit:cover/); + assert.equal(css.includes("roster-handle"), false, "the Discord username style is retired"); for (const marker of forbiddenThemeMarkers) { assert.equal(css.includes(marker), false, `theme.css contains retired marker ${marker}`); }