Release 0.4 (not yet released)

Release 0.3 (2026-08-08)

* Incrementalist now uses the text.editor-buffer library instead of the Cluffer
  library as its implementation of line-oriented buffers. The new library has
  slightly improved protocols and much improved performance compared to
  Cluffer. The protocol improvements make the new library mostly but not fully
  compatible with Cluffer.

  Clients of Incrementalist can benefit from improved buffer and line creation
  functions which text.editor-buffer provides.

* The function INCREMENTALIST:UPDATE now returns the line numbers of the first
  and last processed lines.

* The function INCREMENTALIST:MAP-WADS-AND-SPACES no longer incorrectly reports
  WADs that start before the specified sequence of lines.

* The function INCREMENTALIST:MAP-WADS-AND-SPACES now reports empty lines
  within a region in the same reverse order (compared to their occurrence in
  the buffer) in which it reports WADs and empty regions.

  In addition, reported empty lines are now correctly restricted to the
  specified sequence of lines.

* INCREMENTALIST:MAP-WADS-AND-SPACES is now a generic function and accepts the
  boundaries of the sequence of lines to be processed as keyword parameters
  :start-line and :end-line.

* INCREMENTALIST:MAP-EMPTY-SPACES is now a generic function whose name is
  exported. The function now accepts the boundaries of the region to be
  processed as keyword parameters :start-line, :start-column, :end-line and
  :end-column.

* The new generic function INCREMENTALIST:MAP-WADS accepts only a single
  function and considers only WADs, not empty space. It thus provides half of
  the functionality of INCREMENTALIST:MAP-WADS-AND-SPACES with a simpler
  interface and better efficiency.

Release 0.2 (2026-02-06)

* The biggest change is that Incrementalist now tracks dependencies between
  WADs that arise due to changes of the reader state.

  For example, a ` WAD causes , WADs to be valid in the following
  sub-expression. However, when the ` WAD is changed to, say, ' the , WADs have
  to be re-read with the changed reader state to "witness" that they are no
  longer valid. A similar situation arises for sub-expressions which follow the
  consing dot.

  A different kind of dependency that is less localized arises from non-lexical
  changes to the reader state such as changing the current package via
  in-package or changing the read base via #.(setf *read-base* 16). These
  dependencies are now also tracked by Incrementalist although the mechanism
  for detecting them in expressions that are evaluated at read-time is just a
  proof-of-concept for now.

* Initial unit tests have been added and subsequently extended to cover many
  specific cases and regressions. One test reads the whole source code of
  Incrementalist in an incremental way and ensures that various invariants hold
  at all times.

* Many parts of the system have been optimized:

  The code surrounding the BUFFER-STREAM class has been rewritten to be more
  efficient.

  Construction and linking of WADs has been optimized.

* The class hierarchies rooted at TOKEN and WAD have been revised multiple
  times to better represent the kinds and properties of the relevant concrete
  syntax objects. Examples are tokens for numbers and symbols as well as WADs
  for labeled objects and read-time conditional expressions.

  One particular addition are WORD-WAD and PUNCTUATION-WAD which are used to
  represent the components of the strings in symbol names and comments in
  detail.

* Under certain conditions, WORD-WAD instances are marked as being spelled
  correctly or incorrectly using the spell library. As a consequence,
  Incrementalist now depends on spell.

* The concept of some WADs having a dual nature in the sense of conforming to
  the WAD protocol as well as the CST protocol has been introduced. This
  concept will be important when WADs will be passed to the s-expression-syntax
  library in order to be parsed as s-expressions.

* Assertions which check fundamental invariants of Incrementalist's
  data-structures as well as debugging tools are now available in separate
  files which can be loaded when needed.

* Some of the functions which query the cache based on a given buffer location
  now accept additional arguments which control whether the bounds of WADs
  should match the given location inclusively or exclusively.

* The manual has been extensively but not yet fully rewritten and extended.

Release 0.1 (not released)

* Initial version extracted from Second Climacs repository with core
  architecture: analyzer, cache, WADs and parsing via Eclector. This version
  includes a Texinfo-based manual which has been extracted and converted from
  the LaTeX-based manual of Second Climacs.

