Recent changes to this wiki:

Fix markup
diff --git a/linux-anecdotes.mdwn b/linux-anecdotes.mdwn
index 3fdbc24..1026b0a 100644
--- a/linux-anecdotes.mdwn
+++ b/linux-anecdotes.mdwn
@@ -106,10 +106,10 @@ using MS-DOS. That was fun, of course, but it begged for revenge. This
 happened while we were sharing an office at the university, so once
 when Linus went out to get something to drink or something, I created an
 alias for startx for him. My alias first ran the real startx, and then
-printed out a kernel `Oops' message. The first time Linus noticed this
+printed out a kernel `Oops` message. The first time Linus noticed this
 made him a bit worried, but he logged out and cleared the screen too fast
 to read it, but the second time made him really worried. I'd copied the
-`Oops' message from linux-kernel, and of course it didn't suit Linus's
+`Oops` message from linux-kernel, and of course it didn't suit Linus's
 kernel at all. He had gotten as far as decoding the message by hand,
 and muttering something like ``Why is it crashing there? It can't crash
 there!'', when I burst out laughing and told him what I'd done. Linus

Update for cliapp release
diff --git a/cliapp/NEWS.mdwn b/cliapp/NEWS.mdwn
index 7219b4a..8c1a2f6 100644
--- a/cliapp/NEWS.mdwn
+++ b/cliapp/NEWS.mdwn
@@ -1,6 +1,23 @@
 NEWS for cliapp
 ===============
 
+Version 1.20140719
+------------------
+
+* The way logging is set up has been split into smaller methods, to
+  allow overriding better. See `setup_logging_handler_for_file`,
+  `setup_logging_formatter_for_file`, and
+  `setup_logging_formatter_for_syslog`.
+
+* Plugins no longer need to define a `disable` method: the default
+  implementation is now a no-op, instead of raising
+  `NotImplementedError`.
+
+Bug fixes:
+
+* When getting help for a subcommand, cliapp would crash saying
+  `get_help_text_formatter` couldn't be found. This has been fixed.
+
 Version 1.20140315
 ------------------
 
diff --git a/cliapp/README.mdwn b/cliapp/README.mdwn
index 9b78e69..448d44d 100644
--- a/cliapp/README.mdwn
+++ b/cliapp/README.mdwn
@@ -32,7 +32,7 @@ To run the test suite:
 Legalese
 --------
 
-* Copyright (C) 2011-2013  Lars Wirzenius
+* Copyright (C) 2011-2014  Lars Wirzenius
 * Copyright (C) 2012-2013  Codethink Limited
 
 This program is free software; you can redistribute it and/or modify

Start toolbox page
diff --git a/toolbox.mdwn b/toolbox.mdwn
new file mode 100644
index 0000000..6bd74de
--- /dev/null
+++ b/toolbox.mdwn
@@ -0,0 +1,24 @@
+[[!meta title="My toolbox"]]
+[[!tag article]]
+
+Just for fun, here is a list of software and other tools I use
+frequently.
+
+* A Lenovo Thinkpad X220 laptop, running Debian wheezy.
+    - 2.6 GHz CPU
+    - 16 GiB RAM
+    - 1 TB spinning drive
+    - 240 GB SSD
+* Desktop environment: GNOME3 with Xmonad as the window manager.
+* Text editor: Emacs, with a little vi for quick edits.
+* Shell: bash.
+* Programming languages: Python 2, C, plus the usual assortment of
+  shell, awk, and other Unix command line tools.
+* Version control: git.
+* Virtualisation: kvm with libvirt and virt-manager.
+* Web browser: Iceweasel (nee Firefox).
+* RSS/Atom feeds: Liferea.
+* IRC: Xchat and bip.
+* E-mail: mutt, offlineimap, notmuch.
+* File synchronisation across machines: git-annex.
+* Backups: Obnam, with a little rsync.

Update travel checklist
diff --git a/travel.mdwn b/travel.mdwn
index 33866d3..109b5c4 100644
--- a/travel.mdwn
+++ b/travel.mdwn
@@ -4,16 +4,15 @@
 Before the trip
 ---------------
 
-* Print a hardcopy of addresses of the most important people in your
-  life, and all places you'll be staying on the trip. A hardcopy is
-  more likely to survive and be usable in an emergency than a digital
-  one.
-* Print your schedule. Not just flights, but all
-  transportation. Also meetings, etc.
+* Print a hardcopy of addresses and phone numbers of the most
+  important people in your life, and all places you'll be staying on
+  the trip. A hardcopy is more likely to survive and be usable in an
+  emergency than a digital one.
+* Print your schedule. Not just flights, but all transportation. Also
+  meetings, etc.
 * Notify family, friends of flight times and flight numbers.
 * Check tipping practices at the destinations.
-* Get some cash for the destination.
-* Do an online checkin for the flights, if possible.
+* Do an online checkin for the flights.
 * Print e-tickets and boarding passes.
 * Pack.
 * Clean up at home. It reduces stress considerably to come back to a
@@ -44,28 +43,27 @@ of maximum dimensions.
     * print-outs of e-ticket, boarding pass
     * passport
     * copy of passport on paper
-    * prescriptions for medicines, if any
-    * map of destination, if applicable
+    * prescriptions for medicines
+    * map of destination
 * electronics:
     * laptop
     * laptop power
     * laptop power cord for destination
-    * gsm phone
-    * USB cable for phone (for charging at least)
-    * USB hard disk
-    * USB hard disk cable
-    * USB stick, with encryption keys
-    * USB stick, for swapping data with others
-    * USB stick, for re-installing laptop from scratch
-    * earphones
     * power plug converter
     * power strip
+    * phone
+    * USB cable for charging phone
+    * USB hard drive
+    * USB hard drive cable
+    * USB stick, for swapping data with others
+    * USB stick, for re-installing laptop from scratch
+    * headphones
     * 3+ m ethernet cable
 * photography:
     * camera body
     * 50 mm lens
     * camera charger
-    * memory card reader
+    * USB cable for downloading from camera
 * hygiene:
     * toothbrush
     * toothpaste
@@ -86,22 +84,19 @@ of maximum dimensions.
     * 1 muffler/scarf
 * misc:
     * home keys
-    * watch
-    * little toy frog
     * sunglasses in case
     * wallet
-        * euros
+        * cash for home
         * cash for destination
-        * credit card(s)
+        * debit and credit cards as needed
     * money belt
         * reserve credit card
-        * travel insurance cards (Pohjola, Tapiola)
+        * travel insurance documentation
     * medication
     * microfiber cloth for wiping glasses
     * notebook and pen
     * business cards
-    * laundry detergent (unless bought at destination)
-    * book for entertainment
+    * e-book reader
     * nail clippers
     * carry-on suitcase
     * plastic or other bag to hold dirty laundry

Update my dream job requirements
diff --git a/dream-job.mdwn b/dream-job.mdwn
index c3bfe37..b2b2a66 100644
--- a/dream-job.mdwn
+++ b/dream-job.mdwn
@@ -7,7 +7,7 @@ An employer that wants me to give up on a strong preference needs
 to provide extraordinary compensation.
 I can give up weak preferences more easily, but the more I have to
 do that, the bigger the compensation needs to be.
-(Compensation need not be financial.)
+Compensation need not be financial.
 
 Strong preferences
 ------------------
@@ -18,11 +18,12 @@ Strong preferences
   participate in high-level architecture and design, and related
   decision making, not just code a small module in a large system.
   If I feel it is a good idea, I can make large, sweeping changes to
-  the system as a whole, or any part in it.
-* The project should be developed, from the start, using tools, 
-  techniques, technologies, and processes that I like and am 
-  convinced work well, for example, using sensible languages, TDD, 
-  high test coverage, DVCS, and bug tracking.
+  the system as a whole, or any part in it, in collaboration with the
+  rest of the developers.
+* The project should be developed, from the start, using tools,
+  techniques, technologies, and processes that I like and am convinced
+  work well. For example, using sensible languages, fast iterations,
+  TDD, high test coverage, DVCS, and bug tracking.
 * At least one of schedule or scope should be flexible. There should be 
   room in the schedule to occasionally stop and step back and look at 
   the bigger picture, or to go out on a walk to think deep thoughts about 
@@ -44,23 +45,21 @@ Weak preferences
 ----------------
 
 * The software I develop is something I use myself.
-* The software is developed with a true community. The project does
-  not require copyright assignments, does not throw code over a wall,
-  and does not dictate the direction of the project based on its
-  business needs.
-* The employer should not use software patents at all. I should be
-  able to ignore that the patent system exists.
+* The software, if it is free software, is developed with a true
+  community. The project does not require copyright assignments, does
+  not throw code over a wall, and does not dictate the direction of
+  the project solely based on its business needs.
 * Management should concentrate on providing a good working environment,
   and sufficient resources to do good work, and should not try to
   micro-manage me or my team.
 * Projects should be shortish, up to a few months. 
   Larger projects should be broken down into shorter ones.
 * Work should be done at home, or in a quiet office with private
-  rooms, or rooms for small teams.
+  rooms, or rooms for small teams. No open plan offices.
 * I should be compensated reasonably well. I should have at least five
   weeks of vacation per year. If work requires me to be away from home
   during weekends, or travel on weekends, those days should count as
-  work and be compensated in some way.
+  work and be compensated in a suitable way.
 * I would like my employer to send me to one or two interesting 
   conferences each year, perhaps even to give presentations about my
   work. One of the conferences should be Debconf, the yearly Debian

Add cliapp bug
diff --git a/cliapp/bugs/runcmd-output-capture-callbacks.mdwn b/cliapp/bugs/runcmd-output-capture-callbacks.mdwn
new file mode 100644
index 0000000..8e67c0f
--- /dev/null
+++ b/cliapp/bugs/runcmd-output-capture-callbacks.mdwn
@@ -0,0 +1,4 @@
+It would be nice to be able to capture, in real time, the output from the command
+cliapp.runcmd runs, via callbacks or otherwise. Ideally, such callbacks could
+also filter/modify the output: if nothing else, this could reduce the amount of
+data runcmd keeps in memory at once. --liw

Add cliapp bug
diff --git a/cliapp/bugs/help-does-not-include-list-config-option.mdwn b/cliapp/bugs/help-does-not-include-list-config-option.mdwn
new file mode 100644
index 0000000..132be45
--- /dev/null
+++ b/cliapp/bugs/help-does-not-include-list-config-option.mdwn
@@ -0,0 +1,2 @@
+`foo --help` doesn't seem to include `--list-config` and maybe other
+command-line-only options that cliapp itself adds. --liw

