about summary refs log tree commit homepage
path: root/Documentation/RelNotes
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/RelNotes')
-rw-r--r--Documentation/RelNotes/v1.4.0.eml80
-rw-r--r--Documentation/RelNotes/v1.5.0.eml64
-rw-r--r--Documentation/RelNotes/v1.6.0.eml169
-rw-r--r--Documentation/RelNotes/v1.6.1.eml57
-rw-r--r--Documentation/RelNotes/v1.7.0.eml101
-rw-r--r--Documentation/RelNotes/v1.8.0.eml47
-rw-r--r--Documentation/RelNotes/v1.9.0.eml68
-rw-r--r--Documentation/RelNotes/v2.0.0.wip193
8 files changed, 777 insertions, 2 deletions
diff --git a/Documentation/RelNotes/v1.4.0.eml b/Documentation/RelNotes/v1.4.0.eml
index 6b1bc86e..845895b5 100644
--- a/Documentation/RelNotes/v1.4.0.eml
+++ b/Documentation/RelNotes/v1.4.0.eml
@@ -1,10 +1,86 @@
+Date: Fri, 17 Apr 2020 08:48:59 +0000
 From: Eric Wong <e@yhbt.net>
 To: meta@public-inbox.org
-Subject: [WIP] public-inbox 1.4.0
+Subject: [ANNOUNCE] public-inbox 1.4.0
+Message-ID: <20200417084800.public-inbox-1.4.0-rele@sed>
 MIME-Version: 1.0
 Content-Type: text/plain; charset=utf-8
+Content-Disposition: inline
 
-TBD
+This release focuses on reproducibility improvements and
+bugfixes for corner-cases.  Busy instances of PublicInbox::WWW
+may also notice memory usage reductions.
+
+For rare messages lacking Date and/or Received headers, mirrors
+now fall back to using the git author/commit times to reindex
+them.  This ensures search and filtering queries behave
+identically on mirrors as they do on the original machine.
+
+"altid" SQLite dumps are now accessible to all over the WWW
+interface via `POST /$INBOX/$ALTID.sql.gz'.
+
+Busy instances of PublicInbox::WWW (whether via
+public-inbox-httpd or another PSGI server) may notice
+significant memory usage reductions from the single message
+"permalink" lifetime optimization.  There also ongoing work to
+improve memory lifetime management to reduce the potential for
+memory fragmentation in daemons.
+
+* general changes:
+
+  - `include.*' directives in the public-inbox-config(5) file
+    are now honored as documented in git-config(1),
+    thanks to Andreas Rottmann.
+
+  - `+0000' is assumed for dates missing TZ offsets;
+    thanks to Leah Neukirchen for spotting this regression from
+    v1.2.0.
+
+  - `<' and `>' characters are dropped to avoid errors in git
+    in addresses for git, thanks again to Leah for noticing
+    this long-standing bug.
+
+* PublicInbox::WWW:
+
+  - memory reductions for message display and rendering
+  - code preload improved to reduce memory fragmentation
+  - remove redundant "a=" parameter in links to solver
+  - escape '&' in hrefs properly
+  - fix optional address obfuscation in search results
+  - `POST /$INBOX/$ALTID.sql.gz' endpoint to retrieve SQLite dumps
+
+* public-inbox-httpd + public-inbox-nntpd:
+
+  - fix SIGUSR2 upgrade in worker-less instances (-W0)
+
+* public-inbox-httpd:
+
+  - fix RFC 7230 conformance when Content-Length and "chunked"
+    are both specified
+
+* public-inbox-index:
+
+  - reproduce original date and time stamps in mirrors for messages
+    lacking Date: and/or Received: headers
+
+  - new `--compact' (or `-c') switch to perform the equivalent of
+    public-inbox-compact(1) after indexing each inbox
+
+* documentation:
+
+  - add Documentation/technical/data_structures.txt for new hackers
+
+* scripts/import_vger_from_mbox: (not really a production-level script)
+
+  - fix ">From" unescaping thanks to a bug report from Kyle Meyer
+
+Thanks to Andreas Rottmann, Leah Neukirchen and Kyle Meyer
+for their contributions to this release.
+
+Release tarball available for download over HTTPS or Tor .onion:
+
+https://yhbt.net/public-inbox.git/snapshot/public-inbox-1.4.0.tar.gz
+http://ou63pmih66umazou.onion/public-inbox.git/snapshot/public-inbox-1.4.0.tar.gz
 
 Please report bugs via plain-text mail to: meta@public-inbox.org
 
