Recent changes to this wiki:

that's enough of that
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
deleted file mode 100644
index b9aa3f1a7..000000000
--- a/doc/forum/theme_poll.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-Existing IkiWiki users: which [[themes]] do you use on your site?
-
-[[!poll 10 "antitheme (i.e., none)"
-8 "actiontabs"
-16 "blueview"
-2 "goldtype"
-0 monochrome
-5 "other, including heavily modified versions of the above"
-]]

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index fbb67a6a7..b9aa3f1a7 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,8 +1,8 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
-9 "actiontabs"
-15 "blueview"
+8 "actiontabs"
+16 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 3461fcb80..fbb67a6a7 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,8 +1,8 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
-10 "actiontabs"
-14 "blueview"
+9 "actiontabs"
+15 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index a841fc9f0..3461fcb80 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,8 +1,8 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
-11 "actiontabs"
-13 "blueview"
+10 "actiontabs"
+14 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index a9fdd3eea..a841fc9f0 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,8 +1,8 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
-12 "actiontabs"
-12 "blueview"
+11 "actiontabs"
+13 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 641ee89a1..a9fdd3eea 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -2,7 +2,7 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
 12 "actiontabs"
-11 "blueview"
+12 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 00f724b7d..641ee89a1 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -2,7 +2,7 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
 12 "actiontabs"
-10 "blueview"
+11 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 70ea5648d..00f724b7d 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -2,7 +2,7 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
 12 "actiontabs"
-9 "blueview"
+10 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index f761da947..70ea5648d 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -2,7 +2,7 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
 12 "actiontabs"
-8 "blueview"
+9 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index c0f6c247e..f761da947 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -2,7 +2,7 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
 12 "actiontabs"
-7 "blueview"
+8 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 396615c0c..c0f6c247e 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -2,7 +2,7 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
 12 "actiontabs"
-6 "blueview"
+7 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 8a7579d88..396615c0c 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -2,7 +2,7 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
 12 "actiontabs"
-5 "blueview"
+6 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 5962d4b8b..8a7579d88 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,8 +1,8 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
-13 "actiontabs"
-4 "blueview"
+12 "actiontabs"
+5 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index b5495640f..5962d4b8b 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,8 +1,8 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
-14 "actiontabs"
-3 "blueview"
+13 "actiontabs"
+4 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index c50ea7dda..b5495640f 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,8 +1,8 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
-15 "actiontabs"
-2 "blueview"
+14 "actiontabs"
+3 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 68ed47f24..c50ea7dda 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,8 +1,8 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
-16 "actiontabs"
-1 "blueview"
+15 "actiontabs"
+2 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (blueview)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index a8d829909..68ed47f24 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,8 +1,8 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 10 "antitheme (i.e., none)"
-17 "actiontabs"
-0 "blueview"
+16 "actiontabs"
+1 "blueview"
 2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index b900c2cce..a8d829909 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 11 "antitheme (i.e., none)"
