Recent changes to this wiki:

diff --git a/doc/bugs/git_plugin_should_support_force-pushed_src_repos.mdwn b/doc/bugs/git_plugin_should_support_force-pushed_src_repos.mdwn
new file mode 100644
index 000000000..a9358dbc0
--- /dev/null
+++ b/doc/bugs/git_plugin_should_support_force-pushed_src_repos.mdwn
@@ -0,0 +1,8 @@
+If you force-push to a source repository that is the configured git repository for the ikiwiki srcdir,
+rebuilding the wiki (after the hook) fails with
+
+    fatal: refusing to merge unrelated histories
+    'git pull --prune origin' failed:  at /usr/local/share/perl/5.28.1/IkiWiki/Plugin/git.pm line 251.
+
+I think that under some circumstances ikiwiki should support this. Perhaps via configuration options
+for the git plugin. — [[Jon]]

git.pm should have a doc page
diff --git a/doc/bugs/git_plugin_should_have_a_doc_page.mdwn b/doc/bugs/git_plugin_should_have_a_doc_page.mdwn
new file mode 100644
index 000000000..a1da9bc5b
--- /dev/null
+++ b/doc/bugs/git_plugin_should_have_a_doc_page.mdwn
@@ -0,0 +1,3 @@
+`git.pm` is a plugin but lacks a page at [[plugin/git|doc/plugin]]. this would be a good place to
+cover the configuration options it exposes via `getsetup`. — [[Jon]]
+ 

Added a comment
diff --git a/doc/forum/Working_docker_images/comment_3_7d0944c37fdde5772f367de88976c89b._comment b/doc/forum/Working_docker_images/comment_3_7d0944c37fdde5772f367de88976c89b._comment
new file mode 100644
index 000000000..f611e900c
--- /dev/null
+++ b/doc/forum/Working_docker_images/comment_3_7d0944c37fdde5772f367de88976c89b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="jmtd"
+ avatar="http://cdn.libravatar.org/avatar/2a3bcb34947fceef61560bd8a2931957"
+ subject="comment 3"
+ date="2020-04-06T09:31:46Z"
+ content="""
+There's also two other ikiwiki-in-docker things linked to from [[setup]] but I haven't tried them. — [[Jon]]
+"""]]

problem with the creation_before page
diff --git a/doc/bugs/cannot_make_creation__95__before_work.mdwn b/doc/bugs/cannot_make_creation__95__before_work.mdwn
new file mode 100644
index 000000000..f9323e611
--- /dev/null
+++ b/doc/bugs/cannot_make_creation__95__before_work.mdwn
@@ -0,0 +1,31 @@
+I have this in my `ikiwiki.setup`:
+
+    comments_closed_pagespec: 'creation_before(comment_forbid_before)'
+
+I was hoping it would forbid comments on pages older than `comment_forbid_before.mdwn`. I created the page, of which you can see a rendering here:
+
+https://anarc.at/comment_forbid_before/
+
+Notice how ikiwiki correctly parsed the `meta` directive to make the page as created about two years ago, as I have put this on top of `comment_forbid_before.mdwn`:
+
+    [[!meta date="2018-04-05"]]
+
+Yet the following page, which gets mysteriously respammed all the time, keeps on getting spammed anyways:
+
+https://anarc.at/blog/2006-07-04-vol-et-ralentissement-de-ce-blog/
+
+I have since them removed the spam, and worked around the problem by doing this configuration instead:
+
+    comments_closed_pagespec: 'creation_before(comment_forbid_before) or creation_year(2006)'
+
+But later pages, "created before" the flag page, still have comments allowed:
+
+https://anarc.at/blog/2017-07-03-free-software-activities-june-2017/
+
+Now I know that I could list every year my blog was in operation until now in that pagespec to workaround this, but I figured it would be nicer to fix this bug.
+
+Alternatively, it would be great to have a `creation_before(2 years ago)` or `creation_older_than(2 years)` to do what I actually want here, which is to keep spam to newer pages, to reduce the attack surface.
+
+Thanks!
+
+-- [[anarcat]]

Added a comment
diff --git a/doc/forum/Working_docker_images/comment_2_4c93b88605070283bccbd643f17c32ae._comment b/doc/forum/Working_docker_images/comment_2_4c93b88605070283bccbd643f17c32ae._comment
new file mode 100644
index 000000000..0c4caf6fb
--- /dev/null
+++ b/doc/forum/Working_docker_images/comment_2_4c93b88605070283bccbd643f17c32ae._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="jmtd"
+ avatar="http://cdn.libravatar.org/avatar/2a3bcb34947fceef61560bd8a2931957"
+ subject="comment 2"
+ date="2020-04-03T10:42:54Z"
+ content="""
+Here we are. I present \"Opinionated IkiWiki\" (in a box). Sources
+https://github.com/jmtd/opinionated-ikiwiki
+Images
+https://quay.io/repository/jdowland/opinionated-ikiwiki
+
+e.g. `docker pull docker pull quay.io/jdowland/opinionated-ikiwiki:latest`
+
+Feedback welcome, best perhaps as GitHub issues on that GitHub project, but I'll answer questions here or in email too. — [[Jon]]
+"""]]

Added a comment
diff --git a/doc/forum/Working_docker_images/comment_1_9fc065c5043954e04b6edeb80213d6e2._comment b/doc/forum/Working_docker_images/comment_1_9fc065c5043954e04b6edeb80213d6e2._comment
new file mode 100644
index 000000000..80ba09d84
--- /dev/null
+++ b/doc/forum/Working_docker_images/comment_1_9fc065c5043954e04b6edeb80213d6e2._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="jmtd"
+ avatar="http://cdn.libravatar.org/avatar/2a3bcb34947fceef61560bd8a2931957"
+ subject="comment 1"
+ date="2020-04-02T09:20:13Z"
+ content="""
+Coincidentally I was just dusting off an old ikiwiki-in-Docker setup I built 5 years ago - https://github.com/jmtd/debian-docker/tree/ikiwiki
+I'll push an updated version and some images sometime today. — [[Jon]]
+"""]]

