Beancount 3.2.0 -> 3.2.1 summary
===================================
Scope: 241 files changed, mostly copyright/docstring/typo cleanup, generated
docs scaffolding, CI/build maintenance, and a few user-visible fixes.
User-visible fixes and behavior changes
---------------------------------------
- `bean-check` gained `--json`, emitting a single JSON object with an `errors`
array of `{message, filename, lineno}` records. Normal stderr error logging is
suppressed in this mode, while the exit code remains non-zero on errors.
- Printer fixes:
- Balance directives now preserve and print an explicit zero tolerance
(`~0`) instead of treating it as absent.
- Note and document directives now print spaces between each tag/link token
(for example `#tag ^link`) instead of concatenating them.
- Costs with only a currency, but no numeric cost, now render the currency
instead of omitting it.
- Display quantization now allows three more integral digits of precision
before Decimal quantization, reducing failures with larger numbers.
- `bean-example` date handling was fixed so entries exactly on the generated
maximum date are retained; this addressed a Jan 1 edge case.
- `treeify` now recognizes account components that begin with a digit after the
account type, such as `Assets:401K`, in its default account regex.
- Date option parsing in `bean-example` now returns the parsed value correctly.
New library/experimental functionality
--------------------------------------
- Added `beancount.ops.find_prices.find_unpriced_currencies()`, which finds
currencies that appear in balances without cost, conversion, or price history.
- Added an experimental DuckDB adapter under `experiments/duckdb/`:
- Converts a Beancount ledger into DuckDB tables for postings, prices,
accounts, and commodities.
- Uses DuckDB structs/arrays/JSON for Amount, Cost, Position, tags, links, and
metadata.
- Adds optional DuckDB macros/UDFs such as `bnstr`, `bnpos`, `bninv`, `bnsum`,
`bnj`, and `bnb`, plus a small interactive local CLI.
Build, packaging, and CI
------------------------
- Version bumped from 3.2.0 to 3.2.1.
- Python 3.14 test coverage was enabled, including reference-count test
adjustments for Python 3.14 optimizations.
- Wheel building was updated to cibuildwheel 3.x, adds native Linux aarch64 and
modern macOS runners, keeps Windows architectures, skips only musllinux, and
limits PyPI upload to tag pushes.
- Build requirements now use PyPI-distributed flex/bison packages where
applicable, reducing custom system setup in wheel builds.
- `pyproject.toml` now uses dependency groups for test/types/dev setup, adds
pytest testpaths, and includes meson/meson-python in dev dependencies.
- Makefile workflows now default to `uv run python`, build into per-Python-tag
Meson directories, ensure tests build first, and route pre-commit checks
through `uvx pre-commit`.
- Pre-commit was restored/expanded in CI, with newer ruff hooks, mypy, and local
checks for missing tests, filtered terms, and multi-imports.
Documentation and maintenance
-----------------------------
- Added a self-contained docs site scaffold under `docs/`, including Zensical
config, custom CSS/JS, a logo, and a docs workflow.
- Added many `docs.md` index/overview files across packages, examples,
experiments, and tools.
- Large non-functional cleanup updated copyright years, docstrings,
Google-style Args/Returns sections, README wording, and assorted typos.