-16 "actiontabs"
+[[!poll 10 "antitheme (i.e., none)"
+17 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index a301009c9..b900c2cce 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 12 "antitheme (i.e., none)"
-15 "actiontabs"
+[[!poll 11 "antitheme (i.e., none)"
+16 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index d3fd5043f..a301009c9 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 13 "antitheme (i.e., none)"
-14 "actiontabs"
+[[!poll 12 "antitheme (i.e., none)"
+15 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index af4520b1c..d3fd5043f 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 14 "antitheme (i.e., none)"
-13 "actiontabs"
+[[!poll 13 "antitheme (i.e., none)"
+14 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 3e2562762..af4520b1c 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 14 "antitheme (i.e., none)"
-12 "actiontabs"
+13 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 3bf3b2996..3e2562762 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 14 "antitheme (i.e., none)"
-11 "actiontabs"
+12 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index b212c0539..3bf3b2996 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 14 "antitheme (i.e., none)"
-10 "actiontabs"
+11 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 98cda37a5..b212c0539 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 14 "antitheme (i.e., none)"
-9 "actiontabs"
+10 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 3949fba98..98cda37a5 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 14 "antitheme (i.e., none)"
-8 "actiontabs"
+9 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 2d64990e9..3949fba98 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 15 "antitheme (i.e., none)"
-7 "actiontabs"
+[[!poll 14 "antitheme (i.e., none)"
+8 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 16db4de2d..2d64990e9 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 16 "antitheme (i.e., none)"
-6 "actiontabs"
+[[!poll 15 "antitheme (i.e., none)"
+7 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 54802ffe3..16db4de2d 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 17 "antitheme (i.e., none)"
-5 "actiontabs"
+[[!poll 16 "antitheme (i.e., none)"
+6 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index e2c254de3..54802ffe3 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 18 "antitheme (i.e., none)"
-4 "actiontabs"
+[[!poll 17 "antitheme (i.e., none)"
+5 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 156c832b1..e2c254de3 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 19 "antitheme (i.e., none)"
-3 "actiontabs"
+[[!poll 18 "antitheme (i.e., none)"
+4 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 8a98ab88b..156c832b1 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 18 "antitheme (i.e., none)"
+[[!poll 19 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 8349e0ce7..8a98ab88b 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 17 "antitheme (i.e., none)"
+[[!poll 18 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 515370b1c..8349e0ce7 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 16 "antitheme (i.e., none)"
+[[!poll 17 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 8945a848c..515370b1c 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 15 "antitheme (i.e., none)"
+[[!poll 16 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 611eee3a4..8945a848c 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 14 "antitheme (i.e., none)"
+[[!poll 15 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index da79ba9e0..611eee3a4 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 13 "antitheme (i.e., none)"
+[[!poll 14 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index ead8097e3..da79ba9e0 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 12 "antitheme (i.e., none)"
+[[!poll 13 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 322c7d0b1..ead8097e3 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 11 "antitheme (i.e., none)"
+[[!poll 12 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index dc77ec5a0..322c7d0b1 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 10 "antitheme (i.e., none)"
+[[!poll 11 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 1a4f618d2..dc77ec5a0 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 9 "antitheme (i.e., none)"
+[[!poll 10 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index b73647316..1a4f618d2 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 8 "antitheme (i.e., none)"
+[[!poll 9 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 7f5981a35..b73647316 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 7 "antitheme (i.e., none)"
+[[!poll 8 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index c53cfe492..7f5981a35 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 6 "antitheme (i.e., none)"
+[[!poll 7 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 97c09cf1d..c53cfe492 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 5 "antitheme (i.e., none)"
+[[!poll 6 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 21e6f7477..97c09cf1d 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 4 "antitheme (i.e., none)"
+[[!poll 5 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 39d2820a5..21e6f7477 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 3 "antitheme (i.e., none)"
+[[!poll 4 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none)'")
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 21e6f7477..39d2820a5 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 4 "antitheme (i.e., none)"
+[[!poll 3 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 39d2820a5..21e6f7477 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 3 "antitheme (i.e., none)"
+[[!poll 4 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (-1 OR 2+787-787-1=0+0+0+1 -- )
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 21e6f7477..39d2820a5 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 4 "antitheme (i.e., none)"
+[[!poll 3 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index c457cf7e2..21e6f7477 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 3 "antitheme (i.e., none)"
-4 "actiontabs"
+[[!poll 4 "antitheme (i.e., none)"
+3 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 21e6f7477..c457cf7e2 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 4 "antitheme (i.e., none)"
-3 "actiontabs"
+[[!poll 3 "antitheme (i.e., none)"
+4 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (antitheme (i.e., none))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 39d2820a5..21e6f7477 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,6 +1,6 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
-[[!poll 3 "antitheme (i.e., none)"
+[[!poll 4 "antitheme (i.e., none)"
 3 "actiontabs"
 0 "blueview"
 2 "goldtype"

dark mode now available on this site
diff --git a/doc/forum/dark_mode_is_now_available_for_ikiwiki.info.mdwn b/doc/forum/dark_mode_is_now_available_for_ikiwiki.info.mdwn
new file mode 100644
index 000000000..c88418cac
--- /dev/null
+++ b/doc/forum/dark_mode_is_now_available_for_ikiwiki.info.mdwn
@@ -0,0 +1 @@
+Joey enabled the "lightdark" theme for this site a while ago, but it was prevented from working due to a technicality unique to this site, which has now been addresed. So: dark mode is now available! The site should follow your browser's preferences. *— [[Jon]], 2026-03-16*

de-link style.css
The wikilink is broken since the file is not in the doc source path
anymore.
diff --git a/doc/basewiki.mdwn b/doc/basewiki.mdwn
index b4aa60c78..6b079703f 100644
--- a/doc/basewiki.mdwn
+++ b/doc/basewiki.mdwn
@@ -17,7 +17,7 @@ It currently includes these pages:
 * [[ikiwiki/wikilink]]
 
 As well as a few other files, like [[favicon.ico]], [[local.css]],
-[[style.css]], and some icons.
+style.css, and some icons.
 
 Note that an important property of the basewiki is that it should be
 self-contained. That means that the pages listed above cannot link

Move style.css canonically to underlays directory
Shifting it out of doc/ means, if we enable a theme for
<https://ikiwiki.info>, the theme-generated style.css will
not be overwritten by doc/style.css.
diff --git a/Makefile.PL b/Makefile.PL
index b63ee7397..cfad64d90 100755
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -126,7 +126,7 @@ underlay_install:
 		install -d $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme; \
 		for file in $$theme/*; do \
 			if echo "$$file" | grep -q style.css; then \
-				(cat doc/style.css; cat $$theme/base.css 2>/dev/null || :; cat $$file) > $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme/style.css; \
+				(cat underlays/basewiki/style.css; cat $$theme/base.css 2>/dev/null || :; cat $$file) > $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme/style.css; \
 			elif echo "$$file" | grep -q base.css; then \
 				:; \
 			elif [ -f "$$file" ]; then \
diff --git a/doc/style.css b/doc/style.css
deleted file mode 100644
index e3f75b1d9..000000000
--- a/doc/style.css
+++ /dev/null
@@ -1,618 +0,0 @@
-/* ikiwiki style sheet */
-
-/* Note that instead of modifying this style sheet, you can instead edit
- * local.css and use it to override or change settings in this one.
- */
-
-/* html5 compat */
-article,aside,details,figcaption,figure,
-footer,header,hgroup,menu,nav,section {
-	display: block;
-}
-
-div.header, header.header {
-	margin: 0;
-	font-size: 140%;
-	font-weight: bold;
-	line-height: 1em;
-	display: block;
-}
-
-.inlineheader .author {
-	margin: 0;
-	font-size: 112%;
-	font-weight: bold;
-	display: block;
-}
-
-.actions ul {
-	margin: 0;
-	padding: 6px .4em;
-	height: 1em;
-	list-style-type: none;
-}
-.actions li {
-	display: inline;
-	padding: .2em;
-}
-.pageheader .actions ul {
-	border-bottom: 1px solid #000;
-}
-
-.inlinepage .actions ul {
-	border-bottom: 0;
-}
-
-#otherlanguages ul {
-	margin: 0;
-	padding: 6px;
-	list-style-type: none;
-}
-#otherlanguages li {
-	display: inline;
-	padding: .2em .4em;
-}
-.pageheader #otherlanguages {
-	border-bottom: 1px solid #000;
-}
-
-.inlinecontent,
-.inlineenclosure {
-	margin-top: .4em;
-}
-
-.pagefooter,
-.inlinefooter,
-.comments {
-	clear: both;
-}
-
-#pageinfo {
-	margin: 1em 0;
-	border-top: 1px solid #000;
-}
-
-.tags {
-	margin-top: 1em;
-}
-
-.inlinepage .tags {
-        display: inline;
-}
-
-.mapparent {
-	text-decoration: none;
-}
-
-.img caption {
-	font-size: 80%;
-	caption-side: bottom;
-	text-align: center;
-}
-
-img.img {
-	margin: 0.5ex;
-}
-
-.align-left {
-	float:left;
-}
-
-.align-right {
-	float:right;
-}
-
-#backlinks {
-	margin-top: 1em;
-}
-
-#searchform {
-	display: inline;
-	float: right;
-}
-
-#editcontent {
-	width: 98%;
-}
-
-.editcontentdiv {
-	width: auto;
-	overflow: auto;
-}
-
-img {
-	border-style: none;
-}
-
-pre {
-	overflow: auto;
-}
-
-div.recentchanges {
-	border-style: solid;
-	border-width: 1px;
-	overflow: auto;
-	width: auto;
-	clear: none;
-	background: #eee;
-	color: black !important;
-}
-.recentchanges .metadata {
-	padding: 0px 0.5em;
-}
-.recentchanges .changelog {
-	font-style: italic;
-	clear: both;
-	display: block;
-	padding: 1px 2px;
-	background: white !important;
-	color: black !important;
-}
-.recentchanges .desc {
-	display: none;
-}
-.recentchanges .diff {
-	display: none;
-}
-.recentchanges .committer {
-	float: left;
-	margin: 0;
-	width: 40%;
-}
-.recentchanges .committype {
-	float: left;
-	margin: 0;
-	width: 5%;
-	font-size: small;
-}
-.recentchanges .changedate {
-	float: left;
-	margin: 0;
-	width: 35%;
-	font-size: small;
-}
-.recentchanges .pagelinks,
-.recentchanges .revert {
-	float: right;
-	margin: 0;
-	width: 60%;
-}
-
-.blogform, #blogform {

(Diff truncated)
plan for dark mode on main site
diff --git a/doc/users/jon.mdwn b/doc/users/jon.mdwn
index a9c5d0924..4db8537e5 100644
--- a/doc/users/jon.mdwn
+++ b/doc/users/jon.mdwn
@@ -14,9 +14,13 @@ My current focus is working upstream.
 
 ## priorities
 
-This is an unorganised and unordered stream-of-thought list of the things
+This is an unorganised and (mostly) unordered stream-of-thought list of the things
 I'm interested in addressing at the moment.
 
+1. Move the basic `style.css` out of `./doc`, such that <https://ikiwiki.info>
+can be rebuilt without overwriting the `lightdark` theme (fixing optional dark
+mode on the main site). Branch `mv-antitheme-from-doc`.
+
 Review all unreviewed [[patches|patch]];
 triage all the Debian bugs and make sure upstream issues are forwarded to issues
 recorded here;

revert obvious spam
This reverts commit 0227b26aabe8dfe6cf35d5f427c04ba4f8f8fa34
diff --git a/doc/tips.mdwn b/doc/tips.mdwn
index a452140f0..53f966001 100644
--- a/doc/tips.mdwn
+++ b/doc/tips.mdwn
@@ -1,64 +1,5 @@
-Discover Pips NYT: Strategy Tips For Daily Puzzle Fun
-Introduction to Pips NYT
+This page is a place to document tips and techniques for using ikiwiki.
 
-Pips NYT is an engaging word puzzle game that challenges players to test their vocabulary and logic skills. Unlike traditional crossword puzzles, this game focuses on short, interactive challenges that can be completed in minutes, making it perfect for casual players and puzzle enthusiasts alike. The game is designed to offer daily puzzles that gradually increase in difficulty, keeping players entertained and mentally stimulated.
-
-In <a href="https://pipsly.io/">Pips NYT</a>, players encounter grids of letters where the objective is to create meaningful words or identify hidden patterns. The game combines strategic thinking with quick decision-making, providing a unique experience that differs from other word games. Many players enjoy the sense of accomplishment from completing puzzles quickly while also discovering new words along the way.
-
-How to Play Pips NYT
-
-Playing Pips NYT involves several key steps that are easy to learn but challenging to master. The first step is to observe the grid carefully. Players need to scan the letters and look for potential combinations that form valid words. Attention to detail is crucial, as overlooking even one letter can make a difference in puzzle completion.
-
-After identifying possible words, players select letters in sequence to form the word. Correctly formed words are highlighted, and points are awarded based on the complexity and length of the word. The game encourages players to find longer or less common words to maximize their scores.
-
-Time management is also an important aspect of the game. While some puzzles allow unlimited time, daily challenges often impose a limit, pushing players to think quickly and efficiently. Players who consistently practice Pips NYT develop sharper pattern recognition and faster word recall.
-
-Benefits of Playing Pips NYT
-
-Pips NYT is more than just a casual game. It offers several cognitive benefits that make it a valuable activity for mental exercise. One major benefit is vocabulary enhancement. By interacting with diverse letter combinations, players discover new words and reinforce their existing knowledge.
-
-Another benefit is improved problem-solving skills. Each puzzle requires players to plan ahead, consider multiple options, and anticipate the consequences of their choices. This strategic thinking translates into real-world decision-making abilities.
-
-The game also provides stress relief and entertainment. Engaging with a short, focused puzzle can serve as a break from work or daily routines, offering a sense of accomplishment and relaxation. Many players use Pips NYT as part of a morning routine or evening wind-down, finding it both stimulating and soothing.
-
-Strategies for Beginners
-
-Beginners in Pips NYT should start by familiarizing themselves with the basic rules and layout of the game. Observing the most common letter combinations is a helpful first step. Simple words often appear in initial puzzles, allowing new players to gain confidence before attempting more challenging grids.
-
-Focusing on vowels can also be an effective strategy. Many words rely on vowel placement, so identifying clusters of vowels early can provide a roadmap for constructing words. Players should experiment with different letter sequences to see which combinations yield points.
-
-Additionally, it is important for beginners to review previous puzzles. Revisiting solved challenges helps players recognize patterns and common word formations. This practice builds a mental library of solutions that can be applied in future games.
-
-Advanced Techniques for Skilled Players
-
-For experienced players, mastering Pips NYT involves advanced techniques that go beyond basic word formation. One such technique is scanning the grid for prefixes and suffixes. Recognizing these components quickly allows players to form multiple words from a single sequence of letters.
-
-Another technique is pattern recognition. Skilled players often identify repeating letter arrangements or common letter pairings. This allows for faster puzzle completion and higher scores, as players can anticipate potential words before attempting to select letters.
-
-Time optimization is also a key factor. Advanced players learn to balance speed with accuracy, minimizing mistakes while maximizing points. Regular practice strengthens both recall and reflexes, enabling players to handle complex daily challenges efficiently.
-
-Common Challenges and Solutions
-
-While Pips NYT is designed to be enjoyable, players often face certain challenges. One common challenge is letter overload. Large grids can be overwhelming, making it difficult to identify potential words. To overcome this, players should break the grid into smaller sections and tackle one area at a time.
-
-Another challenge is mental fatigue. Completing multiple puzzles in one session can lead to reduced focus. Players are encouraged to take short breaks and return to the game with a fresh perspective. This approach prevents frustration and maintains the enjoyment of the game.
-
-Finally, encountering unfamiliar words can be challenging but also rewarding. Using a dictionary or word reference after finishing a puzzle helps players learn new terms and expand their vocabulary for future puzzles.
-
-Community and Competitive Play
-
-Pips NYT has cultivated a dedicated community of players who share tips, strategies, and achievements. Online forums and social media groups provide platforms for discussion and collaboration. Players often post high scores, discuss difficult puzzles, and exchange advice on effective strategies.
-
-Competitive play is another exciting aspect. Many players challenge friends or join online leagues to test their skills. Competitions often feature daily or weekly leaderboards, creating a sense of excitement and motivation. Friendly rivalry encourages players to improve and explore new strategies, keeping engagement high.
-
-Tips for Daily Improvement
-
-Consistent practice is key to improvement in Pips NYT. Playing daily challenges helps players develop quicker word recognition and more efficient strategies. Setting small goals, such as finding three new words each day, can also motivate players and track progress over time.
-
-Experimenting with different approaches is beneficial. For example, starting puzzles from the corners or focusing on less obvious letter combinations can reveal hidden words. Players who vary their tactics often discover more efficient paths to high scores.
-
-Finally, reflection after each puzzle is important. Reviewing mistakes and successful moves provides insight into patterns and effective techniques. Over time, these reflections contribute to greater skill and confidence in the game.
-
-Conclusion
-
-Pips NYT offers a unique blend of entertainment, mental exercise, and strategic challenge. Its daily puzzles provide players with opportunities to enhance vocabulary, improve problem-solving skills, and engage in a stimulating activity that fits into any schedule. Whether playing casually or competitively, Pips NYT delivers an enjoyable experience for word enthusiasts of all levels.
+[[!inline pages="tips/* and !tips/*/*" 
+feedpages="created_after(tips/howto_avoid_flooding_aggregators)" archive="yes"
+rootpage="tips" postformtext="Add a new tip about:" show=0]]

diff --git a/doc/tips.mdwn b/doc/tips.mdwn
index 53f966001..a452140f0 100644
--- a/doc/tips.mdwn
+++ b/doc/tips.mdwn
@@ -1,5 +1,64 @@
-This page is a place to document tips and techniques for using ikiwiki.
+Discover Pips NYT: Strategy Tips For Daily Puzzle Fun
+Introduction to Pips NYT
 
-[[!inline pages="tips/* and !tips/*/*" 
-feedpages="created_after(tips/howto_avoid_flooding_aggregators)" archive="yes"
-rootpage="tips" postformtext="Add a new tip about:" show=0]]
+Pips NYT is an engaging word puzzle game that challenges players to test their vocabulary and logic skills. Unlike traditional crossword puzzles, this game focuses on short, interactive challenges that can be completed in minutes, making it perfect for casual players and puzzle enthusiasts alike. The game is designed to offer daily puzzles that gradually increase in difficulty, keeping players entertained and mentally stimulated.
+
+In <a href="https://pipsly.io/">Pips NYT</a>, players encounter grids of letters where the objective is to create meaningful words or identify hidden patterns. The game combines strategic thinking with quick decision-making, providing a unique experience that differs from other word games. Many players enjoy the sense of accomplishment from completing puzzles quickly while also discovering new words along the way.
+
+How to Play Pips NYT
+
+Playing Pips NYT involves several key steps that are easy to learn but challenging to master. The first step is to observe the grid carefully. Players need to scan the letters and look for potential combinations that form valid words. Attention to detail is crucial, as overlooking even one letter can make a difference in puzzle completion.
+
+After identifying possible words, players select letters in sequence to form the word. Correctly formed words are highlighted, and points are awarded based on the complexity and length of the word. The game encourages players to find longer or less common words to maximize their scores.
+
+Time management is also an important aspect of the game. While some puzzles allow unlimited time, daily challenges often impose a limit, pushing players to think quickly and efficiently. Players who consistently practice Pips NYT develop sharper pattern recognition and faster word recall.
+
+Benefits of Playing Pips NYT
+
+Pips NYT is more than just a casual game. It offers several cognitive benefits that make it a valuable activity for mental exercise. One major benefit is vocabulary enhancement. By interacting with diverse letter combinations, players discover new words and reinforce their existing knowledge.
+
+Another benefit is improved problem-solving skills. Each puzzle requires players to plan ahead, consider multiple options, and anticipate the consequences of their choices. This strategic thinking translates into real-world decision-making abilities.
+
+The game also provides stress relief and entertainment. Engaging with a short, focused puzzle can serve as a break from work or daily routines, offering a sense of accomplishment and relaxation. Many players use Pips NYT as part of a morning routine or evening wind-down, finding it both stimulating and soothing.
+
+Strategies for Beginners
+
+Beginners in Pips NYT should start by familiarizing themselves with the basic rules and layout of the game. Observing the most common letter combinations is a helpful first step. Simple words often appear in initial puzzles, allowing new players to gain confidence before attempting more challenging grids.
+
+Focusing on vowels can also be an effective strategy. Many words rely on vowel placement, so identifying clusters of vowels early can provide a roadmap for constructing words. Players should experiment with different letter sequences to see which combinations yield points.
+
+Additionally, it is important for beginners to review previous puzzles. Revisiting solved challenges helps players recognize patterns and common word formations. This practice builds a mental library of solutions that can be applied in future games.
+
+Advanced Techniques for Skilled Players
+
+For experienced players, mastering Pips NYT involves advanced techniques that go beyond basic word formation. One such technique is scanning the grid for prefixes and suffixes. Recognizing these components quickly allows players to form multiple words from a single sequence of letters.
+
+Another technique is pattern recognition. Skilled players often identify repeating letter arrangements or common letter pairings. This allows for faster puzzle completion and higher scores, as players can anticipate potential words before attempting to select letters.
+
+Time optimization is also a key factor. Advanced players learn to balance speed with accuracy, minimizing mistakes while maximizing points. Regular practice strengthens both recall and reflexes, enabling players to handle complex daily challenges efficiently.
+
+Common Challenges and Solutions
+
+While Pips NYT is designed to be enjoyable, players often face certain challenges. One common challenge is letter overload. Large grids can be overwhelming, making it difficult to identify potential words. To overcome this, players should break the grid into smaller sections and tackle one area at a time.
+
+Another challenge is mental fatigue. Completing multiple puzzles in one session can lead to reduced focus. Players are encouraged to take short breaks and return to the game with a fresh perspective. This approach prevents frustration and maintains the enjoyment of the game.
+
+Finally, encountering unfamiliar words can be challenging but also rewarding. Using a dictionary or word reference after finishing a puzzle helps players learn new terms and expand their vocabulary for future puzzles.
+
+Community and Competitive Play
+
+Pips NYT has cultivated a dedicated community of players who share tips, strategies, and achievements. Online forums and social media groups provide platforms for discussion and collaboration. Players often post high scores, discuss difficult puzzles, and exchange advice on effective strategies.
+
+Competitive play is another exciting aspect. Many players challenge friends or join online leagues to test their skills. Competitions often feature daily or weekly leaderboards, creating a sense of excitement and motivation. Friendly rivalry encourages players to improve and explore new strategies, keeping engagement high.
+
+Tips for Daily Improvement
+
+Consistent practice is key to improvement in Pips NYT. Playing daily challenges helps players develop quicker word recognition and more efficient strategies. Setting small goals, such as finding three new words each day, can also motivate players and track progress over time.
+
+Experimenting with different approaches is beneficial. For example, starting puzzles from the corners or focusing on less obvious letter combinations can reveal hidden words. Players who vary their tactics often discover more efficient paths to high scores.
+
+Finally, reflection after each puzzle is important. Reviewing mistakes and successful moves provides insight into patterns and effective techniques. Over time, these reflections contribute to greater skill and confidence in the game.
+
+Conclusion
+
+Pips NYT offers a unique blend of entertainment, mental exercise, and strategic challenge. Its daily puzzles provide players with opportunities to enhance vocabulary, improve problem-solving skills, and engage in a stimulating activity that fits into any schedule. Whether playing casually or competitively, Pips NYT delivers an enjoyable experience for word enthusiasts of all levels.

markdown
diff --git a/doc/bugs/crash_Wide_character_in_subroutine_entry_in_search_plugin b/doc/bugs/crash_Wide_character_in_subroutine_entry_in_search_plugin.mdwn
similarity index 100%
rename from doc/bugs/crash_Wide_character_in_subroutine_entry_in_search_plugin
rename to doc/bugs/crash_Wide_character_in_subroutine_entry_in_search_plugin.mdwn

bug
diff --git a/doc/bugs/crash_Wide_character_in_subroutine_entry_in_search_plugin b/doc/bugs/crash_Wide_character_in_subroutine_entry_in_search_plugin
new file mode 100644
index 000000000..5e259526f
--- /dev/null
+++ b/doc/bugs/crash_Wide_character_in_subroutine_entry_in_search_plugin
@@ -0,0 +1,14 @@
+Building my personal website
+
+	Wide character in subroutine entry at /usr/share/perl5/IkiWiki/Plugin/search.pm line 222.
+
+Causes a build failure. perl 5.40.1, utf-8 locale.
+
+	return "U".lc(Digest::SHA::sha1_hex($page));
+
+I suppose that it's $page that contains the wide character, and it
+seems perhaps relevant that commit 4af7b2c14d548beaf09f100e7fc6efc39e9c73a2
+already did some adjacent utf8 encoding of $page.
+
+This will only affect wikis with long page lengths, 240+ characters.
+--[[Joey]]

some possible ways forward
diff --git a/doc/forum/default_commit_message.mdwn b/doc/forum/default_commit_message.mdwn
index 37f3dde63..6e1cb84fc 100644
--- a/doc/forum/default_commit_message.mdwn
+++ b/doc/forum/default_commit_message.mdwn
@@ -69,3 +69,23 @@ sub editcontent {
 
 1;
 ```
+
+> Interesting problem! Presuming you are using git, the section of the git plugin
+> you would want to influence is in [sub rcs_commit_helper](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=IkiWiki/Plugin/git.pm;h=af7695de43071149f6cb258eb42d3df1f21524b4;hb=HEAD#l689). 
+> 
+> It _might_ be possible to do this by writing a separate plugin and using the
+> [[RCS plugin hooks|https://ikiwiki.info/plugins/write/#index76h3]]. I'm not sure
+> exactly how that would interact with the Git plugin also registering those hooks.
+> You might have to wrap some, or all, of the hooks, passing through to the Git
+> plugin. You'd check and set the 'message' field of `@params` before calling the
+> Git plugin implementation of the relevant hooks.
+> 
+> Another approach would be to modify the Git plugin and carry the modified version
+> in your [[libdir|https://ikiwiki.info/plugins/install/]]. However you would then
+> have to track updates to the upstream Git plugin if/when you updated IkiWiki.
+>
+> I'd certainly consider a patch for this functionality in IkiWiki itself.
+> In theory, a solution which worked for any VCS backend would be ideal (perhaps
+> we need another hook), but that
+> might be a much harder change. I'd be surprised if we had many non-git users.
+> — [[Jon]], 2026-01-22

diff --git a/doc/forum/default_commit_message.mdwn b/doc/forum/default_commit_message.mdwn
new file mode 100644
index 000000000..37f3dde63
--- /dev/null
+++ b/doc/forum/default_commit_message.mdwn
@@ -0,0 +1,71 @@
+Hi there,
+
+I'm trying to write a small IkiWiki plugin that would set a default commit message when the user submits an edit with an empty "comment about this change" field.
+
+At the moment I managed to make this work at the form level using formbuilder hook, so the UI side is handled.
+
+However, what I really want is to enforce this at the request/commit level, even if the field is cleared manually and submitted empty.
+
+In other words, I'm looking for the proper hook or stage in IkiWiki where the final commit message is assembled and can be modified/validated reliably, rather than only manipulating the HTML form.
+
+Thanks.
+
+```perl
+#!/usr/bin/perl
+package IkiWiki::Plugin::defaultcommit;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+use Data::Dumper;
+
+sub import {
+	hook(type => "formbuilder_setup", id => "defaultcommit", call => \&formbuilder_setup);
+	hook(type => "editcontent",       id => "defaultcommit", call => \&editcontent);
+	hook(type => "getsetup",          id => "defaultcommit", call => \&getsetup);
+}
+
+sub getsetup {
+	return {
+		plugin => {
+			safe    => 1,
+			rebuild => 0,
+			section => "web",
+		},
+
+        defaultcommit_message => {
+            type        => "string",
+            example     => "web edit",
+            description => "Default commit message used when the edit comment is empty.",
+            safe        => 1,
+            rebuild     => 0,
+        },
+	};
+}
+
+sub formbuilder_setup {
+	my %params = @_;
+	my $form = $params{form};
+
+	$form->field(
+		name  => "editmessage",
+		value => "web edit",
+	) unless defined $form->field("editmessage");
+}
+
+sub editcontent {
+	my %params = @_;
+	my $cgi = $params{cgi};
+
+	my $name = "message";
+	my $c = $cgi->param($name);
+
+	if (!defined($c) || $c =~ /^\s*$/) {
+		$cgi->param($name, "web edit");
+	}
+
+	return $params{content};
+}
+
+1;
+```

Update CHANGELOG for release 3.20260201
diff --git a/CHANGELOG b/CHANGELOG
index 1a2de5e62..fc5fa5114 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,9 +1,27 @@
-ikiwiki (3.20250912) UNRELEASED; urgency=medium
+ikiwiki (3.20260201) upstream; urgency=medium
 
+  [ Joe Rayhawk ]
+  * Git.pm: Headless git branches
+
+  [ Jonathan Dowland ]
   * Add CommonMark support to mdwn.pm
   * New plugin: pagespec_aliases
+  * Warn if deprecated html5 option is set
+  * Fix ups for headless git branches
+    * new test (build) dependency: Test::Fatal
+  * Fix reproducible images with ImageMagick 7.1.2.1+
+  * loginselector: remove jquery dependency
+    * Upgrade notice: The highlighted login field is now marked
+      with the CSS class name "login_highlight", instead of having
+      its ID changed to "login_highlight".
+
+  [ Philip Searle ]
+  * Fix AutoSetup with modern readline
+
+  [ intrigeri ]
+  * po: fix incompatibility with po4a 0.73+ and HTML input files
 
- -- Jonathan Dowland <jmtd@debian.org>  Thu, 25 Sep 2025 21:07:47 +0100
+ -- Jonathan Dowland <jmtd@debian.org>  Sun, 01 Feb 2026 09:21:35 +0000
 
 ikiwiki (3.20250501) upstream; urgency=medium
 
diff --git a/doc/news/version_3.20260201.mdwn b/doc/news/version_3.20260201.mdwn
new file mode 100644
index 000000000..8e283d4a7
--- /dev/null
+++ b/doc/news/version_3.20260201.mdwn
@@ -0,0 +1,23 @@
+ikiwiki 3.20260201 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+* [ Joe Rayhawk ]
+  * Git.pm: Headless git branches
+
+* [ Jonathan Dowland ]
+  * Add CommonMark support to mdwn.pm
+  * New plugin: pagespec_aliases
+  * Warn if deprecated html5 option is set
+  * Fix ups for headless git branches
+    * new test (build) dependency: Test::Fatal
+  * Fix reproducible images with ImageMagick 7.1.2.1+
+  * loginselector: remove jquery dependency
+    * Upgrade notice: The highlighted login field is now marked
+      with the CSS class name "login_highlight", instead of having
+      its ID changed to "login_highlight".
+
+* [ Philip Searle ]
+  * Fix AutoSetup with modern readline
+
+* [ intrigeri ]
+  * po: fix incompatibility with po4a 0.73+ and HTML input files
+"""]]
diff --git a/ikiwiki.spec b/ikiwiki.spec
index dc1918a76..e30869999 100644
--- a/ikiwiki.spec
+++ b/ikiwiki.spec
@@ -1,5 +1,5 @@
 Name:           ikiwiki
-Version: 3.20250501
+Version: 3.20260201
 Release:        1%{?dist}
 Summary:        A wiki compiler
 

(correct date)
diff --git a/doc/todo/support_atom_feed_summary_tag.mdwn b/doc/todo/support_atom_feed_summary_tag.mdwn
index 03780d327..82668f878 100644
--- a/doc/todo/support_atom_feed_summary_tag.mdwn
+++ b/doc/todo/support_atom_feed_summary_tag.mdwn
@@ -34,4 +34,4 @@ index 9b056e0f4..176f91dfe 100644
         <link rel="enclosure" type="<TMPL_VAR TYPE>" href="<TMPL_VAR ENCLOSURE>" length="<TMPL_VAR LENGTH>" />
  </TMPL_IF>
 ```
-[[!tag patch]] — [[Jon]], 2026-01-16
+[[!tag patch]] — [[Jon]], 2026-01-19

simple patch
diff --git a/doc/todo/support_atom_feed_summary_tag.mdwn b/doc/todo/support_atom_feed_summary_tag.mdwn
index dd99b63c8..03780d327 100644
--- a/doc/todo/support_atom_feed_summary_tag.mdwn
+++ b/doc/todo/support_atom_feed_summary_tag.mdwn
@@ -1,2 +1,37 @@
 I would like to populate a `summary` property in the items of Atom feeds I generate via [[plugins/inline]],
 with the content I specify via [[plugins/meta]] `description`. — [[Jon]], 2026-01-16
+
+Pretty simple patch, trying this out myself for a little while:
+
+```
+diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
+index f40956821..5729945b9 100644
+--- a/IkiWiki/Plugin/inline.pm
++++ b/IkiWiki/Plugin/inline.pm
+@@ -689,6 +689,10 @@ sub genfeed ($$$$$@) {
+                );
+
+                if (exists $pagestate{$p}) {
++                       if (exists $pagestate{$p}{meta}{description}) {
++                               eval q{use HTML::Entities};
++                               $itemtemplate->param(summary => HTML::Entities::encode_entities($pagestate{$p}{meta}{description}, '<>&'));
++                       }
+                        if (exists $pagestate{$p}{meta}{guid}) {
+                                eval q{use HTML::Entities};
+                                $itemtemplate->param(guid => HTML::Entities::encode_numeric($pagestate{$p}{meta}{guid}));
+diff --git a/templates/atomitem.tmpl b/templates/atomitem.tmpl
+index 9b056e0f4..176f91dfe 100644
+--- a/templates/atomitem.tmpl
++++ b/templates/atomitem.tmpl
+@@ -32,6 +32,9 @@
+ </TMPL_IF>
+        <updated><TMPL_VAR MDATE_3339></updated>
+        <published><TMPL_VAR CDATE_3339></published>
++<TMPL_IF SUMMARY>
++       <summary><TMPL_VAR SUMMARY></summary>
++</TMPL_IF>
+ <TMPL_IF ENCLOSURE>
+        <link rel="enclosure" type="<TMPL_VAR TYPE>" href="<TMPL_VAR ENCLOSURE>" length="<TMPL_VAR LENGTH>" />
+ </TMPL_IF>
+```
+[[!tag patch]] — [[Jon]], 2026-01-16

populate atom feed item summary property with data from meta description
diff --git a/doc/todo/support_atom_feed_summary_tag.mdwn b/doc/todo/support_atom_feed_summary_tag.mdwn
new file mode 100644
index 000000000..dd99b63c8
--- /dev/null
+++ b/doc/todo/support_atom_feed_summary_tag.mdwn
@@ -0,0 +1,2 @@
+I would like to populate a `summary` property in the items of Atom feeds I generate via [[plugins/inline]],
+with the content I specify via [[plugins/meta]] `description`. — [[Jon]], 2026-01-16

backed out this in opinionated: caused deadlocks
diff --git a/doc/todo/make_suid_wrapper_optional.mdwn b/doc/todo/make_suid_wrapper_optional.mdwn
index 57d591bec..eb1e092d2 100644
--- a/doc/todo/make_suid_wrapper_optional.mdwn
+++ b/doc/todo/make_suid_wrapper_optional.mdwn
@@ -90,3 +90,6 @@ are we still saving some heavy lifting with the lock?
 > git wrapper, and extended my wrapper-wrapper to call `ikiwiki --setup… --refresh`
 > instead of the wrapper. I'm happy to sacrifice support for `wrapper_background_command`
 > in this configuration. *— [[Jon]], 2025-10-02*
+
+>> Alas I've had to back this out as I had created some deadlock situations.
+>> *— [[Jon]], 2026-01-07*

remove patch tag. The merged bit is in, the unmerged bit is not ready.
diff --git a/doc/todo/reconsider_jquery.mdwn b/doc/todo/reconsider_jquery.mdwn
index 6a7f66625..e4553bf29 100644
--- a/doc/todo/reconsider_jquery.mdwn
+++ b/doc/todo/reconsider_jquery.mdwn
@@ -49,7 +49,7 @@ sequester the stuff in one place. Or maybe a waste of time. I don't know!
 
 >> Thanks for the encouragement! I've de-jquery'd the login selector.
 >> Patches in the branch detailed in the template. If anyone is prepared
->> to give this some basic testing that would be appreciated. [[!tag patch]]
+>> to give this some basic testing that would be appreciated.
 *— [[Jon]], 2025-09-16*
 
 ----

done
diff --git a/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn b/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
index 111e55f6f..8adf3195e 100644
--- a/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
+++ b/doc/bugs/po_plugin_broken_with_po4a_0.70.mdwn
@@ -14,3 +14,5 @@ I think this patch is sufficient: <https://salsa.debian.org/jmtd/ikiwiki/-/commi
 >
 > I'm unavailable for a couple of weeks so I'll let it "soak" in Debian before committing it here.
 > *— [[Jon]], 2024-06-12*
+
+[[done]].

+tag patch
diff --git a/doc/todo/object_support.mdwn b/doc/todo/object_support.mdwn
index 527f45ad1..b005ba0c1 100644
--- a/doc/todo/object_support.mdwn
+++ b/doc/todo/object_support.mdwn
@@ -1,3 +1,4 @@
 [[!template id=gitbranch branch=GiuseppeBilotta/obj author="[[GiuseppeBilotta]]"]]
 
 I have created a rather straightforward adaptation of the `img` directive to implement `object` support. The intended use case is to allow inclusion of SVG images that use interaction and/or load external resources, which are not supported in modern browsers via the `img` tag because security. The new directive is called `obj`, and it's implemented as part of the `img` plugin. The patch implementing it is available in my `obj` branch
+[[!tag patch]]

done
diff --git a/doc/todo/headless_git_branches.mdwn b/doc/todo/headless_git_branches.mdwn
index b292f50c7..968d7e457 100644
--- a/doc/todo/headless_git_branches.mdwn
+++ b/doc/todo/headless_git_branches.mdwn
@@ -253,3 +253,4 @@ index cf7fbe9..e5bafcf 100644
 >>>> I've pushed a branch with this fix, and a corresponding test. The test
 >>>> relies upon `Test::Fatal` so before I merge I want to check that this
 >>>> isn't an egregious extra dependency for IkiWiki.  *— [[Jon]], 2025-12-04*
+>>>>> merged. [[done]]. *— [[Jon]], 2025-12-04*

branch with patch in it; considering additional Perl dependency
diff --git a/doc/todo/headless_git_branches.mdwn b/doc/todo/headless_git_branches.mdwn
index cb2624600..b292f50c7 100644
--- a/doc/todo/headless_git_branches.mdwn
+++ b/doc/todo/headless_git_branches.mdwn
@@ -246,3 +246,10 @@ index cf7fbe9..e5bafcf 100644
 >>> as having more than one file. After the patch, it wasn't. Addressing that,
 >>> and `t/git.t` is happy. I've altered the inline patch above accordingly,
 >>> and I'm closer to merging in the near future. *— [[Jon]], 2025-11-21*
+
+[[!tag patch]]
+[[!template id=gitbranch author="[[Jon]]" branch=jon/git-empty-branches]]
+
+>>>> I've pushed a branch with this fix, and a corresponding test. The test
+>>>> relies upon `Test::Fatal` so before I merge I want to check that this
+>>>> isn't an egregious extra dependency for IkiWiki.  *— [[Jon]], 2025-12-04*

Pre compressed output
diff --git a/doc/todo/Explore_pre-compression.mdwn b/doc/todo/Explore_pre-compression.mdwn
new file mode 100644
index 000000000..6103ff960
--- /dev/null
+++ b/doc/todo/Explore_pre-compression.mdwn
@@ -0,0 +1,5 @@
+Quoting from [algernon’s recent rant about ai scrapers](https://chronicles.mad-scientist.club/tales/you-probably-shouldnt-block-ai-bots-from-your-website/):
+
+> If you serve static content, unless you pre-compress it, you’d pay a huge compression tax.
+
+Ikiwiki could probably easily manage compressing content in advance if it turned out to be worthwhile. — *[[Jon]], 2025-11-26*

poll vote (actiontabs),))'..".))
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index c457cf7e2..39d2820a5 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 3 "antitheme (i.e., none)"
-4 "actiontabs"
+3 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 39d2820a5..c457cf7e2 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 3 "antitheme (i.e., none)"
-3 "actiontabs"
+4 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 8b23bbbc5..39d2820a5 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 3 "antitheme (i.e., none)"
-2 "actiontabs"
+3 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

poll vote (actiontabs)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 20588f712..8b23bbbc5 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -1,7 +1,7 @@
 Existing IkiWiki users: which [[themes]] do you use on your site?
 
 [[!poll 3 "antitheme (i.e., none)"
-1 "actiontabs"
+2 "actiontabs"
 0 "blueview"
 2 "goldtype"
 0 monochrome

fixed the test against this patch
diff --git a/doc/todo/headless_git_branches.mdwn b/doc/todo/headless_git_branches.mdwn
index 3845f9763..cb2624600 100644
--- a/doc/todo/headless_git_branches.mdwn
+++ b/doc/todo/headless_git_branches.mdwn
@@ -205,7 +205,7 @@ index cf7fbe9..e5bafcf 100644
 +	if (run_or_non_in($dir, 'git', 'show-ref', '--quiet', '--verify', '--', 'refs/heads/' . $config{gitmaster_branch}) ) {
 +		@raw_lines = run_or_die_in($dir, 'git', 'log', @opts,
 +			'--pretty=raw', '--raw', '--abbrev=40', '--always', '-c',
-+			'-r', $sha1, '--', '.');
++			'-r', $sha1, '--no-renames', '--', '.');
 +
 +		while (my $parsed = parse_diff_tree($dir, \@raw_lines)) {
 +			push @ci, $parsed;
@@ -240,3 +240,9 @@ index cf7fbe9..e5bafcf 100644
 
 >> Besides new tests, the patch breaks one of the existing ones (`t/git.pm line 101`);
 >> I'll try and investigate further why. *— [[Jon]], 2025-11-06*
+
+>>> Found it! The issue is that prior to the patch , `git log` was called with
+>>> `--no-renames`, which means the commits which have renames will be parsed
+>>> as having more than one file. After the patch, it wasn't. Addressing that,
+>>> and `t/git.t` is happy. I've altered the inline patch above accordingly,
+>>> and I'm closer to merging in the near future. *— [[Jon]], 2025-11-21*

breaks t/git.pm test line 101
diff --git a/doc/todo/headless_git_branches.mdwn b/doc/todo/headless_git_branches.mdwn
index da34c0c5b..3845f9763 100644
--- a/doc/todo/headless_git_branches.mdwn
+++ b/doc/todo/headless_git_branches.mdwn
@@ -237,3 +237,6 @@ index cf7fbe9..e5bafcf 100644
 > nice if it had tests. I guess `rcs_update` and `git_commit_info` are
 > exercised somewhat by existing tests. I'll look at that more closely as
 > I go. *— [[Jon]], 2025-10-31*
+
+>> Besides new tests, the patch breaks one of the existing ones (`t/git.pm line 101`);
+>> I'll try and investigate further why. *— [[Jon]], 2025-11-06*

diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn
index 606c8d6f8..25fd4762c 100644
--- a/doc/sandbox.mdwn
+++ b/doc/sandbox.mdwn
@@ -279,7 +279,7 @@ If you're using Debian or Ubuntu, ikiwiki is an apt-get install ikiwiki away. If
 
 You may also want to try out IkiWiki in a container.
 
-This line was added using the web interface
+This line was added using the web interface!
 > Indeed
 
 [[!table data="""

started reviewing
diff --git a/doc/todo/headless_git_branches.mdwn b/doc/todo/headless_git_branches.mdwn
index 6c60dc947..da34c0c5b 100644
--- a/doc/todo/headless_git_branches.mdwn
+++ b/doc/todo/headless_git_branches.mdwn
@@ -230,3 +230,10 @@ index cf7fbe9..e5bafcf 100644
  }
  
 </pre>
+
+> I hadn't seen this TODO until now. I agree it's worth fixing these cases.
+> I've hit some of them in [[opinionated ikiwiki|containers]]. Kudos for
+> persevering with this for so long! I've started reviewing. It would be
+> nice if it had tests. I guess `rcs_update` and `git_commit_info` are
+> exercised somewhat by existing tests. I'll look at that more closely as
+> I go. *— [[Jon]], 2025-10-31*

todo: headless git: modernize patch
diff --git a/doc/todo/headless_git_branches.mdwn b/doc/todo/headless_git_branches.mdwn
index d9bb38099..6c60dc947 100644
--- a/doc/todo/headless_git_branches.mdwn
+++ b/doc/todo/headless_git_branches.mdwn
@@ -176,3 +176,57 @@ This seems fine to apply. --[[Joey]]
 
 > Hooray!
 > --jrayhawk
+
+## 2025 Update
+
+Portions awaiting merging updated for recent versions of Ikiwiki:
+
+<pre>
+diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm
+index cf7fbe9..e5bafcf 100644
+--- a/IkiWiki/Plugin/git.pm
++++ b/IkiWiki/Plugin/git.pm
+@@ -520,17 +520,21 @@ sub git_commit_info ($$;$) {
+ 
+ 	my @opts;
+ 	push @opts, "--max-count=$num" if defined $num;
+-
+-	my @raw_lines = run_or_die_in($dir, 'git', 'log', @opts,
+-		'--pretty=raw', '--raw', '--abbrev=40', '--always', '-c',
+-		'-r', $sha1, '--no-renames', '--', '.');
+-
++	my @raw_lines;
+ 	my @ci;
+-	while (my $parsed = parse_diff_tree($dir, \@raw_lines)) {
+-		push @ci, $parsed;
+-	}
++        
++	# Test to see if branch actually exists yet.
++	if (run_or_non_in($dir, 'git', 'show-ref', '--quiet', '--verify', '--', 'refs/heads/' . $config{gitmaster_branch}) ) {
++		@raw_lines = run_or_die_in($dir, 'git', 'log', @opts,
++			'--pretty=raw', '--raw', '--abbrev=40', '--always', '-c',
++			'-r', $sha1, '--', '.');
++
++		while (my $parsed = parse_diff_tree($dir, \@raw_lines)) {
++			push @ci, $parsed;
++		}
+ 
+-	warn "Cannot parse commit info for '$sha1' commit" if !@ci;
++		warn "Cannot parse commit info for '$sha1' commit" if !@ci;
++	};
+ 
+ 	return wantarray ? @ci : $ci[0];
+ }
+@@ -601,7 +605,10 @@ sub rcs_update () {
+ 	ensure_committer($config{srcdir});
+ 
+ 	if (length $config{gitorigin_branch}) {
+-		run_or_cry_in($config{srcdir}, 'git', 'pull', '--no-rebase', '--prune', $config{gitorigin_branch});
++		run_or_cry_in($config{srcdir}, 'git', 'fetch', '--prune', $config{gitorigin_branch});
++		if (run_or_non_in($config{srcdir}, 'git', 'show-ref', '--quiet', '--verify', '--', 'refs/remotes/' . $config{gitorigin_branch} . '/' . $config{gitmaster_branch}) ) {
++			run_or_cry_in($config{srcdir}, 'git', 'merge', '--ff-only', $config{gitorigin_branch} . '/' . $config{gitmaster_branch});
++		}
+ 	}
+ }
+ 
+</pre>

I agree with this change, need to do a bit more checking
diff --git a/doc/bugs/meta_plugin_should_not_add_alternate_stylesheets_and_title_by_default.mdwn b/doc/bugs/meta_plugin_should_not_add_alternate_stylesheets_and_title_by_default.mdwn
index 314597cb5..7841fef6f 100644
--- a/doc/bugs/meta_plugin_should_not_add_alternate_stylesheets_and_title_by_default.mdwn
+++ b/doc/bugs/meta_plugin_should_not_add_alternate_stylesheets_and_title_by_default.mdwn
@@ -34,3 +34,36 @@ default:
 If we agree on this proposal, I'm willing to provide a patch.
 
 This applies to all versions since c8b4ba3 and until today.
+
+*— sajolida, 2015*
+
+----
+
+I've just come across this bug for the first time whilst checking to see
+if there'd been any discussion about IkiWiki supporting alternate stylesheets.
+I hadn't realised the meta plugin had any kind of support for this. Sorry
+for replying over a decade later…
+
+If the intention indeed was to allow applying some additional style to a
+single page (or sub-set of a wiki), setting "alternate" is a strange way
+to go about it. As I understand it, if the user's browser provides a way
+of selecting an alternate stylesheet, upon selection it will *de-activate*
+the non-alternate sheet. (That's at least how it worked when I played
+about with alternate stylesheets in the late 90s). For this use-case, I'd
+agree that setting rel=stylesheet, such that you could use meta to provide
+_additional_ styling, made much more sense.
+
+There's another use-case for alternate stylesheets: providing a site-wide
+alternative theme. We could, for example, have the default theme for _this_
+site continue to be the "antitheme", but provide actiontabs as an alternate.
+That would not be possible with meta as-is, though, without also finishing
+[[todo/allow site-wide meta definitions]]. To support that use-case, I
+think it would make more sense to implement alternative site-wide theme
+support in another plugin or elsewhere than meta, at least.
+
+So in conclusion I agree with what you suggest, but I need to do a bit of
+checking to see what the impact of changing it over would be for existing
+users, and whether anyone is likely to be bitten by it. I suspect nobody
+is using this feature.
+
+*— [[Jon]], 2025-10-21*

fixes, tweaks, notes
diff --git a/doc/todo/make_suid_wrapper_optional.mdwn b/doc/todo/make_suid_wrapper_optional.mdwn
index ffc070e29..57d591bec 100644
--- a/doc/todo/make_suid_wrapper_optional.mdwn
+++ b/doc/todo/make_suid_wrapper_optional.mdwn
@@ -34,18 +34,18 @@ wrapper.
 
 ## stuff the cgi wrapper does
 
-0. [[genwrapper hooks|plugins/write]] (used by at least cvs and [[git]])
-1. blanks the environment and selectively adds a set of variables
+1. [[genwrapper hooks|plugins/write]] (used by at least cvs and [[git]])
+2. blanks the environment and selectively adds a set of variables
    back
-2. adds an encoding of the `%config` hash to the variable
+3. adds an encoding of the `%config` hash to the variable
    `WRAPPED_OPTIONS` (with `'cgi' => 1` set)
-3. drops real GID and real UID (the webserver's) by overwriting
+4. drops real GID and real UID (the webserver's) by overwriting
    them with the effective values (wrapper file owner)
-4. handles the logic for `CGI_OVERLOAD_DELAY`
-5. takes the CGI lock
-6. handles `wrapper_background_command` (which means handling
+5. handles the logic for `CGI_OVERLOAD_DELAY`
+6. takes the CGI lock
+7. handles `wrapper_background_command` (which means handling
    `git_wrapper_background_command`) (which are not yet documented)
-7. calls `ikiwiki` with no command-line arguments
+8. calls `ikiwiki` with no command-line arguments
 
 `ikiwiki`, called with no command-line arguments, does
 
@@ -54,8 +54,8 @@ wrapper.
 3. checkconfig
 4. checks `$config{cgi}`, evals `IkiWiki::CGI::cgi()`
 
-Without the CGI wrapper, we might not need 1-3 (from the first list above),
-but we would need to implement 4-6, and either set up `WRAPPED_OPTIONS` or
+Without the CGI wrapper, we might not need 1-4 (from the first list above),
+but we would need to implement 5-7, and either set up `WRAPPED_OPTIONS` or
 otherwise pass the necessary arguments.
 
 I wonder if we could move 4-6 from list 1 into `IkiWiki::CGI::cgi()`. I
@@ -67,7 +67,11 @@ are we still saving some heavy lifting with the lock?
 
 *— [[Jon]], 2025-10-02*
 
-## stuff the post-receive hook does
+> note that `IkiWiki::CGI::cgi()` takes the write lock (`lockwiki()`)
+> fairly early on, although _after_ CGI hooks. *— [[Jon]], 2025-10-07*
+
+
+## stuff the post-update hook does
 
 1. takes the commitlock
 2. clears the environment and adds back `PATH`,`HOME` and `WRAPPED_OPTIONS`
@@ -80,3 +84,9 @@ are we still saving some heavy lifting with the lock?
 
 *— [[Jon]], 2025-10-04*
 
+> Replacing the post-update hook is relatively easy. I'm experimenting
+> with this in *opinionated-ikiwiki*, which already wraps the wrapper to
+> do additional container-specific stuff: I've disabled generating the
+> git wrapper, and extended my wrapper-wrapper to call `ikiwiki --setup… --refresh`
+> instead of the wrapper. I'm happy to sacrifice support for `wrapper_background_command`
+> in this configuration. *— [[Jon]], 2025-10-02*

remove wikilinks: no CVS page! and no plugins/git
diff --git a/doc/todo/make_suid_wrapper_optional.mdwn b/doc/todo/make_suid_wrapper_optional.mdwn
index 995abdf33..ffc070e29 100644
--- a/doc/todo/make_suid_wrapper_optional.mdwn
+++ b/doc/todo/make_suid_wrapper_optional.mdwn
@@ -34,7 +34,7 @@ wrapper.
 
 ## stuff the cgi wrapper does
 
-0. [[genwrapper hooks|plugins/write]] (used by at least [[plugins/cvs]] and [[plugins/git]])
+0. [[genwrapper hooks|plugins/write]] (used by at least cvs and [[git]])
 1. blanks the environment and selectively adds a set of variables
    back
 2. adds an encoding of the `%config` hash to the variable

header levels
diff --git a/doc/todo/make_suid_wrapper_optional.mdwn b/doc/todo/make_suid_wrapper_optional.mdwn
index 6275f6239..995abdf33 100644
--- a/doc/todo/make_suid_wrapper_optional.mdwn
+++ b/doc/todo/make_suid_wrapper_optional.mdwn
@@ -67,7 +67,7 @@ are we still saving some heavy lifting with the lock?
 
 *— [[Jon]], 2025-10-02*
 
-### stuff the post-receive hook does
+## stuff the post-receive hook does
 
 1. takes the commitlock
 2. clears the environment and adds back `PATH`,`HOME` and `WRAPPED_OPTIONS`

post-receive hook
diff --git a/doc/todo/make_suid_wrapper_optional.mdwn b/doc/todo/make_suid_wrapper_optional.mdwn
index 6d9f7b187..6275f6239 100644
--- a/doc/todo/make_suid_wrapper_optional.mdwn
+++ b/doc/todo/make_suid_wrapper_optional.mdwn
@@ -66,3 +66,17 @@ problem Today.  If we loaded Perl and got as far as `IkiWiki::CGI::cgi()`,
 are we still saving some heavy lifting with the lock?
 
 *— [[Jon]], 2025-10-02*
+
+### stuff the post-receive hook does
+
+1. takes the commitlock
+2. clears the environment and adds back `PATH`,`HOME` and `WRAPPED_OPTIONS`
+   (`'cgi' => 0`)
+3. drops real GID and real UID (the webserver's) by overwriting
+   them with the effective values (wrapper file owner)
+4. handles `wrapper_background_command` (which means handling
+   `git_wrapper_background_command`) (which are not yet documented)
+5. calls `ikiwiki` with no command-line arguments
+
+*— [[Jon]], 2025-10-04*
+

I forgot genwrappers
diff --git a/doc/todo/make_suid_wrapper_optional.mdwn b/doc/todo/make_suid_wrapper_optional.mdwn
index fc59647ff..6d9f7b187 100644
--- a/doc/todo/make_suid_wrapper_optional.mdwn
+++ b/doc/todo/make_suid_wrapper_optional.mdwn
@@ -34,6 +34,7 @@ wrapper.
 
 ## stuff the cgi wrapper does
 
+0. [[genwrapper hooks|plugins/write]] (used by at least [[plugins/cvs]] and [[plugins/git]])
 1. blanks the environment and selectively adds a set of variables
    back
 2. adds an encoding of the `%config` hash to the variable

lock and load management
diff --git a/doc/todo/make_suid_wrapper_optional.mdwn b/doc/todo/make_suid_wrapper_optional.mdwn
index 966c1ac1f..fc59647ff 100644
--- a/doc/todo/make_suid_wrapper_optional.mdwn
+++ b/doc/todo/make_suid_wrapper_optional.mdwn
@@ -57,6 +57,11 @@ Without the CGI wrapper, we might not need 1-3 (from the first list above),
 but we would need to implement 4-6, and either set up `WRAPPED_OPTIONS` or
 otherwise pass the necessary arguments.
 
-I wonder if we could move 4-6 from list 1 into `IkiWiki::CGI::cgi()`.
+I wonder if we could move 4-6 from list 1 into `IkiWiki::CGI::cgi()`. I
+guess it depends what the lock is for. It's not just a write lock, it's
+part of load management. At some point I guess mutexing the loading of
+the `perl` interpreter was worthwhile. I wonder if that's as much of a
+problem Today.  If we loaded Perl and got as far as `IkiWiki::CGI::cgi()`,
+are we still saving some heavy lifting with the lock?
 
 *— [[Jon]], 2025-10-02*

stuff the CGI wrapper does
diff --git a/doc/todo/make_suid_wrapper_optional.mdwn b/doc/todo/make_suid_wrapper_optional.mdwn
index 959034e6a..966c1ac1f 100644
--- a/doc/todo/make_suid_wrapper_optional.mdwn
+++ b/doc/todo/make_suid_wrapper_optional.mdwn
@@ -31,3 +31,32 @@ wrapper.
 > under a site-specific user account. Many of my sites do this.
 >
 > -- [[schmonz]]
+
+## stuff the cgi wrapper does
+
+1. blanks the environment and selectively adds a set of variables
+   back
+2. adds an encoding of the `%config` hash to the variable
+   `WRAPPED_OPTIONS` (with `'cgi' => 1` set)
+3. drops real GID and real UID (the webserver's) by overwriting
+   them with the effective values (wrapper file owner)
+4. handles the logic for `CGI_OVERLOAD_DELAY`
+5. takes the CGI lock
+6. handles `wrapper_background_command` (which means handling
+   `git_wrapper_background_command`) (which are not yet documented)
+7. calls `ikiwiki` with no command-line arguments
+
+`ikiwiki`, called with no command-line arguments, does
+
+1. `getconfig` which populates from `WRAPPED_OPTIONS`
+2. loadplugins
+3. checkconfig
+4. checks `$config{cgi}`, evals `IkiWiki::CGI::cgi()`
+
+Without the CGI wrapper, we might not need 1-3 (from the first list above),
+but we would need to implement 4-6, and either set up `WRAPPED_OPTIONS` or
+otherwise pass the necessary arguments.
+
+I wonder if we could move 4-6 from list 1 into `IkiWiki::CGI::cgi()`.
+
+*— [[Jon]], 2025-10-02*

partly done
diff --git a/doc/todo/reconsider_jquery.mdwn b/doc/todo/reconsider_jquery.mdwn
index f8085168b..6a7f66625 100644
--- a/doc/todo/reconsider_jquery.mdwn
+++ b/doc/todo/reconsider_jquery.mdwn
@@ -51,3 +51,8 @@ sequester the stuff in one place. Or maybe a waste of time. I don't know!
 >> Patches in the branch detailed in the template. If anyone is prepared
 >> to give this some basic testing that would be appreciated. [[!tag patch]]
 *— [[Jon]], 2025-09-16*
+
+----
+
+I've merged the de-jqueryification of `loginselector` after performing
+some more testing. Next up, `attachment`… *— [[Jon]], 2025-09-29*

done -- remove contrib copy of plugin docs
diff --git a/doc/plugins/contrib/pagespec_alias.mdwn b/doc/plugins/contrib/pagespec_alias.mdwn
deleted file mode 100644
index cb642ad33..000000000
--- a/doc/plugins/contrib/pagespec_alias.mdwn
+++ /dev/null
@@ -1,28 +0,0 @@
-[[!template id=plugin name=pagespec_alias author="[[Jon]]"]]
-[[!tag type/meta]]
-
-The pagespec_alias plugin allows the administrator(s) of a wiki to define
-[[PageSpec]] aliases: short names for PageSpecs to ease re-use.
-
-Within the setup file, the `pagespec_aliases` value is treated as a list
-of key/value pairs.  The keys define alias names, the values the pagespecs
-to which they refer.
-
-For example:
-
-    pagespec_aliases:
-       image: "*.png or *.jpg or *.jpeg or *.gif or *.ico"
-       helper: "*.css or *.js"
-       boring: "image() or helper() or internal(*)"
-
-With the above, you could use the pagespec aliases such as 
-
-    \[[!map pages="!boring()"]]
-
-To define a site map which excluded various page names which might be
-uninteresting to include in a site map.
-
-
-## Download
- 
- * <https://github.com/jmtd/ikiwiki/blob/pagespec-alias/IkiWiki/Plugin/pagespec_alias.pm>
diff --git a/doc/plugins/contrib/pagespec_alias/discussion.mdwn b/doc/plugins/contrib/pagespec_alias/discussion.mdwn
deleted file mode 100644
index 09cf77219..000000000
--- a/doc/plugins/contrib/pagespec_alias/discussion.mdwn
+++ /dev/null
@@ -1,16 +0,0 @@
-I've submitted a couple of patches in [this pull request](https://github.com/jmtd/ikiwiki/pull/1).
-The first passes along whatever parameters are being supplied to the pagespec evaluation
-(without which, specs like `user(alice)` don't work).
-
-The second changes the "example" returned by `getsetup` to be an actual map, since I saw
-that `--dumpsetup` can make use of that to produce a syntactically correct map example
-in the YAML config file. An earlier commit comment suggested that once was a problem,
-but it doesn't seem to be one now.
-
-Only later did I notice this [[earlier discussion|todo/pagespec_aliases]] suggesting
-that the problem with a map might have been in websetup - which I'm not using, so I don't
-know if it would still be a problem there.
-
-[[jcflack]]
-
-> With apologies for the delay, jcflack's patches have now been merged. — [[Jon]]
diff --git a/doc/todo/pagespec_aliases.mdwn b/doc/todo/pagespec_aliases.mdwn
index 54e252956..768d11334 100644
--- a/doc/todo/pagespec_aliases.mdwn
+++ b/doc/todo/pagespec_aliases.mdwn
@@ -241,3 +241,5 @@ with IkiWiki's auto-mirror-pull, the branch is here:
 > Scratch that, more work needed ☹ *— [[Jon]], 2021-01-11*
 
 >> This is really ready now. *— [[Jon]], 2021-01-13*
+
+[[done]]! *— [[Jon]], 2025-09-25*

document comments_allowformats
diff --git a/doc/plugins/comments.mdwn b/doc/plugins/comments.mdwn
index 50a99415f..83bbee7da 100644
--- a/doc/plugins/comments.mdwn
+++ b/doc/plugins/comments.mdwn
@@ -41,6 +41,11 @@ There are some global options for the setup file:
   specify a name for themselves, and the \[[!meta author]] and
   \[[!meta authorurl]] directives will not be overridden by the comments
   plugin
+* `comments_allowformats`: if defined (default undefined), comments must
+  be written in a format within the specified string. The corresponding
+  format plugin must also be enabled. E.g. `comments_allowformats: txt mdwn`
+  restricts comments to [[plain text|plugins/txt]] and [[markdown|plugins/mdwn]],
+  assuming those plugins are enabled.
 
 ## comment moderation
 

update config example to use YAML-format, not older format
diff --git a/doc/plugins/anonok.mdwn b/doc/plugins/anonok.mdwn
index 407012b54..d3dbe497b 100644
--- a/doc/plugins/anonok.mdwn
+++ b/doc/plugins/anonok.mdwn
@@ -16,4 +16,4 @@ The plugin has a configuration setting, `anonok_pagespec`. This
 If you're using the [[comments]] plugin, you can allow anonymous comments
 to be posted by setting:
 
-	anonok_pagespec => "postcomment(*)"
+	anonok_pagespec: postcomment(*)

poll vote (goldtype.),..'),",)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index cf4474f81..20588f712 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -3,7 +3,7 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 [[!poll 3 "antitheme (i.e., none)"
 1 "actiontabs"
 0 "blueview"
-3 "goldtype"
+2 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"
 ]]

poll vote (goldtype)
diff --git a/doc/forum/theme_poll.mdwn b/doc/forum/theme_poll.mdwn
index 20588f712..cf4474f81 100644
--- a/doc/forum/theme_poll.mdwn
+++ b/doc/forum/theme_poll.mdwn
@@ -3,7 +3,7 @@ Existing IkiWiki users: which [[themes]] do you use on your site?
 [[!poll 3 "antitheme (i.e., none)"
 1 "actiontabs"
 0 "blueview"
-2 "goldtype"
+3 "goldtype"
 0 monochrome
 5 "other, including heavily modified versions of the above"
 ]]

pagespec_alias: document plugin
diff --git a/doc/plugins/pagespec_alias.mdwn b/doc/plugins/pagespec_alias.mdwn
new file mode 100644
index 000000000..2f0175dc6
--- /dev/null
+++ b/doc/plugins/pagespec_alias.mdwn
@@ -0,0 +1,23 @@
+[[!template id=plugin name=pagespec_alias author="[[Jon]]"]]
+[[!tag type/meta]]
+
+The pagespec_alias plugin allows the administrator(s) of a wiki to define
+[[PageSpec]] aliases: short names for PageSpecs to ease re-use.
+
+Within the setup file, the `pagespec_aliases` value is treated as a list
+of key/value pairs.  The keys define alias names, the values the pagespecs
+to which they refer.
+
+For example:
+
+    pagespec_aliases:
+       image: "*.png or *.jpg or *.jpeg or *.gif or *.ico"
+       helper: "*.css or *.js"
+       boring: "image() or helper() or internal(*)"
+
+With the above, you could use the pagespec aliases such as 
+
+    \[[!map pages="!boring()"]]
+
+To define a site map which excluded various page names which might be
+uninteresting to include in a site map.