got:
- Teach 'got merge' to merge changes into an arbitrary subdirectory
  of the work tree. This would be nice for merging vendor branches.
  Say you have a branch 'llvm-12' which initially contains a 12.0
  release tree as published by the LLVM project, added to the repository
  with a command such as 'got import -b llvm-12'. On the main branch we
  would want to merge files from the llvm-12 branch into /usr/src/gnu/llvm
  instead of the root directory checked out at /usr/src.
  The next LLVM release 12.1 would later be committed onto the llvm-12
  branch and then merged into main at /usr/src/gnu/llvm in the same way.
- When a clone fails the HEAD symref will always point to "refs/heads/main"
  (ie. the internal default HEAD symref of Got). Resuming a failed clone with
  'got fetch' is supposed to work. To make this easier, if the HEAD symref
  points to a non-existent reference it should be updated by 'got fetch'
  to match the HEAD symref sent by the server.
- 'got patch' should be able to detect an already applied patch.
- 'got patch' should ideally do more passes if a patch doesn't apply and
  try fancy things (like ignoring context and whitespaces) only in later
  passes.
- investigate whether it's worth for 'got patch' to memory-map the files to
  edit.  (c.f. Plan A / Plan B in Larry' patch.)
- when fetching pack files got should verify that the requested branch tips
  are present in the pack file sent by the server, before making this pack
  file visible to readers of the repository
- enforce that log messages are encoded in either ASCII or UTF-8; this
  mostly matters for -portable since OpenBSD doesn't provide other locales
- by default, deny rebasing of commits that exist in refs/remotes or refs/tags
- allow rebase to detect changes already present in the new base branch by
  comparing the IDs of base-blobs of changed files on either side, and then
  removing detected no-op changes from the list of commits to rebase before
  merging any changes (rather than letting diff3 figure this out). RCS IDs
  in commits exported from CVS will need to be elided to avoid false positives.
- to support packfile reachability bitmaps, we'll need to port EWAHBoolArray
  from C++ to C: https://github.com/lemire/EWAHBoolArray
  EWAH author Daniel Lemire generously relicensed his code to dual Apache2+MIT
  to make this possible. The C code we publish should use the MIT license.
- 'got send' should support the equivalent to 'got fetch -R', allowing
  arbitrary references to be sent

tog:
- make 'tog log' respond to key presses while 'loading...' history; loading
  can be slow for paths in a deep history if the path has not been changed
  very often, and 'tog log' blocks far too long in this case
- make it possible to view the contents of tag objects
- verify signed tag objects
- make it possible to toggle the parent to diff against in merge commits

gotwebd:
- fix COMMITS page for paths that were deleted and/or re-added to the
  repository. One way would be not to let the commit graph filter paths.
  As an additional optimization we could keep a tailq or the object-id
  set for everything traversed in the repo to have fast reverse-lookups.
  (has the additional requirement to invalidate it when the reference
  timestamp changes)
- reply with 404 on some kind of errors ('reference not found' for sure,
  maybe also tree entry not found?)
- support category grouping a-la gitweb/cgit with the gitweb.category
  config option or via the "category" file in the root of the repo.
- consider changing the URL scheme to avoid so many query parameters

gotd:
- ensure all error messages are propagated to clients before disconnecting,
  there are probably still some cases where such error reporting is skipped
- client connection timeout handling needs to be checked by regress tests,
  and is likely in need of improvement
- implement stress-tests to observe and fix misbehaviour under load
- listener's fd-reserve limit needs to be reviewed and perhaps adjusted
- implement pre-commit checks (in lieu of hook scripts):
  1. deny branch history rewriting ('got send -f') via gotd.conf [done]
  2. allow/deny creation/deletion of references via gotd.conf
  3. deny modifications within a given reference namespace via gotd.conf [done]
  4. entirely hide a given reference namespace from clients via gotd.conf
  5. allow/deny addition of binary files to a repo via gotd.conf
  6. enforce a particular blob size limit via gotd.conf
  7. optionally reject merge commits via gotd.conf
- implement post-commit-event libexec handlers (in lieu of hook scripts):
  1. commit email notification, plaintext smtp to localhost port 25 [done]
  2. general-purpose HTTP(s) GET/POST request as commit notification [done]
  3. perform the equivalent of 'got send' to another repository
- keep track of available repository disk space and fail gracefully when
  uploaded pack files would fill up the disk too much, keeping a reserve
- sending a branch while deleting another with got send -d breaks notifications

gotadmin:
- add support for generating git-fast-export streams from a repository
- add support for importing git-fast-export streams into a repository
- speed up 'gotadmin pack -a' is too slow on repositories with many pack files
- support "thin" bundles; git will hardcode --thin when using an
  exclude base.

gotsysd:
- complete the WIP implementation of mime-types support in gotsys.conf
- complete the WIP implementation of custom css/logo/url support in gotsys.conf
- allow utf8 in gotsys.conf strings for repository descriptions and owner names
- set foo.git/description file from gotsys.conf for multi-line/utf8 description
- for -portable users, add 'gotsys encrypt' command, equivalent to encrypt(1)
