diff --git a/site/index.html b/site/index.html index 4aa5510..a589981 100644 --- a/site/index.html +++ b/site/index.html @@ -42,6 +42,14 @@

Kernel Kittens

Competition results

+
+

RESULT 2026 / team result

+

Kaspersky{CTF} 2026

+

Division: North America

+
+
Placement
3 / 361
+
+

RESULT 2026 / member result with a prior team

Cyber Apocalypse 2026

diff --git a/site/results/index.html b/site/results/index.html index 0b1f450..417db2b 100644 --- a/site/results/index.html +++ b/site/results/index.html @@ -31,6 +31,14 @@

/results

Results

Placements we can prove. Prior-team work stays labeled as prior-team work.

+
+
+

RESULT 2026 / team result

+

Kaspersky{CTF} 2026

+

Division: North America

+
Placement
3 / 361
+
+

RESULT 2026 / member result with a prior team

diff --git a/tests/site-contract.test.mjs b/tests/site-contract.test.mjs index 1811b10..26ce679 100644 --- a/tests/site-contract.test.mjs +++ b/tests/site-contract.test.mjs @@ -67,7 +67,7 @@ test("the homepage links to Apply and Discord without loading the application cl assert.doesNotMatch(home, / { +test("the homepage removes the redundant path and publishes every verified result", () => { const home = read("index.html"); assert.doesNotMatch(home, /

\/home<\/p>/); assert.match(home, /

Competition results<\/h2>/); @@ -79,6 +79,10 @@ test("the homepage removes the redundant path and publishes both verified result assert.match(home, /1 \/ 994/); assert.match(home, /28 \/ 28/); assert.match(home, /5,997/); + assert.match(home, /Kaspersky\{CTF\} 2026/); + assert.match(home, /3 \/ 361/); + assert.match(home, /Division: North America/); + assert.equal((home.match(/RESULT 2026 \/ team result/g) ?? []).length, 1); assert.equal((home.match(/RESULT 2026 \/ member result with a prior team/g) ?? []).length, 2); assert.doesNotMatch(home, /KK \/ RESULT 2026/); assert.equal((home.match(/1337_PwnSp4c3/g) ?? []).length, 2); @@ -90,7 +94,7 @@ test("the homepage removes the redundant path and publishes both verified result test("the Results page contains the complete verified competition record", () => { const results = read("results/index.html"); - assert.equal((results.match(/class="archive-record"/g) ?? []).length, 2); + assert.equal((results.match(/class="archive-record"/g) ?? []).length, 3); assert.match(results, /Cyber Apocalypse 2026/); assert.match(results, /12 \/ 6,744/); assert.match(results, /136 \/ 136/); @@ -100,6 +104,14 @@ test("the Results page contains the complete verified competition record", () => assert.match(results, /28 \/ 28/); assert.match(results, /5,997/); assert.match(results, /Open - International/); + assert.match(results, /Kaspersky\{CTF\} 2026/); + assert.match(results, /3 \/ 361/); + assert.match(results, /Division: North America/); + assert.equal((results.match(/RESULT 2026 \/ team result/g) ?? []).length, 1); + assert.ok( + results.indexOf("Kaspersky{CTF} 2026") < results.indexOf("Cyber Apocalypse 2026"), + "the newest result must appear first", + ); assert.equal((results.match(/RESULT 2026 \/ member result with a prior team/g) ?? []).length, 2); assert.doesNotMatch(results, /KK \/ RESULT 2026/); assert.equal((results.match(/1337_PwnSp4c3/g) ?? []).length, 2);