From 47f7d05fb0b92ac9860c4743b436ac1cfcfaf8a3 Mon Sep 17 00:00:00 2001 From: Vamil Gandhi <13998000+vamgan@users.noreply.github.com> Date: Sun, 30 Aug 2026 22:08:49 -0400 Subject: [PATCH 1/2] fix(site): derive the announcement pill, and mention photos in the lede The pill said "Ten browsers" while the coverage table two sections below said eleven. The sync script derives the headline stat and the README but never covered the pill, so it drifted the moment Naver Whale was added. It is derived now, with a test. The lede also still listed browsers, downloads, desktop and notes, which stopped being the whole set when photos shipped. Both were caught by rendering the page and looking at it, which is the only way this class of error surfaces. --- scripts/sync-skills.py | 3 +++ site/index.html | 4 ++-- tests/test_skills.py | 9 +++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/scripts/sync-skills.py b/scripts/sync-skills.py index ac1fd11..f68f6d3 100755 --- a/scripts/sync-skills.py +++ b/scripts/sync-skills.py @@ -73,6 +73,9 @@ def published(check_only): site_path = os.path.join(ROOT, "site", "index.html") site = open(site_path, encoding="utf-8").read() new_site = re.sub(r'(class="stat">)\d+(<)', r"\g<1>%d\g<2>" % total, site) + # the announcement pill states the same number and drifted once already + new_site = re.sub(r'()\w+ browsers()', + r"\g<1>%s browsers\g<2>" % NUMBER[total], new_site) chips = "".join('%s' % a for a in chromium) new_site = re.sub(r'(
Teach your AI agent to clean it.
-Open-source skills that organize your browsers, downloads, desktop, and notes. Adding support for an app is one file.
+Open-source skills that organize your browsers, downloads, desktop, photos, and notes. Adding support for an app is one file.
npx skills add vamgan/declutter
diff --git a/tests/test_skills.py b/tests/test_skills.py
index 699dbb4..3bf9bf9 100644
--- a/tests/test_skills.py
+++ b/tests/test_skills.py
@@ -302,3 +302,12 @@ def test_vendored_copies_are_byte_identical(self):
with self.subTest(skill=os.path.basename(d), file=f"{kind}/{name}"):
self.assertTrue(os.path.exists(src), "vendored file has no source")
self.assertEqual(read(src), read(os.path.join(sub, name)))
+
+ def test_announcement_pill_matches_code(self):
+ # This drifted once: the pill said "Ten browsers" while the coverage
+ # table said eleven. It is derived now, and this keeps it that way.
+ words = {8: "Eight", 9: "Nine", 10: "Ten", 11: "Eleven", 12: "Twelve"}
+ site = read(os.path.join(ROOT, "site", "index.html"))
+ m = re.search(r"(\w+) browsers", site)
+ self.assertIsNotNone(m, "the site no longer states a browser count in the pill")
+ self.assertEqual(m.group(1), words[self.expected])
From 1dd22a0590354b34d444bf319654010b0c341d8d Mon Sep 17 00:00:00 2001
From: Vamil Gandhi <13998000+vamgan@users.noreply.github.com>
Date: Sun, 30 Aug 2026 22:09:24 -0400
Subject: [PATCH 2/2] test: move the pill assertion into the class that
computes the count
It was appended to the end of the file and landed in
TestVendoredCopiesAreInSync, which has no self.expected, so it errored.
It belongs with the other published-count assertions.
---
tests/test_skills.py | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/tests/test_skills.py b/tests/test_skills.py
index 3bf9bf9..6c8c742 100644
--- a/tests/test_skills.py
+++ b/tests/test_skills.py
@@ -244,6 +244,15 @@ def test_readme_browser_count_matches_code(self):
readme = read(os.path.join(ROOT, "README.md"))
self.assertIn(f"**{words[self.expected]} browsers, one markdown file.**", readme)
+ def test_announcement_pill_matches_code(self):
+ # This drifted once: the pill said "Ten browsers" while the coverage
+ # table said eleven. It is derived now, and this keeps it that way.
+ words = {8: "Eight", 9: "Nine", 10: "Ten", 11: "Eleven", 12: "Twelve"}
+ site = read(os.path.join(ROOT, "site", "index.html"))
+ m = re.search(r"(\w+) browsers", site)
+ self.assertIsNotNone(m, "the site no longer states a browser count in the pill")
+ self.assertEqual(m.group(1), words[self.expected])
+
def test_every_chromium_app_appears_on_the_site(self):
site = read(os.path.join(ROOT, "site", "index.html"))
for app in self.platforms.CHROMIUM:
@@ -302,12 +311,3 @@ def test_vendored_copies_are_byte_identical(self):
with self.subTest(skill=os.path.basename(d), file=f"{kind}/{name}"):
self.assertTrue(os.path.exists(src), "vendored file has no source")
self.assertEqual(read(src), read(os.path.join(sub, name)))
-
- def test_announcement_pill_matches_code(self):
- # This drifted once: the pill said "Ten browsers" while the coverage
- # table said eleven. It is derived now, and this keeps it that way.
- words = {8: "Eight", 9: "Nine", 10: "Ten", 11: "Eleven", 12: "Twelve"}
- site = read(os.path.join(ROOT, "site", "index.html"))
- m = re.search(r"(\w+) browsers", site)
- self.assertIsNotNone(m, "the site no longer states a browser count in the pill")
- self.assertEqual(m.group(1), words[self.expected])