report bug
diff --git a/doc/bugs/inactive_python_plugins_cause_error_output_when_python_interpreter_is_missing.mdwn b/doc/bugs/inactive_python_plugins_cause_error_output_when_python_interpreter_is_missing.mdwn
new file mode 100644
index 000000000..f62f9738b
--- /dev/null
+++ b/doc/bugs/inactive_python_plugins_cause_error_output_when_python_interpreter_is_missing.mdwn
@@ -0,0 +1,13 @@
+`/usr/local/lib/ikiwiki/plugins/rst` and `/usr/local/lib/ikiwiki/plugins/proxy.py` provoke the following error output during some CGI operations if there is no python3 interpreter available
+
+    /usr/bin/env: ‘python3’: No such file or directory
+
+the CGI also *sporadically* dies (with signal 13, => HTTP error 500). I don't understand why this is sporadic though.
+
+This relates to [[autosetup python warnings]] and some other bugs.
+
+This happens even if `rst` and `proxy.py` are not active on the wiki (as they aren't, by default).
+
+A hacky quick solution might be to rename rst rst.py and for IkiWiki to avoid scanning plugins that end in .py if they are not enabled.
+
+— [[Jon]]

diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn
index 27e2acc9e..5e3966da0 100644
--- a/doc/sandbox.mdwn
+++ b/doc/sandbox.mdwn
@@ -3,7 +3,7 @@
 Why doesn't the following work?..
 [[!color  foreground=white background=#ff0000 text="White text on red background"]]
 
-Sure it is.
+Sure it is.sss
 ===========
 
 I hope baby.

New thread about working docker imges
diff --git a/doc/forum/Working_docker_images.mdwn b/doc/forum/Working_docker_images.mdwn
new file mode 100644
index 000000000..a24bcda00
--- /dev/null
+++ b/doc/forum/Working_docker_images.mdwn
@@ -0,0 +1,3 @@
+Hi,
+
+Does anyone use a docker image to run Ikiwiki? The most updated image that I found has some issues, such as only working during the first start of the container and always failing to start on subsequent runs. So was wondering if anyone knew of working images.

link to my toc patch
diff --git a/doc/plugins/toc/discussion.mdwn b/doc/plugins/toc/discussion.mdwn
index e704eee55..775288800 100644
--- a/doc/plugins/toc/discussion.mdwn
+++ b/doc/plugins/toc/discussion.mdwn
@@ -5,6 +5,8 @@ template (such as placing the page title in an `<h1>`), the toc plugin
 picks it up.  I suppose it parses the entire page rather than just the
 rendered content. --[[JasonBlevins]]
 
+> I fixed this in a patch to the toc module, see [[todo/allow_toc_to_skip_entries]]. -- [[anarcat]]
+
 Why doesn't the TOC appear in the edit page preview?  It only appears when the page is finally rendered.  This makes it somewhat difficult to organize headings, saving & re-editing all the time.  My user page currently has a toc to play with: --[[sabr]]
 
 > Fixed. --[[Joey]]

there is a patch here
diff --git a/doc/todo/allow_toc_to_skip_entries.mdwn b/doc/todo/allow_toc_to_skip_entries.mdwn
index 45137d7a2..dcfb5fd04 100644
--- a/doc/todo/allow_toc_to_skip_entries.mdwn
+++ b/doc/todo/allow_toc_to_skip_entries.mdwn
@@ -26,3 +26,5 @@ That is hard to fix without changing the theme significantly. ikiwiki themes fre
 There should really be a way to skip those entries. The patch mentioned here does this by doing a tiny modification to `toc.pm` to skip headings with the magic `nocount` class. The naming comes from [Phil Archer's Automatic Heading Numbering CSS hack](https://philarcher.org/diary/2013/headingnumbers) and could be changed, but it seemed logical to me. The result can be seen in action in: <https://anarc.at/blog/2019-11-20-file-monitoring-tools/>.
 
 Thank you for your consideration.
+
+[[!tag patch]]

add way to skip toc entries
diff --git a/doc/todo/allow_toc_to_skip_entries.mdwn b/doc/todo/allow_toc_to_skip_entries.mdwn
new file mode 100644
index 000000000..45137d7a2
--- /dev/null
+++ b/doc/todo/allow_toc_to_skip_entries.mdwn
@@ -0,0 +1,28 @@
+[[!template  id=gitbranch branch=anarcat/toc-skip author="[[anarcat]]"]]
+
+a long-standing irritationf the [[plugins/toc]] plugin is that it counts *all* headings in the document. since it's frequently the case that themes will use the first H1 to show a title (and that there's no way to "bump" the level of headings generated by the markup), you often end up with a table of contents that looks like this:
+
+ * TITLE
+ * Heading 1
+   * Subheading 1
+ * Heading 2
+
+... even though the content is actually something like:
+
+    # Heading 1
+    ## Subheading 2
+    # Heading 2
+
+That's a bit confusing. I would expect the table of contents to only have:
+
+ * Heading 1
+   * Subheading 1
+ * Heading 2
+
+... and somehow ignore my title.
+
+That is hard to fix without changing the theme significantly. ikiwiki themes frequently workaround that problem by showing the title using another markup element, generally a `<span>`. But I find that confusing as well, because `<span>` is a generic, non-semantic element, which, even worse, is by default not a "block" like a heading. In bootstrap, for example, you would need to copy all the logic surrounding headings to a theme customization to make it work, but that leads to a lot of CSS duplication.
+
+There should really be a way to skip those entries. The patch mentioned here does this by doing a tiny modification to `toc.pm` to skip headings with the magic `nocount` class. The naming comes from [Phil Archer's Automatic Heading Numbering CSS hack](https://philarcher.org/diary/2013/headingnumbers) and could be changed, but it seemed logical to me. The result can be seen in action in: <https://anarc.at/blog/2019-11-20-file-monitoring-tools/>.
+
+Thank you for your consideration.

Restore index page
This reverts commit 8d3873cceafe7fe3e888b5e8e8c82ca59686bfa3
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 8b1378917..e0e401656 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -1 +1,37 @@
+[[!template id=links]]
+
+Ikiwiki is a **wiki compiler**. It converts wiki pages into HTML pages
+suitable for publishing on a website. Ikiwiki stores pages and history in a
+[[revision_control_system|rcs]] such as [[Subversion|rcs/svn]] or [[rcs/Git]].
+There are many other [[features]], including support for
+[[blogging|blog]] and [[podcasting|podcast]], as well as a large
+array of [[plugins]].
+
+Alternatively, think of ikiwiki as a particularly flexible static
+site generator with some dynamic features.
+
+
+
+## using ikiwiki
+
+[[Setup]] has a tutorial for setting up ikiwiki, or you can read the
+[[man_page|usage]]. There are some [[examples]] of things you can do
+with ikiwiki, and some [[tips]].  Basic documentation for ikiwiki plugins
+and syntax is provided [[here|ikiwiki]]. The [[forum]] is open for
+discussions.
+
+All wikis are supposed to have a [[sandbox]], so this one does too.
+
+This site generally runs the latest release of ikiwiki; currently, it runs
+ikiwiki [[!version ]].
+
+## developer resources
+
+The [[RoadMap]] describes where the project is going.
+[[Bugs]], [[TODO]] items, [[wishlist]] items, and [[patches|patch]]
+can be submitted and tracked using this wiki.
+
+Ikiwiki is developed by [[Joey]] and many contributors,
+and is [[FreeSoftware]].
+
 

diff --git a/doc/index.mdwn b/doc/index.mdwn
index e0e401656..8b1378917 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -1,37 +1 @@
-[[!template id=links]]
-
-Ikiwiki is a **wiki compiler**. It converts wiki pages into HTML pages
-suitable for publishing on a website. Ikiwiki stores pages and history in a
-[[revision_control_system|rcs]] such as [[Subversion|rcs/svn]] or [[rcs/Git]].
-There are many other [[features]], including support for
-[[blogging|blog]] and [[podcasting|podcast]], as well as a large
-array of [[plugins]].
-
-Alternatively, think of ikiwiki as a particularly flexible static
-site generator with some dynamic features.
-
-
-
-## using ikiwiki
-
-[[Setup]] has a tutorial for setting up ikiwiki, or you can read the
-[[man_page|usage]]. There are some [[examples]] of things you can do
-with ikiwiki, and some [[tips]].  Basic documentation for ikiwiki plugins
-and syntax is provided [[here|ikiwiki]]. The [[forum]] is open for
-discussions.
-
-All wikis are supposed to have a [[sandbox]], so this one does too.
-
-This site generally runs the latest release of ikiwiki; currently, it runs
-ikiwiki [[!version ]].
-
-## developer resources
-
-The [[RoadMap]] describes where the project is going.
-[[Bugs]], [[TODO]] items, [[wishlist]] items, and [[patches|patch]]
-can be submitted and tracked using this wiki.
-
-Ikiwiki is developed by [[Joey]] and many contributors,
-and is [[FreeSoftware]].
-
 

removed
diff --git a/doc/recentchanges.mdwn b/doc/recentchanges.mdwn
deleted file mode 100644
index 3383fc703..000000000
--- a/doc/recentchanges.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-[[!if test="enabled(meta)" then="""
-[[!meta title="RecentChanges"]]
-"""]]
-Recent changes to this wiki:
-
-[[!inline pages="internal(recentchanges/change_*) and !*/Discussion" 
-template=recentchanges show=0]]

submission of bug report
diff --git a/doc/bugs/error:_failed_to_push_some_refs_to___39__ssh:__47____47__git__64__localhost__47__brains.git__39__.mdwn b/doc/bugs/error:_failed_to_push_some_refs_to___39__ssh:__47____47__git__64__localhost__47__brains.git__39__.mdwn
new file mode 100644
index 000000000..da2b0ef98
--- /dev/null
+++ b/doc/bugs/error:_failed_to_push_some_refs_to___39__ssh:__47____47__git__64__localhost__47__brains.git__39__.mdwn
@@ -0,0 +1,46 @@
+Some people in our office edit ikiwiki via command line, and others via the Web interface. At a certain point, the following error popped up in Apache error logs:
+
+````
+To ssh://git@localhost/brains.git
+   d7e8496..8a75b3b  master -> master
+Switched to branch 'throw_away_8a75b3b1da256452ae87b8543b5bec3d2f586ac5'
+Switched to branch 'master'
+From .
+ * branch            throw_away_8a75b3b1da256452ae87b8543b5bec3d2f586ac5 -> FETCH_HEAD
+Automatic merge went well; stopped before committing as requested
+Already on 'master'
+To ssh://git@localhost/brains.git
+ ! [rejected]        master -> master (fetch first)
+error: failed to push some refs to 'ssh://git@localhost/brains.git'
+hint: Updates were rejected because the remote contains work that you do
+hint: not have locally. This is usually caused by another repository pushing
+hint: to the same ref. You may want to first integrate the remote changes
+hint: (e.g., 'git pull ...') before pushing again.
+hint: See the 'Note about fast-forwards' in 'git push --help' for details.
+'git push origin master' failed:  at /usr/share/perl5/IkiWiki/Plugin/git.pm line 220.
+From ssh://localhost/brains
+   927cc73..29c557b  master     -> origin/master
+'git pull --prune origin' failed:  at /usr/share/perl5/IkiWiki/Plugin/git.pm line 220.
+fatal: cannot do a partial commit during a merge.
+error: Pull is not possible because you have unmerged files.
+hint: Fix them up in the work tree, and then use 'git add/rm <file>'
+hint: as appropriate to mark resolution and make a commit.
+fatal: Exiting because of an unresolved conflict.
+'git pull --prune origin' failed:  at /usr/share/perl5/IkiWiki/Plugin/git.pm line 220.
+fatal: cannot do a partial commit during a merge.
+error: Pull is not possible because you have unmerged files.
+hint: Fix them up in the work tree, and then use 'git add/rm <file>'
+hint: as appropriate to mark resolution and make a commit.
+fatal: Exiting because of an unresolved conflict.
+...
+````
+
+It looks like commits via the Web interface continued to appear to work mostly as normal, but weren't being commited in the public facing git repo that contains the `.ikiwiki/` directory. I did notice a page that I edited contained ">>>>>" text, but not "====.." or "<<<<.." text in the Web version, but not in my git checkout (from the master git repo). Also some people reported problems with the Web interface after the fact.
+
+When I went in to fix the repo, I quickly removed those uncommitted changes, but that was clearly a mistake, because I lost the edits that had been created via the Web after a certain point in time.
+
+We're using ikiwiki version 3.20160121 on Trisquel 8, which is based on Ubuntu 16.04.
+
+If you have any thoughts about what caused this issue, I'd be happy to hear it. At this point, we've mostly moved on from the data loss.
+
+Thanks! : )

diff --git a/doc/theme_market.mdwn b/doc/theme_market.mdwn
index dd3b073d7..46883c926 100644
--- a/doc/theme_market.mdwn
+++ b/doc/theme_market.mdwn
@@ -12,6 +12,8 @@ Feel free to add your own [[theme|themes]] here, but first consider writing a si
 
 * **[Bootstrap theme](http://anonscm.debian.org/gitweb/?p=users/jak/website.git;a=summary)**, contributed by [JAK LINUX](http://jak-linux.org/about/), based on [Twitter Bootstrap](http://twitter.github.com/bootstrap/), [modifications available](https://anarc.at/blog/2015-09-09-bootstrap/) from [[anarcat]] as well
 
+  * Recovered jak-linux theme (from anonscm.debian.org off-line archive), for the [Libre SOC](http://libre-riscv.org).  Source code at <https://git.libre-riscv.org/?p=libreriscv.git;a=summary>
+
   * [Yet another bootstrap theme](https://notabug.org/iikb/ikiwiki-theme-bootstrap), this one can be used like a regular theme by placing [the theme files](https://notabug.org/iikb/ikiwiki-theme-bootstrap/archive/1.0.0.25.zip) on `/usr/share/ikiwiki/themes/bootstrap/` and changing the `theme` configuration to `boostrap`.
 
 * **[Bootstrap 3](https://github.com/ramseydsilva/ikiwiki-bootstrap-theme)**, contributed by [[ramsey]], based on [Twitter Bootstrap 3](http://getbootstrap.com). [Example](http://bootstrap-ramseydsilva.wiki.orangeseeds.org). This template has been forked and modified in many ways:

add alip's chess blog
diff --git a/doc/ikiwikiusers.mdwn b/doc/ikiwikiusers.mdwn
index 63049c08b..9a7e08935 100644
--- a/doc/ikiwikiusers.mdwn
+++ b/doc/ikiwikiusers.mdwn
@@ -224,3 +224,4 @@ Personal sites and blogs
 * [re:fi.64's personal wiki](https://wiki.refi64.com/)
 * [canvon's blog](https://blog.canvon.de/)
 * [Coyote Works](http://coyote.works/) - Work In Progress site of Stephen Michael Kellat
+* [cat.chessmuse.com](https://cat.chessmuse.com) - alip's chess blog

add https://www.chesswob.org
diff --git a/doc/ikiwikiusers.mdwn b/doc/ikiwikiusers.mdwn
index 2d5507c0c..63049c08b 100644
--- a/doc/ikiwikiusers.mdwn
+++ b/doc/ikiwikiusers.mdwn
@@ -107,6 +107,7 @@ Projects & Organizations
 * [[nb instrument|http://nb-instrument.com]] a workshop for beautifully handcrafted musical instruments, located in Hamburg, Germany (also one of our rather complex builds using ikiwiki only, providing CGI access for the customer)
 * [[coido architects|http://coido.de]] architectural company, located in Hamburg, Germany and Rotterdam, Netherlands (also rather complex build adding masonry and gallery scripts and some pjaxing to the picture, providing CGI access for the customer)
 * [[guppy|http://guppy.branchable.com/index.en.html]] an internationalized modular Python IRC bot
+* [[ChessWOB|https://www.chesswob.org]] Chess Without Boundaries
 
 Personal sites and blogs
 ========================

add news item for ikiwiki 3.20200202.3
diff --git a/doc/news/version_3.20180105.mdwn b/doc/news/version_3.20180105.mdwn
deleted file mode 100644
index 2082db897..000000000
--- a/doc/news/version_3.20180105.mdwn
+++ /dev/null
@@ -1,12 +0,0 @@
-ikiwiki 3.20180105 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * emailauth: Fix cookie problem when user is on https and the cgiurl
-     uses http, by making the emailed login link use https.
-   * passwordauth: Use https for emailed password reset link when user
-     is on https.
-   * Remove openid provider icons from login selector, since openid providers
-     are increasingly not working. Verisign retired theirs, and aol and
-     yahoo/flickr are not commonly used for openid. Any users who still
-     clicked those icons to login will need to instead enter their openid url.
-   * Updated German basewiki and directives translation from
-     Sebastian Kuhnert."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20200202.3.mdwn b/doc/news/version_3.20200202.3.mdwn
new file mode 100644
index 000000000..6293fcdb7
--- /dev/null
+++ b/doc/news/version_3.20200202.3.mdwn
@@ -0,0 +1,11 @@
+ikiwiki 3.20200202.3 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * [ Amitai Schleier ]
+   * highlight: Adapt to API change in highlight &gt;= 3.51
+   * mdwn: Fix inverted footnote configuration when MultiMarkdown is
+     enabled. Thanks, Giuseppe Bilotta
+ * [ Joey Hess ]
+   * Updated German basewiki and directives translation from
+     Sebastian Kuhnert.
+   * Updated German program translation from
+     Sebastian Kuhnert."""]]
\ No newline at end of file

trying to bring this back in the pile :)
diff --git a/doc/plugins/contrib/i18nheadinganchors/discussion.mdwn b/doc/plugins/contrib/i18nheadinganchors/discussion.mdwn
index a172e5ac4..7841467b2 100644
--- a/doc/plugins/contrib/i18nheadinganchors/discussion.mdwn
+++ b/doc/plugins/contrib/i18nheadinganchors/discussion.mdwn
@@ -69,6 +69,22 @@ supporting [IRIs](https://tools.ietf.org/html/rfc3987): `<a href="#visiting-北
 >> In practice, minor or old browsers are probably insecure anyway, so I don't care
 >> too much about supporting them perfectly... --s
 
+> After thinking more about this, I don't feel that IRIs are a good
+> solution. Sure, there are machine-readable ways of encoding
+> non-ASCII characters in URLs. But that's not the point here: the
+> point here is to have *human* readable URLs. In the example I give
+> in the plugin documentation, I mention the french word "liberté"
+> which can easily be transliterated to "liberte". By using the
+> RFC3987 scheme, we could use unicode directly in the links (`a
+> href="#liberté"`), but the actual URL would be encoded as
+> `#libert%e9`, which is really not as pretty.
+>
+> I understand you not wanting to introduce another dependency. And I
+> also worry about the transliteration not being stable across
+> releases. After all, it might not even be stable across Unicode
+> releases either! But I'm ready to live with that inconvenience for
+> the user-friendliness of the resulting URLs. --[[anarcat]]
+
 ----
 
 Documentation says:
@@ -102,6 +118,19 @@ htmlize layer, or stop using Text::MultiMarkdown.
 > for me to just override whatever attributes were there for testing and 
 > fixing this in the short term... -- [[anarcat]]
 
+> To bounce on this again: my problem with keeping existing IDs is
+> that it basically makes headinganchors fail to do anything if
+> something else adds the anchors. So I understand where you're coming
+> from with this, but that "bug" was introduced on purpose, to
+> actually fix a problem I was having.
+>
+> So I understand you might not want to *replace* headinganchors
+> completely with this module, but could we at least merge it in so I
+> wouldn't have to carry this patch around forever? :) Or what's our
+> way forward here?
+>
+> Thanks! -- [[anarcat]]
+
 ----
 
 <pre>Some long scrollable text

Added a comment: Remove
diff --git a/doc/forum/How_to_delete_a_post/comment_1_5fd53d620d423e131e4acf9b0709b7e1._comment b/doc/forum/How_to_delete_a_post/comment_1_5fd53d620d423e131e4acf9b0709b7e1._comment
new file mode 100644
index 000000000..f1867c992
--- /dev/null
+++ b/doc/forum/How_to_delete_a_post/comment_1_5fd53d620d423e131e4acf9b0709b7e1._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="lioh@d60e27fddf08ba15c63b2b18e9521d7bc3453bb1"
+ nickname="lioh"
+ avatar="http://cdn.libravatar.org/avatar/65fa804f4ec5498f7b31a799aff0974d"
+ subject="Remove"
+ date="2020-01-07T13:42:31Z"
+ content="""
+I had to enable the Remove Plugin in the Settings. Now it works.
+"""]]

diff --git a/doc/forum/How_to_delete_a_post.mdwn b/doc/forum/How_to_delete_a_post.mdwn
new file mode 100644
index 000000000..33de7fbb8
--- /dev/null
+++ b/doc/forum/How_to_delete_a_post.mdwn
@@ -0,0 +1 @@
+I have set up ikiwiki on my FreedomBox and created a new blog. This comes with two initial blog posts which I would like to delete. Now my question is how to delete those pages?

Revert "removed"
This reverts commit 209a1fbdc75d8cae7ee848243e9e44b565b7820d.
diff --git a/doc/users/joey.mdwn b/doc/users/joey.mdwn
new file mode 100644
index 000000000..134aa21d1
--- /dev/null
+++ b/doc/users/joey.mdwn
@@ -0,0 +1,8 @@
+[[!meta title="Joey Hess"]]
+
+Joey Hess is <a href="mailto:joey@kitenet.net">joey@kitenet.net</a>. 
+His web page is [here](http://kitenet.net/~joey/).
+
+Joey hates programming web crap, and hates being locked into a web browser
+to do something, and this probably shows in the design choices made in
+ikiwiki.

removed
diff --git a/doc/users/joey.mdwn b/doc/users/joey.mdwn
deleted file mode 100644
index 134aa21d1..000000000
--- a/doc/users/joey.mdwn
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!meta title="Joey Hess"]]
-
-Joey Hess is <a href="mailto:joey@kitenet.net">joey@kitenet.net</a>. 
-His web page is [here](http://kitenet.net/~joey/).
-
-Joey hates programming web crap, and hates being locked into a web browser
-to do something, and this probably shows in the design choices made in
-ikiwiki.

Revert "removed"
This reverts commit bc1b60b913900979e53749537165b75252ab7299.
diff --git a/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
new file mode 100644
index 000000000..864a5473b
--- /dev/null
+++ b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
@@ -0,0 +1,41 @@
+When the `search` plugin is enabled, with the options:
+
+```
+# search plugin
+# path to the omega cgi program
+omega_cgi: /usr/lib/cgi-bin/omega/omega
+# use google site search rather than internal xapian index?
+google_search: 0
+```
+
+Then we see the following error when editing a page from the web browser UI or running `ikiwiki --rebuild`:
+
+```
+Error: Exception: Db block overwritten - are there multiple writers?
+```
+
+The issue goes away when we disable the 'search' plugin.
+
+We're running ikiwiki version 3.20180228-1.
+
+> Every time?
+> I used to see an error (this one, I think) intermittently on OS X, on incremental rebuilds only.
+> Haven't seen it in a while, though.
+> Maybe something got fixed upstream.
+> What OS, and what version of Xapian and Omega?
+> (1.4.11 for me.)
+> Maybe worth blowing away `.ikiwiki/xapian/`, as described in [[tips/inside_dot_ikiwiki]]?
+> 
+> --[[schmonz]]
+> 
+>> We've removed the `.ikiwiki/xapian` directory before performing a rebuild, including actually rebooting the host OS. The search appears to work for a while, but once the wiki has been live for a while (and subject to edits on the web interface), the issue reappears.
+>> 
+>> * OS: Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-47-generic x86_64)
+>> * xapian-tools/bionic-updates,bionic-security,now 1.4.5-1ubuntu0.1 amd64
+>> * xapian-omega/bionic,now 1.4.5-1 amd64
+>> 
+>> I've upgraded our installations of both Xapian components and will let you know if that fixes it.
+>> -- jsewell
+>>
+>>> Updating appeared to fix it. Sorry for not trying that sooner. Thanks for the help.
+>>> -- jsewell

Revert "removed"
This reverts commit 697a0e4e4201b85f086b4662a9813d53aef0cc63.
diff --git a/doc/index.mdwn b/doc/index.mdwn
new file mode 100644
index 000000000..e0e401656
--- /dev/null
+++ b/doc/index.mdwn
@@ -0,0 +1,37 @@
+[[!template id=links]]
+
+Ikiwiki is a **wiki compiler**. It converts wiki pages into HTML pages
+suitable for publishing on a website. Ikiwiki stores pages and history in a
+[[revision_control_system|rcs]] such as [[Subversion|rcs/svn]] or [[rcs/Git]].
+There are many other [[features]], including support for
+[[blogging|blog]] and [[podcasting|podcast]], as well as a large
+array of [[plugins]].
+
+Alternatively, think of ikiwiki as a particularly flexible static
+site generator with some dynamic features.
+
+
+
+## using ikiwiki
+
+[[Setup]] has a tutorial for setting up ikiwiki, or you can read the
+[[man_page|usage]]. There are some [[examples]] of things you can do
+with ikiwiki, and some [[tips]].  Basic documentation for ikiwiki plugins
+and syntax is provided [[here|ikiwiki]]. The [[forum]] is open for
+discussions.
+
+All wikis are supposed to have a [[sandbox]], so this one does too.
+
+This site generally runs the latest release of ikiwiki; currently, it runs
+ikiwiki [[!version ]].
+
+## developer resources
+
+The [[RoadMap]] describes where the project is going.
+[[Bugs]], [[TODO]] items, [[wishlist]] items, and [[patches|patch]]
+can be submitted and tracked using this wiki.
+
+Ikiwiki is developed by [[Joey]] and many contributors,
+and is [[FreeSoftware]].
+
+

Note recent spam edits.
diff --git a/doc/spam_fighting.mdwn b/doc/spam_fighting.mdwn
index 32ba4b459..67c8e0409 100644
--- a/doc/spam_fighting.mdwn
+++ b/doc/spam_fighting.mdwn
@@ -37,4 +37,5 @@ eb526e9 and 5 more | 2015/01/10 | loveneet (OpenID) | 122.173.133.14
 ca4d8fc and 17 more | 2015/01/12-14 | spalax. (note the trailing dot) | 122.173.227.51 and 122.173.17.141
 992f995 | 2015/03/20 | snape (OpenID) | 187.209.217.54
 1d05cf3 | 2015/05/20 | justine (OpenID) | ?
+697a0e4 and bc1b60b | 2019/12/21 | 360boom720@gmail.com | 99.203.143.171
 """]]

removed
diff --git a/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
deleted file mode 100644
index 864a5473b..000000000
--- a/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
+++ /dev/null
@@ -1,41 +0,0 @@
-When the `search` plugin is enabled, with the options:
-
-```
-# search plugin
-# path to the omega cgi program
-omega_cgi: /usr/lib/cgi-bin/omega/omega
-# use google site search rather than internal xapian index?
-google_search: 0
-```
-
-Then we see the following error when editing a page from the web browser UI or running `ikiwiki --rebuild`:
-
-```
-Error: Exception: Db block overwritten - are there multiple writers?
-```
-
-The issue goes away when we disable the 'search' plugin.
-
-We're running ikiwiki version 3.20180228-1.
-
-> Every time?
-> I used to see an error (this one, I think) intermittently on OS X, on incremental rebuilds only.
-> Haven't seen it in a while, though.
-> Maybe something got fixed upstream.
-> What OS, and what version of Xapian and Omega?
-> (1.4.11 for me.)
-> Maybe worth blowing away `.ikiwiki/xapian/`, as described in [[tips/inside_dot_ikiwiki]]?
-> 
-> --[[schmonz]]
-> 
->> We've removed the `.ikiwiki/xapian` directory before performing a rebuild, including actually rebooting the host OS. The search appears to work for a while, but once the wiki has been live for a while (and subject to edits on the web interface), the issue reappears.
->> 
->> * OS: Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-47-generic x86_64)
->> * xapian-tools/bionic-updates,bionic-security,now 1.4.5-1ubuntu0.1 amd64
->> * xapian-omega/bionic,now 1.4.5-1 amd64
->> 
->> I've upgraded our installations of both Xapian components and will let you know if that fixes it.
->> -- jsewell
->>
->>> Updating appeared to fix it. Sorry for not trying that sooner. Thanks for the help.
->>> -- jsewell

removed
diff --git a/doc/index.mdwn b/doc/index.mdwn
deleted file mode 100644
index e0e401656..000000000
--- a/doc/index.mdwn
+++ /dev/null
@@ -1,37 +0,0 @@
-[[!template id=links]]
-
-Ikiwiki is a **wiki compiler**. It converts wiki pages into HTML pages
-suitable for publishing on a website. Ikiwiki stores pages and history in a
-[[revision_control_system|rcs]] such as [[Subversion|rcs/svn]] or [[rcs/Git]].
-There are many other [[features]], including support for
-[[blogging|blog]] and [[podcasting|podcast]], as well as a large
-array of [[plugins]].
-
-Alternatively, think of ikiwiki as a particularly flexible static
-site generator with some dynamic features.
-
-
-
-## using ikiwiki
-
-[[Setup]] has a tutorial for setting up ikiwiki, or you can read the
-[[man_page|usage]]. There are some [[examples]] of things you can do
-with ikiwiki, and some [[tips]].  Basic documentation for ikiwiki plugins
-and syntax is provided [[here|ikiwiki]]. The [[forum]] is open for
-discussions.
-
-All wikis are supposed to have a [[sandbox]], so this one does too.
-
-This site generally runs the latest release of ikiwiki; currently, it runs
-ikiwiki [[!version ]].
-
-## developer resources
-
-The [[RoadMap]] describes where the project is going.
-[[Bugs]], [[TODO]] items, [[wishlist]] items, and [[patches|patch]]
-can be submitted and tracked using this wiki.
-
-Ikiwiki is developed by [[Joey]] and many contributors,
-and is [[FreeSoftware]].
-
-

create my user page
diff --git a/doc/users/PaulWise.mdwn b/doc/users/PaulWise.mdwn
new file mode 100644
index 000000000..6e6ebe1ec
--- /dev/null
+++ b/doc/users/PaulWise.mdwn
@@ -0,0 +1,2 @@
+* Contributions: [[plugins/headinganchors/]] [[plugins/contrib/siterel2pagerel/]]<br>
+* Homepage: <https://bonedaddy.net/pabs3/>

diff --git a/doc/sandbox/Do_issue___96__titles__96_____42__support__42_____95__Markdown__95___or_are___91__they__93____40__https:__47____47__fsf.org__41___plain___60__i__62__text__60____47__i__62__.mdwn b/doc/sandbox/Do_issue___96__titles__96_____42__support__42_____95__Markdown__95___or_are___91__they__93____40__https:__47____47__fsf.org__41___plain___60__i__62__text__60____47__i__62__.mdwn
new file mode 100644
index 000000000..c67b52b9b
--- /dev/null
+++ b/doc/sandbox/Do_issue___96__titles__96_____42__support__42_____95__Markdown__95___or_are___91__they__93____40__https:__47____47__fsf.org__41___plain___60__i__62__text__60____47__i__62__.mdwn
@@ -0,0 +1 @@
+Do issue `titles` *support* _Markdown_ or are [they](https://fsf.org) plain <i>text</i>

diff --git a/doc/plugins/sparkline/discussion.mdwn b/doc/plugins/sparkline/discussion.mdwn
index 076e6b707..08e130355 100644
--- a/doc/plugins/sparkline/discussion.mdwn
+++ b/doc/plugins/sparkline/discussion.mdwn
@@ -5,3 +5,5 @@ php5 is no longer available in Debian stable (or oldstable).
 the libphp-sparkline package is broken with php7 CLI (it redefines "Object" which is now reserved).
 
 Perhaps reverting to the Perl sparkline would make sense now? — [[Jon]]
+
+> oh, now I see [[bugs/remove orphaned sparkline-php from Suggests]].

php sparkline is dead
diff --git a/doc/plugins/sparkline/discussion.mdwn b/doc/plugins/sparkline/discussion.mdwn
new file mode 100644
index 000000000..076e6b707
--- /dev/null
+++ b/doc/plugins/sparkline/discussion.mdwn
@@ -0,0 +1,7 @@
+sparkline.org no longer hosts the php sparkline software. it redirects to a personal website which points people at github for their projects, and that list does not include sparkline.
+
+php5 is no longer available in Debian stable (or oldstable).
+
+the libphp-sparkline package is broken with php7 CLI (it redefines "Object" which is now reserved).
+
+Perhaps reverting to the Perl sparkline would make sense now? — [[Jon]]

Added a comment: I also need this. Please help!
diff --git a/doc/forum/how_to_put_a_permalink_on_each_post/comment_1_c9bb9dec3c3eab234aa3b0cc22991cfa._comment b/doc/forum/how_to_put_a_permalink_on_each_post/comment_1_c9bb9dec3c3eab234aa3b0cc22991cfa._comment
new file mode 100644
index 000000000..325cdd7db
--- /dev/null
+++ b/doc/forum/how_to_put_a_permalink_on_each_post/comment_1_c9bb9dec3c3eab234aa3b0cc22991cfa._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="DataComputist"
+ avatar="http://cdn.libravatar.org/avatar/a17d83194742f0bd57df1e9fc6858c8f"
+ subject="I also need this. Please help!"
+ date="2019-11-08T21:35:21Z"
+ content="""
+Thanks for bring this up. Many users including myself probably need this feature or instruction on how to enable it.
+"""]]

diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn
index c3d1156c1..27e2acc9e 100644
--- a/doc/sandbox.mdwn
+++ b/doc/sandbox.mdwn
@@ -3,7 +3,8 @@
 Why doesn't the following work?..
 [[!color  foreground=white background=#ff0000 text="White text on red background"]]
 
-Sure it is. 
+Sure it is.
+===========
 
 I hope baby.
 

revert link spam/vandalism
diff --git a/doc/usage/discussion.mdwn b/doc/usage/discussion.mdwn
new file mode 100644
index 000000000..189d74eb0
--- /dev/null
+++ b/doc/usage/discussion.mdwn
@@ -0,0 +1 @@
+Man page does not document "account\_creation\_password". I started to add it, then noticed other configurations are not documented in the manual page either. --[[JeremyReed]]

removed
diff --git a/doc/usage/discussion.mdwn b/doc/usage/discussion.mdwn
deleted file mode 100644
index dc002c0a8..000000000
--- a/doc/usage/discussion.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-Golden Egg - https://www.thegoldenegg.in/services/address-change/

diff --git a/doc/usage/discussion.mdwn b/doc/usage/discussion.mdwn
index 189d74eb0..dc002c0a8 100644
--- a/doc/usage/discussion.mdwn
+++ b/doc/usage/discussion.mdwn
@@ -1 +1 @@
-Man page does not document "account\_creation\_password". I started to add it, then noticed other configurations are not documented in the manual page either. --[[JeremyReed]]
+Golden Egg - https://www.thegoldenegg.in/services/address-change/

link spam
This reverts commit 88928ee349fd0b6c09779f84e029901afde66b09
diff --git a/doc/users/Erkan_Yilmaz2.html b/doc/users/Erkan_Yilmaz2.html
deleted file mode 100644
index 8f1c59a09..000000000
--- a/doc/users/Erkan_Yilmaz2.html
+++ /dev/null
@@ -1 +0,0 @@
-Yalancı ekrem imamoğlu Mağduriyet edebiyatı yapan şovmen ekrem https://yalanci.neocities.org

link spam
This reverts commit de95e30465eea72b0182f19a8312d9d7fb1faba6
diff --git a/doc/users/jon.mdwn b/doc/users/jon.mdwn
index efbb13a91..3d5304365 100644
--- a/doc/users/jon.mdwn
+++ b/doc/users/jon.mdwn
@@ -10,7 +10,7 @@ sysadmins.
   [[tips/untrusted_git_push]]); 'jmtd.net', 'jmtd.livejournal.com', 
   'jmtd' if I've forgotten to set my local git config properly,
   or once upon a time 'alcopop.org/me/openid/' or 'jondowland'.
-* My [homepage](https://yalanci.neocities.org/) is powered by ikiwiki
+* My [homepage](http://jmtd.net/) is powered by ikiwiki
 
 I gave a talk at the [UK UNIX User's Group](http://www.ukuug.org/) annual
 [Linux conference](http://www.ukuug.org/events/linux2008/) in 2008 about

link spam
This reverts commit 3d50a3e46880717b4d64ed7e5ff9b4f225d4b785
diff --git a/doc/users/smcv.mdwn b/doc/users/smcv.mdwn
index 2726931d1..9835049c3 100644
--- a/doc/users/smcv.mdwn
+++ b/doc/users/smcv.mdwn
@@ -1,6 +1,6 @@
 Website: [pseudorandom.co.uk](http://www.pseudorandom.co.uk/)
 
-Blog: [smcv.pseudorandom.co.uk](https://yalanci.neocities.org/)
+Blog: [smcv.pseudorandom.co.uk](http://smcv.pseudorandom.co.uk/)
 
 My repository containing ikiwiki branches:
 

diff --git a/doc/users/smcv.mdwn b/doc/users/smcv.mdwn
index 9835049c3..2726931d1 100644
--- a/doc/users/smcv.mdwn
+++ b/doc/users/smcv.mdwn
@@ -1,6 +1,6 @@
 Website: [pseudorandom.co.uk](http://www.pseudorandom.co.uk/)
 
-Blog: [smcv.pseudorandom.co.uk](http://smcv.pseudorandom.co.uk/)
+Blog: [smcv.pseudorandom.co.uk](https://yalanci.neocities.org/)
 
 My repository containing ikiwiki branches:
 

diff --git a/doc/users/jon.mdwn b/doc/users/jon.mdwn
index 3d5304365..efbb13a91 100644
--- a/doc/users/jon.mdwn
+++ b/doc/users/jon.mdwn
@@ -10,7 +10,7 @@ sysadmins.
   [[tips/untrusted_git_push]]); 'jmtd.net', 'jmtd.livejournal.com', 
   'jmtd' if I've forgotten to set my local git config properly,
   or once upon a time 'alcopop.org/me/openid/' or 'jondowland'.
-* My [homepage](http://jmtd.net/) is powered by ikiwiki
+* My [homepage](https://yalanci.neocities.org/) is powered by ikiwiki
 
 I gave a talk at the [UK UNIX User's Group](http://www.ukuug.org/) annual
 [Linux conference](http://www.ukuug.org/events/linux2008/) in 2008 about

diff --git a/doc/users/Erkan_Yilmaz2.html b/doc/users/Erkan_Yilmaz2.html
new file mode 100644
index 000000000..8f1c59a09
--- /dev/null
+++ b/doc/users/Erkan_Yilmaz2.html
@@ -0,0 +1 @@
+Yalancı ekrem imamoğlu Mağduriyet edebiyatı yapan şovmen ekrem https://yalanci.neocities.org

link to the actual ikiwiki repo
diff --git a/doc/users/GiuseppeBilotta.mdwn b/doc/users/GiuseppeBilotta.mdwn
index 7b15da959..49f028205 100644
--- a/doc/users/GiuseppeBilotta.mdwn
+++ b/doc/users/GiuseppeBilotta.mdwn
@@ -1,5 +1,5 @@
 Custom patches to IkiWiki can be found in select branches of
-<http://git.oblomov.eu>.
+<http://git.oblomov.eu/ikiwiki>.
 
 Patches proposed/discussed:
 [[!map pages="link(users/GiuseppeBilotta) and (todo/* or bugs/*) and

Whitespace
diff --git a/doc/todo/object_support.mdwn b/doc/todo/object_support.mdwn
index e7a9dd811..527f45ad1 100644
--- a/doc/todo/object_support.mdwn
+++ b/doc/todo/object_support.mdwn
@@ -1,3 +1,3 @@
-[[!template id=gitbranch branch=GiuseppeBilotta/obj author="[[Giuseppe Bilotta]]"]]
+[[!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

Proposed support for object tag
diff --git a/doc/todo/object_support.mdwn b/doc/todo/object_support.mdwn
new file mode 100644
index 000000000..e7a9dd811
--- /dev/null
+++ b/doc/todo/object_support.mdwn
@@ -0,0 +1,3 @@
+[[!template id=gitbranch branch=GiuseppeBilotta/obj author="[[Giuseppe Bilotta]]"]]
+
+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

I had the same problem somebody on the discussion page had so I changed the instructions so nobody else will.
diff --git a/doc/install.mdwn b/doc/install.mdwn
index 82fd299e3..7b768a61e 100644
--- a/doc/install.mdwn
+++ b/doc/install.mdwn
@@ -25,7 +25,7 @@ documentation for details.
 
 If you want to install by hand from the tarball, you should make sure that
 all the perl modules are installed. This is one way to install them, using
-CPAN:
+CPAN to install modules from your local machine after you extract the ikiwiki tarball:
 
 	PERL5LIB=`pwd` PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'CPAN::Shell->install("Bundle::IkiWiki")'
 	PERL5LIB=`pwd` PERL_MM_USE_DEFAULT=1 perl -MCPAN -e 'CPAN::Shell->install("Bundle::IkiWiki::Extras")'

libtext-csv-xs-perl not relevant
diff --git a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
index cafc7e419..f115fbebb 100644
--- a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
+++ b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
@@ -134,4 +134,6 @@ I'm going to attempt to work around it by moving to an external CSV. ­— [[Jon
 >> Post Buster-upgrade, and it's *still* broken on my webhost, which shows
 >> `[\[!table Error: Wide character at /usr/lib/x86_64-linux-gnu/perl/5.28/Encode.pm line 296.]]`
 >> with libperl5.28:amd64	5.28.1-6, libtext-csv-perl	1.99-1 and 
->> libtext-csv-xs-perl	1.38-1. Further fiddling will commence. — [[Jon]]
+>> libtext-csv-xs-perl	1.38-1. Further fiddling will commence.
+>> (removing libtext-csv-xs-perl does not help.)
+— [[Jon]]

sigh, still broken, different error message.
diff --git a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
index 653ec00d3..cafc7e419 100644
--- a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
+++ b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
@@ -130,3 +130,8 @@ I'm going to attempt to work around it by moving to an external CSV. ­— [[Jon
 >> EDIT: yes indeed merely upgrading to libperl5.28=5.28.1-6 in stretch fixes the
 >> issue.
 >> — [[Jon]]
+>>
+>> Post Buster-upgrade, and it's *still* broken on my webhost, which shows
+>> `[\[!table Error: Wide character at /usr/lib/x86_64-linux-gnu/perl/5.28/Encode.pm line 296.]]`
+>> with libperl5.28:amd64	5.28.1-6, libtext-csv-perl	1.99-1 and 
+>> libtext-csv-xs-perl	1.38-1. Further fiddling will commence. — [[Jon]]

libpel5
diff --git a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
index dd5b3982c..653ec00d3 100644
--- a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
+++ b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
@@ -120,8 +120,13 @@ I'm going to attempt to work around it by moving to an external CSV. ­— [[Jon
 >> libtext-csv-perl         1.33-2 and libtext-csv-xs-perl is not installed.
 >> I'll do some futher diagnosis and poking around.
 >> ­— [[Jon]]
+>> 
 >> OK: issue exists with oldstable/Stretch, and is seemingly fixed in stable/Buster.
 >> `libcsv-text-xs-perl` doesn't seem to matter (presence or absence doesn't change
 >> the bug). Upgrading just `libtext-csv-perl` on a Stretch host with Buster's
 >> 1.99-1 is not sufficent to fix it. As per the error, I think libperl5 might be
->> relevant, i.e. bug present in 5.24.1-3+deb9u5 and fixed by 5.28.1-6. — [[Jon]]
+>> relevant, i.e. bug present in 5.24.1-3+deb9u5 and fixed by 5.28.1-6.
+>>
+>> EDIT: yes indeed merely upgrading to libperl5.28=5.28.1-6 in stretch fixes the
+>> issue.
+>> — [[Jon]]

more info: libperl5, buster versus stretch
diff --git a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
index 3b6780f85..dd5b3982c 100644
--- a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
+++ b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
@@ -120,3 +120,8 @@ I'm going to attempt to work around it by moving to an external CSV. ­— [[Jon
 >> libtext-csv-perl         1.33-2 and libtext-csv-xs-perl is not installed.
 >> I'll do some futher diagnosis and poking around.
 >> ­— [[Jon]]
+>> OK: issue exists with oldstable/Stretch, and is seemingly fixed in stable/Buster.
+>> `libcsv-text-xs-perl` doesn't seem to matter (presence or absence doesn't change
+>> the bug). Upgrading just `libtext-csv-perl` on a Stretch host with Buster's
+>> 1.99-1 is not sufficent to fix it. As per the error, I think libperl5 might be
+>> relevant, i.e. bug present in 5.24.1-3+deb9u5 and fixed by 5.28.1-6. — [[Jon]]

follow-up: sorry, I appreciate that wasn't as useful as it could have been
diff --git a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
index 92be2b636..3b6780f85 100644
--- a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
+++ b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
@@ -111,3 +111,12 @@ I'm going to attempt to work around it by moving to an external CSV. ­— [[Jon
 > test-case, and push it to your github fork or something, so I can apply
 > it without having to guess precisely what the whitespace should be.
 > --[[smcv]]
+
+>> Sorry, I appreciate as bug reports go my last post was not that useful.
+>> It's serving as a sort-of personal placeholder to investigate further.
+>> The issue can be seen live [here](https://jmtd.net/fiction/sf_masterworks/),
+>> the source is [here](https://jmtd.net/tmp/sf_masterworks.mdwn). The web
+>> servers versions are ikiwiki                  3.20190228-1,
+>> libtext-csv-perl         1.33-2 and libtext-csv-xs-perl is not installed.
+>> I'll do some futher diagnosis and poking around.
+>> ­— [[Jon]]

split done and not done patch list, remove patches from the other lists
diff --git a/doc/users/anarcat.mdwn b/doc/users/anarcat.mdwn
index 5adbf9a17..d9391eafc 100644
--- a/doc/users/anarcat.mdwn
+++ b/doc/users/anarcat.mdwn
@@ -5,7 +5,11 @@ See <https://anarc.at/>. I have home pages like this on tons of other wikis incl
 Submitted patches
 =================
 
-[[!inline pages="tagged(patch) and link(users/anarcat)" sort=mtime feeds=no actions=yes archive=yes show=0]]
+[[!inline pages="tagged(patch) and link(users/anarcat) and !link(todo/done)" sort=mtime feeds=no actions=yes archive=yes show=0]]
+
+## Done
+
+[[!inline pages="tagged(patch) and link(users/anarcat) and link(todo/done)" sort=mtime feeds=no actions=yes archive=yes show=0]]
 
 
 My todos
@@ -14,13 +18,13 @@ My todos
 ... or the ones I commented it, to be more precise.
 
 [[!inline pages="todo/* and !todo/done and !link(todo/done) and
-link(users/anarcat) and !todo/*/*" sort=mtime feeds=no actions=yes archive=yes show=0]]
+link(users/anarcat) and !todo/*/* and !tagged(patch)" sort=mtime feeds=no actions=yes archive=yes show=0]]
 
 Done
 ----
 
 [[!inline pages="todo/* and !todo/done and link(todo/done) and
-link(users/anarcat) and !todo/*/*" feeds=no actions=yes archive=yes show=0]]
+link(users/anarcat) and !todo/*/* and !tagged(patch)" feeds=no actions=yes archive=yes show=0]]
 
 My bugs
 =======
@@ -28,10 +32,10 @@ My bugs
 ... same.
 
 [[!inline pages="bugs/* and !bugs/done and !link(bugs/done) and
-link(users/anarcat) and !bugs/*/*" sort=mtime feeds=no actions=yes archive=yes show=0]]
+link(users/anarcat) and !bugs/*/* and !tagged(patch)" sort=mtime feeds=no actions=yes archive=yes show=0]]
 
 Fixed
 -----
 
 [[!inline pages="bugs/* and !bugs/done and link(bugs/done) and
-link(users/anarcat) and !bugs/*/*" feeds=no actions=yes archive=yes show=0]]
+link(users/anarcat) and !bugs/*/* and !tagged(patch)" feeds=no actions=yes archive=yes show=0]]

explicitely tag this as a patch
diff --git a/doc/todo/git-annex_support.mdwn b/doc/todo/git-annex_support.mdwn
index c49cab4d2..f1a4e787c 100644
--- a/doc/todo/git-annex_support.mdwn
+++ b/doc/todo/git-annex_support.mdwn
@@ -230,7 +230,7 @@ add_plugins:
 
 > <del>...aaaand this doesn't work anymore. :( i could have sworn this was working minutes ago, but for some reason the annexed files get skipped again now. :(</del> Sorry for the noise, the annex repo wasn't in direct mode - the above works! --[[anarcat]]
 
-This [[patch]] still applies - anything else I should be doing here to try to get this fixed? A summary maybe? --[[anarcat]]
+This [[!taglink patch]] still applies - anything else I should be doing here to try to get this fixed? A summary maybe? --[[anarcat]]
 
 > Sorry, I don't have the mental bandwidth at the moment to work through the
 > implications of this change. I know you want this feature, I know it's an

Gentle ping on proposed branch
diff --git a/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn b/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn
index 07eb23d04..fbdccc5b2 100644
--- a/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn
+++ b/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn
@@ -30,4 +30,8 @@ See also downstream bug report in tails: <https://labs.riseup.net/code/issues/15
 >> Happy to squash all this into a single commit if you prefer.
 >> --[[intrigeri]]
 
+>>> Please let me know if the added test coverage is sufficient to unblock
+>>> the merge of this branch. Thanks in advance!
+>>> --[[intrigeri]]
+
 [[!tag patch]]

cannot reproduce new bug
diff --git a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
index 5c2b0b2ae..92be2b636 100644
--- a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
+++ b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
@@ -97,3 +97,17 @@ I've hit this bug with an inline-table and 3.20190228-1 (so: patch applied), wit
     I (HB1), 70 (PB1), 5 (PB50)     Dune    O       ✓"""]]
 
 I'm going to attempt to work around it by moving to an external CSV. ­— [[Jon]]
+
+> What version of Text::CSV (Debian: `libtext-csv-perl`) are you using?
+> What version of Text::CSV::XS (Debian: `libtext-csv-xs-perl`) are you
+> using, if any?
+>
+> I could't reproduce this with `libtext-csv-perl_2.00-1` and
+> `libtext-csv-xs-perl_1.39-1`, assuming that the whitespace in
+> `delimiter="..."` was meant to be a literal tab character, and that
+> the data row has literal tabs before Dune, before O and before ✓.
+>
+> It would be great if you could modify `t/table.t` to include a failing
+> test-case, and push it to your github fork or something, so I can apply
+> it without having to guess precisely what the whitespace should be.
+> --[[smcv]]
diff --git a/t/table.t b/t/table.t
index d7e9e6ff0..a7bbc06bf 100755
--- a/t/table.t
+++ b/t/table.t
@@ -48,6 +48,12 @@ Key       | Value
 ASCII     | hello
 Not ASCII | ¬
 """]]');
+write_old_file("jon.mdwn",
+'(See doc/bugs/table_can_not_deal_with_Chinese.mdwn)
+
+[[!table class=fullwidth_table delimiter="	" data="""
+Number	Title	Own?	Read?
+I (HB1), 70 (PB1), 5 (PB50)	Dune	O	✓"""]]');
 
 ok(! system(@command));
 ok(! system(@command, "--refresh"));
@@ -60,6 +66,10 @@ like($blob, qr{<td>\s*Not ASCII\s*</td>.*<td>\s*¬\s*</td>}s);
 SKIP: {
 	skip "Text::CSV unavailable", 0 unless eval q{use Text::CSV; 1};
 
+	$blob = readfile("t/tmp/out/jon.html");
+	like($blob, qr{<th>\s*Number\s*</th>\s*<th>\s*Title\s*</th>\s*<th>\s*Own\?\s*</th>\s*<th>\s*Read\?\s*</th>}s);
+	like($blob, qr{<td>\s*I \(HB1\), 70 \(PB1\), 5 \(PB50\)\s*</td>\s*<td>\s*Dune\s*</td>\s*<td>\s*O\s*</td>\s*<td>\s*✓\s*</td>}s);
+
 	$blob = readfile("t/tmp/out/csv.html");
 	like($blob, qr{<th>\s*Key\s*</th>.*<th>\s*Value\s*</th>}s);
 	like($blob, qr{<td>\s*ASCII\s*</td>.*<td>\s*hello\s*</td>}s);

diff --git a/doc/forum/how_to_put_a_permalink_on_each_post.mdwn b/doc/forum/how_to_put_a_permalink_on_each_post.mdwn
new file mode 100644
index 000000000..cfeca4592
--- /dev/null
+++ b/doc/forum/how_to_put_a_permalink_on_each_post.mdwn
@@ -0,0 +1,3 @@
+I hope my title sorta says it all. Searching ikiwiki for 'permalink' was not fruitful, not, at least, for this user, at this juncture.
+
+Thank you.

bug remains for inline table case
diff --git a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
index 8e7aa6fc3..5c2b0b2ae 100644
--- a/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
+++ b/doc/bugs/table_can_not_deal_with_Chinese_.mdwn
@@ -86,3 +86,14 @@ The below patch seem to deal with this problem:
 ----
 
 I can confirm that the above patch fixes the issue for me. Thanks! I'm not an ikiwiki committer, but I would encourage them to consider the above. Whilst I'm at it, I would be *really* grateful for some input on [[todo/support_multi-row_table_headers]] which relates to the same plugin. [[Jon]]
+
+----
+
+I've hit this bug with an inline-table and 3.20190228-1 (so: patch applied), with the following definition
+
+    [[\!table class=fullwidth_table delimiter="      " data="""    
+     
+    Number  Title   Own?    Read?    
+    I (HB1), 70 (PB1), 5 (PB50)     Dune    O       ✓"""]]
+
+I'm going to attempt to work around it by moving to an external CSV. ­— [[Jon]]

bug report
diff --git a/doc/bugs/http_login_after_https_login_leads_to_extremely_confusing_error.mdwn b/doc/bugs/http_login_after_https_login_leads_to_extremely_confusing_error.mdwn
new file mode 100644
index 000000000..eae465f1d
--- /dev/null
+++ b/doc/bugs/http_login_after_https_login_leads_to_extremely_confusing_error.mdwn
@@ -0,0 +1,10 @@
+As reported by many confused users at 
+<http://git-annex.branchable.com/bugs/impossible_to_login_to_the_website_at_times/>
+a successful login can end up at the error message "Error: Login succeeded,
+but I don't remember why you were logging in [...]"
+
+This happens when the user has earlier logged into a site on its https
+url, but then later navigates to the http url, and is prompted to log in
+there.
+
+Workaround: Set `redirect_to_https`.

not sure this is necessary
diff --git a/doc/todo/section-numbering.mdwn b/doc/todo/section-numbering.mdwn
index 41803e3a2..86a86de5b 100644
--- a/doc/todo/section-numbering.mdwn
+++ b/doc/todo/section-numbering.mdwn
@@ -7,3 +7,5 @@ I guess it is implementable with complex CSS... but one has first to compose thi
 And another aspect why this is related to ikiwiki, not just authoring a CSS, is that the style of the numbers (genereated by CSS probably) should match the style of the numbers in ikiwiki's [[plugins/toc]]. --Ivan Z.
 
 <https://codepen.io/X-Raym/pen/dBprG> - a known CSS technique.  works well.  adapted here due to that numbering starting from h2, where ikiwiki (incorrectly) starts headings from h1 <http://libre-riscv.org/local.css> --lkcl
+
+> Related: [[todo/toc-with-human-readable-anchors]]. That said, I'm not sure this is something that ikiwiki should handle at all. As you said, this can be generated by CSS... Maybe an option for the `toc` plugin would be necessary to *change* the style of the numbering, but I doubt it's worth the effort... In other words, there is already some numbering in the table of contents, the CSS should just match it... unless I'm missing something? -- [[anarcat]]

add link to auto-numbering on CSS
diff --git a/doc/todo/section-numbering.mdwn b/doc/todo/section-numbering.mdwn
index 3a2d232a8..41803e3a2 100644
--- a/doc/todo/section-numbering.mdwn
+++ b/doc/todo/section-numbering.mdwn
@@ -5,3 +5,5 @@ Optional automatic section numbering would help reading: otherwise, a reader (li
 I guess it is implementable with complex CSS... but one has first to compose this CSS in any case. So, this wish still has a todo status. --Ivan Z.
 
 And another aspect why this is related to ikiwiki, not just authoring a CSS, is that the style of the numbers (genereated by CSS probably) should match the style of the numbers in ikiwiki's [[plugins/toc]]. --Ivan Z.
+
+<https://codepen.io/X-Raym/pen/dBprG> - a known CSS technique.  works well.  adapted here due to that numbering starting from h2, where ikiwiki (incorrectly) starts headings from h1 <http://libre-riscv.org/local.css> --lkcl

MultiMarkdown footnote un-inversion: done
diff --git a/doc/bugs/MultiMarkdown_footnote_support_seems_to_be_broken.mdwn b/doc/bugs/MultiMarkdown_footnote_support_seems_to_be_broken.mdwn
index 2baba7137..b6c771780 100644
--- a/doc/bugs/MultiMarkdown_footnote_support_seems_to_be_broken.mdwn
+++ b/doc/bugs/MultiMarkdown_footnote_support_seems_to_be_broken.mdwn
@@ -36,3 +36,8 @@ I've been running with this patch to fix it:
     2.21.0.595.g6364b05174
 
 [[!tag patch]]
+[[done]]
+
+> Applied (along with some accompanying tests) in e642784. Thanks for
+> finding and fixing the bug.
+> --[[schmonz]]

Please test sudo-mass-rebuild branch on Debian
diff --git a/doc/bugs/ikiwiki-mass-rebuild_has_probably_never_worked_portably.mdwn b/doc/bugs/ikiwiki-mass-rebuild_has_probably_never_worked_portably.mdwn
index 867b99566..18866c98c 100644
--- a/doc/bugs/ikiwiki-mass-rebuild_has_probably_never_worked_portably.mdwn
+++ b/doc/bugs/ikiwiki-mass-rebuild_has_probably_never_worked_portably.mdwn
@@ -144,3 +144,8 @@ The `-m` may be overzealous. I have some sites running as users with `/sbin/nolo
 >>>>     my $ret=system("sudo", "-n", "-s", "-u", $user, "/bin/sh", "-c", "--", "$0", "--nonglobal", @ARGV);
 >>>> 
 >>>> --[[schmonz]]
+
+>>>>> [[!template id=gitbranch branch=schmonz/sudo-mass-rebuild author="[[schmonz]]"]]
+>>>>> Works well for me on macOS and NetBSD. Does it look right? Can
+>>>>> someone vouch that there is indeed no functional change on Debian?
+>>>>> --[[schmonz]]

diff --git a/doc/git.mdwn b/doc/git.mdwn
index 1b21a93ac..df26b2ad3 100644
--- a/doc/git.mdwn
+++ b/doc/git.mdwn
@@ -63,6 +63,8 @@ think about merging them. This is recommended. :-)
 * [[thcipriani]] `https://github.com/thcipriani/ikiwiki.git` ([[browse|https://github.com/thcipriani/ikiwiki]])
 * [[tincho]] `git@github.com:TheTincho/ikiwiki.git` ([[browse|https://github.com/TheTincho/ikiwiki]])
 * [[hefee]] `https://salsa.debian.org/hefee/ikiwiki.git/` ([[browse|https://salsa.debian.org/hefee/ikiwiki]])
+* bsv `https://bico.media/1EZF5WfG6t35iwFpyVVptxT1MB4DKt6G2U`
+  bsv blockchain repo using ([[git-remote-bsv|https://github.com/xloem/git-remote-bsv]])
 ## branches
 
 Current branches of ikiwiki are listed on [[branches]].

Response: am trying sudo
diff --git a/doc/bugs/ikiwiki-mass-rebuild_has_probably_never_worked_portably.mdwn b/doc/bugs/ikiwiki-mass-rebuild_has_probably_never_worked_portably.mdwn
index 3bae33ada..867b99566 100644
--- a/doc/bugs/ikiwiki-mass-rebuild_has_probably_never_worked_portably.mdwn
+++ b/doc/bugs/ikiwiki-mass-rebuild_has_probably_never_worked_portably.mdwn
@@ -138,3 +138,9 @@ The `-m` may be overzealous. I have some sites running as users with `/sbin/nolo
 >>> and thorough option might be to make the run-as-user command
 >>> configurable, with some strong suggestions and warnings. Thoughts?
 >>> --[[schmonz]]
+
+>>>> Here's what I'm experimenting with now:
+>>>>
+>>>>     my $ret=system("sudo", "-n", "-s", "-u", $user, "/bin/sh", "-c", "--", "$0", "--nonglobal", @ARGV);
+>>>> 
+>>>> --[[schmonz]]

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

Directive fix
diff --git a/doc/bugs/MultiMarkdown_footnot_support_seems_to_be_broken.mdwn b/doc/bugs/MultiMarkdown_footnot_support_seems_to_be_broken.mdwn
index f59482278..2baba7137 100644
--- a/doc/bugs/MultiMarkdown_footnot_support_seems_to_be_broken.mdwn
+++ b/doc/bugs/MultiMarkdown_footnot_support_seems_to_be_broken.mdwn
@@ -35,4 +35,4 @@ I've been running with this patch to fix it:
     -- 
     2.21.0.595.g6364b05174
 
-[[!tags patch]]
+[[!tag patch]]

diff --git a/doc/bugs/MultiMarkdown_footnot_support_seems_to_be_broken.mdwn b/doc/bugs/MultiMarkdown_footnot_support_seems_to_be_broken.mdwn
new file mode 100644
index 000000000..f59482278
--- /dev/null
+++ b/doc/bugs/MultiMarkdown_footnot_support_seems_to_be_broken.mdwn
@@ -0,0 +1,38 @@
+Hello,
+
+I have just updated an ikiwiki installation of mine from the `master` branch in 2014
+to the current `master` (430f69034f7c9f64325ef48da3b3eaf0d685dcc5), and found out that the
+the footnote support with MultiMarkdown is broken. After some investigation, I believe that
+the breakage was introduced in 4db4e589e4c73f076b666a77b86743695454a3ce, with Discount support
+for footnotes. The conditional for the footnote support in MultiMarkdown is inverted.
+
+I've been running with this patch to fix it:
+
+    From 8c624b3cc67bf41b3987a27b15a8dee5fe1087f7 Mon Sep 17 00:00:00 2001
+    From: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+    Date: Thu, 29 Aug 2019 16:51:45 +0200
+    Subject: [PATCH] Fix inverted conditional for multimarkdown footnote support
+    
+    ---
+     IkiWiki/Plugin/mdwn.pm | 4 +---
+     1 file changed, 1 insertion(+), 3 deletions(-)
+    
+    diff --git a/IkiWiki/Plugin/mdwn.pm b/IkiWiki/Plugin/mdwn.pm
+    index eefa29a97..cff4204ef 100644
+    --- a/IkiWiki/Plugin/mdwn.pm
+    +++ b/IkiWiki/Plugin/mdwn.pm
+    @@ -77,9 +77,7 @@ sub htmlize (@) {
+     				$markdown_sub=sub {
+     					my %flags=( use_metadata => 0 );
+     
+    -					if ($config{mdwn_footnotes}) {
+    -						$flags{disable_footnotes}=1;
+    -					}
+    +					$flags{disable_footnotes}= not $config{mdwn_footnotes};
+     
+     					Text::MultiMarkdown::markdown(shift, \%flags);
+     				}
+    -- 
+    2.21.0.595.g6364b05174
+
+[[!tags patch]]

I've not looked at Shake yet, thanks, I'll give it a look! — [[Jon]]
diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
index 9d2a7c746..851fdbe1f 100644
--- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
+++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
@@ -84,3 +84,5 @@ I've got an idea of how to handle `template`, but haven't tried coding it up yet
 Cool, Jon. Have you thought about Shake + pandoc as an interesting alternative to Hakyll,
 perhaps a little more lightweight and flexible ? Here’s a [bit of Shake code](https://github.com/simonmichael/hledger/blob/master/Shake.hs#L421)
 I use for rendering wiki-like pages. —[[Simon Michael]]
+
+> I've not looked at Shake yet, thanks, I'll give it a look! — [[Jon]]

diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
index 79a6a758c..9d2a7c746 100644
--- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
+++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
@@ -79,7 +79,7 @@ Directives, I've written basic implementations of `meta` and `tag`. In both case
 `Metadata`, which is really a hash map. I've yet to figure out plumbing that back into Hakyll, though.
 I've got an idea of how to handle `template`, but haven't tried coding it up yet. — [[Jon]]
 
-——-
+-----
 
 Cool, Jon. Have you thought about Shake + pandoc as an interesting alternative to Hakyll,
 perhaps a little more lightweight and flexible ? Here’s a [bit of Shake code](https://github.com/simonmichael/hledger/blob/master/Shake.hs#L421)

Suggest shake
diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
index ccad64351..79a6a758c 100644
--- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
+++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
@@ -78,3 +78,9 @@ the page-linking rules are not yet implemented (the wiki link target is passed t
 Directives, I've written basic implementations of `meta` and `tag`. In both cases, I build up Hakyll
 `Metadata`, which is really a hash map. I've yet to figure out plumbing that back into Hakyll, though.
 I've got an idea of how to handle `template`, but haven't tried coding it up yet. — [[Jon]]
+
+——-
+
+Cool, Jon. Have you thought about Shake + pandoc as an interesting alternative to Hakyll,
+perhaps a little more lightweight and flexible ? Here’s a [bit of Shake code](https://github.com/simonmichael/hledger/blob/master/Shake.hs#L421)
+I use for rendering wiki-like pages. —[[Simon Michael]]

some beginning code to migrate an ikiwiki to hakyll
diff --git a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
index ff20f7c8a..ccad64351 100644
--- a/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
+++ b/doc/todo/rewrite_ikiwiki_in_haskell/discussion.mdwn
@@ -63,3 +63,18 @@ Rather than coding plugins for the Perl ikiwiki in Haskell, I wonder how easily
 -----
 
 I'm very keen on this, and would be interested in helping. I've been wanting to use ikiwiki for years, but the idea of investing time in the perl ecosystem and perl-based implementation stops me. -- [[Simon Michael]]
+
+-----
+
+I've recently been wondering whether I could migrate my personal blog (powered by IkiWiki) to Hakyll.
+I'm really fond of Ikiwiki's wiki link syntax, as well as the linking rules, and many of the features
+offered by plugins. Therefore I set out to see how easily (and whether it's even feasible) to implement
+them on top of Hakyll. I'm totally new to Hakyll so I don't fully understand some of the concepts but
+I've made some promising initial progress. I decided to share my work in progress experiments here:
+<https://github.com/jmtd/hakyll-ikiwiki>
+
+I can recognise and parse out wiki links and directives. Wikilinks are translated into HTML links, but
+the page-linking rules are not yet implemented (the wiki link target is passed through as-is). For
+Directives, I've written basic implementations of `meta` and `tag`. In both cases, I build up Hakyll
+`Metadata`, which is really a hash map. I've yet to figure out plumbing that back into Hakyll, though.
+I've got an idea of how to handle `template`, but haven't tried coding it up yet. — [[Jon]]

lol
diff --git a/doc/forum/A_new_ikiwiki_logo.mdwn b/doc/forum/A_new_ikiwiki_logo.mdwn
index 93b4d86eb..8533f97f9 100644
--- a/doc/forum/A_new_ikiwiki_logo.mdwn
+++ b/doc/forum/A_new_ikiwiki_logo.mdwn
@@ -3,3 +3,5 @@
 ![cartoon depiction of a stick figure dragging a camel](http://halestrom.net/darksleep/software/minisleep/wikibash_justiki.png)
 
 Thankyou for ikiwiki.  I've stolen some of its ideas over the years, and it's shown me there are better and different ways of doing things.
+
+> This really made me laugh, thank you ☺ — [[Jon]]

saw typesetter-css and was reminded of my appeal against the anti-theme as default
diff --git a/doc/todo/Modern_standard_layout.mdwn b/doc/todo/Modern_standard_layout.mdwn
index bb6356a6d..6fd41b7dd 100644
--- a/doc/todo/Modern_standard_layout.mdwn
+++ b/doc/todo/Modern_standard_layout.mdwn
@@ -71,3 +71,15 @@ Thanks, [[users/Jon]]. (2017-12-28)
 9 month ping, does [[Joey]] or [[smcv]] have any kind of opinion on this matter,
 subsequent to my last comment? I ask because both of your takes on the issue are from
 way back in 2011. — [[Jon]] (2018-09-24)
+
+----
+
+saw this "typesetter CSS" and was reminded of the anti-theme (and my 18 month old appeal to revisit that decision):
+[typesetter-css](https://screwtapello.gitlab.io/typesetter-css/example/demo.html):
+
+> HTML is a semantic markup language, but web-browsers' default presentation of semantic HTML is more based on compatibility with decades-old browsers than with readability. There are browser-addons that will take a page, strip out the presentational markup and try to present the result in a readable format, but that shouldn't be necessary if you've got sensible semantic markup to begin with.
+> 
+> Typesetter.css is a custom stylesheet designed to present generic, semantic HTML in the most readable way possible.
+
+The readability problems with unstyled HTML that this project talks about are exactly why I think the anti-theme
+as default for the main site should be revisited. — [[Jon]] (2019-08-16)

diff --git a/doc/todo/pdf_output.mdwn b/doc/todo/pdf_output.mdwn
index e273f60fc..c176f1939 100644
--- a/doc/todo/pdf_output.mdwn
+++ b/doc/todo/pdf_output.mdwn
@@ -5,6 +5,8 @@ Note that for example dokuwiki has a [[nice plugin|http://danjer.doudouke.org/te
 > I've actually written one, it's just not publicly released.  You can check it out from the "experimental" branch of my <a href="https://github.com/rubykat/ikiplugins">ikiplugins githup repo</a>.  It's called "html2pdf" and it depends on the static version of <a href="http://wkhtmltopdf.org">wkhtmltopdf</a> rather than requiring a whole LaTeX setup. It's only been used on Ubuntu, so I can't say what problems there might be on other setups, but it works for me.  It's not properly documented; I'd appreciate some help with that.
 > -- [[KathrynAndersen]]
 
+>> kathryn: wkhtmltopdf is based on webkit (qtwebkit).  it effectively does a sort-of "i am a browser, i am going to print this page for you, oh look, you don't actually have a screen, i'll just output the file conveniently for you" thing.  as such, the dependencies are MASSIVE.  i just tried installing wkhtmltopdf on a debian server: it required pulling in x11 libraries, font configs, QT5, libxml2, 30+ other dependencies, pulling in over ONE HUNDRED sub and sub-dependencies - the works.  absolutely NO chance - whatsoever - that i am going to put a public-facing server at risk or waste resources with such a nightmare waiting to happen, particularly one that is activated by a web service.  latex on the other hand, despite being likely much larger, i can tolerate.  it has "class" and history, being developed in the 70s by donald knuth - i.e. it was *not* developed by apple (ripping off the KDE KHTMLPart team's work, years ago) and does *not* depend on a whole bunch of crap such as qt.  qt is a *GUI* toolkit, what am i gonna do installing that on a *server* for god's sake?? :)  tex.  donald knuth.  that's pedigree.
+
 >> Thanks, I downloaded the git-repro and did `sudo cp html2pdf.pm /usr/share/perl5/IkiWiki/Plugin/` then I added html2pdf to the addplugins line in my setup-file (`mywiki.setup`) as well a new line `html2pdf_pages=>"/*",`. Then I did `sudo ikiwiki --setup mywiki.setup`. However there is no button or something like that which let's me create the pdf's
 >> -- [[micheal]]
 

Adding my work-in-progress blog to the list
diff --git a/doc/ikiwikiusers.mdwn b/doc/ikiwikiusers.mdwn
index 44503217d..2d5507c0c 100644
--- a/doc/ikiwikiusers.mdwn
+++ b/doc/ikiwikiusers.mdwn
@@ -222,3 +222,4 @@ Personal sites and blogs
 * [Svetlana Tkachenko's personal website](http://svetlana.nfshost.com/index.en.html) - personal site, no blog
 * [re:fi.64's personal wiki](https://wiki.refi64.com/)
 * [canvon's blog](https://blog.canvon.de/)
+* [Coyote Works](http://coyote.works/) - Work In Progress site of Stephen Michael Kellat

No longer hosting these on Branchable.
diff --git a/doc/users/schmonz.mdwn b/doc/users/schmonz.mdwn
index e4eb28c4e..f8beb59cb 100644
--- a/doc/users/schmonz.mdwn
+++ b/doc/users/schmonz.mdwn
@@ -15,15 +15,13 @@ pages="!*/Discussion and ((link(users/schmonz) and plugins/* and !plugins/openid
 * [An undergraduate group's university-provided-static-hosted
   site](http://www.columbia.edu/cu/philo/) (with [[plugins/rsync]] and a [WIND
   authentication](http://www.columbia.edu/acis/rad/authmethods/wind/) plugin)
-* [A small personal site](http://www.anglofish.net/) (happily hosted at
-  [Branchable](http://www.branchable.com/))
+* [A small personal site](http://www.anglofish.net/)
 * [A wiki about Agile in distributed teams](http://shapemywork.com/)
 
 ## Non-public
 
 * On my laptop, personal to-do and scratch space
-* [A small personal site](http://podcast.schmonz.com/) (happily hosted at
-  [Branchable](http://www.branchable.com/))
+* [A small personal site](http://podcast.schmonz.com/)
 * At a previous job, team documentation and project planning: product and sprint
   backlogs, burndown charts, release plans/procedures/announcements,
   aggregating feeds of shared interest, etc.

Fix link in previous.
diff --git a/doc/podcast/discussion.mdwn b/doc/podcast/discussion.mdwn
index ac3da985c..7209b22e7 100644
--- a/doc/podcast/discussion.mdwn
+++ b/doc/podcast/discussion.mdwn
@@ -1,7 +1,7 @@
 I'm trying to figure out if there is a way to perhaps host podcast content on the Internet Archive and make reference to the files there as enclosures.  So far I've not had the greatest successes trying to upload content to incorporate as enclosures on my own site. I'm still trying to straighten things out to get the site running https as it is now... -- [skellat](http://coyote.works) / [alpacaherder](https://mastodon.sdf.org/@alpacaherder)
 
 > Podcast content must be in `srcdir`, at present,
-> so that `bestlink()` can find it (applying [[SubPage/LinkingRules]]).
+> so that `bestlink()` can find it (applying [[ikiwiki/SubPage/LinkingRules]]).
 > Some future enhancement might turn external media into enclosures; see
 > [[forum/ikiwiki_and_big_files]],
 > [[todo/git-annex_support]],

Reply to fancypodcast question.
diff --git a/doc/podcast/discussion.mdwn b/doc/podcast/discussion.mdwn
index 1a2e22275..ac3da985c 100644
--- a/doc/podcast/discussion.mdwn
+++ b/doc/podcast/discussion.mdwn
@@ -1 +1,12 @@
 I'm trying to figure out if there is a way to perhaps host podcast content on the Internet Archive and make reference to the files there as enclosures.  So far I've not had the greatest successes trying to upload content to incorporate as enclosures on my own site. I'm still trying to straighten things out to get the site running https as it is now... -- [skellat](http://coyote.works) / [alpacaherder](https://mastodon.sdf.org/@alpacaherder)
+
+> Podcast content must be in `srcdir`, at present,
+> so that `bestlink()` can find it (applying [[SubPage/LinkingRules]]).
+> Some future enhancement might turn external media into enclosures; see
+> [[forum/ikiwiki_and_big_files]],
+> [[todo/git-annex_support]],
+> and
+> [[todo/fancypodcast]]).
+> In the meantime, enclosures from your site can definitely work.
+> What have you tried, and in what way did it fail?
+> -- [[schmonz]]

Open up the discussion
diff --git a/doc/podcast/discussion.mdwn b/doc/podcast/discussion.mdwn
new file mode 100644
index 000000000..1a2e22275
--- /dev/null
+++ b/doc/podcast/discussion.mdwn
@@ -0,0 +1 @@
+I'm trying to figure out if there is a way to perhaps host podcast content on the Internet Archive and make reference to the files there as enclosures.  So far I've not had the greatest successes trying to upload content to incorporate as enclosures on my own site. I'm still trying to straighten things out to get the site running https as it is now... -- [skellat](http://coyote.works) / [alpacaherder](https://mastodon.sdf.org/@alpacaherder)

Add my ikiwiki/blog
diff --git a/doc/ikiwikiusers.mdwn b/doc/ikiwikiusers.mdwn
index d14e4898c..44503217d 100644
--- a/doc/ikiwikiusers.mdwn
+++ b/doc/ikiwikiusers.mdwn
@@ -221,3 +221,4 @@ Personal sites and blogs
 * [Rob Sayers' personal website](http://www.robsayers.com)
 * [Svetlana Tkachenko's personal website](http://svetlana.nfshost.com/index.en.html) - personal site, no blog
 * [re:fi.64's personal wiki](https://wiki.refi64.com/)
+* [canvon's blog](https://blog.canvon.de/)

diff --git a/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
index 53f85d881..864a5473b 100644
--- a/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
+++ b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
@@ -36,3 +36,6 @@ We're running ikiwiki version 3.20180228-1.
 >> 
 >> I've upgraded our installations of both Xapian components and will let you know if that fixes it.
 >> -- jsewell
+>>
+>>> Updating appeared to fix it. Sorry for not trying that sooner. Thanks for the help.
+>>> -- jsewell

diff --git a/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
index afbda3d5b..53f85d881 100644
--- a/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
+++ b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
@@ -27,3 +27,12 @@ We're running ikiwiki version 3.20180228-1.
 > Maybe worth blowing away `.ikiwiki/xapian/`, as described in [[tips/inside_dot_ikiwiki]]?
 > 
 > --[[schmonz]]
+> 
+>> We've removed the `.ikiwiki/xapian` directory before performing a rebuild, including actually rebooting the host OS. The search appears to work for a while, but once the wiki has been live for a while (and subject to edits on the web interface), the issue reappears.
+>> 
+>> * OS: Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-47-generic x86_64)
+>> * xapian-tools/bionic-updates,bionic-security,now 1.4.5-1ubuntu0.1 amd64
+>> * xapian-omega/bionic,now 1.4.5-1 amd64
+>> 
+>> I've upgraded our installations of both Xapian components and will let you know if that fixes it.
+>> -- jsewell

Response to jsewell's bug report.
diff --git a/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
index 3cb5d53f6..afbda3d5b 100644
--- a/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
+++ b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
@@ -17,3 +17,13 @@ Error: Exception: Db block overwritten - are there multiple writers?
 The issue goes away when we disable the 'search' plugin.
 
 We're running ikiwiki version 3.20180228-1.
+
+> Every time?
+> I used to see an error (this one, I think) intermittently on OS X, on incremental rebuilds only.
+> Haven't seen it in a while, though.
+> Maybe something got fixed upstream.
+> What OS, and what version of Xapian and Omega?
+> (1.4.11 for me.)
+> Maybe worth blowing away `.ikiwiki/xapian/`, as described in [[tips/inside_dot_ikiwiki]]?
+> 
+> --[[schmonz]]

diff --git a/doc/forum/A_new_ikiwiki_logo.mdwn b/doc/forum/A_new_ikiwiki_logo.mdwn
new file mode 100644
index 000000000..93b4d86eb
--- /dev/null
+++ b/doc/forum/A_new_ikiwiki_logo.mdwn
@@ -0,0 +1,5 @@
+(Meant as light-hearted jest)
+
+![cartoon depiction of a stick figure dragging a camel](http://halestrom.net/darksleep/software/minisleep/wikibash_justiki.png)
+
+Thankyou for ikiwiki.  I've stolen some of its ideas over the years, and it's shown me there are better and different ways of doing things.

diff --git a/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
new file mode 100644
index 000000000..3cb5d53f6
--- /dev/null
+++ b/doc/bugs/__39__search__39___plugin_causes_Error:_Exception:_Db_block_overwritten_-_are_there_multiple_writers__63__.mdwn
@@ -0,0 +1,19 @@
+When the `search` plugin is enabled, with the options:
+
+```
+# search plugin
+# path to the omega cgi program
+omega_cgi: /usr/lib/cgi-bin/omega/omega
+# use google site search rather than internal xapian index?
+google_search: 0
+```
+
+Then we see the following error when editing a page from the web browser UI or running `ikiwiki --rebuild`:
+
+```
+Error: Exception: Db block overwritten - are there multiple writers?
+```
+
+The issue goes away when we disable the 'search' plugin.
+
+We're running ikiwiki version 3.20180228-1.

add gitbranch template, prompted by Integeri. Thanks
diff --git a/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn b/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn
index cf79123ef..688b3cb85 100644
--- a/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn
+++ b/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn
@@ -1,3 +1,5 @@
+[[!template  id=gitbranch branch=duckduckgo author="[[Jon]]"]]
+
 The search box on ikiwiki uses Google to look for documentation. Unfortunately to use the result page one have to accept Google terms of use, which may be annoying (since it is full of tracker and a real privacy nightmare).
 
 Would it be possible to change the default behavior to use another search engine more privacy friendly such as https://duckduckgo.com or https://qwant.com.
@@ -8,3 +10,4 @@ With both engines adding the "site:ikiwiki.info" string to the search terms limi
 > GitHub](https://github.com/jmtd/ikiwiki/tree/duckduckgo), specifically [branch
 > duckduckgo](https://github.com/jmtd/ikiwiki/tree/duckduckgo).
 > It's also live on <https://jmtd.net/>. — [[Jon]] [[!tag patch]]
+

Fix syntax.
diff --git a/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn b/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn
index 92140b32a..07eb23d04 100644
--- a/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn
+++ b/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn
@@ -30,4 +30,4 @@ See also downstream bug report in tails: <https://labs.riseup.net/code/issues/15
 >> Happy to squash all this into a single commit if you prefer.
 >> --[[intrigeri]]
 
-[[!tags patch]]
+[[!tag patch]]

Submit branch for review.
diff --git a/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn b/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn
index 690f89d5d..92140b32a 100644
--- a/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn
+++ b/doc/todo/_Add_ikiwiki_PO-Plugin_to_ignore_languages.mdwn
@@ -1,4 +1,4 @@
-[[!template  id=gitbranch branch=feature/15355-po-plugin-disable-languages author="[[hefee]]"]]
+[[!template  id=gitbranch branch=feature/15355-po-plugin-disable-languages author="[[intrigeri]]"]]
 
 `po_disabled_languages` is used to disable languages on the website. It
 can be used to prepare new translations, while it will hide those from
@@ -20,3 +20,14 @@ See also downstream bug report in tails: <https://labs.riseup.net/code/issues/15
 > to monkey-patch ikiwiki internals. If this plugin is important to you,
 > more test coverage would be very much appreciated.
 > --[[smcv]]
+
+>> I've put this branch into a shape that I now dare submitting:
+>> https://salsa.debian.org/tails-team/ikiwiki/tree/feature/15355-po-plugin-disable-languages.
+>> It adds a little bit test coverage in the form of integration tests
+>> for the proposed feature, that incidentally exercise the rest of the
+>> basic functionality of the PO plugin.
+>> Credits go to hefee for the initial work; I merely did a lot of polishing.
+>> Happy to squash all this into a single commit if you prefer.
+>> --[[intrigeri]]
+
+[[!tags patch]]

update my comment to reflect new commits on that branch
diff --git a/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn b/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn
index 47ec555c8..cf79123ef 100644
--- a/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn
+++ b/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn
@@ -5,7 +5,6 @@ Would it be possible to change the default behavior to use another search engine
 With both engines adding the "site:ikiwiki.info" string to the search terms limit results to these present on ikiwiki.info.
 
 > I've had a first stab at implementing this. It's in [my fork on
-> GitHub](https://github.com/jmtd/ikiwiki/tree/duckduckgo), specifically branch
-> "duckduckgo" commit
-> [8aeca188f96594f3fb314b75b7ef316f808b4271](https://github.com/jmtd/ikiwiki/commit/8aeca188f96594f3fb314b75b7ef316f808b4271).
+> GitHub](https://github.com/jmtd/ikiwiki/tree/duckduckgo), specifically [branch
+> duckduckgo](https://github.com/jmtd/ikiwiki/tree/duckduckgo).
 > It's also live on <https://jmtd.net/>. — [[Jon]] [[!tag patch]]

initial implementation (I was unable to use untrusted git push to add this comment)
diff --git a/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn b/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn
index 6adc051dc..47ec555c8 100644
--- a/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn
+++ b/doc/todo/Change_the_ikiwiki.info_search_box_to_not_using_Google.mdwn
@@ -3,3 +3,9 @@ The search box on ikiwiki uses Google to look for documentation. Unfortunately t
 Would it be possible to change the default behavior to use another search engine more privacy friendly such as https://duckduckgo.com or https://qwant.com.
 
 With both engines adding the "site:ikiwiki.info" string to the search terms limit results to these present on ikiwiki.info.
+
+> I've had a first stab at implementing this. It's in [my fork on
+> GitHub](https://github.com/jmtd/ikiwiki/tree/duckduckgo), specifically branch
+> "duckduckgo" commit
+> [8aeca188f96594f3fb314b75b7ef316f808b4271](https://github.com/jmtd/ikiwiki/commit/8aeca188f96594f3fb314b75b7ef316f808b4271).
+> It's also live on <https://jmtd.net/>. — [[Jon]] [[!tag patch]]

diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn
index a78068cc8..c3d1156c1 100644
--- a/doc/sandbox.mdwn
+++ b/doc/sandbox.mdwn
@@ -5,6 +5,8 @@ Why doesn't the following work?..
 
 Sure it is. 
 
+I hope baby.
+
 Nope my friend.
 
 List:

diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn
index 8dfa9ad02..a78068cc8 100644
--- a/doc/sandbox.mdwn
+++ b/doc/sandbox.mdwn
@@ -1,5 +1,6 @@
 ###Is this a heading? 
 
+Why doesn't the following work?..
 [[!color  foreground=white background=#ff0000 text="White text on red background"]]
 
 Sure it is. 

diff --git a/doc/sandbox.mdwn b/doc/sandbox.mdwn
index 95e772e0c..8dfa9ad02 100644
--- a/doc/sandbox.mdwn
+++ b/doc/sandbox.mdwn
@@ -1,5 +1,7 @@
 ###Is this a heading? 
 
+[[!color  foreground=white background=#ff0000 text="White text on red background"]]
+
 Sure it is. 
 
 Nope my friend.

Announce 3.20190228 and 3.20170111.1
diff --git a/doc/news/version_3.20171001.mdwn b/doc/news/version_3.20171001.mdwn
deleted file mode 100644
index 3d51b8776..000000000
--- a/doc/news/version_3.20171001.mdwn
+++ /dev/null
@@ -1,23 +0,0 @@
-ikiwiki 3.20171001 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * [ [[Joey Hess|joey]] ]
-   * htmlscrubber: Add support for the video tag's `loop` and `muted`
-     attributes. Those were not in the original html5 spec, but have been
-     added in the whatwg html living standard and have wide browser support.
-   * emailauth, passwordauth: Avoid leaving `cgisess_*` files in the
-     system temp directory.
- * [ [[Simon McVittie|smcv]] ]
-   * core: Don't decode the result of `strftime` if it is already tagged as
-     UTF-8, as it might be since Perl &gt;= 5.21.1. (Closes: #[869240](http://bugs.debian.org/869240))
-   * img: Strip metadata from resized images when the deterministic config
-     option is set. Thanks, [[intrigeri]]
-   * receive: Avoid `asprintf()` in `IkiWiki::Receive`, to avoid implicit
-     declaration, potential misbehaviour on 64-bit platforms, and lack
-     of portability to non-GNU platforms
-   * t: Add a regression test for untrusted git push
-   * receive: Fix untrusted git push with git (&gt;= 2.11) by passing through
-     the necessary environment variables to make the quarantine area work
-   * debian: Declare compliance with Debian Policy 4.1.1
- * [ [[Amitai Schleier|schmonz]] ]
-   * l10n: Fix the build with po4a 0.52, by ensuring that `msgstr` ends
-     with a newline if and only if `msgid` does"""]]
diff --git a/doc/news/version_3.20190228.mdwn b/doc/news/version_3.20190228.mdwn
new file mode 100644
index 000000000..c26e8ad51
--- /dev/null
+++ b/doc/news/version_3.20190228.mdwn
@@ -0,0 +1,43 @@
+ikiwiki 3.20190228 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * aggregate: Use LWPx::ParanoidAgent if available.
+     Previously blogspam, openid and pinger used this module if available,
+     but aggregate did not. This prevents server-side request forgery or
+     local file disclosure, and mitigates denial of service when slow
+     "tarpit" URLs are accessed.
+     ([[!debcve CVE-2019-9187]])
+   * blogspam, openid, pinger: Use a HTTP proxy if configured, even if
+     LWPx::ParanoidAgent is installed.
+     Previously, only aggregate would obey proxy configuration. If a proxy
+     is used, the proxy (not ikiwiki) is responsible for preventing attacks
+     like CVE-2019-9187.
+   * aggregate, blogspam, openid, pinger: Do not access non-http, non-https
+     URLs.
+     Previously, these plugins would have allowed non-HTTP-based requests if
+     LWPx::ParanoidAgent was not installed. Preventing file URIs avoids local
+     file disclosure, and preventing other rarely-used URI schemes like
+     gopher mitigates request forgery attacks.
+   * aggregate, openid, pinger: Document LWPx::ParanoidAgent as strongly
+     recommended.
+     These plugins can request attacker-controlled URLs in some site
+     configurations.
+   * blogspam: Document LWPx::ParanoidAgent as desirable.
+     This plugin doesn't request attacker-controlled URLs, so it's
+     non-critical here.
+   * blogspam, openid, pinger: Consistently use cookiejar if configured.
+     Previously, these plugins would only obey this configuration if
+     LWPx::ParanoidAgent was not installed, but this appears to have been
+     unintended.
+   * po: Always filter .po files.
+     The po plugin in previous ikiwiki releases made the second and
+     subsequent filter call per (page, destpage) pair into a no-op,
+     apparently in an attempt to prevent *recursive* filtering (which as
+     far as we can tell can't happen anyway), with the undesired effect
+     of interpreting the raw .po file as page content (e.g. Markdown)
+     if it was inlined into the same page twice, which is apparently
+     something that tails.org does. Simplify this by deleting the code
+     that prevented repeated filtering. Thanks, intrigeri
+     (Closes: #[911356](http://bugs.debian.org/911356))"""]]
+
+ikiwiki 3.20170111.1 was also released, backporting the LWP-related
+changes from 3.20190228 to the branch used in Debian 9 'stretch'.

Add an anchor for /security/#cve-2019-9187
diff --git a/doc/security.mdwn b/doc/security.mdwn
index 378a2e4bc..fcc33fd48 100644
--- a/doc/security.mdwn
+++ b/doc/security.mdwn
@@ -612,7 +612,7 @@ in version 3.20141016.4.
 
 ([[!debcve CVE-2017-0356]]/OVE-20170111-0001)
 
-## Server-side request forgery via aggregate plugin
+## <span id="cve-2019-9187">Server-side request forgery via aggregate plugin</span>
 
 The ikiwiki maintainers discovered that the [[plugins/aggregate]] plugin
 did not use [[!cpan LWPx::ParanoidAgent]]. On sites where the

doc: Document security issues involving LWP::UserAgent
Recommend the LWPx::ParanoidAgent module where appropriate.
It is particularly important for openid, since unauthenticated users
can control which URLs that plugin will contact. Conversely, it is
non-critical for blogspam, since the URL to be contacted is under
the wiki administrator's control.
diff --git a/doc/plugins/aggregate.mdwn b/doc/plugins/aggregate.mdwn
index 75123d923..b1db828d1 100644
--- a/doc/plugins/aggregate.mdwn
+++ b/doc/plugins/aggregate.mdwn
@@ -11,6 +11,10 @@ The [[meta]] and [[tag]] plugins are also recommended to be used with this
 one. Either the [[htmltidy]] or [[htmlbalance]] plugin is suggested, since
 feeds can easily contain html problems, some of which these plugins can fix.
 
+Installing the [[!cpan LWPx::ParanoidAgent]] Perl module is strongly
+recommended. The [[!cpan LWP]] module can also be used, but is susceptible
+to server-side request forgery.
+
 ## triggering aggregation
 
 You will need to run ikiwiki periodically from a cron job, passing it the
diff --git a/doc/plugins/blogspam.mdwn b/doc/plugins/blogspam.mdwn
index 745fc48e2..0ebae7d84 100644
--- a/doc/plugins/blogspam.mdwn
+++ b/doc/plugins/blogspam.mdwn
@@ -11,6 +11,8 @@ To check for and moderate comments, log in to the wiki as an admin,
 go to your Preferences page, and click the "Comment Moderation" button.
 
 The plugin requires the [[!cpan JSON]] perl module.
+The [[!cpan LWPx::ParanoidAgent]] Perl module is recommended,
+although this plugin can also fall back to [[!cpan LWP]].
 
 You can control how content is tested via the `blogspam_options` setting.
 The list of options is [here](http://blogspam.net/api/2.0/testComment.html#options).
diff --git a/doc/plugins/openid.mdwn b/doc/plugins/openid.mdwn
index 4c8e0d381..a061cb43f 100644
--- a/doc/plugins/openid.mdwn
+++ b/doc/plugins/openid.mdwn
@@ -7,8 +7,11 @@ into the wiki.
 The plugin needs the [[!cpan Net::OpenID::Consumer]] perl module.
 Version 1.x is needed in order for OpenID v2 to work.
 
-The [[!cpan LWPx::ParanoidAgent]] perl module is used if available, for
-added security. Finally, the [[!cpan Crypt::SSLeay]] perl module is needed
+The [[!cpan LWPx::ParanoidAgent]] Perl module is strongly recommended.
+The [[!cpan LWP]] module can also be used, but is susceptible to
+server-side request forgery.
+
+The [[!cpan Crypt::SSLeay]] Perl module is needed
 to support users entering "https" OpenID urls.
 
 This plugin is enabled by default, but can be turned off if you want to
diff --git a/doc/plugins/pinger.mdwn b/doc/plugins/pinger.mdwn
index 00d83e1bb..f37979ac6 100644
--- a/doc/plugins/pinger.mdwn
+++ b/doc/plugins/pinger.mdwn
@@ -10,9 +10,11 @@ can be kept up-to-date.
 To configure what URLs to ping, use the [[ikiwiki/directive/ping]]
 [[ikiwiki/directive]].
 
-The [[!cpan LWP]] perl module is used for pinging. Or the [[!cpan
-LWPx::ParanoidAgent]] perl module is used if available, for added security.
-Finally, the [[!cpan Crypt::SSLeay]] perl module is needed to support pinging
+The [[!cpan LWPx::ParanoidAgent]] Perl module is strongly recommended.
+The [[!cpan LWP]] module can also be used, but is susceptible
+to server-side request forgery.
+
+The [[!cpan Crypt::SSLeay]] perl module is needed to support pinging
 "https" urls.
 
 By default the pinger will try to ping a site for 15 seconds before timing
diff --git a/doc/security.mdwn b/doc/security.mdwn
index e7770dd27..378a2e4bc 100644
--- a/doc/security.mdwn
+++ b/doc/security.mdwn
@@ -611,3 +611,52 @@ This was fixed in ikiwiki 3.20170111, with fixes backported to Debian 8
 in version 3.20141016.4.
 
 ([[!debcve CVE-2017-0356]]/OVE-20170111-0001)
+
+## Server-side request forgery via aggregate plugin
+
+The ikiwiki maintainers discovered that the [[plugins/aggregate]] plugin
+did not use [[!cpan LWPx::ParanoidAgent]]. On sites where the
+aggregate plugin is enabled, authorized wiki editors could tell ikiwiki
+to fetch potentially undesired URIs even if LWPx::ParanoidAgent was
+installed:
+
+* local files via `file:` URIs
+* other URI schemes that might be misused by attackers, such as `gopher:`
+* hosts that resolve to loopback IP addresses (127.x.x.x)
+* hosts that resolve to RFC 1918 IP addresses (192.168.x.x etc.)
+
+This could be used by an attacker to publish information that should not have
+been accessible, cause denial of service by requesting "tarpit" URIs that are
+slow to respond, or cause undesired side-effects if local web servers implement
+["unsafe"](https://tools.ietf.org/html/rfc7231#section-4.2.1) GET requests.
+([[!debcve CVE-2019-9187]])
+
+Additionally, if the LWPx::ParanoidAgent module was not installed, the
+[[plugins/blogspam]], [[plugins/openid]] and [[plugins/pinger]] plugins
+would fall back to [[!cpan LWP]], which is susceptible to similar attacks.
+This is unlikely to be a practical problem for the blogspam plugin because
+the URL it requests is under the control of the wiki administrator, but
+the openid plugin can request URLs controlled by unauthenticated remote
+users, and the pinger plugin can request URLs controlled by authorized
+wiki editors.
+
+This is addressed in ikiwiki 3.20190228 as follows, with the same fixes
+backported to Debian 9 in version 3.20170111.1:
+
+* URI schemes other than `http:` and `https:` are not accepted, preventing
+  access to `file:`, `gopher:`, etc.
+
+* If a proxy is [[configured in the ikiwiki setup file|tips/using_a_proxy]],
+  it is used for all outgoing `http:` and `https:` requests. In this case
+  the proxy is responsible for blocking any requests that are undesired,
+  including loopback or RFC 1918 addresses.
+
+* If a proxy is not configured, and LWPx::ParanoidAgent is installed,
+  it will be used. This prevents loopback and RFC 1918 IP addresses, and
+  sets a timeout to avoid denial of service via "tarpit" URIs.
+
+* Otherwise, the ordinary LWP user-agent will be used. This allows requests
+  to loopback and RFC 1918 IP addresses, and has less robust timeout
+  behaviour. We are not treating this as a vulnerability: if this
+  behaviour is not acceptable for your site, please make sure to install
+  LWPx::ParanoidAgent or disable the affected plugins.
diff --git a/doc/tips/using_a_proxy.mdwn b/doc/tips/using_a_proxy.mdwn
new file mode 100644
index 000000000..39df3c42a
--- /dev/null
+++ b/doc/tips/using_a_proxy.mdwn
@@ -0,0 +1,22 @@
+Some ikiwiki plugins make outgoing HTTP requests from the web server:
+
+* [[plugins/aggregate]] (to download Atom and RSS feeds)
+* [[plugins/blogspam]] (to check whether a comment or edit is spam)
+* [[plugins/openid]] (to authenticate users)
+* [[plugins/pinger]] (to ping other ikiwiki installations)
+
+If your ikiwiki installation cannot contact the Internet without going
+through a proxy, you can configure this in the [[setup file|setup]] by
+setting environment variables:
+
+    ENV:
+        http_proxy: "http://proxy.example.com:8080"
+        https_proxy: "http://proxy.example.com:8080"
+        # optional
+        no_proxy: ".example.com,www.example.org"
+
+Note that some plugins will use the configured proxy for all destinations,
+even if they are listed in `no_proxy`.
+
+To avoid server-side request forgery attacks, ensure that your proxy does
+not allow requests to addresses that are considered to be internal.

po: Always filter .po files
The input to filter hooks is meant to be the content of a source file
on disk. If we only filter once per (page, destpage) pair, and a page
is inlined into the same destpage more than once, then the second
occurrence will render as the result of htmlizing .po source as if
it was Markdown (or whatever the type of the corresponding master page
is), which is never going to end well.
The alreadyfiltered mechanism was added in commit 1e874b3f to avoid
preprocessing loops, but I'm not sure where it could lead to a loop:
filter hooks are only called from IkiWiki::filter, which is only called
on page content from disk or on proposed content being previewed.
According to <https://bugs.debian.org/911356#41>, deleting the
alreadyfiltered mechanism resolves the problem, as well as simplifying
the code.
Closes: #911356
Tested-by: intrigeri
diff --git a/CHANGELOG b/CHANGELOG
index ad37e72e8..5237ee7b8 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,18 @@
+ikiwiki (3.20190208) UNRELEASED; urgency=medium
+
+  * po: Always filter .po files.
+    The po plugin in previous ikiwiki releases made the second and
+    subsequent filter call per (page, destpage) pair into a no-op,
+    apparently in an attempt to prevent *recursive* filtering (which as
+    far as we can tell can't happen anyway), with the undesired effect
+    of interpreting the raw .po file as page content (e.g. Markdown)
+    if it was inlined into the same page twice, which is apparently
+    something that tails.org does. Simplify this by deleting the code
+    that prevented repeated filtering. Thanks, intrigeri
+    (Closes: #911356)
+
+ -- Simon McVittie <smcv@debian.org>  Sun, 24 Feb 2019 17:11:39 +0000
+
 ikiwiki (3.20190207) upstream; urgency=medium
 
   [ Amitai Schleier ]
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index 418e8e58a..13b98b739 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -51,7 +51,6 @@ sub import {
 	hook(type => "checkcontent", id => "po", call => \&checkcontent);
 	hook(type => "canremove", id => "po", call => \&canremove);
 	hook(type => "canrename", id => "po", call => \&canrename);
-	hook(type => "editcontent", id => "po", call => \&editcontent);
 	hook(type => "formbuilder_setup", id => "po", call => \&formbuilder_setup, last => 1);
 	hook(type => "formbuilder", id => "po", call => \&formbuilder);
 
@@ -303,9 +302,8 @@ sub filter (@) {
 	my $page = $params{page};
 	my $destpage = $params{destpage};
 	my $content = $params{content};
-	if (istranslation($page) && ! alreadyfiltered($page, $destpage)) {
+	if (istranslation($page)) {
 		$content = po_to_markup($page, $content);
-		setalreadyfiltered($page, $destpage);
 	}
 	return $content;
 }
@@ -520,15 +518,6 @@ sub canrename (@) {
 	return undef;
 }
 
-# As we're previewing or saving a page, the content may have
-# changed, so tell the next filter() invocation it must not be lazy.
-sub editcontent () {
-	my %params=@_;
-
-	unsetalreadyfiltered($params{page}, $params{page});
-	return $params{content};
-}
-
 sub formbuilder_setup (@) {
 	my %params=@_;
 	my $form=$params{form};
@@ -737,42 +726,6 @@ sub myisselflink ($$) {
 }
 
 # ,----
-# | Blackboxes for private data
-# `----
-
-{
-	my %filtered;
-
-	sub alreadyfiltered($$) {
-		my $page=shift;
-		my $destpage=shift;
-
-		return exists $filtered{$page}{$destpage}
-			 && $filtered{$page}{$destpage} eq 1;
-	}
-
-	sub setalreadyfiltered($$) {
-		my $page=shift;
-		my $destpage=shift;
-
-		$filtered{$page}{$destpage}=1;
-	}
-
-	sub unsetalreadyfiltered($$) {
-		my $page=shift;
-		my $destpage=shift;
-
-		if (exists $filtered{$page}{$destpage}) {
-			delete $filtered{$page}{$destpage};
-		}
-	}
-
-	sub resetalreadyfiltered() {
-		undef %filtered;
-	}
-}
-
-# ,----
 # | Helper functions
 # `----
 
@@ -1146,7 +1099,6 @@ sub commit_and_refresh ($) {
 		IkiWiki::rcs_update();
 	}
 	# Reinitialize module's private variables.
-	resetalreadyfiltered();
 	resettranslationscache();
 	flushmemoizecache();
 	# Trigger a wiki refresh.
diff --git a/doc/bugs/po:_second_or_subsequent_inline_of_translated_page_inlines_.po_file__44___not_translated_content.mdwn b/doc/bugs/po:_second_or_subsequent_inline_of_translated_page_inlines_.po_file__44___not_translated_content.mdwn
index a926135b0..26d3717b9 100644
--- a/doc/bugs/po:_second_or_subsequent_inline_of_translated_page_inlines_.po_file__44___not_translated_content.mdwn
+++ b/doc/bugs/po:_second_or_subsequent_inline_of_translated_page_inlines_.po_file__44___not_translated_content.mdwn
@@ -177,3 +177,6 @@ be resolved by renaming.
 
 If it's valid to remove the `alreadyfiltered` mechanism, my
 `wip/po-filter-every-time` branch does that. Please test?
+
+> intrigeri says [this change works as intended on tails.org](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=911356#41),
+> so I've applied it. [[done]] --[[smcv]]
diff --git a/t/po.t b/t/po.t
index 82f9e2078..ccb508bef 100755
--- a/t/po.t
+++ b/t/po.t
@@ -447,25 +447,10 @@ like($output{'debian911356.fr'}, qr{
 	\s*
 	<p>Entre\sles\sinlines</p>
 	\s*
-	.*	# TODO: This paragraph gets mangled (Debian #911356)
-	\s*
-	<p>Après\sles\sinlines</p>
-}sx);
-
-TODO: {
-local $TODO = "Debian bug #911356";
-like($output{'debian911356.fr'}, qr{
-	<p>Avant\sla\spremière\sinline</p>
-	\s*
-	<p>Contenu\sfrançais</p>
-	\s*
-	<p>Entre\sles\sinlines</p>
-	\s*
 	<p>Contenu\sfrançais</p>
 	\s*
 	<p>Après\sles\sinlines</p>
 }sx);
-};
 
 # Variation of Debian #911356 without using raw inlines.
 like($output{debian911356ish}, qr{
@@ -511,28 +496,6 @@ like($output{'debian911356ish.fr'}, qr{
 	\s*
 	<p>Entre\sles\sinlines</p>
 	\s*
-	.*	# TODO: This paragraph gets mangled (Debian #911356)
-	\s*
-	<p>Après\sles\sinlines</p>
-}sx);
-
-TODO: {
-local $TODO = "Debian bug #911356";
-like($output{'debian911356ish.fr'}, qr{
-	<p>Avant\sla\spremière\sinline</p>
-	\s*
-	<!--feedlinks-->
-	\s*
-	<div\sclass="inlinecontent">
-	\s*
-	<h6>debian911356-inlined\.fr</h6>
-	\s*
-	<p>Contenu\sfrançais</p>
-	\s*
-	</div><!--inlinecontent-->
-	\s*
-	<p>Entre\sles\sinlines</p>
-	\s*
 	<!--feedlinks-->
 	\s*
 	<div\sclass="inlinecontent">
@@ -545,6 +508,5 @@ like($output{'debian911356ish.fr'}, qr{
 	\s*
 	<p>Après\sles\sinlines</p>
 }sx);
-};
 
 done_testing;