Redirect Obnam home itself, too
diff --git a/obnam.mdwn b/obnam.mdwn
index 2a4b28e..7f10113 100644
--- a/obnam.mdwn
+++ b/obnam.mdwn
@@ -1,62 +1 @@
-[[!meta title="Obnam - backup program"]]
-[[!tag program]]
-
-Obnam is an **easy, secure backup program.**
-Backups can be stored on local hard disks, 
-or online via the 
-[SSH SFTP](http://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol) protocol.
-The backup server, if used, does not require any special software,
-on top of SSH.
-
-Some **features** that may interest you:
-
-* **Snapshot** backups. Every generation looks like a complete snapshot,
-  so you don't need to care about full versus incremental backups, or
-  rotate real or virtual tapes.
-* Data **de-duplication**, across files, and backup generations. If the
-  backup repository already contains a particular chunk of data, it will
-  be re-used, even if it was in another file in an older backup
-  generation. This way, you don't need to worry about moving around large
-  files, or modifying them. (However, the current implementation
-  has some limitations: see [[faq/dedup]]).
-* **Encrypted** backups, using GnuPG.
-
-See the [[tutorial]], and below for links to the manual, which has
-examples of how to use Obnam.
-
-Obnam can do **push** or **pull** backups, depending on what you
-need. You can run Obnam on the client, and push backups to the server,
-or on the server, and pull from the client over SFTP. However, access
-to live data over SFTP is currently somewhat limited and fragile, so it
-is not recommended.
-
-* [[1.0 release announcement|1.0]]
-* [[Status and support|status]]
-* [[Download]]
-* [[Contact]]
-* [[Bugs]]
-* [[Donate]]
-
-Documentation
--------------
-
-* The full manual (currently a work in progress): available as
-  [a web page](http://code.liw.fi/obnam/manual/obnam-manual.en.html) and
-  [PDF](http://code.liw.fi/obnam/manual/obnam-manual.en.pdf).
-    - The Obnam test suite is also meant to be useful for the more
-      technical users of Obnam to read:
-      [web page](http://code.liw.fi/obnam/yarns.html),
-      [PDF](http://code.liw.fi/obnam/yarns.pdf).
-* [[README]] (updated at release time)
-* [[NEWS]] (updated at release time)
-* [[obnam manual page|obnam.1.txt]]
-* [[Roadmap for 1.0|roadmap-for-1.0]] (finished)
-* [[Roadmap post 1.2|roadmap-post-1.2]] (current)
-* [[FAQ]]
-* [[Development]] stuff
-
-Links
------
-
-* [Cache Directory Tagging Standard](http://www.bford.info/cachedir/)
-* [Backup bouncer](http://www.n8gray.org/blog/2007/04/27/introducing-backup-bouncer/)
+[[!meta redir="http://obnam.org/"]]

Redirect more Obnam pages to new site
diff --git a/obnam/NEWS.mdwn b/obnam/NEWS.mdwn
index 1e0fd47..d9df896 100644
--- a/obnam/NEWS.mdwn
+++ b/obnam/NEWS.mdwn
@@ -1,979 +1 @@
-Obnam NEWS
-==========
-
-This file summarizes changes between releases of Obnam.
-
-Version 1.7.4, released 2014-03-31
---------------------------------
-
-* The manual is now dual-licensed under GNU GPL v3 or later, and
-  Creative Commons CC-BY-SA 4.0.
-
-* The 1.7.3 release never went out. Let's pretend it wasn't even
-  tagged in git, and everyone will be happy.
-
-Bug fixes:
-
-* Obnam FUSE got another bug fix from Valery Yundin, to fix a bug I
-  introduced in 1.7. Reading big files via `obnam mount` should now
-  work better.
-
-* Fix count of backed up files. It used to always count directories.
-  Reported by Alberto Fuentes as Debian bug
-  [742384](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=742384).
-
-* `obnam diff latest` would fail due to a programming error. Reported
-  by Junyx.
-
-Version 1.7.2, released 2014-03-22
---------------------------------
-
-Bug fixes:
-
-* Fix another bug in the FUSE plugin's file reading code, found during
-  the release process of 1.7.2.
-
-Version 1.7.1, released 2014-03-22
---------------------------------
-
-* The `dump-repo` command now outputs JSON instead of YAML. The
-  dependency on PyYAML is no longer.
-
-Bug fixes:
-
-* Nemo Inis found a bug in the FUSE plugin (`obnam mount`), where
-  Obnam would return the wrong data when the program reading the file
-  didn't read the whole file from the beginning in one read(2) system
-  call.
-
-* The test suite now skips tests that require use of extended
-  attributes in the `user` namespace. This should allow the test suite
-  to be run on more build servers run by various distributions.
-
-Version 1.7, released 2014-03-15
---------------------------------
-
-WARNING: This release has had fairly large parts of the internals
-re-written. There shouldn't be any externally visible changes due to
-that, but there is a chance of bugs. Be careful. Make a copy of your
-backup repository before upgrading, if you can.
-
-* The `convert5to6` subcommand has been removed. If you need to
-  convert from a pre-1.0 backup repository, and haven't done so yet,
-  please use Obnam version 1.6.1 or earlier to do so.
-
-* A new `backup-finished` hook is provided by the backup plugin, so
-  that other plugins may do processing at the end of a backup, such as
-  report the successful backup to a monitoring system. Patch by
-  Enrico Tröger.
-
-* The FUSE plugin can now refresh its view, by having the user read
-  the `.pid` file. Patch by Valery Yundin.
-
-* New option `--always-restore-setuid` to always restore setuid/setgid
-  flags in permissions, even if the restore is not being run by `root`
-  or the owner of the files (as recorded in the backup).
-
-* New option `--exclude-from` allows exclusion patterns to be given in
-  a separate file (one per line), instead of in a configuration file
-  or on the command line. Patch by Enrico Tröger.
-
-* A start of a manual for Obnam. This will gain more content with
-  new releases. The current versions is mainly an edited version of
-  Lars's blog posts about backups, plus the Obnam tutorial from the
-  Obnam homepage. See <http://code.liw.fi/obnam/manual/> for
-  rendered versions (PDF, HTML).
-
-* Most of the error messages Obnam produces now have a unique error
-  code: `ERROR: R0B15DX: Cannot find requested generation for client
-  havelock` for example. More error messages will gain error codes in
-  future releases. The error codes are meant to be easy to search for,
-  and will allow error messages to be translated in the future.
-
-* The `obnam-benchmark` program got rewritten so that it'll do
-  something useful, but at the same time, it is no longer useful as a
-  general tool. It is now expected to be run from the Obnam source
-  tree (a cloned git repository), and isn't installed anymore.
-
-* The log file now includes information about the transfer overhead to
-  the repository. Overhead is all the bytes that are not file content
-  data: filenames, permission bits, extended attributes, etc, plus
-  Obnam internal bookkeeping.
-
-* `obnam verify` now shows progress both based on number of files and
-  amount of data.
-
-Bug fixes:
-
-* Obnam now doesn't remove chunks that are shared between clients.
-  Previously, this would sometimes happen, because only the first
-  client would correctly record itself as using a chunk. Now all
-  clients do that.
-
-* Obnam now creates a `trustdb.gpg` in the temporary GNUPGHOME it uses
-  during encryption operations. From version 2.0.22 (or thereabouts),
-  `gpg` insists on having a `trustdb.gpg` in the GNUPGHOME it uses.
-
-* When backing up a large file, and making a checkpoint generation in
-  the middle of it, Obnam would say "continuing backup" after the
-  checkpoint was finished, instead of saying the name of the file.
-  This is now fixed.
-
-Internal changes:
-
-* The `obnamlib.Error` exception class has been replaced by the
-  `obnamlib.ObnamError` class, which derives from the new
-  `obnamlib.StructuredError` class. All new exceptions will need
-  to be derived from `obnamlib.Error` in the future. Also, due to the
-  way `StructuredError` works, it is now necessary to create a new
-  exception class for each kind of error. This gives us unique the
-  error codes mentioned above.
-
-* The old `obnamlib.Repository` class is gone, and replaced with the
-  `obnamlib.RepositoryInterface` class, which gets implemented for
-  each repository format (there is only one, for now, but there will
-  be more).
-
-Version 1.6.1, released 2013-11-30
-----------------------------------
-
-* Fix Debian package dependencies correctly.
-
-Version 1.6, released 2013-11-30
---------------------------------
-
-* Stop logging paramiko exceptions that get converted into another
-  type of exception by the SFTP plugin in Obnam.
-
-* `obnam-benchmark` can now use an installed version of larch.
-  Patch by Lars Kruse.
-
-* Obnam has been ported to FreeBSD by Itamar Turner-Trauring
-  of HybridCluster.
-
-* Backup progress reporting now reports scanned file data, not just
-  backed up file data. This will hopefully be less confusing to people.
-
-* The `list-keys`, `client-keys`, and `list-toplevels` commands now
-  obey a new option, `--key-details`, to show the usernames attached
-  to each public key. Patch by Lars Kruse.
-
-* New option `--ssh-command` to set the command Obnam runs
-  when invoking ssh. patch by Lars Kruse.
-
-* `obnam clients` can now be used without being an existing client.
-  Patch by Itamar Turner-Trauring.
-
-* New option `--ssh-host-keys-check` to better specify how SSH
-  host keys should be checked. Patch by Itamar Turner-Trauring.
-
-Bug fixes:
-
-* Fix`"obnam list-toplevels` so it doesn't give an error when it's
-  unable to read the per-client directory of another client, when
-  encryption is used. Fix by Lars Kruse.
-
-* Fix the encryption plugin to give a better error message when it
-  looks for client directories but fails to find them. Fix by
-  Lars Kruse.
-
-* `obnam list-toplevels` got confused when the repository contained
-  extra files, such as "lock" (left there by a previous, crashed Obnam
-  run). It no longer does. Fix by Lars Kruse.
-
-* The SFTP plugin now handles another error code (EACCESS) when writing
-  a file and the directory it should go into not existing. Patch by
-  Armin Größlinger.
-
-* Obnam's manual page now explains about breaking long logical lines
-  into multiple physical ones.
-
-* The `/~/` path prefix in SFTP URLs works again, at least with
-  sufficiently new versions of Paramiko (1.7.7.1 in Debian wheezy is
-  OK). Reported by Lars Kruse.
-
-* The Nagios plugin to report errors in a way Nagios expects.

(Diff truncated)
Redirect Obnam README
diff --git a/obnam/README.mdwn b/obnam/README.mdwn
index 11be4c3..0c02c45 100644
--- a/obnam/README.mdwn
+++ b/obnam/README.mdwn
@@ -1,176 +1 @@
-Obnam, a backup program
-=======================
-
-Obnam is a backup program.
-
-
-Home page
----------
-
-The Obnam home page is at <http://liw.fi/obnam/>, see there
-for more information.
-
-
-Installation
-------------
-
-The source tree contains packaging for Debian. Run `debuild -us -uc -i.git` to
-build an installation package.
-
-On other systems, using the `setup.py` file should work: run
-"python setup.py --help" for advice. If not, please report a bug.
-(I've only tested `setup.py` enough for to build the Debian package.)
-
-You need Python 2.6 or 2.7 (Python 3 is not yet supported). You also
-need to install my Python B-tree library, and some of my other
-libraries and tools, which you can get from:
-
-* <http://liw.fi/larch/>
-* <http://liw.fi/ttystatus/>
-* <http://liw.fi/coverage-test-runner/> (for automatic tests)
-* <http://liw.fi/tracing/>
-* <http://liw.fi/cliapp/>
-* <http://liw.fi/genbackupdata/>
-* <http://liw.fi/summain/>
-* <http://liw.fi/cmdtest/>
-* <http://liw.fi/seivot/> (for benchmarks)
-
-You also need third party libraries:
-
-* paramiko: <http://www.lag.net/paramiko/>
-
-See debian/control for the full set of build dependencies and runtime
-dependencies on a Debian system. (That set actually gets tested. The
-above list is maintained manually and may get out of date from time
-to time.)
-
-Use
----
-
-To get a quick help summary of options:
-
-    ./obnam --help
-
-To make a backup:
-
-    ./obnam backup --repository /tmp/mybackup $HOME
-
-For more information, see the manual page:
-
-    man -l obnam.1
-
-
-Hacking
--------
-
-Obnam source code is stored in git for version control purposes;
-you can get a copy as follows:
-
-    git clone git://git.liw.fi/obnam
-
-The 'master' branch is the main development one. Any bug fixes and
-features should be developed in a dedicated branch, which gets merged
-to master when the changes are done and considered good.
-
-To build and run automatic tests:
-
-    ./check
-    ./check --fast # unit tests only, no black box tests
-    ./check --network # requires ssh access to localhost
-
-`check` is a wrapper around `python setup.py`, but since using that
-takes several steps, the script makes things easier.
-
-You need my CoverageTestRunner to run tests, see above for where to get it.
-A couple of scripts exist to run benchmarks and profiles:
-
-    ./metadata-speed 10000
-    ./obnam-benchmark --size=1m/100k --results /tmp/benchmark-results
-    viewprof /tmp/benchmark-results/*/*backup-0.prof
-    seivots-summary /tmp/benchmark-results/*/*.seivot | less -S
-
-There are two kinds of results: Python profiling output, and `.seivot`
-files.
-
-For the former, `viewprof` is a little helper script I wrote,
-around the Python pstats module.
-You can use your own, or get mine from extrautils
-(<http://liw.fi/extrautils/>). Running the benchmarks under profiling
-makes them a little slower (typically around 10% for me, when I've
-compared), but that's OK: the absolute numbers of the benchmarks are
-less important than the relative ones. It's nice to be able to look at
-the profiler output, if a benchmark is surprisingly slow, without
-having to re-run it.
-
-`seivots-summary` is a tool to display summaries of the measurements
-made during a benchmark run. `seivot` is the tool that makes the
-measurements. I typically save a number of benchmark results, so that
-I can see how my changes affect performance over time.
-
-If you make any changes, I welcome patches, either as plain diffs,
-`git format-patch --cover-letter` mails, or public repositories I can
-merge from.
-
-The code layout is roughly like this:
-
-    obnamlib/               # all the real code
-    obnamlib/plugins/       # the plugin code (see pluginmgr.py)
-    obnam                   # script to invoke obnam
-    _obnammodule.c          # wrapper around some system calls
-
-In obnamlib, every code module has a corresponding test module,
-and "make check" uses CoverageTestRunner to run them pairwise. For
-each pair, test coverage must be 100% or the test will fail.
-Mark statements that should not be included in coverage test with
-"# pragma: no cover", if you really, really can't write a test.
-without-tests lists modules that have no test modules.
-
-If you want to make a new release of Obnam, I recommend following
-my release checklist: <http://liw.fi/obnam/release/>.
-
-Feedback
---------
-
-I welcome bug fixes, enhancements, bug reports, suggestions, requests,
-and other feedback. I prefer e-mail the mailing list:
-see <http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/obnam-flarn.net>
-for instructions.
-
-It would be helpful if you can run `make clean check` before submitting
-a patch, but it is not strictly required.
-
-
-Legal stuff
------------
-
-Most of the code is written by Lars Wirzenius. (Please provide patches
-so that can change.)
-
-This entire work is covered by the GNU General Public
-License, version 3 or later.
-
-> Copyright 2010-2013  Lars Wirzenius
-> 
-> This program is free software: you can redistribute it and/or modify
-> it under the terms of the GNU General Public License as published by
-> the Free Software Foundation, either version 3 of the License, or
-> (at your option) any later version.
-> 
-> This program is distributed in the hope that it will be useful,
-> but WITHOUT ANY WARRANTY; without even the implied warranty of
-> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-> GNU General Public License for more details.
-> 
-> You should have received a copy of the GNU General Public License
-> along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-A copy of the GPL is included in the file `COPYING` in the source tree.
-
-The manual (all the contents of the `manual` subdirectory) is
-additionally licensed under a Creative Commons Attribution 4.0
-International License. You can choose whether to use the GPL or the CC
-license for the manual.
-
-A copy of the Creative Commons license is included in the file
-`CC-BY-SA-4.0.txt` in the source tree, and can be viewed online
-at <http://creativecommons.org/licenses/by-sa/4.0/legalcode>.
+[[!meta redir="http://obnam.org/README"]]

Contentless change to regen it
diff --git a/obnam/1.0.mdwn b/obnam/1.0.mdwn
index ba68462..253c644 100644
--- a/obnam/1.0.mdwn
+++ b/obnam/1.0.mdwn
@@ -1 +1,2 @@
 [[!meta redir="http://obnam.org/1.0/"]]
+

Add redirect to new site for one page
diff --git a/obnam/1.0.mdwn b/obnam/1.0.mdwn
index a49a246..ba68462 100644
--- a/obnam/1.0.mdwn
+++ b/obnam/1.0.mdwn
@@ -1,328 +1 @@
-[[!meta title="Obnam 1.0 (backup software); a story in many words"]]
-
-**tl;dr**: Version 1.0 of [Obnam](http://liw.fi/obnam/), my 
-snapshotting, de-duplicating, encrypting backup program is released.
-See the end of this announcement for the details.
-
-Where we see the hero in his formative years; parental influence
-----------------------------------------------------------------
-
-From the very beginning, my computing life has involved backups.
-
-In 1984, when I was 14, 
-[my father](http://www.kolumbus.fi/arnow/) was an independent 
-telecommunications consultant, which meant he needed a personal computer
-for writing reports. He bought a 
-[Luxor ABC-802](http://en.wikipedia.org/wiki/ABC_800#ABC_802), 
-a Swedish computer with a Z80 microprocessor and two floppy drives.
-
-My father also taught me how to use it. When I needed to
-save files, he gave me not one, but two floppies, and explained
-that I should store my files one one, and then copy them to the
-other one every now and then.
-
-Later on, over the years, I've made backups from a hard disk 
-(30 megabytes!) to
-a stack of floppies, to a tape drive installed into
-a floppy interface (400 megabytes!), to a DAT drive, and various other media.
-It was always a bit tedious.
-
-The start of the quest; lengthy justification for NIH
------------------------------------------------------
-
-In 2004, I decided to do a full backup, by burning a copy of all my
-files onto CD-R disks. It took me most of the day. Afterwards, I sat
-admiring the large stack of disks, and realized that I would not ever
-do that again. I'm too lazy for that. That I had done it once was an
-aberration in the space-time continuum.
-
-Switching to DVD-Rs instead CD-Rs would reduce to the number of disks to 
-burn, but not enough: it would still take a stack of them. 
-I needed something much better.
-
-I had a little experience with tape drives, and that was enough to convince
-me that I didn't want them. Tape drives are expensive hardware,
-and the tapes also cost money. If the drive goes bad, you have to get
-a compatible one, or all your backups are toast. The price per gigabyte
-was coming down fast for hard drives, and it was clear that they were
-about to be very competitive with tapes for price.
-
-I looked for backup programs that I could use for disk based backups.
-`rsync`, of course, was the obvious choice, but there were others.
-I ended up doing what many geeks do: I wrote my own wrapper around
-`rsync`. There's hundred, possibly thousands, of such wrappers around
-the Internet.
-
-I also got the idea that doing a startup to provide online backup
-space would be a really cool thing. However, I didn't really do
-anything about that until 2007. More on that later.
-
-The `rsync` wrapper script I wrote used hardlinked directory trees
-to provide a backup history, though not in the smart way that
-[backuppc](http://backuppc.sourceforge.net/) does it. 
-The hardlinks were wonderful, because they were
-cheap, and provided de-duplication. They were also quite cumbersome,
-when I needed to move my backups to a new disk the first time. It
-turned out that a lot of tools deal very badly with directory trees
-with large numbers of hardlinks.
-
-I also decided I wanted encrypted backups. This led me to find
-[duplicity](http://duplicity.nongnu.org/), which is a nice program
-that does encrypted backups, but I had issues with some of its
-limitations. To fix those limitations, I would have had to re-design
-and possibly re-implement the entire program. The biggest limitation 
-was that it treated backups as full backup, plus a sequence of 
-incremental backups, which were deltas against the previous backup.
-
-Delta based incrementals make sense for tape drives. You run a full
-backup once, then incremental deltas for every day. When enough time
-has passed since the full backup, you do a new full backup, and then
-future incrementals are based on that. Repeat forever.
-
-I decided that this makes no sense for disk based backups. If I already
-have backed up a file, there's no point in making me backup it again,
-since it's already there on the same hard disk. It makes even less
-sense for online backups, since doing a new full backup would require
-me to transmit all the data all over again, even though it's already
-on the server.
-
-The first battle
-----------------
-
-I could not find a program that did what I wanted to do, and like
-every good [NIHolic](http://en.wikipedia.org/wiki/Not_Invented_Here), 
-I started writing my own.
-
-After various aborted attempts, I started for real in 2006. Here is
-the first commit message:
-
-    revno: 1
-    committer: Lars Wirzenius <liw@iki.fi>
-    branch nick: wibbr
-    timestamp: Wed 2006-09-06 18:35:52 +0300
-    message:
-      Initial commit.
-
-`wibbr` was the placeholder name for Obnam until we came up with
-something better. We was myself and Richard Braakman, who was going
-to be doing the backup startup with me. We eventually founded the
-company near the end of 2006, and started doing business in 2007.
-
-However, we did not do very much business, and ran out of money in
-September 2007. We ended the backup startup experiment.
-That's when I took a job with Canonical, and Obnam became a hobby
-project of mine: I still wanted a good backup tool. 
-
-In September 2007, Obnam was working, but it was not very good. 
-For example, it was quite slow and wasteful of backup space.
-
-That version of Obnam used deltas, based on the `rsync` algorithm, to
-backup only changes. It did not require the user to do full and
-incremental backups manually, but essentially created an endless
-sequence of incrementals. It was possible to remove any generation,
-and Obnam would manage the deltas as necessary, keeping the ones
-needed for the remaining generations, and removing the rest. 
-Obnam made it look as if each generation was independent of each other.
-
-The wasteful part was the way in which metadata about files was
-stored: each generation stored the full list of filenames and their
-permissions and other inode fields. This turned out to be bigger
-than my daily delta.
-
-The lost years; getting lost in the forest
-------------------------------------------
-
-For the next two years, I did a little work on Obnam, but I did not
-make progress very fast. I changed the way metadata was stored, for
-example, but I picked another bad way of doing it: the new way was
-essentially building a tree of directory and file nodes, and any
-unchanged subtrees were shared between generations. This reduced the
-space overhead per generation, but made it quite slow to look up
-the metadata for any one file.
-
-The final battle; finding cows in the forest
---------------------------------------------
-
-In 2009 I decided to leave Canonical and after that, my Obnam hobby 
-picked up in speed again. Below is a table of the number of commits
-per year, from the very first commit (`bzr log -n0 | 
-awk '/timestamp:/ { print $3}' | sed 's/-.*//' | uniq -c | 
-awk '{ print $2, $1 }' | tac`):
-
-    2006 466
-    2007 353
-    2008 402
-    2009 467
-    2010 616
-    2011 790
-    2012 282
-
-During most of 2010 and 2011 I was unemployed, and happily hacking
-Obnam, while moving to another country twice. I don't recommend that
-as a way to hack on hobby projects, but it worked for me.
-
-After Canonical, I decided to tackle the way Obnam stores data from
-a new angle. Richard told me about the copy-on-write (or COW) B-trees that
-btrfs uses, originally designed by Ohad Rodeh
-(see [his paper](http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf)
-for details),
-and I started reading about that. It turned out that
-they're pretty ideal for backups: each B-tree stores data about
-one generation. To start a new generation, you clone the previous
-generation's B-tree, and make any modifications you need.
-
-I implemented the B-tree library myself, in Python. 
-I wanted something that
-was flexible about how and where I stored data, which the btrfs
-implementation did not seem to give me. (Also, I worship at the 
-altar of NIH.)
-
-With the B-trees, doing file deltas from the previous generation
-no longer made any sense. I realized that it was, in any case, a
-better idea to store file data in chunks, and re-use chunks in
-different generations as needed. This makes it much easier to
-manage changes to files: with deltas, you need to keep a long chain
-of deltas and apply many deltas to reconstruct a particular version.
-With lists of chunks, you just get the chunks you need.
-
-The spin-off franchise; lost in a maze of dependencies, all alike
------------------------------------------------------------------
-
-In the process of developing Obnam, I have split off a number of
-helper programs and libraries:
-
-* [genbackupdata](http://liw.fi/genbackupdata/) 
-  generates reproducible test data for backups

(Diff truncated)
Add link to show where to get distix .debs
diff --git a/distix.mdwn b/distix.mdwn
index 190a13f..1a211f1 100644
--- a/distix.mdwn
+++ b/distix.mdwn
@@ -12,3 +12,4 @@ You want the [[performance-art]] subpage for now.
 * [[TUTORIAL]]
 * [git](http://git.liw.fi/cgi-bin/cgit/cgit.cgi/distix/)
 * [distix bugs](http://git.liw.fi/cgi-bin/cgit/cgit.cgi/distix-bugs/)
+* Debian packages on [[code.liw.fi|code]].

Add links to git
diff --git a/distix.mdwn b/distix.mdwn
index ddf602b..190a13f 100644
--- a/distix.mdwn
+++ b/distix.mdwn
@@ -1,9 +1,14 @@
 [[!meta title="distix"]]
 [[!tag program]]
 
-This is a placeholder page.
+Distix will be a distributed ticketing system. It is very much a
+work-in-progress, and is not yet suitable for people who don't
+develop distix.
+
 You want the [[performance-art]] subpage for now.
 
 * [[README]]
 * [[NEWS]] (release notes)
 * [[TUTORIAL]]
+* [git](http://git.liw.fi/cgi-bin/cgit/cgit.cgi/distix/)
+* [distix bugs](http://git.liw.fi/cgi-bin/cgit/cgit.cgi/distix-bugs/)

Add distix README, NEWS, TUTORIAL
diff --git a/distix.mdwn b/distix.mdwn
index c615322..ddf602b 100644
--- a/distix.mdwn
+++ b/distix.mdwn
@@ -3,3 +3,7 @@
 
 This is a placeholder page.
 You want the [[performance-art]] subpage for now.
+
+* [[README]]
+* [[NEWS]] (release notes)
+* [[TUTORIAL]]
diff --git a/distix/NEWS.mdwn b/distix/NEWS.mdwn
new file mode 100644
index 0000000..0bd49cd
--- /dev/null
+++ b/distix/NEWS.mdwn
@@ -0,0 +1,17 @@
+NEWS for distix, a distributed ticketing system
+===============================================
+
+This file contains release notes and other newsworthy bits about
+distix, a distributed ticketing system.
+
+
+Version XXX
+-----------
+
+* The tutorial has been expanded.
+
+
+Version 0.1, released 2014-04-21
+--------------------------------
+
+* This is the first release. Everything is new.
diff --git a/distix/README.mdwn b/distix/README.mdwn
new file mode 100644
index 0000000..6ddf58e
--- /dev/null
+++ b/distix/README.mdwn
@@ -0,0 +1,45 @@
+README for distix
+=================
+
+**NOTE: distix is in its infancy. Its development has barely started.
+  everything in this README is a speculation of what might be true
+  eventually. Any similarity with reality is accidental, but we'll
+  take credit for it anyway.***
+
+distix is a distributed ticketing system. It stores the data in git,
+using yaml and Maildirs.
+
+FIXME: This part of the README should contain some explanation of why
+a new system, and what the important features of distix are. However,
+I'll want to word that carefully, so I'll do it later.
+
+
+Hacking
+-------
+
+To run the test suite:
+
+   python setup.py check
+
+You MUST successfully run the test suite before submitting patches.
+
+
+Legalese
+--------
+
+Copyright 2014  Lars Wirzenius
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+=*= License: GPL-3+ =*=
diff --git a/distix/TUTORIAL.mdwn b/distix/TUTORIAL.mdwn
new file mode 100644
index 0000000..1fea069
--- /dev/null
+++ b/distix/TUTORIAL.mdwn
@@ -0,0 +1,137 @@
+distix tutorial
+===============
+
+distix is a distributed ticketing system. This is a tutorial for the
+command line interface.
+
+
+Initialise a new ticket repository: `distix init`
+-------------------------------------------------
+
+distix keeps all tickets in text files in a git repository. The
+repository is created (or at least initialised) with the `distix init`
+command:
+
+    distix init my-tickets "These are my tickets"
+    cd my-tickets
+
+The first argument to `init` is the directory the repository should be
+in. This directory mustn't exist yet. The second argument is a
+description of the repository: what is repository meant for?
+
+After you've initialised the repository, it contains some metadata
+about the repository:
+
+    .git
+    repo.yaml
+
+The `.git` subdirectory is used by git for storing versions of all the
+other files. This is needed for distributed and offline operation with
+the ticketing system, and for merging and synchronising tickets across
+computers.
+
+`repo.yaml` contains some metadata about the repository itself. Most
+importantly, it contains the description of the repository you gave
+`init`.
+
+
+Create a new ticket: `distix new`
+---------------------------------
+
+To create a new ticket, run a command like this:
+
+    distix new "This is the title of my new ticket"
+
+If all goes well, distix will create a new ticket. The ticket will
+have a universally unique identifier (UUID), which is a random 128-bit
+number. The ticket will be stored in the directory
+`tickets/0234e10813ca44438510c37a7b61abb2`, where
+`0234e10813ca44438510c37a7b61abb2` is the hexadecimal representation
+of the UUID.
+
+You can use the following command to list all tickets:
+
+    distix list
+
+This will produce output like the following:
+
+    24e885d6e463441baf0fcd76626afa1a distix doesn't invoke editor
+    468a9c8545604ce18f1e381fae5e8bac bottle templates are embedded in code
+    49001e5d68c649b9886e35513eb24b55 distix lacks a manual page
+    8268e49d83ea43a6a362281603d8a7f3 distix show doesn't show the headers of messages
+    0234e10813ca44438510c37a7b61abb2 distix home page is useless
+
+Each line shows the UUID of the ticket and its title.
+
+Writing long UUIDs is somewhat tedious. Remembering them is also not
+always easy for humans. distix will, later, allow easier ways to refer
+to tickets.
+
+
+Looking at tickets: `distix show`
+---------------------------------
+
+To look at a specific ticket, give a command like this:
+
+    $ distix show 0234e10813ca44438510c37a7b61abb2
+    0234e10813ca44438510c37a7b61abb2: distix home page is useless
+
+    * ticket-id: 0234e10813ca44438510c37a7b61abb2
+    * title: distix home page is useless
+
+    $ 
+
+This shows the ticket id, and title, and all the key/value metadata
+for the ticket. The ticket id and title are stored as key/value pairs,
+so the get repeated. (This repetition is not there to make it easier
+to learn the id by heart. Honest.)
+
+
+Setting ticket metadata: `distix set`
+-------------------------------------
+
+Each ticket has some key/value pairs. These allow distix to manage
+ticket metadata. You can add any pairs you like.
+
+    $ distix set 0234e10813ca44438510c37a7b61abb2 status=triaged
+    $ distix show 0234e10813ca44438510c37a7b61abb2
+    0234e10813ca44438510c37a7b61abb2: distix home page is useless
+
+    * status: triaged
+    * ticket-id: 0234e10813ca44438510c37a7b61abb2
+    * title: distix home page is useless
+
+    $ 
+
+Here we added a key `status` with the value `triaged` to the ticket.
+
+distix will interpret some keys in its own way, but ignores all other

(Diff truncated)
Fix markup
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index 00f969e..4b65733 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -1,7 +1,7 @@
 [[!meta title="distix development as performance art"]]
 
 ** The performance has now ended. The netcat-based broadcasting
-   has terminated, but the files can be downloaded. See below. ***
+   has terminated, but the files can be downloaded. See below. **
 
 Thirty years ago I started to learn programming. To celebrate this,
 I'm doing a bit of programming as a sort of performance art. I will

Update distix performance page
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index 467fa81..00f969e 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -1,7 +1,7 @@
 [[!meta title="distix development as performance art"]]
 
-** The performance has now ended. There will be downloads of the recordings
-later, but now I need a break. --liw **
+** The performance has now ended. The netcat-based broadcasting
+   has terminated, but the files can be downloaded. See below. ***
 
 Thirty years ago I started to learn programming. To celebrate this,
 I'm doing a bit of programming as a sort of performance art. I will
@@ -25,7 +25,7 @@ for you:
 While I write this program, I will broadcast my terminal to the
 Internet for anyone to see. To watch, you will need:
 
-* the [ttyrec] and [netcat] programs installed
+* the [ttyrec] program
 * a terminal emulator that emulates xterm and 
   **is at least 94 columns wide and 44 lines high**
 * compatible terminal emulators exist for Linux and other Unix-like
@@ -45,15 +45,6 @@ IRC, or e-mail, you won't see that, sorry, but I will try to avoid
 them. I'll use the `screen` program to have access to as many shell
 prompts as I need, and I'll run my editor inside screen as well.
 
-To watch in real time, run this, using **bash** (or any other shell
-with support for the syntax):
-
-    ttyplay <(nc pieni.net 3000)
-
-`nc` is netcat, and it connects to my server, `pieni.net`, port 3000,
-and reads everything it gets from there. `ttyplay` is the program that
-replays what I record with `ttyrec` on my own computer.
-
 You can only watch. You cannot control my terminal in any way.
 
 You can start watching at any time, and you'll see things happen at
@@ -61,28 +52,14 @@ the speed they happened for real. See the `ttyplay` manual page for
 how to control the playback speed to catch up faster or to skip boring
 bits where nothing happens.
 
-I expect to spend all day on this. Every hour or so I will start a new
-recording, which will be at subsequent ports:
-
-    ttyplay <(nc pieni.net 3000)
-    ttyplay <(nc pieni.net 3001)
-    ttyplay <(nc pieni.net 3002)
-    ttyplay <(nc pieni.net 3003)
-    ttyplay <(nc pieni.net 3004)
-    ttyplay <(nc pieni.net 3005)
-
-This will allow you to skip earlier parts. I will update the list
-above as things start.
-
 There will be an IRC channel as well: `#distix` on the OFTC network
 (`irc.oftc.net`). Feel free to join there if you want to provide real
 time feedback (the laugh track). I won't engage in much discussion
 during the performance, but I'm happy to glance at the channel from
 time to time.
 
-Some additional files will be at
-<http://files.liw.fi/distix-performance/> and updated automatically
-about once a minute during the performance.
+See <http://files.liw.fi/distix-performance/> for downloading the
+recordings, and for the journal and TODO files, and the IRC channel
+log.
 
 [ttyrec]: http://0xcc.net/ttyrec/index.html.en
-[netcat]: https://en.wikipedia.org/wiki/Netcat

Mark performance as ended
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index 8a1f603..467fa81 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -1,5 +1,8 @@
 [[!meta title="distix development as performance art"]]
 
+** The performance has now ended. There will be downloads of the recordings
+later, but now I need a break. --liw **
+
 Thirty years ago I started to learn programming. To celebrate this,
 I'm doing a bit of programming as a sort of performance art. I will
 write a new program, from scratch, until it is ready for me to start
@@ -67,7 +70,6 @@ recording, which will be at subsequent ports:
     ttyplay <(nc pieni.net 3003)
     ttyplay <(nc pieni.net 3004)
     ttyplay <(nc pieni.net 3005)
-    ttyplay <(nc pieni.net 3006) (not yet open)
 
 This will allow you to skip earlier parts. I will update the list
 above as things start.

Open next ttyrec port for dixtix performance
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index 59b6af3..8a1f603 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -67,7 +67,7 @@ recording, which will be at subsequent ports:
     ttyplay <(nc pieni.net 3003)
     ttyplay <(nc pieni.net 3004)
     ttyplay <(nc pieni.net 3005)
-    ttyplay <(nc pieni.net 3006)
+    ttyplay <(nc pieni.net 3006) (not yet open)
 
 This will allow you to skip earlier parts. I will update the list
 above as things start.

Open next ttyrec port for dixtix performance
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index c5f2847..59b6af3 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -67,6 +67,7 @@ recording, which will be at subsequent ports:
     ttyplay <(nc pieni.net 3003)
     ttyplay <(nc pieni.net 3004)
     ttyplay <(nc pieni.net 3005)
+    ttyplay <(nc pieni.net 3006)
 
 This will allow you to skip earlier parts. I will update the list
 above as things start.

Open next ttyrec port for dixtix performance
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index a3bb2e5..c5f2847 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -65,6 +65,8 @@ recording, which will be at subsequent ports:
     ttyplay <(nc pieni.net 3001)
     ttyplay <(nc pieni.net 3002)
     ttyplay <(nc pieni.net 3003)
+    ttyplay <(nc pieni.net 3004)
+    ttyplay <(nc pieni.net 3005)
 
 This will allow you to skip earlier parts. I will update the list
 above as things start.

Open next ttyrec port for dixtix performance
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index d78a237..a3bb2e5 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -64,6 +64,7 @@ recording, which will be at subsequent ports:
     ttyplay <(nc pieni.net 3000)
     ttyplay <(nc pieni.net 3001)
     ttyplay <(nc pieni.net 3002)
+    ttyplay <(nc pieni.net 3003)
 
 This will allow you to skip earlier parts. I will update the list
 above as things start.

Open next ttyrec port for dixtix performance
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index 0baedbd..d78a237 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -63,8 +63,7 @@ recording, which will be at subsequent ports:
 
     ttyplay <(nc pieni.net 3000)
     ttyplay <(nc pieni.net 3001)
-    ttyplay <(nc pieni.net 3002) (NOT YET READY)
-    ttyplay <(nc pieni.net 3003) (NOT YET READY)
+    ttyplay <(nc pieni.net 3002)
 
 This will allow you to skip earlier parts. I will update the list
 above as things start.

Open second recording
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index 02d9d78..0baedbd 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -62,7 +62,7 @@ I expect to spend all day on this. Every hour or so I will start a new
 recording, which will be at subsequent ports:
 
     ttyplay <(nc pieni.net 3000)
-    ttyplay <(nc pieni.net 3001) (NOT YET READY)
+    ttyplay <(nc pieni.net 3001)
     ttyplay <(nc pieni.net 3002) (NOT YET READY)
     ttyplay <(nc pieni.net 3003) (NOT YET READY)
 

Link to updated files from performance page
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index 86dc5ab..02d9d78 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -75,5 +75,9 @@ time feedback (the laugh track). I won't engage in much discussion
 during the performance, but I'm happy to glance at the channel from
 time to time.
 
+Some additional files will be at
+<http://files.liw.fi/distix-performance/> and updated automatically
+about once a minute during the performance.
+
 [ttyrec]: http://0xcc.net/ttyrec/index.html.en
 [netcat]: https://en.wikipedia.org/wiki/Netcat

Tweak performance-art instructions
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index 8ff4cd6..86dc5ab 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -23,8 +23,10 @@ While I write this program, I will broadcast my terminal to the
 Internet for anyone to see. To watch, you will need:
 
 * the [ttyrec] and [netcat] programs installed
-* an X terminal emulator that emulates xterm and 
+* a terminal emulator that emulates xterm and 
   **is at least 94 columns wide and 44 lines high**
+* compatible terminal emulators exist for Linux and other Unix-like
+  operating systems; I don't know about Windows
 
 I use the GNOME terminal emulator, but anything that is compatible
 with xterm should work. The size is because that's the size that
@@ -40,7 +42,8 @@ IRC, or e-mail, you won't see that, sorry, but I will try to avoid
 them. I'll use the `screen` program to have access to as many shell
 prompts as I need, and I'll run my editor inside screen as well.
 
-To watch in real time, run this:
+To watch in real time, run this, using **bash** (or any other shell
+with support for the syntax):
 
     ttyplay <(nc pieni.net 3000)
 

Mark cmdtest bug as done
diff --git a/cmdtest/bugs/parallel-tests.mdwn b/cmdtest/bugs/parallel-tests.mdwn
index 0aecc6d..0ee56c6 100644
--- a/cmdtest/bugs/parallel-tests.mdwn
+++ b/cmdtest/bugs/parallel-tests.mdwn
@@ -1,2 +1,8 @@
 For better performance, tests should be run in parallel, by default,
 only do one-at-a-time when absolutely necessary.
+
+---
+
+This would require cmdtest and yarn to have a language for specifying what
+things can be run in parallel. Too much complexity, I'm afraid. Multiple
+parallel test suites seems like a better. [[done]] --liw

Mark cmdtest bug as done
diff --git a/cmdtest/bugs/test-multiple-processes-across-many-hosts.mdwn b/cmdtest/bugs/test-multiple-processes-across-many-hosts.mdwn
index 3b34410..a1c6a6b 100644
--- a/cmdtest/bugs/test-multiple-processes-across-many-hosts.mdwn
+++ b/cmdtest/bugs/test-multiple-processes-across-many-hosts.mdwn
@@ -1 +1,5 @@
 how can one test multi-process, daemon, client/server apps? black box test.
+
+---
+
+this is no longer an issue with yarn. [[done]] --liw

copyright-statement-lint fixes
diff --git a/copyright-statement-lint.mdwn b/copyright-statement-lint.mdwn
index d2c6f48..69d8a13 100644
--- a/copyright-statement-lint.mdwn
+++ b/copyright-statement-lint.mdwn
@@ -1,4 +1,4 @@
-[[!meta title="copyright-statement-ling: check copyright statements and dates"]]
+[[!meta title="copyright-statement-lint: check copyright statements and dates"]]
 [[!tag program]]
 
 This is a small utility program that checks a source code tree, in
diff --git a/copyright-statement-lint/NEWS.mdwn b/copyright-statement-lint/NEWS.mdwn
new file mode 100644
index 0000000..b002982
--- /dev/null
+++ b/copyright-statement-lint/NEWS.mdwn
@@ -0,0 +1,15 @@
+copyright-statement-lint NEWS
+============================
+
+This file summarizes changes between releases of
+copyright-statement-lint.
+
+Version 0.1, released UNRELEASED
+--------------------------------
+
+* A manual page has been added.
+
+Version 0.0, released 2014-03-18
+--------------------------------
+
+First release.
diff --git a/copyright-statement-lint/README.mdwn b/copyright-statement-lint/README.mdwn
new file mode 100644
index 0000000..a37bab7
--- /dev/null
+++ b/copyright-statement-lint/README.mdwn
@@ -0,0 +1,25 @@
+copyright-statement-lint
+========================
+
+`copyright-statement-lint` checks that the copyright statements
+in files given to it. It verifies that each file has a copyright
+statement, and that at least one of the statements in the file has
+a year that matches the date of the latest git commit.
+
+Legalese
+========
+
+Copyright 2013  Lars Wirzenius
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.

Remove photographer name by request
diff --git a/index.mdwn b/index.mdwn
index bd621db..a0fc317 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -4,7 +4,6 @@ server="http://openid.kitenet.net:8081/simpleid/"]]
 # Welcome
 
 <img src="http://files.liw.fi/liw-big.jpg"
-     alt="Photo by Soile Mottisenkangas"
      class="floatTR" />
 
 Hello. I am Lars Wirzenius. Welcome to my little corner of cyberspace.

Add OS/X, BSD command for date
Thanks to LarstiQ
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
index a49160d..8ff4cd6 100644
--- a/distix/performance-art.mdwn
+++ b/distix/performance-art.mdwn
@@ -13,9 +13,11 @@ The performance starts Friday, 18 April 2014, at 09:00 UTC. I
 apologise if this is an awkward time for you. No time is good for
 everyone, so I picked a time that is good for me.
 
-Run the following command to see what the local time will be for you.
+Run one of the following commands to see what the local time will be
+for you:
 
-    date --date '2014-04-18 09:00:00 UTC'
+    date --date '2014-04-18 09:00:00 UTC' # GNU
+    date -j -f "%Y-%m-%d %T %Z" "2014-04-18 09:00:00 GMT" # BSD, OS/X
 
 While I write this program, I will broadcast my terminal to the
 Internet for anyone to see. To watch, you will need:

Fix links to Obnam manual
Avoid the symlinks.
diff --git a/obnam.mdwn b/obnam.mdwn
index 23cc443..2a4b28e 100644
--- a/obnam.mdwn
+++ b/obnam.mdwn
@@ -41,8 +41,8 @@ Documentation
 -------------
 
 * The full manual (currently a work in progress): available as
-  [a web page](http://code.liw.fi/obnam/manual/manual.html) and
-  [PDF](http://code.liw.fi/obnam/manual/manual.pdf).
+  [a web page](http://code.liw.fi/obnam/manual/obnam-manual.en.html) and
+  [PDF](http://code.liw.fi/obnam/manual/obnam-manual.en.pdf).
     - The Obnam test suite is also meant to be useful for the more
       technical users of Obnam to read:
       [web page](http://code.liw.fi/obnam/yarns.html),

Add a distix page
diff --git a/distix.mdwn b/distix.mdwn
new file mode 100644
index 0000000..c615322
--- /dev/null
+++ b/distix.mdwn
@@ -0,0 +1,5 @@
+[[!meta title="distix"]]
+[[!tag program]]
+
+This is a placeholder page.
+You want the [[performance-art]] subpage for now.
diff --git a/distix/performance-art.mdwn b/distix/performance-art.mdwn
new file mode 100644
index 0000000..a49160d
--- /dev/null
+++ b/distix/performance-art.mdwn
@@ -0,0 +1,74 @@
+[[!meta title="distix development as performance art"]]
+
+Thirty years ago I started to learn programming. To celebrate this,
+I'm doing a bit of programming as a sort of performance art. I will
+write a new program, from scratch, until it is ready for me to start
+using it for real. The program won't be finished, but it will be ready
+for my own production use. It'll be something I have wanted to have
+for a while, but I'm not saying beforehand what it will be. For me,
+the end result is interesting; for you, the interesting part is
+watching me be stupid and make funny mistakes.
+
+The performance starts Friday, 18 April 2014, at 09:00 UTC. I
+apologise if this is an awkward time for you. No time is good for
+everyone, so I picked a time that is good for me.
+
+Run the following command to see what the local time will be for you.
+
+    date --date '2014-04-18 09:00:00 UTC'
+
+While I write this program, I will broadcast my terminal to the
+Internet for anyone to see. To watch, you will need:
+
+* the [ttyrec] and [netcat] programs installed
+* an X terminal emulator that emulates xterm and 
+  **is at least 94 columns wide and 44 lines high**
+
+I use the GNOME terminal emulator, but anything that is compatible
+with xterm should work. The size is because that's the size that
+comfortably fits on my laptop screen.
+
+Sorry, I don't have a way to make this viewable with just a web
+browser. Afterwards, perhaps I can figure out how to produce a video
+of this. (If you figure out a way to do this by web browser only,
+please give me a link to instructions and I'll add it here.)
+
+I will broadcast only the terminal emulator. If I need a web browser,
+IRC, or e-mail, you won't see that, sorry, but I will try to avoid
+them. I'll use the `screen` program to have access to as many shell
+prompts as I need, and I'll run my editor inside screen as well.
+
+To watch in real time, run this:
+
+    ttyplay <(nc pieni.net 3000)
+
+`nc` is netcat, and it connects to my server, `pieni.net`, port 3000,
+and reads everything it gets from there. `ttyplay` is the program that
+replays what I record with `ttyrec` on my own computer.
+
+You can only watch. You cannot control my terminal in any way.
+
+You can start watching at any time, and you'll see things happen at
+the speed they happened for real. See the `ttyplay` manual page for
+how to control the playback speed to catch up faster or to skip boring
+bits where nothing happens.
+
+I expect to spend all day on this. Every hour or so I will start a new
+recording, which will be at subsequent ports:
+
+    ttyplay <(nc pieni.net 3000)
+    ttyplay <(nc pieni.net 3001) (NOT YET READY)
+    ttyplay <(nc pieni.net 3002) (NOT YET READY)
+    ttyplay <(nc pieni.net 3003) (NOT YET READY)
+
+This will allow you to skip earlier parts. I will update the list
+above as things start.
+
+There will be an IRC channel as well: `#distix` on the OFTC network
+(`irc.oftc.net`). Feel free to join there if you want to provide real
+time feedback (the laugh track). I won't engage in much discussion
+during the performance, but I'm happy to glance at the channel from
+time to time.
+
+[ttyrec]: http://0xcc.net/ttyrec/index.html.en
+[netcat]: https://en.wikipedia.org/wiki/Netcat

Tag bug as wishlist
diff --git a/obnam/bugs/no-chattr-support.mdwn b/obnam/bugs/no-chattr-support.mdwn
index 80524e0..b0381ef 100644
--- a/obnam/bugs/no-chattr-support.mdwn
+++ b/obnam/bugs/no-chattr-support.mdwn
@@ -1,3 +1,5 @@
+[[!tag obnam-wishlist]]
+
 Obnam does not support the ext2/3/4 chattr attributes. It should back them up and
 set them on restore, when possible.
 

Tag bug as wishlist
diff --git a/obnam/bugs/verify-stricter.mdwn b/obnam/bugs/verify-stricter.mdwn
index 3d92820..5d8a0df 100644
--- a/obnam/bugs/verify-stricter.mdwn
+++ b/obnam/bugs/verify-stricter.mdwn
@@ -1,3 +1,5 @@
+[[!tag obnam-wishlist]]
+
 On Tue, Mar 11, 2014 at 04:34:13PM +0100, Thomas Schwinge wrote:
 
 > Alternatively, wouldn't it make sense to change to, or at least have

Tag bug as wishlist
diff --git a/obnam/bugs/block-device-backup.mdwn b/obnam/bugs/block-device-backup.mdwn
index 6dd9a71..d570402 100644
--- a/obnam/bugs/block-device-backup.mdwn
+++ b/obnam/bugs/block-device-backup.mdwn
@@ -1,3 +1,5 @@
+[[!tag obnam-wishlist]]
+
 Obnam could do with a mode in which it backs up the data from a block
 device, instead of the device node. If the block device contains a
 filesystem, it should backup only the parts of the device that are

Tag bug as wishlist
diff --git a/obnam/bugs/commit-progress-reporting.mdwn b/obnam/bugs/commit-progress-reporting.mdwn
index cc45e1d..2123a4c 100644
--- a/obnam/bugs/commit-progress-reporting.mdwn
+++ b/obnam/bugs/commit-progress-reporting.mdwn
@@ -1,3 +1,5 @@
+[[!tag obnam-wishlist]]
+
 Improve Obnam's progress reporting during committing.
 
 - how much work will there be to do the commit?

Mark bug closed
diff --git a/obnam/bugs/pretend-does-not-work-on-empty-repo.mdwn b/obnam/bugs/pretend-does-not-work-on-empty-repo.mdwn
index e7fe2c7..a7f58fa 100644
--- a/obnam/bugs/pretend-does-not-work-on-empty-repo.mdwn
+++ b/obnam/bugs/pretend-does-not-work-on-empty-repo.mdwn
@@ -1,2 +1,5 @@
 `obnam backup --dry-run` doesn't work if there is no generation yet.
 --liw
+
+
+[[done]] --liw

Add note to obnam bug
diff --git a/obnam/bugs/turn_--exclude-caches_into_--exclude-tagfile__61__OBNAM__95__NOBACKUP.mdwn b/obnam/bugs/turn_--exclude-caches_into_--exclude-tagfile__61__OBNAM__95__NOBACKUP.mdwn
index 1a52784..5759dc8 100644
--- a/obnam/bugs/turn_--exclude-caches_into_--exclude-tagfile__61__OBNAM__95__NOBACKUP.mdwn
+++ b/obnam/bugs/turn_--exclude-caches_into_--exclude-tagfile__61__OBNAM__95__NOBACKUP.mdwn
@@ -9,3 +9,8 @@ Changing `--exclude-caches` seems wrong to me: it has a specific purpose (to imp
 Adding a new option to ignore directories that contain a specific file (or directory) would be fine.
 
 --liw
+
+---
+
+bwh points out that the owner of the directory and the tag file should
+be the same.

Mark Obnam bug done
diff --git a/obnam/bugs/symlink-as-backup-root.mdwn b/obnam/bugs/symlink-as-backup-root.mdwn
index 9a2fdf8..d5b4f29 100644
--- a/obnam/bugs/symlink-as-backup-root.mdwn
+++ b/obnam/bugs/symlink-as-backup-root.mdwn
@@ -8,3 +8,17 @@ From liw: This is obviously a bug. Obnam should either give an error
 if the backup root is a symlink, or back it up as a symlink, not
 recurse into the directory and then backup that and only then ruin
 everything by backing up the symlink as a symlink.
+
+---
+
+This should now be fixed to give an error message when you backup.
+I can't currently give access to the hidden files easily, I'm afraid,
+but if you change your backup root to be the directory pointed at by
+the symlink, and run a backup, it should go fairly fast and give you
+access to your files.
+
+Later, I may consider allowing the root to be a symlink to a
+directory, but that'll require bigger changes than this error message,
+I'm afraid. Patches to implement this would be welcome.
+
+[[done]] --liw

Mark Obnam bug closed
diff --git a/obnam/bugs/use-cliapps-plugin-manager.mdwn b/obnam/bugs/use-cliapps-plugin-manager.mdwn
index 26f258a..4da8a86 100644
--- a/obnam/bugs/use-cliapps-plugin-manager.mdwn
+++ b/obnam/bugs/use-cliapps-plugin-manager.mdwn
@@ -1,2 +1,4 @@
 Obnam should be using cliapp's plugin manager, instead of its
 own. --liw
+
+Fixed now. [[done]] --liw

Add slash to openid server URL to fix login
diff --git a/index.mdwn b/index.mdwn
index f14b181..bd621db 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -1,5 +1,5 @@
 [[!meta openid="http://liw.fi/"
-server="http://openid.kitenet.net:8081/simpleid"]]
+server="http://openid.kitenet.net:8081/simpleid/"]]
 
 # Welcome
 

Change openid server
diff --git a/index.mdwn b/index.mdwn
index cfd5bd3..f14b181 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -1,5 +1,5 @@
 [[!meta openid="http://liw.fi/"
-server="http://kitenet.net/simpleid/"]]
+server="http://openid.kitenet.net:8081/simpleid"]]
 
 # Welcome
 

Mark Obnam bug closed
diff --git a/obnam/bugs/exclude_already_existing_files_in_backup__44___does_not_remove_them.mdwn b/obnam/bugs/exclude_already_existing_files_in_backup__44___does_not_remove_them.mdwn
index 6d7df9f..91a8ab4 100644
--- a/obnam/bugs/exclude_already_existing_files_in_backup__44___does_not_remove_them.mdwn
+++ b/obnam/bugs/exclude_already_existing_files_in_backup__44___does_not_remove_them.mdwn
@@ -101,3 +101,8 @@ OUTPUT:
 
 A workaround can be found in
 <http://listmaster.pepperfish.net/pipermail/obnam-flarn.net/2013-May/001929.html>.
+
+
+---
+
+This is now fixed in git master. [[done]] --liw

Update Obnam NEWS, README for 1.7.4
diff --git a/obnam/NEWS.mdwn b/obnam/NEWS.mdwn
index edbfa0e..1e0fd47 100644
--- a/obnam/NEWS.mdwn
+++ b/obnam/NEWS.mdwn
@@ -3,6 +3,53 @@ Obnam NEWS
 
 This file summarizes changes between releases of Obnam.
 
+Version 1.7.4, released 2014-03-31
+--------------------------------
+
+* The manual is now dual-licensed under GNU GPL v3 or later, and
+  Creative Commons CC-BY-SA 4.0.
+
+* The 1.7.3 release never went out. Let's pretend it wasn't even
+  tagged in git, and everyone will be happy.
+
+Bug fixes:
+
+* Obnam FUSE got another bug fix from Valery Yundin, to fix a bug I
+  introduced in 1.7. Reading big files via `obnam mount` should now
+  work better.
+
+* Fix count of backed up files. It used to always count directories.
+  Reported by Alberto Fuentes as Debian bug
+  [742384](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=742384).
+
+* `obnam diff latest` would fail due to a programming error. Reported
+  by Junyx.
+
+Version 1.7.2, released 2014-03-22
+--------------------------------
+
+Bug fixes:
+
+* Fix another bug in the FUSE plugin's file reading code, found during
+  the release process of 1.7.2.
+
+Version 1.7.1, released 2014-03-22
+--------------------------------
+
+* The `dump-repo` command now outputs JSON instead of YAML. The
+  dependency on PyYAML is no longer.
+
+Bug fixes:
+
+* Nemo Inis found a bug in the FUSE plugin (`obnam mount`), where
+  Obnam would return the wrong data when the program reading the file
+  didn't read the whole file from the beginning in one read(2) system
+  call.
+
+* The test suite now skips tests that require use of extended
+  attributes in the `user` namespace. This should allow the test suite
+  to be run on more build servers run by various distributions.
+
 Version 1.7, released 2014-03-15
 --------------------------------
 
diff --git a/obnam/README.mdwn b/obnam/README.mdwn
index a271e91..11be4c3 100644
--- a/obnam/README.mdwn
+++ b/obnam/README.mdwn
@@ -133,7 +133,7 @@ Feedback
 
 I welcome bug fixes, enhancements, bug reports, suggestions, requests,
 and other feedback. I prefer e-mail the mailing list:
-see <http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/obnam-flarn.net>
+see <http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/obnam-flarn.net>
 for instructions.
 
 It would be helpful if you can run `make clean check` before submitting
@@ -146,19 +146,31 @@ Legal stuff
 Most of the code is written by Lars Wirzenius. (Please provide patches
 so that can change.)
 
-The code is covered by the GNU General Public License, version 3 or later.
-
-Copyright 2010-2013  Lars Wirzenius
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
+This entire work is covered by the GNU General Public
+License, version 3 or later.
+
+> Copyright 2010-2013  Lars Wirzenius
+> 
+> This program is free software: you can redistribute it and/or modify
+> it under the terms of the GNU General Public License as published by
+> the Free Software Foundation, either version 3 of the License, or
+> (at your option) any later version.
+> 
+> This program is distributed in the hope that it will be useful,
+> but WITHOUT ANY WARRANTY; without even the implied warranty of
+> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+> GNU General Public License for more details.
+> 
+> You should have received a copy of the GNU General Public License
+> along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+A copy of the GPL is included in the file `COPYING` in the source tree.
+
+The manual (all the contents of the `manual` subdirectory) is
+additionally licensed under a Creative Commons Attribution 4.0
+International License. You can choose whether to use the GPL or the CC
+license for the manual.
+
+A copy of the Creative Commons license is included in the file
+`CC-BY-SA-4.0.txt` in the source tree, and can be viewed online
+at <http://creativecommons.org/licenses/by-sa/4.0/legalcode>.

Update NEWS for cmdtest for 0.12 release
diff --git a/cmdtest/NEWS.mdwn b/cmdtest/NEWS.mdwn
index 335c679..9c3eb04 100644
--- a/cmdtest/NEWS.mdwn
+++ b/cmdtest/NEWS.mdwn
@@ -3,6 +3,13 @@ NEWS for cmdtest
 
 This file summarizes changes between releases of cmdtest.
 
+Version 0.12, released 2014-03-28
+---------------------------------
+
+For yarn:
+
+* Do not fail a test suite if snapshotting `DATADIR` fails.
+
 Version 0.11, released 2014-03-15
 ---------------------------------
 

Add page for copyright-statement-lint
diff --git a/copyright-statement-lint.mdwn b/copyright-statement-lint.mdwn
new file mode 100644
index 0000000..d2c6f48
--- /dev/null
+++ b/copyright-statement-lint.mdwn
@@ -0,0 +1,17 @@
+[[!meta title="copyright-statement-ling: check copyright statements and dates"]]
+[[!tag program]]
+
+This is a small utility program that checks a source code tree, in
+git, for copyright statements, and whinges if you don't have a
+statement, or the latest commit year is not included in the years of
+any of the statements you do have.
+
+* [[README]] (updated at release time)
+* [[NEWS]] (updated at release time)
+* [[Using stuff on code.liw.fi|code]]
+* Version control:
+  * <http://git.liw.fi/cgi-bin/cgit/cgit.cgi/copyright-statement-lint/>
+  * `git clone git://git.liw.fi/copyright-statement-lint`
+* Release tarballs and Debian packages:
+  <http://code.liw.fi/debian/pool/main/c/copyright-statement-lint/>
+* Copyright license: GNU GPL3 or later.

Add note about workaround to Obnam bug
diff --git a/obnam/bugs/exclude_already_existing_files_in_backup__44___does_not_remove_them.mdwn b/obnam/bugs/exclude_already_existing_files_in_backup__44___does_not_remove_them.mdwn
index 68b4d78..6d7df9f 100644
--- a/obnam/bugs/exclude_already_existing_files_in_backup__44___does_not_remove_them.mdwn
+++ b/obnam/bugs/exclude_already_existing_files_in_backup__44___does_not_remove_them.mdwn
@@ -95,3 +95,9 @@ OUTPUT:
 	drwxrwx--- 4 jordi jordi 80 jun 20 09:23 ..
 	-rw-rw---- 1 jordi jordi  0 jun 20 09:23 file1
 	-rw-rw---- 1 jordi jordi  4 jun 20 09:23 file2
+
+
+---
+
+A workaround can be found in
+<http://listmaster.pepperfish.net/pipermail/obnam-flarn.net/2013-May/001929.html>.

Add obnam bug
diff --git a/obnam/bugs/pretend-does-not-work-on-empty-repo.mdwn b/obnam/bugs/pretend-does-not-work-on-empty-repo.mdwn
new file mode 100644
index 0000000..e7fe2c7
--- /dev/null
+++ b/obnam/bugs/pretend-does-not-work-on-empty-repo.mdwn
@@ -0,0 +1,2 @@
+`obnam backup --dry-run` doesn't work if there is no generation yet.
+--liw

Add Levenshtein distance to bug names idea
Suggested by Daniel Silverstein.
diff --git a/ideas/bug-names.mdwn b/ideas/bug-names.mdwn
index 234c0d0..7478ea2 100644
--- a/ideas/bug-names.mdwn
+++ b/ideas/bug-names.mdwn
@@ -1,4 +1,4 @@
-(Overall design together with Daniel Silverstone.)
+(Designed together with Daniel Silverstone.)
 
 The problem: Bug reports, tickets, kanban cards, and other such
 entities need a unique identifier. Almost always a simple counter is
@@ -34,6 +34,10 @@ Some notes:
   few of them with memorable names.
 * Since each list of words is distinct, order of words doesn't matter.
 * Words can be translated, without loss of meaning.
+* Words can be chosen to be spelled and pronounced distinctively.
+  Using something like Levenshtein distance could approximate this and
+  would be automatable. When looking up words, this could then be used
+  to find a likely candidate even if there was misspellings.
 
 Very large identifiers, such as for git commits, do not need to be
 encoded fully to benefit from this scheme. Git commits are already

Close non-bug in Obnam
diff --git a/obnam/bugs/keep-hours-buggy.mdwn b/obnam/bugs/keep-hours-buggy.mdwn
index e85dadc..f886c4a 100644
--- a/obnam/bugs/keep-hours-buggy.mdwn
+++ b/obnam/bugs/keep-hours-buggy.mdwn
@@ -5,3 +5,10 @@ From mail:
 > --keep=Nh always do same as --keep=Nd
 
 Seems to be true. Need cmdtest test case for reproduction.
+
+---
+
+Actually, this seems to be mainly a documentation problem. Or an
+indication that the system is too complicated, since so many people
+understand it wrong. But [[done]], though I'll try to improve the
+explanation in the manual. --liw

Update URL to Obnam mailing list page
diff --git a/obnam/README.mdwn b/obnam/README.mdwn
index 45b3404..a271e91 100644
--- a/obnam/README.mdwn
+++ b/obnam/README.mdwn
@@ -133,7 +133,7 @@ Feedback
 
 I welcome bug fixes, enhancements, bug reports, suggestions, requests,
 and other feedback. I prefer e-mail the mailing list:
-see <http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/obnam-flarn.net>
+see <http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/obnam-flarn.net>
 for instructions.
 
 It would be helpful if you can run `make clean check` before submitting
diff --git a/obnam/contact.mdwn b/obnam/contact.mdwn
index 51fe9f3..3e48ccf 100644
--- a/obnam/contact.mdwn
+++ b/obnam/contact.mdwn
@@ -1,7 +1,7 @@
 Contact
 -------
 
-* [Mailing list](http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/obnam-flarn.net)
+* [Mailing list](http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/obnam-flarn.net)
 * `#obnam` on `irc.oftc.net` for IRC discussions about Obnam
     - the mailing list is strongly preferred for asking help with Obnam
     - Lars rarely has time to discuss anything serious on IRC
diff --git a/obnam/status.mdwn b/obnam/status.mdwn
index a79d91f..89c6981 100644
--- a/obnam/status.mdwn
+++ b/obnam/status.mdwn
@@ -12,7 +12,8 @@ system.
 Using the Obnam web pages for bug reporting is not a good idea,
 since they are not a good way to conduct a discussion.
 
-* E-mail to the [mailing list](http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/obnam-flarn.net).
+* E-mail to the
+  [mailing list](http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/obnam-flarn.net).
 
 See [[contact page|contact]] for more instructions on the mailing list.
 

Orphan hithere
diff --git a/hithere.mdwn b/hithere.mdwn
index e338ad1..aabf196 100644
--- a/hithere.mdwn
+++ b/hithere.mdwn
@@ -1,5 +1,5 @@
 [[!meta title="hithere - a greeting application"]]
-[[!tag program]]
+[[!tag orphaned-project]]
 
 **hithere** is a command line utility to greet the user.
 It is similar to the [GNU Hello](http://www.gnu.org/software/hello/)

Close Obnam bug that's been deal with
diff --git a/obnam/bugs/document-how-to-check-encryption-is-being-used.mdwn b/obnam/bugs/document-how-to-check-encryption-is-being-used.mdwn
index 17cca75..1c44e3d 100644
--- a/obnam/bugs/document-how-to-check-encryption-is-being-used.mdwn
+++ b/obnam/bugs/document-how-to-check-encryption-is-being-used.mdwn
@@ -2,3 +2,7 @@
 
 Document how to check that Obnam is actually encrypting anything. --liw
 
+
+This is in the manual now
+(http://code.liw.fi/obnam/manual/manual.html#checking-if-a-repository-uses-encryption).
+[[done]] --liw

Add summian bug
diff --git a/summain/bugs/fed-by-find.mdwn b/summain/bugs/fed-by-find.mdwn
new file mode 100644
index 0000000..537ce34
--- /dev/null
+++ b/summain/bugs/fed-by-find.mdwn
@@ -0,0 +1,4 @@
+Summain should be able to be fed a list of files and directories by
+find(1). This requires the user to be able to tell Summain to not
+recurse into directories.
+--liw

Add link to vmdebootstrap's Debian QA page
diff --git a/vmdebootstrap.mdwn b/vmdebootstrap.mdwn
index 747a1be..7974f17 100644
--- a/vmdebootstrap.mdwn
+++ b/vmdebootstrap.mdwn
@@ -4,11 +4,9 @@
 `chroot`(8). `vmdeboostrap` is a wrapper around it to install Debian into a disk
 image, which can be used with a virtual machine (such as KVM).
 
-At the moment `vmdebootstrap` only works on Debian squeeze, since
-`extlinux` on unstable/testing is broken. It'll get fixed, though.
-
 * <http://git.liw.fi/cgi-bin/cgit/cgit.cgi/vmdebootstrap>
 * `git clone git://git.liw.fi/vmdebootstrap`
+* [Debian](http://packages.qa.debian.org/v/vmdebootstrap.html)
 
 See also:
 

Remove program tag from bgproc
diff --git a/bgproc.mdwn b/bgproc.mdwn
index 067d2ec..6d3ff99 100644
--- a/bgproc.mdwn
+++ b/bgproc.mdwn
@@ -1,5 +1,5 @@
 [[!meta title="bgproc: wrapper around Python multiprocess"]]
-[[!tag program orphaned-project]]
+[[!tag orphaned-project]]
 
 The Python `multiprocessing` library allows some processing to happen in
 the background, using sub-processes. This library adds an abstraction

Update Obnam files for 1.7
diff --git a/obnam.mdwn b/obnam.mdwn
index 52b1913..23cc443 100644
--- a/obnam.mdwn
+++ b/obnam.mdwn
@@ -50,7 +50,6 @@ Documentation
 * [[README]] (updated at release time)
 * [[NEWS]] (updated at release time)
 * [[obnam manual page|obnam.1.txt]]
-* [[obnam-benchmark manual page|obnam-benchmark.1.txt]]
 * [[Roadmap for 1.0|roadmap-for-1.0]] (finished)
 * [[Roadmap post 1.2|roadmap-post-1.2]] (current)
 * [[FAQ]]
diff --git a/obnam/NEWS.mdwn b/obnam/NEWS.mdwn
index 890ddbd..edbfa0e 100644
--- a/obnam/NEWS.mdwn
+++ b/obnam/NEWS.mdwn
@@ -3,6 +3,90 @@ Obnam NEWS
 
 This file summarizes changes between releases of Obnam.
 
+Version 1.7, released 2014-03-15
+--------------------------------
+
+WARNING: This release has had fairly large parts of the internals
+re-written. There shouldn't be any externally visible changes due to
+that, but there is a chance of bugs. Be careful. Make a copy of your
+backup repository before upgrading, if you can.
+
+* The `convert5to6` subcommand has been removed. If you need to
+  convert from a pre-1.0 backup repository, and haven't done so yet,
+  please use Obnam version 1.6.1 or earlier to do so.
+
+* A new `backup-finished` hook is provided by the backup plugin, so
+  that other plugins may do processing at the end of a backup, such as
+  report the successful backup to a monitoring system. Patch by
+  Enrico Tröger.
+
+* The FUSE plugin can now refresh its view, by having the user read
+  the `.pid` file. Patch by Valery Yundin.
+
+* New option `--always-restore-setuid` to always restore setuid/setgid
+  flags in permissions, even if the restore is not being run by `root`
+  or the owner of the files (as recorded in the backup).
+
+* New option `--exclude-from` allows exclusion patterns to be given in
+  a separate file (one per line), instead of in a configuration file
+  or on the command line. Patch by Enrico Tröger.
+
+* A start of a manual for Obnam. This will gain more content with
+  new releases. The current versions is mainly an edited version of
+  Lars's blog posts about backups, plus the Obnam tutorial from the
+  Obnam homepage. See <http://code.liw.fi/obnam/manual/> for
+  rendered versions (PDF, HTML).
+
+* Most of the error messages Obnam produces now have a unique error
+  code: `ERROR: R0B15DX: Cannot find requested generation for client
+  havelock` for example. More error messages will gain error codes in
+  future releases. The error codes are meant to be easy to search for,
+  and will allow error messages to be translated in the future.
+
+* The `obnam-benchmark` program got rewritten so that it'll do
+  something useful, but at the same time, it is no longer useful as a
+  general tool. It is now expected to be run from the Obnam source
+  tree (a cloned git repository), and isn't installed anymore.
+
+* The log file now includes information about the transfer overhead to
+  the repository. Overhead is all the bytes that are not file content
+  data: filenames, permission bits, extended attributes, etc, plus
+  Obnam internal bookkeeping.
+
+* `obnam verify` now shows progress both based on number of files and
+  amount of data.
+
+Bug fixes:
+
+* Obnam now doesn't remove chunks that are shared between clients.
+  Previously, this would sometimes happen, because only the first
+  client would correctly record itself as using a chunk. Now all
+  clients do that.
+
+* Obnam now creates a `trustdb.gpg` in the temporary GNUPGHOME it uses
+  during encryption operations. From version 2.0.22 (or thereabouts),
+  `gpg` insists on having a `trustdb.gpg` in the GNUPGHOME it uses.
+
+* When backing up a large file, and making a checkpoint generation in
+  the middle of it, Obnam would say "continuing backup" after the
+  checkpoint was finished, instead of saying the name of the file.
+  This is now fixed.
+
+Internal changes:
+
+* The `obnamlib.Error` exception class has been replaced by the
+  `obnamlib.ObnamError` class, which derives from the new
+  `obnamlib.StructuredError` class. All new exceptions will need
+  to be derived from `obnamlib.Error` in the future. Also, due to the
+  way `StructuredError` works, it is now necessary to create a new
+  exception class for each kind of error. This gives us unique the
+  error codes mentioned above.
+
+* The old `obnamlib.Repository` class is gone, and replaced with the
+  `obnamlib.RepositoryInterface` class, which gets implemented for
+  each repository format (there is only one, for now, but there will
+  be more).
+
 Version 1.6.1, released 2013-11-30
 ----------------------------------
 
diff --git a/obnam/README.mdwn b/obnam/README.mdwn
index 1c2dfef..45b3404 100644
--- a/obnam/README.mdwn
+++ b/obnam/README.mdwn
@@ -21,8 +21,9 @@ On other systems, using the `setup.py` file should work: run
 "python setup.py --help" for advice. If not, please report a bug.
 (I've only tested `setup.py` enough for to build the Debian package.)
 
-You need to install my Python B-tree library, and some of my other libraries
-and tools, which you can get from:
+You need Python 2.6 or 2.7 (Python 3 is not yet supported). You also
+need to install my Python B-tree library, and some of my other
+libraries and tools, which you can get from:
 
 * <http://liw.fi/larch/>
 * <http://liw.fi/ttystatus/>
diff --git a/obnam/obnam-benchmark.1.txt b/obnam/obnam-benchmark.1.txt
deleted file mode 100644
index d7e5c5d..0000000
--- a/obnam/obnam-benchmark.1.txt
+++ /dev/null
@@ -1,208 +0,0 @@
-OBNAM-BENCHMARK(1)                                          OBNAM-BENCHMARK(1)
-
-
-
-NAME
-       obnam-benchmark - benchmark obnam
-
-SYNOPSIS
-       obnam-benchmark       [--config=FILE]       [--description=DESCRIPTION]
-       [--drop-caches]     [--dump-config]      [--dump-memory-profile=METHOD]
-       [--dump-setting-names] [--file-size=SIZE] [--generate-manpage=TEMPLATE]
-       [--generations=N]  [-h]  [--help]   [--help-all]   [--larch-branch=DIR]
-       [--list-config-files]  [--log=FILE]  [--log-keep=N] [--log-level=LEVEL]
-       [--log-max=SIZE]   [--log-mode=MODE]   [--memory-dump-interval=SECONDS]
-       [--no-default-configs]   [--no-drop-caches]  [--no-use-sftp-repository]
-       [--no-use-sftp-root]        [--no-verify]        [--no-with-encryption]
-       [--obnam-branch=DIR]    [--output=FILE]   [--profile-name=PROFILE-NAME]
-       [--results=DIR]     [--seivot-branch=DIR]     [--seivot-log=SEIVOT-LOG]
-       [--sftp-delay=SFTP-DELAY]     [--size=PAIR]     [--use-sftp-repository]
-       [--use-sftp-root] [--verify] [--version] [--with-encryption] [FILE]...
-
-DESCRIPTION
-       obnam-benchmark benchmarks the obnam(1) backup application, by  measur-
-       ing  how  much  time  it takes to do a backup, restore, etc, in various
-       scenarios.  obnam-benchmark uses the seivot(1) tool for  actually  run-
-       ning  the  benchmarks, but makes some helpful assumptions about things,
-       to make it simpler to run than running seivot directly.
-
-       Benchmarks are run using two different usage profiles:  mailspool  (all
-       files  are  small), and mediaserver (all files are big).  For each pro-
-       file, test data of the desired total size is generated, backed up,  and
-       then  several  incremental  generations are backed up, each adding some
-       more generated test data.  Then other operations are  run  against  the
-       backup  repository:  restoring,  listing  the contents of, and removing
-       each generation.
-
-       The result of the benchmark is a  .seivot  file  per  profile,  plus  a
-       Python  profiler  file  for  each  run  of  obnam.  These are stored in
-       ../benchmarks.  A set of .seivot files can be summarized for comparison
-       with  seivots-summary(1).   The  profiling files can be viewed with the
-       usual Python tools: see the pstats module.
-
-       The benchmarks are run against a version of obnam checked out from ver-
-       sion  control.   It  is  not  (currently) possible to run the benchmark
-       against an installed version of obnam.  Also the larch Python  library,
-       which  obnam  needs, needs to be checked out from version control.  The
-       --obnam-branch and --larch-branch options set the locations, if the de-
-       faults are not correct.
-
-OPTIONS
-       --description=DESCRIPTION
-              describe benchmark
-
-       --drop-caches
-              drop kernel buffer caches
-
-       --file-size=SIZE
-              how big should files be?
-
-       --generate-manpage=TEMPLATE
-              SUPPRESSHELP
-
-       --generations=N
-              benchmark N generations (default: 5)
-
-       -h, --help
-              show this help message and exit
-
-       --larch-branch=DIR
-              use DIR as the larch branch (default: )
-

(Diff truncated)
Update files for summain 0.19
diff --git a/summain/NEWS.mdwn b/summain/NEWS.mdwn
index 6f6ece7..dcf4df7 100644
--- a/summain/NEWS.mdwn
+++ b/summain/NEWS.mdwn
@@ -1,6 +1,12 @@
 NEWS file for summain
 =====================
 
+Version 0.19, released 2014-03-15
+---------------------------------
+
+* FreeBSD portability fixes by Itamar Turner-Trauring of
+  HybridCluster.
+
 Version 0.18, released 2013-03-15
 ---------------------------------
 
diff --git a/summain/summain.1.txt b/summain/summain.1.txt
index 4c7a54b..7ff82e7 100644
--- a/summain/summain.1.txt
+++ b/summain/summain.1.txt
@@ -1,4 +1,4 @@
-SUMMAIN(1)							    SUMMAIN(1)
+SUMMAIN(1)                                                          SUMMAIN(1)
 
 
 
@@ -6,33 +6,33 @@ NAME
        summain - gather file checksums and metadata
 
 SYNOPSIS
-       summain	   [-c=CHECKSUM]     [--checksum=CHECKSUM]     [--config=FILE]
-       [--dump-config]	[--dump-memory-profile=METHOD]	[--dump-setting-names]
+       summain     [-c=CHECKSUM]     [--checksum=CHECKSUM]     [--config=FILE]
+       [--dump-config]  [--dump-memory-profile=METHOD]  [--dump-setting-names]
        [--exclude=FIELD]     [--generate-manpage=TEMPLATE]    [-h]    [--help]
-       [--help-all]    [--list-config-files]	[--log=FILE]	[--log-keep=N]
-       [--log-level=LEVEL]     [--log-max=SIZE]     [--log-mode=MODE]	  [-m]
-       [--mangle-paths] 		      [--memory-dump-interval=SECONDS]
-       [--no-default-configs]	  [--no-mangle-paths]	 [--no-relative-paths]
+       [--help-all]    [--list-config-files]    [--log=FILE]    [--log-keep=N]
+       [--log-level=LEVEL]     [--log-max=SIZE]     [--log-mode=MODE]     [-m]
+       [--mangle-paths]                       [--memory-dump-interval=SECONDS]
+       [--no-default-configs]     [--no-mangle-paths]    [--no-relative-paths]
        [--output=FILE] [-f=OUTPUT-FORMAT] [--output-format=OUTPUT-FORMAT] [-r]
        [--relative-paths] [--secret=SECRET] [--version] [FILE]...
 
 DESCRIPTION
        summain gathers metadata about files, and computes their checksums.  It
-       is intended to create a manifest of the files.	The  manifest  can  be
+       is intended to create a manifest of the files.   The  manifest  can  be
        used to see if something has changed: a new manifest can be created and
        compared with the old one with diff(1).
 
        The manifest looks like this:
 
-	      Name: foo/bar/foobar
-	      SHA1: 1234123413241324
-	      Mtime: 2010-01-01 02:08:00.127651 +0000
-	      Mode: 1755
+              Name: foo/bar/foobar
+              SHA1: 1234123413241324
+              Mtime: 2010-01-01 02:08:00.127651 +0000
+              Mode: 1755
 
-       The filename is URL-encoded to ensure it is purely ASCII.  Mode	is  in
+       The filename is URL-encoded to ensure it is purely ASCII.  Mode  is  in
        octal.
 
-       Only  some  inode  fields are included.	It does not make sense to com-
+       Only  some  inode  fields are included.  It does not make sense to com-
        pare, for example, the access time, so that is not included.
 
        Time stamps are given using microsecond precision, for the  benefit  of
@@ -40,10 +40,10 @@ DESCRIPTION
        nanosecond,  but  Python  return  timestamps  as  floating  point,  and
        nanosecond precision is too much for the floating point type.)
 
-       The  inode  and	device	number fields will not be reported accurately.
+       The  inode  and  device  number fields will not be reported accurately.
        Instead, they are normalized so that manifests  are  useful  after  the
        files have been restored from backups.  Accurate numbers would mean ev-
-       erything seems to have changed.	Normalized means that there will be no
+       erything seems to have changed.  Normalized means that there will be no
        differences.   The  numbers  are  reported  so  that  hard links can be
        checked.
 
@@ -51,20 +51,20 @@ DESCRIPTION
 
 OPTIONS
        -c, --checksum=CHECKSUM
-	      which checksums to compute: MD5, SHA1, SHA224,  SHA256,  SHA384,
-	      SHA512; use once per checksum type (default is SHA1)
+              which checksums to compute: MD5, SHA1, SHA224,  SHA256,  SHA384,
+              SHA512; use once per checksum type (default is SHA1)
 
        --exclude=FIELD
-	      do not output or compute FIELD
+              do not output or compute FIELD
 
        --generate-manpage=TEMPLATE
-	      SUPPRESSHELP
+              SUPPRESSHELP
 
        -h, --help
-	      show this help message and exit
+              show this help message and exit
 
        -m, --mangle-paths
-	      mangle (obfuscate) paths
+              mangle (obfuscate) paths
 
        --no-mangle-paths
 
@@ -73,67 +73,77 @@ OPTIONS
 
 
        --output=FILE
-	      write output to FILE, instead of standard output
+              write output to FILE, instead of standard output
 
        -f, --output-format=OUTPUT-FORMAT
-	      choose output format (rfc822, csv, json)
+              choose output format (rfc822, csv, json)
 
        -r, --relative-paths
-	      print paths relative to arguments
+              print paths relative to arguments
 
        --secret=SECRET
-	      use SECRET to make mangled paths unguessable
+              use SECRET to make mangled paths unguessable
 
        --version
-	      show program's version number and exit
+              show program's version number and exit
 
    Configuration files and settings
        --config=FILE
-	      add FILE to config files
+              add FILE to config files
 
        --dump-config
-	      write out the entire current configuration
+              write out the entire current configuration
 
        --dump-setting-names
-	      SUPPRESSHELP
+              SUPPRESSHELP
 
        --help-all
-	      show all options
+              show all options
 
        --list-config-files
-	      SUPPRESSHELP
+              SUPPRESSHELP
 
        --no-default-configs
-	      clear list of configuration files to read
+              clear list of configuration files to read
 
    Logging
        --log=FILE
-	      write  log entries to FILE (default is to not write log files at
-	      all); use "syslog" to log to system log, or  "none"  to  disable
-	      logging
+              write  log entries to FILE (default is to not write log files at
+              all); use "syslog" to log to system log, or  "none"  to  disable
+              logging
 
        --log-keep=N
-	      keep last N logs (10)
+              keep last N logs (10)
 
        --log-level=LEVEL
-	      log  at LEVEL, one of debug, info, warning, error, critical, fa-
-	      tal (default: debug)
+              log  at LEVEL, one of debug, info, warning, error, critical, fa-
+              tal (default: debug)
 
        --log-max=SIZE
-	      rotate logs larger than SIZE, zero for never (default: 0)
+              rotate logs larger than SIZE, zero for never (default: 0)
 
        --log-mode=MODE
-	      set permissions of new log files to MODE (octal; default 0600)
+              set permissions of new log files to MODE (octal; default 0600)
 
    Peformance
        --dump-memory-profile=METHOD
-	      make memory profiling dumps using METHOD, which is one of: none,
-	      simple, meliae, or heapy (default: simple)
+              make memory profiling dumps using METHOD, which is one of: none,
+              simple, meliae, or heapy (default: simple)
 
        --memory-dump-interval=SECONDS
-	      make memory profiling dumps at least SECONDS apart
+              make memory profiling dumps at least SECONDS apart
 

(Diff truncated)
Update files for cmdtest 0.11
diff --git a/cmdtest.mdwn b/cmdtest.mdwn
index 6b0351a..3507ee4 100644
--- a/cmdtest.mdwn
+++ b/cmdtest.mdwn
@@ -9,7 +9,8 @@ If not, it reports a problem, and shows the differences.
 * [[README]] for cmdtest
 * [[README.yarn]] for yarn
 * [[NEWS]]
-* [[manpage|cmdtest.1.txt]]
+* [[cmdtest manpage|cmdtest.1.txt]]
+* [[yarn manpage|yarn.1.txt]]
 
 See also:
 
diff --git a/cmdtest/NEWS.mdwn b/cmdtest/NEWS.mdwn
index ca4d551..335c679 100644
--- a/cmdtest/NEWS.mdwn
+++ b/cmdtest/NEWS.mdwn
@@ -3,6 +3,63 @@ NEWS for cmdtest
 
 This file summarizes changes between releases of cmdtest.
 
+Version 0.11, released 2014-03-15
+---------------------------------
+
+For yarn:
+
+* Report number of scenarios skipped due to an ASSUMING step failing.
+
+* Fix the error message for reporting scenarios without THEN steps
+  to include the names of those scenarios only, rather than all
+  scenarios. Patch by Pete Fotheringham.
+
+* Yarn now sets `$HOME` to a directory in `$DATADIR`, and creates
+  that directory. This means test suites can assume `$HOME` exists,
+  but don't use the user's real home directory, which is important for
+  test environment hygiene.
+
+* New option `--allow-missing-steps` to allow running a test suite
+  with some steps missing. The scenarios with missing steps will be
+  skipped. Suggested by Pete Fotheringham.
+
+For cmdtest:
+
+* The `--test` (`-t`) option should now work again. Thank you
+  to Kalle Valo for prodding me.
+
+Version 0.10, released 2013-10-05
+---------------------------------
+
+* Yarn now cleans the environment when it runs shell commands for the
+  implementation steps. The PATH variable is kept from the user's
+  environment, every other variable is either removed or hardcoded to
+  a specific value. More variables can be added explicitly to the test
+  environment with the new `--env NAME=VALUE` option. Additionally
+  yarn sets the `SRCDIR` environment variable to point at the root of
+  the source tree (the directory where yarn was invoked from).
+
+* A new option, `--timings`, has been added to yarn to report how long
+  each scenario and each step took.
+
+* Yarn now reports scenarios skipped because of ASSUMING failing.
+
+* Yarn manual page now documents DATADIR and SRCDIR environment
+  variables.
+
+Bug fixes:
+
+* Yarn now complains if a scenario has no THEN steps. Suggested by
+  Richard Maw.
+
+* Yarn now gives an error if there are no scenarios. Suggested by
+  Daniel Silverstone and others.
+
+* Yarn now checks for duplicate scenario names.
+
+* Yarn now always checks for IMPLEMENTS sections with case-insensitive
+  matching. Reported, with test case, by Jannis Pohlmann.
+
 Version 0.9, released 2013-07-23
 --------------------------------
 
diff --git a/cmdtest/README.mdwn b/cmdtest/README.mdwn
index 300770b..b83eabc 100644
--- a/cmdtest/README.mdwn
+++ b/cmdtest/README.mdwn
@@ -1,6 +1,13 @@
 README for cmdtest
 ==================
 
+This project consists of two programs: the original `cmdtest`,
+and the newer `yarn`. Both are black box testing tools for Unix
+command line tools.
+
+cmdtest
+-------
+
 `cmdtest` black box tests Unix command line tools.
 Given some test scripts, their inputs, and expected outputs,
 it verifies that the command line produces the expected output.
@@ -9,10 +16,27 @@ If not, it reports problems, and shows the differences.
 See the manual page for details on how to use the program.
 
 
+yarn
+----
+
+`yarn` also black box tests Unix command line tools, but takes
+a different approach, where the emphasis is on verifying that the
+tools works correctly in a sequence of operations, or
+what we call a "test scenario". `yarn` is inspired [BDD][BDD],
+behavior-driven development, and some of the implementations made
+by the Ruby community.
+
+See README.yarn for more details.
+
+`yarn` has been designed with Daniel Silverstone.
+
+[BDD]: https://en.wikipedia.org/wiki/Behavior-driven_development
+
+
 Legalese
 --------
 
-Copyright 2011  Lars Wirzenius
+Copyright 2011-2013 Lars Wirzenius
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/cmdtest/README.yarn.mdwn b/cmdtest/README.yarn.mdwn
index 16f7522..5f1c7a2 100644
--- a/cmdtest/README.yarn.mdwn
+++ b/cmdtest/README.yarn.mdwn
@@ -1,6 +1,26 @@
 README for yarn, a scenario testing tool
 ========================================
 
+Installation
+------------
+
+* You need Python 2. Yarn's dependencies do not work with Python 3.
+  (Yet.)
+* Install ttystatus: <http://git.liw.fi/cgi-bin/cgit/cgit.cgi/ttystatus>
+* Install cliapp: <http://git.liw.fi/cgi-bin/cgit/cgit.cgi/cliapp>
+* Install Python-Markdown:
+  <http://github.com/waylan/Python-Markdown.git>
+* You can install them from source, or using your operating system's
+  package manager (if they've been packaged for your operating system;
+  Debian has them: `python-ttystatus`, `python-cliapp`,
+  `python-markdown`).
+* Similarly, install yarn from source or with the package manager
+  (in Debian: `cmdtest`).
+* Installation from source requires cloning the git repository and
+  running `python setup.py install`, perhaps with additional options
+  (see `--help`) to specify installation location, etc. Read also the
+  installation documentation of the libraries.
+
 Introduction
 ------------
 
diff --git a/cmdtest/cmdtest.1.txt b/cmdtest/cmdtest.1.txt
index 68d5bf2..866a5b8 100644
--- a/cmdtest/cmdtest.1.txt
+++ b/cmdtest/cmdtest.1.txt
@@ -1,4 +1,4 @@
-CMDTEST(1)							    CMDTEST(1)
+CMDTEST(1)                                                          CMDTEST(1)
 
 
 
@@ -6,16 +6,16 @@ NAME
        cmdtest - blackbox testing of Unix command line tools
 
 SYNOPSIS
-       cmdtest	    [-c=COMMAND]      [--command=COMMAND]      [--config=FILE]
-       [--dump-config]	[--dump-memory-profile=METHOD]	[--dump-setting-names]
+       cmdtest      [-c=COMMAND]      [--command=COMMAND]      [--config=FILE]
+       [--dump-config]  [--dump-memory-profile=METHOD]  [--dump-setting-names]
        [--generate-manpage=TEMPLATE]  [-h] [--help] [--help-all] [-k] [--keep]
        [--list-config-files] [--log=FILE]  [--log-keep=N]  [--log-level=LEVEL]
        [--log-max=SIZE]   [--log-mode=MODE]   [--memory-dump-interval=SECONDS]
-       [--no-default-configs]	[--no-keep]   [--no-timings]   [--output=FILE]
+       [--no-default-configs]   [--no-keep]   [--no-timings]   [--output=FILE]
        [-t=TEST] [--test=TEST] [--timings] [--version] [FILE]...
 
 DESCRIPTION
-       cmdtest	black  box  tests  Unix  command  line tools.  Given some test
+       cmdtest  black  box  tests  Unix  command  line tools.  Given some test
        scripts, their inputs, and expected outputs, it verifies that the  com-
        mand  line  produces the expected output.  If not, it reports problems,
        and shows the differences.
@@ -23,66 +23,66 @@ DESCRIPTION
        Each test case foo consists of the following files:
 
        foo.script
-	      a script to run the test (this is required)
+              a script to run the test (this is required)
 
        foo.stdin
-	      the file fed to standard input

(Diff truncated)
Add links to more cliapp examples
diff --git a/cliapp.mdwn b/cliapp.mdwn
index 8e1cc7a..b258a6b 100644
--- a/cliapp.mdwn
+++ b/cliapp.mdwn
@@ -11,7 +11,8 @@ compatible ways.
 * [[README]]
 * [[NEWS]]
 * [[cliapp(5) manual page|cliapp.5.txt]]
-* [[example.py]] and [[example2.py]]
+* Examples: [[example.py]], [[example2.py]], [[example3.py]],
+  [[example4.py]].
 * [API documentation](http://code.liw.fi/cliapp/docs/)
 * [[Using stuff on code.liw.fi|code]]
 * Version control:

Update cliapp files for 1.20140315
diff --git a/cliapp/NEWS.mdwn b/cliapp/NEWS.mdwn
index 86418bb..7219b4a 100644
--- a/cliapp/NEWS.mdwn
+++ b/cliapp/NEWS.mdwn
@@ -1,6 +1,28 @@
 NEWS for cliapp
 ===============
 
+Version 1.20140315
+------------------
+
+* Portability patch to disable VmRSS reporting on non-Linux platforms.
+  The code assumed that /proc/self/status exists, but that's only true
+  on Linux. Patch from Itamar Turner-Trauring.
+
+* `cliapp` now logs the current working directory, uid, effective uid,
+  gid, and effective gid at startup.
+
+* `cliapp` (`Settings.load_configs`) now reports an unknown
+  variable in a configuration file with a nice error message, rather
+  than a stack trace.
+
+* A new method, `cliapp.Application.get_subcommand_help_formatter`
+  allows overriding how the full help text for a subcommand is to be
+  formatted. This can be useful for allowing help texts be marked up
+  in, say, Markdown.
+
+* The `cliapp.Settings.require` method now accepts many setting names,
+  and check for all of them. Patch by Stephen Judd.
+
 Version 1.20130808
 ------------------
 
diff --git a/cliapp/README.mdwn b/cliapp/README.mdwn
index 1fd7a39..9b78e69 100644
--- a/cliapp/README.mdwn
+++ b/cliapp/README.mdwn
@@ -22,23 +22,29 @@ cliapp version numbers are of the form `API.DATE`, where `API` starts
 at 1, and gets incremented if the application API changes in an
 incompatible way. `DATE` is the date of the release.
 
+Hacking
+-------
+
+To run the test suite:
+
+   make clean check
+
 Legalese
 --------
 
-# Copyright (C) 2011-2013  Lars Wirzenius
-# Copyright (C) 2012-2013  Codethink Limited
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+* Copyright (C) 2011-2013  Lars Wirzenius
+* Copyright (C) 2012-2013  Codethink Limited
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
 
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
diff --git a/cliapp/cliapp.5.txt b/cliapp/cliapp.5.txt
index 9375070..7b7df85 100644
--- a/cliapp/cliapp.5.txt
+++ b/cliapp/cliapp.5.txt
@@ -1,31 +1,31 @@
-CLIAPP(5)							     CLIAPP(5)
+CLIAPP(5)                                                            CLIAPP(5)
 
 
 
 NAME
-       cliapp  -  config  file	and option conventions for Python command line
+       cliapp  -  config  file  and option conventions for Python command line
        framework
 
 DESCRIPTION
-       cliapp is a Python  programming	framework  for	writing  command  line
+       cliapp is a Python  programming  framework  for  writing  command  line
        applications   for  Unix-like  operating  systems.   This  manual  page
        describes the conventions for  configuration  files  and  command  line
        parsing provided by cliapp.
 
        Configuration  file  variables  and command line options are handled by
        cliapp under a uniform abstraction: every setting is available both  in
-       configuration  files  and  command  line options.  There are a few set‐
+       configuration  files  and  command  line options.  There are a few set-
        tings, provided by the framework itself, which are  only  available  on
-       the command line.  For example, --help outputs a short help text, list‐
-       ing all the available options, and --dump-config outputs a list of cur‐
+       the command line.  For example, --help outputs a short help text, list-
+       ing all the available options, and --dump-config outputs a list of cur-
        rent configuration settings.
 
-       Command	line parsing follows GNU conventions: short options start with
+       Command  line parsing follows GNU conventions: short options start with
        a single dash, long options with two dashes, and options  may  be  used
        anywhere  on the command line.  The order of options versus non-options
        does not matter.  The exception is some of the options provided by  the
-       framework,  which  are executed immediately when found, and may be pre‐
-       vent the rest of the options from being parsed.	(--dump-config is  one
+       framework,  which  are executed immediately when found, and may be pre-
+       vent the rest of the options from being parsed.  (--dump-config is  one
        of  these,  so  use it at the end of the command line only.)  Use -- on
        the command line to signal the end of options: no arguments after  that
        are considered to be option.
@@ -33,11 +33,11 @@ DESCRIPTION
        Some  settings  may have aliases, which can be only a single character,
        and in that case they're parsed as single-character option names.
 
-       Some applications have subcommands, which means	that  the  first  non-
+       Some applications have subcommands, which means  that  the  first  non-
        option  argument  is  used to tell the application what to do.  This is
        similar to what many version control systems do, for example CVS,  svn,
        bzr, and git.  Options are global, and are not specific to subcommands.
-       Thus, --foo means the same thing,  regardless  of  what	subcommand  is
+       Thus, --foo means the same thing,  regardless  of  what  subcommand  is
        being used.
 
    Configuration files
@@ -45,44 +45,44 @@ DESCRIPTION
        [config] section.  Other sections are allowed, but  it  is  up  to  the
        application to give meaning to them.
 
-       Multiple  configuration	files  may  be read.  Settings from later ones
-       override settings from earlier ones.  Options  override	settings  from
+       Multiple  configuration  files  may  be read.  Settings from later ones
+       override settings from earlier ones.  Options  override  settings  from
        the configuration files.
 
    String list settings
        Some settings may be a list of values (each value being a string).  For
-       example, there might be a setting for patterns to search for, and  mul‐
+       example, there might be a setting for patterns to search for, and  mul-
        tiple patterns are allowed.  On the command line, that happens by using
        the option multiple times.  In the configuration file, all  values  are
-       given  on one line, separated by commas.  This is a non-standard exten‐
+       given  on one line, separated by commas.  This is a non-standard exten-
        sion to the INI file syntax.  There is no way to escape commas.
 
        Example:
 
-	      [config]
-	      pattern = foo, bar, foobar
+              [config]
+              pattern = foo, bar, foobar
 
    Boolean (true/false or on/off or yes/no) settings
        When a setting can be either on or off, it's called a Boolean  setting.
        Such  settings  are turned off by default, and turned on if used on the
        command line.  In a configuration file, they need to be set to a value:
-       if  the	value is one of yes, on, true, or the number 1, the setting is
+       if  the  value is one of yes, on, true, or the number 1, the setting is
        turned on.  Any other value means it is turned off.
 
-	      [config]
-	      verbose = true
-	      attack-kittens = no
+              [config]
+              verbose = true
+              attack-kittens = no
 
        This turns the verbose setting on, but does not launch attack kittens.
 
        For every boolean setting, two command line options are added.  If  the
-       setting	is  called foo, the option --foo will turn the setting on, and
+       setting  is  called foo, the option --foo will turn the setting on, and
        --no-foo will turn it off.  The negation is only usable on the  command
        line:  its  purpose  is to allow the command line to override a setting
        from the configuration file.
 
    Logging and log files
-       Programs using cliapp automatically support several options for config‐
+       Programs using cliapp automatically support several options for config-
        uring  the  Python  logging  module.  See the --help output for options
        starting with log for details.  Logging can happen to  a  file  or  the
        system log.  Log files can be rotated automatically based on size.
@@ -91,30 +91,30 @@ DESCRIPTION

(Diff truncated)
Close cliapp bug
diff --git a/cliapp/bugs/debian-packaging-should-include-examples.mdwn b/cliapp/bugs/debian-packaging-should-include-examples.mdwn
index e074fef..c908b90 100644
--- a/cliapp/bugs/debian-packaging-should-include-examples.mdwn
+++ b/cliapp/bugs/debian-packaging-should-include-examples.mdwn
@@ -1,3 +1,6 @@
 Fix cliapp Debian package to include examples.
 especially a manpage template
 
+---
+
+This is fixed now. [[done]] --liw

Add Obnam bug about verify stricter
diff --git a/obnam/bugs/verify-stricter.mdwn b/obnam/bugs/verify-stricter.mdwn
new file mode 100644
index 0000000..3d92820
--- /dev/null
+++ b/obnam/bugs/verify-stricter.mdwn
@@ -0,0 +1,27 @@
+On Tue, Mar 11, 2014 at 04:34:13PM +0100, Thomas Schwinge wrote:
+
+> Alternatively, wouldn't it make sense to change to, or at least have
+> available, a mode where verify works not based on the data in the backup,
+> but instead of the actual user data?  Wouldn't doing it in this way build
+> a yet greater confidence that obnam has backed up everything alright?
+> That is, instead of traversing the data in the backup and verifying
+> against the corresponding user data, it'd traverse the user data (as when
+> doing a backup) and verify against the data in the backup.
+
+I think you're right. I think we should have "obnam verify" traverse
+through both the backup generation and the live data, and report as
+follows:
+
+* if a file exists only in the backup, but not in the live data
+* if a file exists only in the live data, but not in the backup
+    - also indicate whether the file matches (current) exclusion
+       rules, since that matters: a file that is in live data but is
+       not excluded is different from an excluded one
+* if a file exists in both the backup and the live data, but is
+  different in any way
+
+I don't have time to work on this at the moment, but I'll add it to
+the list of bugs in http://liw.fi/obnam/bugs/ and would be happy to
+review and merge a patch for this.
+
+--liw

Close fixed bug
diff --git a/obnam/bugs/Unhelpful_error_for_missing_key.mdwn b/obnam/bugs/Unhelpful_error_for_missing_key.mdwn
index 01d0914..9845930 100644
--- a/obnam/bugs/Unhelpful_error_for_missing_key.mdwn
+++ b/obnam/bugs/Unhelpful_error_for_missing_key.mdwn
@@ -17,3 +17,8 @@ Here is an example of error message when using "obnam fsck" without the key:
     File "/usr/lib/python2.7/dist-packages/obnamlib/hooks.py", line 122, in run_filter_read
       tag, content = data.split("\0", 1)
     ValueError: need more than 1 value to unpack
+
+
+---
+
+Fixed in git now. [[done]] --liw

Add note about Daniel
diff --git a/ideas/bug-names.mdwn b/ideas/bug-names.mdwn
index 2b4837f..234c0d0 100644
--- a/ideas/bug-names.mdwn
+++ b/ideas/bug-names.mdwn
@@ -1,3 +1,5 @@
+(Overall design together with Daniel Silverstone.)
+
 The problem: Bug reports, tickets, kanban cards, and other such
 entities need a unique identifier. Almost always a simple counter is
 used for this: 1, 2, 3, etc. As a project ages, the counter grows to

Mark bgproc as orphaned
I don't use nor develop this, so bye bye.
diff --git a/bgproc.mdwn b/bgproc.mdwn
index c441204..067d2ec 100644
--- a/bgproc.mdwn
+++ b/bgproc.mdwn
@@ -1,5 +1,5 @@
 [[!meta title="bgproc: wrapper around Python multiprocess"]]
-[[!tag program]]
+[[!tag program orphaned-project]]
 
 The Python `multiprocessing` library allows some processing to happen in
 the background, using sub-processes. This library adds an abstraction

Add idea about using names, not numbers, for bug ids
diff --git a/ideas/bug-names.mdwn b/ideas/bug-names.mdwn
new file mode 100644
index 0000000..2b4837f
--- /dev/null
+++ b/ideas/bug-names.mdwn
@@ -0,0 +1,110 @@
+The problem: Bug reports, tickets, kanban cards, and other such
+entities need a unique identifier. Almost always a simple counter is
+used for this: 1, 2, 3, etc. As a project ages, the counter grows to
+the tens and hundreds of thousands, even millions. Numbers are large
+as these are difficult to remember, and error prone to type, speak,
+and hear.
+
+We propose a simple textual encoding mechanism to be used instead of
+simple numbers. The goal of the encoding is to make remembering and
+communicating numeric identifiers easier and more reliable. This
+encoding is meant for human communication, as a kind of automatically
+generated nickname for the real identifier.
+
+An example to demonstrate the basic idea:
+
+* The context is a bug tracking system, with bug numbers in the
+  hundreds of thousands. That's up to 20 bits of data.
+* The number is split into four 5-bit parts, and each part is
+  represented as a code word from a different list of words.
+* The word lists have no overlap and each list has a distinct theme,
+  such as animal, geographical location, occupation, and food.
+* Bug 127650 might then be expressed as RABBIT MOUNTAIN DOCTOR
+  PARSLEY.
+
+Some notes:
+
+* By choosing words carefully, the sequences of words become more
+  easily memorable. Additionally, similar words within lists or across
+  lists should be avoided.
+* The parts do not all need to be of the same size. Common colours,
+  for example, are often fairly easy to remember, but there are fairly
+  few of them with memorable names.
+* Since each list of words is distinct, order of words doesn't matter.
+* Words can be translated, without loss of meaning.
+
+Very large identifiers, such as for git commits, do not need to be
+encoded fully to benefit from this scheme. Git commits are already
+often referred to using "short ids", of 7 nybbles.
+
+Even when identifiers are encoded fully, the number of words will grow
+as the identifiers grow. In the early stages of a project, bug
+numbers, for example, will probably be in the hundreds. That's up to
+ten bits, or probably two words. Later, bug numbers may grow larger,
+requiring a third and fourth word.
+
+This can lead to some ambiguity. Is POSTMAN ELEPHANT an early bug, or
+maybe just a partial encoding of a later bug? We don't expect this to
+become a real problem: when ambiguity is not acceptable, the full
+numeric identifier should be used, but when humans communicate about a
+bug, the context is usually sufficient to resolve any ambiguity.
+
+API
+---
+
+We propose the following API for a C library to implement this
+encoding. The intent is that the library will be easy to bind to other
+languages later, as well as being comfortable to use from C.
+
+The library will be called codewords and all identifier are prefixed
+with `cw_` or `CW_`.
+
+    enum {
+        CW_NO_ERROR = 0,
+        CW_ALLOCATION_ERROR,
+        CW_DUPLICATE_WORD_ERROR,
+        CW_DUPLICAT_TRANSLATION_ERROR,
+        CW_UNKNOWN_WORD_ERROR,
+    };
+
+    /* Return read-only array of wordlist name. Array is
+       NULL-terminated. */
+    char **cw_list_wordlists(void);
+    
+    /* Remove a wordlist, if it exists. */
+    void cw_remove_wordlist(const char *name);
+
+    /* Add a new wordlist. Return a CW status code. It is OK for the
+       word list to already exist: in that case, nothing happens. */
+    int cw_add_wordlist(const char *name);
+
+    /* Add a word to a wordlist. Return a CW status code. It is OK for
+       the word to already exist in that word list, but an error if it
+       exists in any other list. */
+    int cw_add_to_wordlist(const char *name, const char *word);
+
+    /* Return number of words in a word list. Return 0 if the word
+       list doesn't exist. */
+    size_t cw_get_word_count(const char *name);
+
+    /* Return the word at an index in a word list. Return NULL if the
+       a word list of the given name doesn't exist, or the index is
+       beyond the length of the list. */
+    char *cw_get_word(const char *name, size_t index);
+
+    /* Add a translation for a word. Return a CW status code.
+       The word must exist in some word list already, but the list
+       does not need to be specified. The translation must not exist. */
+    int cw_add_translation(const char *word, const char *translation);
+
+    /* Encode an unsigned long. Use at most max_words-1 words, and
+       store the words in the words array, which the user has already
+       allocated, and a NULL after the last word. The user MUST NOT
+       free the words. Return a CW status value. */
+    int cw_encode_ull(
+        unsigned long long id, int num_bits, char **words, int max_words);
+
+    /* Decode an unsigned long long value from a NULL-terminated list
+       of words. Return a CW status code, and put the result (if there
+       was no error) into *result. */
+    int cw_decode_long(unsigned long long *result, char **words)

Mark Obnam bug as closed
diff --git a/obnam/bugs/verify-progress-should-be-bytes.mdwn b/obnam/bugs/verify-progress-should-be-bytes.mdwn
index 4e454bb..44744a9 100644
--- a/obnam/bugs/verify-progress-should-be-bytes.mdwn
+++ b/obnam/bugs/verify-progress-should-be-bytes.mdwn
@@ -3,3 +3,7 @@
 When "obnam verify" shows progress, it's based on number of files.
 It should be based on number of bytes instead, for better progress
 reporting. --liw
+
+---
+
+[[done]] in git master now. --liw

Mark Obnam bug as closed
diff --git a/obnam/bugs/clients-list-should-include-ids.mdwn b/obnam/bugs/clients-list-should-include-ids.mdwn
index 6a0a9bd..00232f8 100644
--- a/obnam/bugs/clients-list-should-include-ids.mdwn
+++ b/obnam/bugs/clients-list-should-include-ids.mdwn
@@ -1,2 +1,13 @@
 Obnam needs a way to show the id of each client, so one can, say,
 safely remove the toplevel directory for the client.
+
+---
+
+Obnam now has an internal interface API for accessing repositories,
+and it doesn't expose the client id anymore. So this needs some
+thought: should we expose the id (even though it's not otherwise
+needed)? And what about future repository interface API
+implementations that don't need a client id at all anymore? I suspect
+it isn't going to useful enough to do this. If I get other uses
+cases, I'll re-consider. [[done]], for now. --liw
+

Mark Obnam bug as fixed
diff --git a/obnam/bugs/use-cliapp-setup_logging-overrides.mdwn b/obnam/bugs/use-cliapp-setup_logging-overrides.mdwn
index 37fb0f2..c477577 100644
--- a/obnam/bugs/use-cliapp-setup_logging-overrides.mdwn
+++ b/obnam/bugs/use-cliapp-setup_logging-overrides.mdwn
@@ -1,2 +1,6 @@
 cliapp now allows overriding parts of the logging setup, and obnam should
 use that as soon as cliapp has been released.
+
+---
+
+Fixed in git master. [[done]] --liw

Close fixed bug in Obnam
diff --git a/obnam/bugs/obnammodule-malloc.mdwn b/obnam/bugs/obnammodule-malloc.mdwn
index 1bfd7d7..731ccb2 100644
--- a/obnam/bugs/obnammodule-malloc.mdwn
+++ b/obnam/bugs/obnammodule-malloc.mdwn
@@ -1,2 +1,6 @@
 Review `_obnammodule.c`'s use of malloc: every return value should be
 checked and if there's a failure, the process should abort.
+
+---
+
+Fixed in git master. [[done]] --liw

Mark bug as closed
diff --git a/obnam/bugs/report-actual-transferred-bytes.mdwn b/obnam/bugs/report-actual-transferred-bytes.mdwn
index bccec2b..9387f15 100644
--- a/obnam/bugs/report-actual-transferred-bytes.mdwn
+++ b/obnam/bugs/report-actual-transferred-bytes.mdwn
@@ -3,3 +3,8 @@
 obnam backup should report actual transferred bytes in addition to live
 data bytes, for reporting of overhead, and should calculate speed with
 overhead too
+
+---
+
+Fixed in git master now. --liw
+[[done]]

Mark bug done
diff --git a/obnam/bugs/ugly-enoent-error-message.mdwn b/obnam/bugs/ugly-enoent-error-message.mdwn
index db530f2..4097f6e 100644
--- a/obnam/bugs/ugly-enoent-error-message.mdwn
+++ b/obnam/bugs/ugly-enoent-error-message.mdwn
@@ -13,6 +13,12 @@ ugly error message from obnam:
 
 --liw
 
---
+---
 
 I believe the tuple printing is now fixed. --liw
+
+---
+
+The problem with error messages getting printed out in the middle of
+progress output has now been fixed in git master. --liw
+[[done]]

Add Obnam bug
diff --git a/obnam/bugs/fuse-without-generations.mdwn b/obnam/bugs/fuse-without-generations.mdwn
new file mode 100644
index 0000000..0f95a11
--- /dev/null
+++ b/obnam/bugs/fuse-without-generations.mdwn
@@ -0,0 +1,4 @@
+It seems `obnam mount` (the FUSE plugin) can't handle a client without
+non-checkpoint generations. This is unfortunate, even if it is fairly
+unlikely to happen. Should be easy enough to fix.
+--liw

Add link to Earth Cafe
diff --git a/links.mdwn b/links.mdwn
index aedd050..bbf1446 100644
--- a/links.mdwn
+++ b/links.mdwn
@@ -23,6 +23,7 @@ incarnation of that web page.
 [Lambda lounge](http://www.lambdalounge.org.uk/)
 [listentotaxman](http://listentotaxman.com/)
 [Bletchley Park](http://www.bletchleypark.org/)
+[Earth Café](http://www.earthcafe.co/)
 
 **Books:**
 [OpenLibrary](http://openlibrary.org)

Close some Obnam bugs
diff --git a/obnam/bugs/document-black-box-testing.mdwn b/obnam/bugs/document-black-box-testing.mdwn
index 32673dc..5bcbc38 100644
--- a/obnam/bugs/document-black-box-testing.mdwn
+++ b/obnam/bugs/document-black-box-testing.mdwn
@@ -4,3 +4,8 @@ Review obnam black box tests and document how you're supposed to write them.
 
 - hacking section in README
 
+
+---
+
+On second though, I'll just let people read yarn documentation,
+these days. --liw [[done]]
diff --git a/obnam/bugs/time_based_checkpoint_generations.mdwn b/obnam/bugs/time_based_checkpoint_generations.mdwn
index 117da87..3d00f72 100644
--- a/obnam/bugs/time_based_checkpoint_generations.mdwn
+++ b/obnam/bugs/time_based_checkpoint_generations.mdwn
@@ -7,3 +7,12 @@ obnam should accept SIZE values as well as TIME values for the --checkpoint opti
 This would be very handy for connections which vary a lot in speed and quality.
 
 -- weinzwang
+
+
+While I agree this would be useful, I am afraid I haven't made any
+move towards implementing it, and as such, keeping the bug open isn't
+helping me manage the bug list. If anyone really wants this, sending
+a patch (even a proof of concept one) would be effective, though.
+--liw
+
+[[done]]
diff --git a/obnam/bugs/ugly-sshexception-error-message.mdwn b/obnam/bugs/ugly-sshexception-error-message.mdwn
index 44901ba..893146b 100644
--- a/obnam/bugs/ugly-sshexception-error-message.mdwn
+++ b/obnam/bugs/ugly-sshexception-error-message.mdwn
@@ -8,3 +8,8 @@ The following is ugly:
     Exception OSError: OSError(32, 'Broken pipe') in <bound method SFTPFile.__del__ of <paramiko.SFTPFile object at 0x18861cd0>> ignored
 
 There should not be a traceback, but a proper error message.
+
+
+---
+
+I believe this is fixed now. --liw [[done]]

Add obnam chattr bug
diff --git a/obnam/bugs/no-chattr-support.mdwn b/obnam/bugs/no-chattr-support.mdwn
new file mode 100644
index 0000000..80524e0
--- /dev/null
+++ b/obnam/bugs/no-chattr-support.mdwn
@@ -0,0 +1,7 @@
+Obnam does not support the ext2/3/4 chattr attributes. It should back them up and
+set them on restore, when possible.
+
+In addition, it should support the d attribute to exclude
+files from being backed up.
+
+--liw

Add links to Obnam manual, yarns
diff --git a/obnam.mdwn b/obnam.mdwn
index f35a0aa..52b1913 100644
--- a/obnam.mdwn
+++ b/obnam.mdwn
@@ -21,9 +21,8 @@ Some **features** that may interest you:
   has some limitations: see [[faq/dedup]]).
 * **Encrypted** backups, using GnuPG.
 
-See the [manual] for examples of how to use Obnam.
-
-[manual]: http://code.liw.fi/obnam/manual/
+See the [[tutorial]], and below for links to the manual, which has
+examples of how to use Obnam.
 
 Obnam can do **push** or **pull** backups, depending on what you
 need. You can run Obnam on the client, and push backups to the server,
@@ -41,7 +40,13 @@ is not recommended.
 Documentation
 -------------
 
-* [manual]
+* The full manual (currently a work in progress): available as
+  [a web page](http://code.liw.fi/obnam/manual/manual.html) and
+  [PDF](http://code.liw.fi/obnam/manual/manual.pdf).
+    - The Obnam test suite is also meant to be useful for the more
+      technical users of Obnam to read:
+      [web page](http://code.liw.fi/obnam/yarns.html),
+      [PDF](http://code.liw.fi/obnam/yarns.pdf).
 * [[README]] (updated at release time)
 * [[NEWS]] (updated at release time)
 * [[obnam manual page|obnam.1.txt]]

Tweak CV
diff --git a/cv.mdwn b/cv.mdwn
index b64425c..cef0f11 100644
--- a/cv.mdwn
+++ b/cv.mdwn
@@ -17,8 +17,9 @@ I am an expert in the Linux environment. Linux and Unix environments
 are the only ones I am looking to work in.
 
 I want to develop software, at all levels from architectural design
-down to writing lowest level code. I am not a tester, and I prefer
-to do very limited amounts of system or network administration work.
+down to writing even the lowest level code to implement the
+architecture. I am not a tester, and I prefer to do very limited
+amounts of system or network administration work.
 
 ## Stuff I know best
 
@@ -37,9 +38,10 @@ Perl, Markdown, HTML/CSS.
 
 ## Work and training
 
-**Codethink 2011-current.** I am the technical lead and architect
-for [Baserock](http://wiki.baserock.org/), a new way of building
-and developing embedded and appliance Linux systems.
+**Codethink 2011-current.** I have served in a variety of roles,
+including technical lead, architect, and developer, for
+[Baserock](http://wiki.baserock.org/), a new way of building and
+developing embedded and appliance Linux systems.
 
 **Consultant 2005-2011.** I've worked on variety of projects for
 several clients. In 2005-2006 I was under contract to improve the

Fix wrong word
diff --git a/obnam.mdwn b/obnam.mdwn
index 778fa49..f35a0aa 100644
--- a/obnam.mdwn
+++ b/obnam.mdwn
@@ -54,5 +54,5 @@ Documentation
 Links
 -----
 
-* [Cache Directory Caching Standard](http://www.bford.info/cachedir/)
+* [Cache Directory Tagging Standard](http://www.bford.info/cachedir/)
 * [Backup bouncer](http://www.n8gray.org/blog/2007/04/27/introducing-backup-bouncer/)

Update donation page with Amazon wishlist link
diff --git a/obnam/donate.mdwn b/obnam/donate.mdwn
index 9f94d24..331c838 100644
--- a/obnam/donate.mdwn
+++ b/obnam/donate.mdwn
@@ -7,10 +7,12 @@ Hash: SHA256
 Hi! I wrote Obnam, a backup program (http://liw.fi/obnam/). If you
 like the program and would like donate a little to help me afford to
 buy tools and services for developing it further, you can send me
-money:
+money or gifts:
 
-* Bitcoin: bitcoin:1FUKDBy79cC6iTaiyg5i1JVBCemiVdb5QC
+* Amazon wishlist:
+  http://www.amazon.co.uk/registry/wishlist/IAQ38FB6Y27D/ref=cm_wl_act_vv
 * Paypal: liw@liw.fi
+* Bitcoin: bitcoin:1FUKDBy79cC6iTaiyg5i1JVBCemiVdb5QC
 
 Obnam does not run on donations: it currently mainly runs on my free
 time. Donations are not required in any way: you're more than welcome
@@ -18,20 +20,26 @@ to use it without donating, and in any case I prefer a well-formulated
 bug report (see http://liw.fi/obnam/bug-reporting/) or a patch to fix
 a bug or add a feature. No bug is too small to be reported.
 
-Lars Wirzenius, 2013-12-05
+I can also arrange to do Obnam development for specific features, or
+support, for a fee, if you or your company needs something that isn't
+happening otherwise.
+
+Lars Wirzenius, 2014-02-09
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.12 (GNU/Linux)
 
-iQEcBAEBCAAGBQJSoG4WAAoJEIahkFub41rmaKgH/3lvENrNQ9uzOvJuBGjWwXc3
-o8EWoBrq/8AkQiVflIvTCYZPp3qDgIrdln7O/N1/+gSs8oMIJg1JG6axK9VD8mhK
-+P0IWI81H9EyYUldejcmYk+J+2XwiQ9HQpvD7MLjlF7AT/rw8/wnWxtweaypv2EN
-qciyLynLSpwDlRiwbTAgO7F27y/QecpXiAcItCWO7/aADpKlzu4SJjsgpE2awMT/
-OX9A/QlCYNnZo26L9ha0hL2vXjne4I5nQjyQUBpozZIh8UibdO0W1KJrhb/zkut5
-IXjm1MRvNRuHDYLTOkqiuRQQ1wXYgzmWPWfE9xMVMr72M4EfYUbG2t933ZAdKn4=
-=waJp
+iQEcBAEBCAAGBQJS943KAAoJEIahkFub41rmf1kH/jefKNjYhfKE7xbzZgR1IzXJ
+tJIC0a6YTqe+yXNPHOdsCj348v2TTcDl0l7106XprKDos02YZSDGqPbkqlxwF6DH
+cPKw7ZAvosagmbRsW/8dctmDeDi5ejvAzUuSbDFiYDYK5f1OyhozVX8VIMvJXCEj
+5OSGXzzYtpBuCNvB594u6E5FD3aE/MCT/5HTdnNhAfPK5Gn1bxEsDizB7DOIWD9D
+ItAchaeSqTJJ7ODkFB7goRNd/yJiKYcTW3aK3NmuATavq92DWIwvhGTmK5AwbZS/
+mBvmzSLDpqw1cgAJpFCYK9yMBmvZ53okiBFxwuFSXY9FYI8mc8B9HsWK9szycd8=
+=tbcm
 -----END PGP SIGNATURE-----
 </pre>
 
+(See [[donate.txt]] for a plain text version.)
+
 ---
 
 [[!img liw-bitcoin-qr-obnam.png]]
diff --git a/obnam/donate.txt b/obnam/donate.txt
new file mode 100644
index 0000000..69fd91b
--- /dev/null
+++ b/obnam/donate.txt
@@ -0,0 +1,35 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA256
+
+Hi! I wrote Obnam, a backup program (http://liw.fi/obnam/). If you
+like the program and would like donate a little to help me afford to
+buy tools and services for developing it further, you can send me
+money or gifts:
+
+* Amazon wishlist:
+  http://www.amazon.co.uk/registry/wishlist/IAQ38FB6Y27D/ref=cm_wl_act_vv
+* Paypal: liw@liw.fi
+* Bitcoin: bitcoin:1FUKDBy79cC6iTaiyg5i1JVBCemiVdb5QC
+
+Obnam does not run on donations: it currently mainly runs on my free
+time. Donations are not required in any way: you're more than welcome
+to use it without donating, and in any case I prefer a well-formulated
+bug report (see http://liw.fi/obnam/bug-reporting/) or a patch to fix
+a bug or add a feature. No bug is too small to be reported.
+
+I can also arrange to do Obnam development for specific features, or
+support, for a fee, if you or your company needs something that isn't
+happening otherwise.
+
+Lars Wirzenius, 2014-02-09
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.12 (GNU/Linux)
+
+iQEcBAEBCAAGBQJS943KAAoJEIahkFub41rmf1kH/jefKNjYhfKE7xbzZgR1IzXJ
+tJIC0a6YTqe+yXNPHOdsCj348v2TTcDl0l7106XprKDos02YZSDGqPbkqlxwF6DH
+cPKw7ZAvosagmbRsW/8dctmDeDi5ejvAzUuSbDFiYDYK5f1OyhozVX8VIMvJXCEj
+5OSGXzzYtpBuCNvB594u6E5FD3aE/MCT/5HTdnNhAfPK5Gn1bxEsDizB7DOIWD9D
+ItAchaeSqTJJ7ODkFB7goRNd/yJiKYcTW3aK3NmuATavq92DWIwvhGTmK5AwbZS/
+mBvmzSLDpqw1cgAJpFCYK9yMBmvZ53okiBFxwuFSXY9FYI8mc8B9HsWK9szycd8=
+=tbcm
+-----END PGP SIGNATURE-----

Add links to Obnam manual
diff --git a/obnam.mdwn b/obnam.mdwn
index 9f99bc5..778fa49 100644
--- a/obnam.mdwn
+++ b/obnam.mdwn
@@ -21,7 +21,9 @@ Some **features** that may interest you:
   has some limitations: see [[faq/dedup]]).
 * **Encrypted** backups, using GnuPG.
 
-See the [[tutorial]] for examples of how to use Obnam.
+See the [manual] for examples of how to use Obnam.
+
+[manual]: http://code.liw.fi/obnam/manual/
 
 Obnam can do **push** or **pull** backups, depending on what you
 need. You can run Obnam on the client, and push backups to the server,
@@ -29,7 +31,6 @@ or on the server, and pull from the client over SFTP. However, access
 to live data over SFTP is currently somewhat limited and fragile, so it
 is not recommended.
 
-* [[tutorial]]
 * [[1.0 release announcement|1.0]]
 * [[Status and support|status]]
 * [[Download]]
@@ -40,6 +41,7 @@ is not recommended.
 Documentation
 -------------
 
+* [manual]
 * [[README]] (updated at release time)
 * [[NEWS]] (updated at release time)
 * [[obnam manual page|obnam.1.txt]]
diff --git a/obnam/tutorial.mdwn b/obnam/tutorial.mdwn
index 259c2e4..dd99e36 100644
--- a/obnam/tutorial.mdwn
+++ b/obnam/tutorial.mdwn
@@ -1,5 +1,9 @@
 [[!meta title="Obnam tutorial"]]
 
+This tutorial will be migrating to the full Obnam manual,
+at <http://code.liw.fi/obnam/manual/>. This version is no longer
+updated, see the link for the current version.
+
 [[!toc ]]
 
 Installation

Add link to HP N40L wiki page
diff --git a/links.mdwn b/links.mdwn
index 4e40d67..aedd050 100644
--- a/links.mdwn
+++ b/links.mdwn
@@ -64,6 +64,7 @@ incarnation of that web page.
 
 **Hardware:**
 [Novena](http://www.kosagi.com/w/index.php?title=Novena_Main_Page)
+[N40L](http://n40l.wikia.com/wiki/HP_MicroServer_N40L_Wiki)
 
 **People:**
 [Arno Wirzenius](http://www.iki.fi/arno.w/)

Fix link
diff --git a/links.mdwn b/links.mdwn
index 7997a84..4e40d67 100644
--- a/links.mdwn
+++ b/links.mdwn
@@ -95,7 +95,7 @@ incarnation of that web page.
 [ringmaker](http://www.theringmaker.co.uk/)
 [Slaters](http://www.slaters.co.uk/)
 [Specsavers](http://www.specsavers.co.uk/)
-[Algerian Coffee](http://www.algcoffee.co.uk/scripts/default.asp)
+[Algerian Coffee](http://www.algcoffee.co.uk)
 
 **Organizations:**
 [EFFI](http://www.effi.org/)

Add Novena to links page
diff --git a/links.mdwn b/links.mdwn
index 7a2d083..7997a84 100644
--- a/links.mdwn
+++ b/links.mdwn
@@ -62,6 +62,9 @@ incarnation of that web page.
 [gitano](https://trello.com/board/gitano/4f9fee3d26a8c8e8340941a4)
 [luxio](http://www.rjek.com/bin/luxio/)
 
+**Hardware:**
+[Novena](http://www.kosagi.com/w/index.php?title=Novena_Main_Page)
+
 **People:**
 [Arno Wirzenius](http://www.iki.fi/arno.w/)
 [Jukka Rajala](http://www.jukkar.com/)

Close Obnam bug
diff --git a/obnam/bugs/performance-with-many-hardlinks.mdwn b/obnam/bugs/performance-with-many-hardlinks.mdwn
index c88957e..d30639a 100644
--- a/obnam/bugs/performance-with-many-hardlinks.mdwn
+++ b/obnam/bugs/performance-with-many-hardlinks.mdwn
@@ -10,3 +10,5 @@ how Obnam handles them. Perform a benchmark comparing three cases:
 
 Ideally, Obnam should perform about the same for all. --liw
 
+
+[[done]] really ancient wishlist bug --liw

Close Obnam bug
diff --git a/obnam/bugs/fsck-should-reconstruct-chunk-btrees.mdwn b/obnam/bugs/fsck-should-reconstruct-chunk-btrees.mdwn
index 07e2877..77e68d2 100644
--- a/obnam/bugs/fsck-should-reconstruct-chunk-btrees.mdwn
+++ b/obnam/bugs/fsck-should-reconstruct-chunk-btrees.mdwn
@@ -5,3 +5,5 @@ chunksums and chunklist B-trees in a repository. It should do so,
 at least when requested.
 
 --liw
+
+[[done]] ancient wishlist bug --liw

Close Obnam bug
diff --git a/obnam/bugs/more-rsync-like.mdwn b/obnam/bugs/more-rsync-like.mdwn
index 1b4175c..fc2e9f1 100644
--- a/obnam/bugs/more-rsync-like.mdwn
+++ b/obnam/bugs/more-rsync-like.mdwn
@@ -5,3 +5,5 @@ more rsync-like behavior, and more chance of finding duplicate data.
 This might be worthwhile, for some users, some of the time. It should
 be configurable, though, since it's also potentially going to be a 
 big performance problem. --liw
+
+[[done]] ancient wishlist bug --liw

Close Obnam bug
diff --git a/obnam/bugs/chunk-size-based-on-data-type-and-size.mdwn b/obnam/bugs/chunk-size-based-on-data-type-and-size.mdwn
index 733444d..4fcfc33 100644
--- a/obnam/bugs/chunk-size-based-on-data-type-and-size.mdwn
+++ b/obnam/bugs/chunk-size-based-on-data-type-and-size.mdwn
@@ -12,3 +12,5 @@ This needs to be measurements of real data to see if there are interesting
 parameters.
 
 --liw
+
+[[done]] interesting ideas, but old wishlist bug. --liw

Close Obnam bug
diff --git a/obnam/bugs/estimate-to-be-freed-space.mdwn b/obnam/bugs/estimate-to-be-freed-space.mdwn
index bd5f21e..b17ef44 100644
--- a/obnam/bugs/estimate-to-be-freed-space.mdwn
+++ b/obnam/bugs/estimate-to-be-freed-space.mdwn
@@ -12,3 +12,5 @@ It would be nice for Obnam to have a tool to answer the question
 
 --liw
 
+
+[[done]] ancient wishlist bug, closing. --liw

Close Obnam bug
diff --git a/obnam/bugs/compression-methods.mdwn b/obnam/bugs/compression-methods.mdwn
index 2df1312..967e391 100644
--- a/obnam/bugs/compression-methods.mdwn
+++ b/obnam/bugs/compression-methods.mdwn
@@ -5,3 +5,6 @@ Supporting multiple compression methods would be nice.
 Also one idea is to allow using one compression method (or no compression) while actually doing the backup, and then have a separate tool, to be run on otherwise idle time, recompress the data using some other, slower algorithm to conserve disk space without making the backup process slower.
 
 -- SLi
+
+[[done]] while this would be useful, it hasn't happened, and making
+the bug list longer is hampering other things. --liw

Close Obnam bug
diff --git a/obnam/bugs/Other_compression_methods__63__.mdwn b/obnam/bugs/Other_compression_methods__63__.mdwn
index 2a73170..f4f1732 100644
--- a/obnam/bugs/Other_compression_methods__63__.mdwn
+++ b/obnam/bugs/Other_compression_methods__63__.mdwn
@@ -11,3 +11,6 @@ external program, so the issue doesn't rise. However, we need the backgrounding
 anyway, since encryption uses an external tool, and so there's a big performance impact
 from using encryption. After backgrounding works, adding arbitrary compression filters will
 be easy. --liw
+
+[[done]] this is an ancient wishlist bug, and keeping it open isn't helping it happen,
+but it is making it harder to use the bug list. --liw

Close Obnam bug
diff --git a/obnam/bugs/Local_cache_of_remote_repo_metadata.mdwn b/obnam/bugs/Local_cache_of_remote_repo_metadata.mdwn
index 54505f1..e7d6e9e 100644
--- a/obnam/bugs/Local_cache_of_remote_repo_metadata.mdwn
+++ b/obnam/bugs/Local_cache_of_remote_repo_metadata.mdwn
@@ -5,3 +5,8 @@ Could Obnam keep a local cache of remote repository metadata, like Duplicity doe
 ---
 
 That is indeed a good idea. Unfortunately, the correctness of caches is often tricky, so I've been putting off implementing this until more important things work first. Also, not caching metadata forces me to do other things to make Obnam fast. But I'd like to do the caching too, some day. --liw
+
+---
+
+[[done]] duplicate, and also an old wishlist bug. Keeping this open
+isn't making this happen. --liw

Close Obnam bug
diff --git a/obnam/bugs/deduplication-stats.mdwn b/obnam/bugs/deduplication-stats.mdwn
index 17f7a8c..71a689e 100644
--- a/obnam/bugs/deduplication-stats.mdwn
+++ b/obnam/bugs/deduplication-stats.mdwn
@@ -17,3 +17,6 @@ Also, store per-generation data in the generation for faster retrieval.
 * Number of added/changed/removed files in this generation.
 
 --liw
+
+[[done]] if keeping the wishlist bug open would help make this happen,
+it would have happened already. --liw

Close Obnam bug
diff --git a/obnam/bugs/bgproc.mdwn b/obnam/bugs/bgproc.mdwn
index 464d6d7..be834fd 100644
--- a/obnam/bugs/bgproc.mdwn
+++ b/obnam/bugs/bgproc.mdwn
@@ -98,3 +98,6 @@ This design isn't optimal, since writing things to the repository
 isn't being done in parallel with other things, but I'll tackle that
 problem later.
 
+
+[[done]] this clearly isn't happening, so closing the old wishlist
+bug --liw

Close Obnam bug
diff --git a/obnam/bugs/arch-diagram.mdwn b/obnam/bugs/arch-diagram.mdwn
index 4d1da59..06aa8c3 100644
--- a/obnam/bugs/arch-diagram.mdwn
+++ b/obnam/bugs/arch-diagram.mdwn
@@ -2,3 +2,5 @@
 
 It would be good to have an architecture diagram of the internals of
 obnam, to make life easier for new code contributors. --liw
+
+[[done]] old wishlist bug, closing. --liw

Close Obnam bug
diff --git a/obnam/bugs/local-temp-cache.mdwn b/obnam/bugs/local-temp-cache.mdwn
index 6585782..d74349e 100644
--- a/obnam/bugs/local-temp-cache.mdwn
+++ b/obnam/bugs/local-temp-cache.mdwn
@@ -1,3 +1,5 @@
 [[!tag obnam-wishlist]]
 
 See <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=655094> for details.
+
+[[done]] no point in keeping this open in multiple places. --liw

Close Obnam bug
diff --git a/obnam/bugs/Warn___40__and_optionally_skip__41___backing_up_large_files.mdwn b/obnam/bugs/Warn___40__and_optionally_skip__41___backing_up_large_files.mdwn
index ff49637..6e9d7a6 100644
--- a/obnam/bugs/Warn___40__and_optionally_skip__41___backing_up_large_files.mdwn
+++ b/obnam/bugs/Warn___40__and_optionally_skip__41___backing_up_large_files.mdwn
@@ -12,3 +12,11 @@ Great idea.  --AP
 -----------
 I second that great idea :)  leto
 
+
+---
+
+[[done]]
+
+While I agree it is a nice idea, keeping the wishlist bug open clearly
+isn't making this happen, and long lists of bugs are tedious to work
+with. --liw

Close Obnam bug
diff --git a/obnam/bugs/wishlist:_how_does_memory_and_cpu_usage_of_obnam_depend_on_the_number_of_files_and_their_sizes__63__.mdwn b/obnam/bugs/wishlist:_how_does_memory_and_cpu_usage_of_obnam_depend_on_the_number_of_files_and_their_sizes__63__.mdwn
index 966cd58..13215e8 100644
--- a/obnam/bugs/wishlist:_how_does_memory_and_cpu_usage_of_obnam_depend_on_the_number_of_files_and_their_sizes__63__.mdwn
+++ b/obnam/bugs/wishlist:_how_does_memory_and_cpu_usage_of_obnam_depend_on_the_number_of_files_and_their_sizes__63__.mdwn
@@ -12,3 +12,6 @@ I imagine that in the simplest case you could use something like
     done
 
 to get cpu and memory usage of backup operations. Repeat same for obnam fsck if you are afraid that its memory usage could depend on total_size or file_size.
+
+[[done]] A very old wishlist bug. Closing this, since keeping it open
+clearly isn't making it happen. --liw