diff --git a/Documentation/RelNotes/v1.5.0.eml b/Documentation/RelNotes/v1.5.0.eml
new file mode 100644
index 00000000..d6036d26
--- /dev/null
+++ b/Documentation/RelNotes/v1.5.0.eml
@@ -0,0 +1,64 @@
+From: Eric Wong <e@yhbt.net>
+To: meta@public-inbox.org
+Subject: [ANNOUNCE] public-inbox 1.5.0
+Date: Sun, 10 May 2020 07:04:00 +0000
+Message-ID: <20200510.public-inbox-1.5.0-rele@sed>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Disposition: inline
+
+This release introduces a new pure-Perl lazy email parser,
+PublicInbox::Eml, which uses roughly 10% less memory and
+is up to 2x faster than Email::MIME.   This is a major
+internal change
+
+Limits commonly enforced by MTAs are also enforced in the
+new parser, as messages may bypass MTA transports.
+
+Email::MIME and other Email::* modules are no longer
+dependencies nor used at all outside of maintainer validation
+tests.
+
+* public-inbox-index
+
+  - `--max-size=SIZE' CLI switch and `publicinbox.indexMaxSize'
+    config file option added to prevent indexing of overly
+    large messages.
+
+  - List-Id headers are indexed in new messages, old messages
+    can be found after `--reindex'.
+
+* public-inbox-watch
+
+  - multiple values of `publicinbox.<name>.watchheader' are
+    now supported, thanks to Kyle Meyer
+
+  - List-Id headers are matched case-insensitively as specified
+    by RFC 2919
+
+* PublicInbox::WWW
+
+  - $INBOX_DIR/description and $INBOX_DIR/cloneurl are not
+    memoized if missing
+
+  - improved display of threads, thanks to Kyle Meyer
+
+  - search for List-Id is available via `l:' prefix if indexed
+
+  - all encodings are preloaded at startup to reduce fragmentation
+
+  - diffstat linkification and highlighting are stricter and
+    less likely to linkify tables in cover letters
+
+  - fix hunk header links to solver which were off-by-one line,
+    thanks again to Kyle Meyer
+
+Release tarball available for download over HTTPS or Tor .onion:
+
+https://yhbt.net/public-inbox.git/snapshot/public-inbox-1.5.0.tar.gz
+http://ou63pmih66umazou.onion/public-inbox.git/snapshot/public-inbox-1.5.0.tar.gz
+
+Please report bugs via plain-text mail to: meta@public-inbox.org
+
+See archives at https://public-inbox.org/meta/ for all history.
+See https://public-inbox.org/TODO for what the future holds.
diff --git a/Documentation/RelNotes/v1.6.0.eml b/Documentation/RelNotes/v1.6.0.eml
new file mode 100644
index 00000000..3fe8beae
--- /dev/null
+++ b/Documentation/RelNotes/v1.6.0.eml
@@ -0,0 +1,169 @@
+From: Eric Wong <e@80x24.org>
+To: meta@public-inbox.org
+Subject: [ANNOUNCE] public-inbox 1.6.0
+Date: Wed, 16 Sep 2020 20:03:09 +0000
+Message-ID: <20200916200309.public-inbox-1.6.0-rele@sed>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Disposition: inline
+
+A big release containing several performance optimizations, a
+new anonymous IMAP server, and more.  It represents an
+incremental improvement over 1.5 in several areas with more to
+come in 1.7.
+
+The read-only httpd and nntpd daemons no longer block the event
+loop when retrieving blobs from git, making better use of SMP
+systems while accomodating slow storage.
+
+Indexing can be now be tuned to give somewhat usable performance
+on HDD storage, though we can't defy the laws of physics, either.
+
+* General changes:
+
+  - ~/.cache/public-inbox/inline-c is automatically used for Inline::C
+    if it exists.  PERL_INLINE_DIRECTORY in env remains supported
+    and prioritized to support `nobody'-type users without HOME.
+
+  - msgmap.sqlite3 uses journal_mode=TRUNCATE, matching over.sqlite3
+    behavior for a minor reduction in VFS traffic
+
+  - public-inbox-tuning(7) - new manpage containing pointers to
+    various tuning options and tips for certain HW and OS setups.
+
+  - Copy-on-write is disabled on BTRFS for new indices to avoid
+    fragmentation.  See the new public-inbox-tuning(7) manpage.
+
+  - message/{rfc822,news,global} attachments are decoded recursively
+    and indexed for search.  Reindexing (see below) is required
+    to ensure these attachments are indexed in old messages.
+
+  - inbox.lock (v2) and ssoma.lock (v1) files are written to
+    on message delivery (or spam removal) to wake up read-only
+    daemons via inotify or kqueue.
+
+  - `--help' switch supported by command-line tools
+
+* Upgrading for new features in 1.6
+
+  The ordering of these steps is only necessary if you intend to
+  use some new features in 1.6.  Future releases may have
+  different instructions (or be entirely transparent).
+
+  0. install (use your OS package manager, or "make install")
+
+  1. restart public-inbox-watch instances if you have any
+
+  2. Optional: remove Plack::Middleware::Deflater if you're using
+     a custom .psgi file for PublicInbox::WWW.  This only saves
+     some memory and CPU cycles, and you may also skip this step
+     if you expect to roll back to 1.5.0 for any reason.
+
+  Steps 3a and 3b may happen in any order, 3b is optional
+  and is only required to use new WWW and IMAP features.
+
+  3a. restart existing read-only daemons if you have them
+      (public-inbox-nntpd, public-inbox-httpd)
+
+  3b. run "public-inbox-index -c --reindex --rethread --all"
+      to reindex all configured inboxes
+
+  4. configure and start the new public-inbox-imapd.  This
+     requires reindexing in 3b, but there's no obligation to
+     run an IMAP server, either.
+
+* public-inbox-index
+
+  There are several new options to improve usability on slow,
+  rotational storage.
+
+  - `--batch-size=BYTES' or publicinbox.indexBatchSize parameter
+    to reduce frequency of random writes on HDDs
+
+  - `--sequential-shard' or publicInbox.sequentialShard parameter
+    to improve OS page cache utilization on HDDs.
+
+  - `--no-fsync' when combined with Xapian 1.4+ can be used to
+    speed up indexing on SSDs and small (default) `--batch-size'
+
+  - `--rethread' option to go with `--reindex' (use sparringly,
+    see manpage)
+
+  - parallelize v2 updates by default, `--sequential-shard' and
+    `-j0' is (once again) allowed to disable parallelization
+
+  - (re-)indexing parallelizes blob reads from git
+
+  - `--all' may be specified to index all configured inboxes
+
+* public-inbox-learn
+
+  - `rm' supports `--all' to remove from all configured inboxes
+
+* public-inbox-imapd
+
+  - new read-only IMAP daemon similar to public-inbox-nntpd
+    `AUTH=ANONYMOUS' is supported, but any username and
+    password for clients without `AUTH=ANONYMOUS' support.
+
+* public-inbox-nntpd
+
+  - blob reads from git are handled asynchronously
+
+* public-inbox-httpd
+
+  - Plack::Middleware::Deflater is no longer loaded by default
+    when no .psgi file is specified; PublicInbox::WWW can rely
+    on gzip for buffering (see below)
+
+* PublicInbox::WWW
+
+  - use consistent blank line around attachment links
+
+  - Attachments in message/{rfc822,news,global} messages can be
+    individually downloaded.  Downloading the entire message/rfc822
+    file in full remains supported
+
+  - $INBOX_DIR/description is treated as UTF-8
+
+  - HTML, Atom, and text/plain responses are gzipped without
+    relying on Plack::Middleware::Deflater
+
+  - Multi-message endpoints (/t.mbox.gz, /T/, /t/, etc) are ~10% faster
+    when running under public-inbox-httpd with asynchronous blob
+    retrieval
+
+  - mbox search results may now include all messages pertaining to that
+    thread.  Needs `--reindex' mentioned above in
+    `Upgrading for new features in 1.6'.
+
+  - fix mbox.gz search results downloads for lynx users
+
+  - small navigation tweaks, more prominent mirroring instructions
+
+* public-inbox-watch
+
+  - Linux::Inotify2 or IO::KQueue is used directly,
+    Filesys::Notify::Simple is no longer required
+
+  - NNTP groups and IMAP mailboxes may be watched in addition
+    to Maildirs (lightly tested).
+
+* Ongoing internal changes
+
+  - reduce event loop hogging for many-inbox support
+
+  - use more Perl v5.10-isms, future-proof against Perl 8
+
+  - more consistent variable and field naming, improve internal
+    documentation and comments
+
+  - start supporting >=40 char git identifiers for SHA-256
+
+  - test -httpd-specific code paths via Plack::Test::ExternalServer
+    in addition to generic PSGI paths.
+
+Please report bugs via plain-text mail to: meta@public-inbox.org
+
+See archives at https://public-inbox.org/meta/ for all history.
+See https://public-inbox.org/TODO for what the future holds.
diff --git a/Documentation/RelNotes/v1.6.1.eml b/Documentation/RelNotes/v1.6.1.eml
new file mode 100644
index 00000000..49d2ade0
--- /dev/null
+++ b/Documentation/RelNotes/v1.6.1.eml
@@ -0,0 +1,57 @@
+From: Eric Wong <e@80x24.org>
+To: meta@public-inbox.org
+Subject: [ANNOUNCE] public-inbox 1.6.1
+Date: Thu, 31 Dec 2020 23:45:56 +0000
+Message-ID: <20201231234556.public-inbox-1.6.1-rele@sed>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Disposition: inline
+
+A small, bugfix release on top of 1.6.0 from September 2020.
+
+Bug fixes:
+
+* MIME header decoding no longer warns on undefined variables,
+  with Perl <5.28.  Thanks to a bug report by Ali Alnubani.
+  https://public-inbox.org/meta/DM6PR12MB49106F8E3BD697B63B943A22DADB0@DM6PR12MB4910.namprd12.prod.outlook.com/
+
+* Fixed a message threading bug thanks to a report from Kyle Meyer.
+  "public-inbox-index --rethread --reindex" will be necessary
+  in case of certain messages arrive out-of-order.
+  Link: https://public-inbox.org/meta/87360nlc44.fsf@kyleam.com/
+
+* WWW: per-inbox grokmirror manifests no longer return info
+  for all inboxes, only the root /manifest.js.gz includes all
+  inboxes.  This regression appeared in 1.6.
+
+* public-inbox-mda matches List-Id headers insensitively,
+  matching public-inbox-watch behavior.  Similarly, List-Id
+  is always indexed lower-cased for boolean matches to avoid
+  matching an incorrect term.
+
+* Newsgroup and Path NNTP headers are now emitted in conformance
+  with RFC 5536 3.1.[45].  Thanks to Andrey Melnikov for the report:
+  https://public-inbox.org/meta/CA+PODjpUN5Q4gBFQhAzUNuMasVEdmp9f=8Uo0Ej0mFumdSwi4w@mail.gmail.com/
+
+* Inotify fixes for public-inbox-imapd users relying on SIGHUP
+  reloads and thousands of watches.
+
+* Read-only daemon fixes around TLS and Linux <4.5 systems
+
+Bugfixes with minor behavior changes:
+
+* The X-Status mbox header is now excluded from imports,
+  just like the Status: header has been for many years.
+  They have no place in public archives and can be privacy
+  concern for people sharing archives.
+
+* WWW prevents deep-linking to attachments to limit abuse
+  vectors.  Noticed by Leah Neukirchen:
+  https://public-inbox.org/meta/87imagyap9.fsf@vuxu.org/
+
+There are also several ocumentation fixes from Uwe Kleine-König
+and Kyle Meyer.
+
+Please report bugs via plain-text mail to: meta@public-inbox.org
+
+See archives at https://public-inbox.org/meta/ for all history.
diff --git a/Documentation/RelNotes/v1.7.0.eml b/Documentation/RelNotes/v1.7.0.eml
new file mode 100644
index 00000000..45fd0fa6
--- /dev/null
+++ b/Documentation/RelNotes/v1.7.0.eml
@@ -0,0 +1,101 @@
+From: Eric Wong <e@80x24.org>
+To: meta@public-inbox.org
+Subject: [ANNOUNCE] public-inbox 1.7.0
+Date: Thu, 04 Nov 2021 07:52:00 +0000
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Message-ID: <2021-11-04-public-inbox-1.7.0-finally-rele@sed>
+Content-Disposition: inline
+
+Another big release focused on multi-inbox search and scalability.
+
+Special thanks to Konstantin Ryabitsev and Kyle Meyer for
+numerous bug reports and documentation help.
+
+* general changes
+
+  - config file parsing is 2x faster with 50K inboxes
+
+  - deduplication ignores whitespace differences within address fields
+
+  - "PRAGMA optimize" is now issued on commits for SQLite 3.18+
+
+* public-inbox-extindex
+
+  A new Xapian + SQLite index able to search across several inboxes.
+  This may be configured to replace per-inbox Xapian DBs,
+  (but not per-inbox SQLite indices) and speed up manifest.js.gz
+  generation.
+
+  See public-inbox-extindex-format(5) and
+  public-inbox-extindex(1) manpages for more details.
+
+  Using it with "--all" speeds up various multi-inbox operations in
+  PublicInbox::WWW, public-inbox-nntpd, and public-inbox-imapd.
+
+* read-only public-inbox-daemon (-httpd, -nntpd, -imapd):
+
+  libgit2 may be used via Inline::C to avoid hitting system pipe
+  and process limits.  See public-inbox-tuning(7) manpage
+  for more details.
+
+* various memory usage reductions and workarounds for leaks in
+  Encode <3.15, these mainly affect PublicInbox::WWW
+
+* public-inbox-nntpd
+
+  - startup is 6x faster with 50K inboxes if using -extindex
+
+* PublicInbox::WWW
+
+  - mboxrd search results are returned in reverse Xapian docid order,
+    so more recent results are more likely to show up first
+
+  - d: and dt: search prefixes allow "approxidate" formats supported
+    by "git log --since="
+
+  - manifest.js.gz generation is ~25x faster with -extindex
+
+  - minor navigation improvements in search results HTML page
+
+* lei - local email interface
+
+  An experimental, subject-to-change, likely-to-eat-your-mail tool for
+  personal mail as well as interacting with public-inboxes on the local
+  filesystem or over HTTP(S).  See lei(1), lei-overview(7), and other
+  lei-* manpages for details.  This is only ready-to-use w.r.t. external
+  public-inbox instances, but mail synchronization for personal mail
+  remains clunky.
+
+* public-inbox-index
+
+  - non-strict (Subject-based) threading supports non-ASCII characters,
+    reindexing is necessary for old messages with non-ASCII subjects.
+
+  - --batch-size is now 8M on 64-bit systems for throughput improvements,
+    higher values are still advised for more powerful hardware.
+
+* public-inbox-watch
+
+  - IMAP and NNTP code shared with lei, fixing an off-by-one error
+    in IMAP synchronization for single-message IMAP folders.
+
+  - \Deleted and \Draft messages ignored for IMAP, as they are for
+    Maildir.
+
+  - IMAP and NNTP connection establishment (including git-credential
+    prompts) ordering is now tied to config file order.
+
+Compatibility:
+
+* Rollbacks all the way to public-inbox 1.2.0 remain supported
+
+Internal changes
+
+* public-inbox-index switched to new internal IPC code shared
+  with lei
+
+Please report bugs via plain-text mail to: meta@public-inbox.org
+
+See archives at https://public-inbox.org/meta/ for all history.
+See https://public-inbox.org/TODO for what the future holds.
diff --git a/Documentation/RelNotes/v1.8.0.eml b/Documentation/RelNotes/v1.8.0.eml
new file mode 100644
index 00000000..d835f8d8
--- /dev/null
+++ b/Documentation/RelNotes/v1.8.0.eml
@@ -0,0 +1,47 @@
+From: Eric Wong <e@80x24.org>
+To: meta@public-inbox.org
+Subject: [ANNOUNCE] public-inbox 1.8.0
+Date: Sat, 23 Apr 2022 08:22:59 +0000
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Disposition: inline
+Message-ID: <2022-04-23-public-inbox-1.8.0-released@finally>
+
+A minor release focused on bugfixes and minor improvements.
+Upgrades should happen transparently, but downgrading back to
+1.7.0 will likely cause problems for lei users (and only lei
+users).
+
+lei users may experience duplicate messages in Maildirs if attempting to
+downgrade from 1.8.0 to 1.7.x.  public-inbox-* tools are unaffected and
+may downgrade freely.
+
+Bugfixes:
+
+  Numerous test fixes thanks to NixOS developers.
+
+  Long-running daemons are more robust in case of corrupt blobs
+  or crashes of git-cat-file processes
+
+  PublicInbox::WWW: all CR are removed before LF, fixing display of
+  CR-CR-LF messages.
+
+  Solver supports SHA-256 code repositories (inbox and lei store support
+  is still pending).
+
+Internal updates:
+
+  Reduced dependencies on Inline::C for Linux users; Linux users may
+  now use lei with neither Inline::C nor Socket::MsgHdr installed.
+
+New features:
+
+  The --dangerous flag is now supported in public-inbox-index and
+  public-inbox-extindex to use the Xapian::DB_DANGEROUS flag for initial
+  indexes.  This may reduce SSD/HDD wear at the expense of disallowing
+  concurrency and data integrity in case of an unexpected shutdown.
+
+Please report bugs via plain-text mail to: meta@public-inbox.org
+
+See archives at https://public-inbox.org/meta/ for all history.
+See https://public-inbox.org/TODO for what the future holds.
diff --git a/Documentation/RelNotes/v1.9.0.eml b/Documentation/RelNotes/v1.9.0.eml
new file mode 100644
index 00000000..08e16a66
--- /dev/null
+++ b/Documentation/RelNotes/v1.9.0.eml
@@ -0,0 +1,68 @@
+From: Eric Wong <e@80x24.org>
+To: meta@public-inbox.org
+Subject: [ANNOUNCE] public-inbox 1.9.0
+Date: Sun, 21 Aug 2022 02:36:59 +0000
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Disposition: inline
+Message-ID: <2022-08-21T023659Z-public-inbox-1.9.0-rele@sed>
+
+Upgrading:
+
+  lei users need to "lei daemon-kill" after installation to load
+  new code.  Normal daemons (read-only, and public-inbox-watch)
+  will also need restarts, of course, but there's no
+  backwards-incompatible data format changes so rolling back to
+  older versions is harmless.
+
+Major bugfixes:
+
+  * lei no longer freezes from inotify/EVFILT_VNODE handling,
+    user interrupts (Ctrl-C), nor excessive errors/warnings
+
+  * IMAP server fairness improved to avoid excessive blob prefetch
+
+New features:
+
+  * POP3 server support added, use either public-inbox-pop3d or
+    the new public-inbox-netd superserver
+
+  * public-inbox-netd superserver supporting any combination of HTTP,
+    IMAP, POP3, and NNTP services; simplifying management and allowing
+    more sharing of memory used for various data structures.
+
+  * public-inbox-httpd and -netd support per-listener .psgi files
+
+  * SIGHUP reloads TLS certs and keys in addition to config and .psgi files
+
+  * "lei reindex" command for lei users to update personal index
+    in ~/.local/share/lei/store for search improvements below:
+
+Search improvements:
+
+  These will require --reindex with public-inbox-index and/or
+  public-inbox-extindex for public inboxes.
+
+  * patchid: prefix search support added to WWW and lei for
+    "git patch-id --stable" support
+
+  * text inside base-85 binary patches is no longer indexed
+    to avoid false positives
+
+  * for lei users, "lei reindex" now exists and is required
+    to take advantage of aforementioned indexing changes
+
+Performance improvements:
+
+  * IMAP server startup is faster with many mailboxes when using
+    "public-inbox-extindex --all"
+
+  * NNTP group listings are also faster with many inboxes when
+    using "public-inbox-extindex --all"
+
+  * various small opcode and memory usage reductions
+
+Please report bugs via plain-text mail to: meta@public-inbox.org
+
+See archives at https://public-inbox.org/meta/ for all history.
+See https://public-inbox.org/TODO for what the future holds.
diff --git a/Documentation/RelNotes/v2.0.0.wip b/Documentation/RelNotes/v2.0.0.wip
new file mode 100644
index 00000000..f04d8144
--- /dev/null
+++ b/Documentation/RelNotes/v2.0.0.wip
@@ -0,0 +1,193 @@
+To: meta@public-inbox.org
+Subject: [WIP] public-inbox 2.2.0
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Content-Disposition: inline
+
+This release includes several new features and fixes; mostly
+around improved integration between inboxes and coderepos for
+solver.  Portability and reliability is also improved, especially
+in the internal process management of lei.
+
+public-inbox-cindex is a new command to index coderepos for
+WWW search and perform automatic associations between
+coderepos and inboxes.  This makes solver vastly more useful
+for the WWW UI as admins will no longer have to manually
+associate coderepos with inboxes.
+
+public-inbox-clone gains the ability to mirror entire (or partial)
+grokmirror-compatible manifests.
+
+Internal process and object management data structures are vastly
+simplified throughout and error handling made more robust.
+
+git SHA-256 support remains a work-in-progress for inboxes and
+extindex due to the need to interoperate with SHA-1 epochs.
+
+Upgrading:
+
+  lei users need to "lei daemon-kill" after installation to load
+  new code.  Normal daemons (read-only, and public-inbox-watch)
+  will also need restarts, of course, but there's no
+  backwards-incompatible data format changes so rolling back to
+  older versions is harmless.
+
+Compatibility:
+
+  Uppercase newsgroup names were always broken with IMAP, POP3, and
+  -extindex.  Uppercase names will now be lowercased by default and
+  warnings will be emitted.  Conflicting newsgroup names (and `inboxdir'
+  entries if `newsgroup' isn't specified) will also generate warnings
+  since they break -extindex and the new -cindex (coderepo index).
+
+New users + hackers:
+
+  The install/ directory includes tools to automate installation and
+  removal of dependencies for stripped-down or full setups.  See
+  install/README for more details.
+
+treewide
+
+  * support raw UTF-8 headers from SMTPUTF8 hosts
+
+  * standardize on `#' prefix for stderr diagnostics (previously `I:')
+
+  * SHA-256 coderepos are fully supported (but not inboxes, yet)
+
+  * for daemons serving public traffic, MALLOC_MMAP_THRESHOLD_=131072 is
+    recommended to reduce fragmentation in glibc malloc, while jemalloc
+    (tested as an LD_PRELOAD) is another option (at least for 64-bit).
+
+PublicInbox::WWW
+
+  * support `+' in inbox names
+
+  * support coderepo displays for systems without cgit
+
+  * improve display of git tags, commits and trees in $INBOX/$OID/s/ endpoint
+
+  * numerous memory usage reductions by avoiding Perl scratchpads
+
+  * add #related anchor and search form to find related patches
+    based on blob OIDs (IOW, exposing `lei p2q' to the web)
+
+  * fix footer in listing of >200 inboxes
+
+  * support dumb HTTP clones of SHA-256 git repos
+
+  * add /$INBOX/$MSGID/d/ endpoint to show diffs in reused Message-IDs
+    (`lei mail-diff' for the web)
+
+  * support POST /$INBOX/$MSGID/?x=m&q= to limit mbox results to a thread
+
+  * add topics_(new|active).(html|atom) endpoints
+
+  * linkify peer public-inbox addresses in To/Cc headers
+
+public-inbox-watch:
+
+  * watching MH folders is now supported
+
+lei
+
+  * use http.proxy / http.<remote>.proxy from system-wide git-config if
+    unconfigured for lei
+
+  * improve IMAP and NNTP error reporting
+
+  * reduce default IMAP connections to avoid overloading servers
+
+  * compatibility with SQLite <3.8.3 on CentOS 7.x
+
+  * fix `lei q -tt' on locally indexed messages (still broken for remotes:
+    https://public-inbox.org/meta/20230226170931.M947721@dcvr/ )
+
+  * `lei import' now sets labels+keywords consistently on all
+     already imported messages
+
+  * fix `lei up' on saved local queries which previously used -t/--threads
+
+  * `lei convert' output to v2 public-inboxes is now idempotent
+
+  * improved bash completion for labels (see contrib/completion)
+
+  * support for reading (but not writing) MH folders
+
+  * `lei index' accepts `+L:$LABEL' like `lei import' does
+
+solver (used by lei (rediff|blob), and PublicInbox::WWW)
+
+  * handle copies in patches properly
+
+  * no longer redundantly parallelized within each WWW process
+
+portability
+
+  * SIGWINCH is handled properly on less common architectures and OSes
+
+  * fix EINTR handling for kqueue users
+
+  * various fixes for CentOS 7.x
+
+  * fix excessive pipelining to `git cat-file' on systems with small
+    getdelim(3) buffers (mainly affects musl)
+
+  * support Alpine Linux, Dragonfly, NetBSD and OpenBSD.  This resulted
+    not only in bugfixes to our code, but also to Dragonfly and OpenBSD.
+
+  * Inline::C||Socket::MsgHdr no longer required for SCM_RIGHTS
+    with sendmsg/recvmsg on supported *BSDs.
+
+  * inotify support no longer requires Linux::Inotify2 XS package
+    for most architectures
+
+public-inbox-pop3d
+
+  * support `limit=NUM' and `initial_limit=NUM' query parameters
+    in mailbox names to limit results
+
+public-inbox-nntpd
+
+  * fix LISTGROUP with range (affects neomutt)
+
+public-inbox-clone / public-inbox-fetch / `lei add-external --mirror'
+
+  * mtime of downloaded manifest preserved
+
+public-inbox-clone:
+
+  * parallel mirroring of multiple inboxes/coderepos via manifest,
+    public-inbox-fetch is not used in this mode
+
+  * new flags to support manifest mirroring include:
+    --dry-run, --inbox-config=, --project-list=, --prune, --purge,
+    --keep-going, --jobs, --include=, --exclude=, --objstore=,
+    --manifest=, --remote-manifest=
+    See public-inbox-clone(1) man page for more details.
+
+PublicInbox::SaPlugin::ListMirror
+
+  * List-ID handling special-cased according to RFC 2919 rules
+
+Search improvements (lei and PublicInbox::WWW)
+
+  * quoted text inside base-85 binary patches is no longer indexed
+
+  * `public-inbox-cindex --join' prefers using Xapian's C++ API
+    directly to avoid Perl method dispatch overhead to get usable
+    performance associating ~300 inboxes with over 1K coderepos
+    (and vice versa).  Users requiring such performance will need
+    a C++ compiler, pkg-config, and the Xapian development files
+    (see INSTALL).
+
+    This C++ helper will be used more heavily in the future
+    to enable query parser customizations and other functionality
+    unavailable from the Xapian SWIG or XS bindings.
+
+Thanks to all the bug reporters and users who made this release
+possible, and thanks for bearing with my anxiety over making releases.
+
+Please report bugs via plain-text mail to: meta@public-inbox.org
+
+See archives at https://public-inbox.org/meta/ for all history.
+See https://public-inbox.org/TODO for what the future holds.