From cc08342e19d47b56ae5fb7ac65ada7f9eb8f7ec4 Mon Sep 17 00:00:00 2001
From: KitsuneTech1 <182616862+KitsuneTech1@users.noreply.github.com>
Date: Wed, 2 Sep 2026 15:36:49 -0500
Subject: [PATCH 1/2] fix: add the Kaspersky score and the full division name
Verified against the live Kaspersky scoreboard, which renders client
side and so could not be read by plain fetch.
Score is 4,413. The top three in the division tied on 4,413 and were
separated on solve time, which is why the same figure appears on other
teams' cards.
The division is "North America, South America, Caribbean", not "North
America". That is the actual scoreboard tab name. Last place in it is
361, which confirms the existing 3 / 361.
Solve count stays absent. The scoreboard publishes no solve or challenge
column in any division.
---
site/index.html | 3 ++-
site/results/index.html | 4 ++--
tests/site-contract.test.mjs | 6 ++++--
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/site/index.html b/site/index.html
index a589981..d4b61cb 100644
--- a/site/index.html
+++ b/site/index.html
@@ -45,9 +45,10 @@
Competition results
RESULT 2026 / team result
Kaspersky{CTF} 2026
- Division: North America
+ Division: North America, South America, Caribbean
- Placement
- 3 / 361
+ - Score
- 4,413
diff --git a/site/results/index.html b/site/results/index.html
index 417db2b..d6039ae 100644
--- a/site/results/index.html
+++ b/site/results/index.html
@@ -35,8 +35,8 @@
RESULT 2026 / team result
Kaspersky{CTF} 2026
- Division: North America
- - Placement
- 3 / 361
+ Division: North America, South America, Caribbean
+ - Placement
- 3 / 361
- Score
- 4,413
diff --git a/tests/site-contract.test.mjs b/tests/site-contract.test.mjs
index 26ce679..d40df46 100644
--- a/tests/site-contract.test.mjs
+++ b/tests/site-contract.test.mjs
@@ -81,7 +81,8 @@ test("the homepage removes the redundant path and publishes every verified resul
assert.match(home, /5,997/);
assert.match(home, /Kaspersky\{CTF\} 2026/);
assert.match(home, /3 \/ 361/);
- assert.match(home, /Division: North America/);
+ assert.match(home, /Division: North America, South America, Caribbean/);
+ assert.match(home, /4,413/);
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/);
@@ -106,7 +107,8 @@ test("the Results page contains the complete verified competition record", () =>
assert.match(results, /Open - International/);
assert.match(results, /Kaspersky\{CTF\} 2026/);
assert.match(results, /3 \/ 361/);
- assert.match(results, /Division: North America/);
+ assert.match(results, /Division: North America, South America, Caribbean/);
+ assert.match(results, /4,413/);
assert.equal((results.match(/RESULT 2026 \/ team result/g) ?? []).length, 1);
assert.ok(
results.indexOf("Kaspersky{CTF} 2026") < results.indexOf("Cyber Apocalypse 2026"),
From 8960d8fe778e96ebdc3e647f17966ac3a3debe2a Mon Sep 17 00:00:00 2001
From: KitsuneTech1 <182616862+KitsuneTech1@users.noreply.github.com>
Date: Wed, 2 Sep 2026 15:57:44 -0500
Subject: [PATCH 2/2] feat: record the Kaspersky full clear as 30 of 30
Total challenge count is 30. The kavore/kaspersky2026-writeups
collection documents 27, stated in its README and listed in its
navigation table, and Sudokrypt, Good pineapple and Garden appear
nowhere in that tree. 27 plus 3 is 30.
Moo confirmed the team cleared all 30, which is consistent with tying
the top two teams in the division on 4,413.
---
site/index.html | 1 +
site/results/index.html | 2 +-
tests/site-contract.test.mjs | 2 ++
3 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/site/index.html b/site/index.html
index d4b61cb..163963d 100644
--- a/site/index.html
+++ b/site/index.html
@@ -48,6 +48,7 @@ Kaspersky{CTF} 2026
Division: North America, South America, Caribbean
- Placement
- 3 / 361
+ - Solved
- 30 / 30
- Score
- 4,413
diff --git a/site/results/index.html b/site/results/index.html
index d6039ae..da5602b 100644
--- a/site/results/index.html
+++ b/site/results/index.html
@@ -36,7 +36,7 @@
RESULT 2026 / team result
Kaspersky{CTF} 2026
Division: North America, South America, Caribbean
- - Placement
- 3 / 361
- Score
- 4,413
+ - Placement
- 3 / 361
- Solved
- 30 / 30
- Score
- 4,413
diff --git a/tests/site-contract.test.mjs b/tests/site-contract.test.mjs
index d40df46..2a6d095 100644
--- a/tests/site-contract.test.mjs
+++ b/tests/site-contract.test.mjs
@@ -82,6 +82,7 @@ test("the homepage removes the redundant path and publishes every verified resul
assert.match(home, /Kaspersky\{CTF\} 2026/);
assert.match(home, /3 \/ 361/);
assert.match(home, /Division: North America, South America, Caribbean/);
+ assert.match(home, /30 \/ 30/);
assert.match(home, /4,413/);
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);
@@ -108,6 +109,7 @@ test("the Results page contains the complete verified competition record", () =>
assert.match(results, /Kaspersky\{CTF\} 2026/);
assert.match(results, /3 \/ 361/);
assert.match(results, /Division: North America, South America, Caribbean/);
+ assert.match(results, /30 \/ 30/);
assert.match(results, /4,413/);
assert.equal((results.match(/RESULT 2026 \/ team result/g) ?? []).length, 1);
assert.ok(