Visitar URL original
Releases · rustledger/rustledger · GitHub
Skip to content

Releases

v0.24.0

Choose a tag to compare

@robcohen robcohen released this 06 Sep 21:51
0178f7f

⚠️ Breaking changes

Two, both in rledger extract. Both replace silence with an error, which is the point: each was a case where something you wrote, or failed to write, was ignored.

importers.toml rejects unknown keys (#2261)

An entry carrying a key the schema does not define now fails to parse instead of ignoring it.

[[importers]]
name = "card"
type = "ofx"          # this key is new and real (see below)
totaly_bogus = "x"    # this now errors instead of being ignored

Why: a silently ignored key is indistinguishable from a working one. Before this, type = "ofx" parsed fine and did nothing, which is exactly how the bug it fixes went unnoticed.

To migrate: if your config fails to parse, the error names the offending key. It was doing nothing before.

extract refuses an unconfigured liability import (#2263)

An OFX credit-card or line-of-credit statement, with no --account, no importers.toml entry and no --ledger profile, now errors instead of importing.

$ rledger extract card.qfx
error: this statement describes a liability account, but no account was configured
       so the default `Assets:Bank:Checking` would be used — every amount would
       carry the opposite sign

Why: the statement says which side of the balance sheet it is. Posting it to the Assets: default inverted the sign of every transaction and used an account you never named.

To migrate: name the account, with --account, an importers.toml entry, or an open directive plus --ledger. Naming one is always enough; only naming nothing is refused. Bank statements are unaffected.


Import improvements

The rest of this release came out of discussion #2126.

  • importers.toml can now configure the OFX importer at all (#2261). It previously could not: naming an entry forced the CSV parser onto the OFX file, and not naming one ignored the entry's account. Entries declare type = "csv" (default) or type = "ofx".

  • Importer profiles in the ledger (#2262). An open directive already states the account and its currency, so it can now state the importer too:

    2024-01-01 open Liabilities:CreditCard USD
      importer: "ofx"
      importer-pattern: "*.qfx"
    
    $ rledger extract card.qfx --ledger main.beancount

    Opt-in via --ledger; without it nothing changes.

  • A warning when a statement contradicts the configured account (#2259). OFX states whether it is a bank or credit-card statement; getting it wrong inverts every sign, so it is now said out loud.


What's Changed

  • fix(ci): move the flake vscode-extension check into the job that has nix by @robcohen in #2255
  • feat(ofx): warn when the statement contradicts the configured account by @robcohen in #2259
  • fix(extract): let importers.toml configure the OFX importer by @robcohen in #2261
  • feat(extract): importer profiles from open directive metadata by @robcohen in #2262
  • feat(extract): refuse an unconfigured liability import by @robcohen in #2263
  • chore: release v0.24.0 by @robcohen in #2265

Full Changelog: v0.23.0...v0.24.0

What's Changed

  • fix(ci): move the flake vscode-extension check into the job that has nix by @robcohen in #2255
  • feat(ofx): warn when the statement contradicts the configured account by @robcohen in #2259
  • fix(extract): let importers.toml configure the OFX importer by @robcohen in #2261
  • feat(extract): importer profiles from open directive metadata by @robcohen in #2262
  • feat(extract): refuse an unconfigured liability import by @robcohen in #2263
  • chore: release v0.24.0 by @robcohen in #2265

Full Changelog: v0.23.0...v0.24.0

v0.23.0

Choose a tag to compare

@robcohen robcohen released this 04 Sep 20:32
e5c92f8

⚠️ Breaking change

rledger query -f json now emits positional row arrays instead of objects keyed by column name (#2241).

// before
{"columns": ["date", "account"],
 "rows": [{"date": "2024-01-15", "account": "Assets:Bank"}]}

// now
{"columns": ["date", "account"],
 "rows": [["2024-01-15", "Assets:Bank"]]}

To migrate: zip each row against columns instead of indexing by name. Do not rebuild a keyed object from it — that reintroduces the bug below.

Why: SQL column names are not unique, and keyed rows could not represent their own results. SELECT date AS a, account AS a, two aliases differing only in case, the same expression twice, or a column colliding with an alias would all produce duplicate keys — and JSON objects silently dropped all but the last of each collision while columns still listed them all. A consumer that trusted columns read fewer fields than it was told to expect (#2178).

The names themselves are correct; bean-query produces the same duplicate headers. Disambiguating them (a, a_2) would invent names a consumer cannot predict and would make the JSON keys disagree with the CSV and text headers. So the fix belongs in the shape.

This also aligns -f json with every other query surface, all of which were already positional: the component's rows: list<list<query-value>>, wasm's rows: Vec<Vec<CellValue>>, and -f csv. The CLI's JSON was the only one that could not round-trip its own output.


What's Changed

  • chore(release): catch the three gaps v0.22.0 found by @robcohen in #2108
  • fix(nix): update the VS Code extension npmDepsHash, and build it in CI by @robcohen in #2110
  • docs(wit): state the stability contract for meta.hash by @robcohen in #2113
  • Potential fix for code scanning alert no. 203: Unused variable, import, function or class by @robcohen in #2112
  • test(compat): add a differential booking fuzzer by @robcohen in #2116
  • test(compat): vary lot-identity axes together in the booking fuzzer by @robcohen in #2117
  • fix(core): break LIFO ties by insertion order like FIFO and HIFO by @robcohen in #2119
  • test(compat): classify the lot-pooling divergence and gate CI on the booking fuzzer (#2118) by @robcohen in #2120
  • fix(report): keep journal order when --limit is given by @robcohen in #2123
  • test(core): pin STRICT_WITH_SIZE's two tie rules by @robcohen in #2124
  • docs(migration): document the same-day repeated-lot divergence (#2118) by @robcohen in #2121
  • test(compat): fuzz prices on reductions, and correct a wrong premise by @robcohen in #2125
  • test(compat): add a capital-gains fuzzer, gated in CI by @robcohen in #2127
  • chore(deps): bump vitest from 4.1.10 to 4.1.11 in /packages/mcp-server by @dependabot[bot] in #2130
  • chore(ci): bump the codeql-action group with 2 updates by @dependabot[bot] in #2131
  • chore(ci): bump anomalyco/opencode/github from 1.18.18 to 1.18.21 by @dependabot[bot] in #2135
  • chore(ci): bump docker/setup-buildx-action from 4.2.0 to 4.3.0 by @dependabot[bot] in #2137
  • chore(deps): bump the rust-dependencies group with 3 updates by @dependabot[bot] in #2132
  • chore(deps): bump agcli from 0.14.0 to 0.17.0 by @dependabot[bot] in #2133
  • fix(core): store interchangeable lots as one position by @robcohen in #2139
  • chore(deps): bump wasmtime and wasmtime-wasi to 48.0.0 together by @robcohen in #2140
  • chore(deps): bump @rustledger/wasm to 0.22.0 in mcp-server by @robcohen in #2141
  • fix(format): keep currency, cost and price on a numberless posting by @robcohen in #2145
  • test(compat): add a returns fuzzer, gated in CI by @robcohen in #2143
  • test(compat): fail on NEW booked-value divergences against beancount by @robcohen in #2148
  • ci(docs): install the website deps with bun, not npm ci by @robcohen in #2156
  • feat(query): add six missing beanquery BQL functions by @robcohen in #2155
  • fix(query): give #entries the five columns bean-query exposes by @robcohen in #2157
  • fix(query): rank chained price paths by evidence, not by spelling by @robcohen in #2158
  • fix(loader): options in an included file no longer govern the ledger by @robcohen in #2159
  • fix(query): expose meta on five system tables without breaking SELECT * by @robcohen in #2161
  • fix(query): keep source order in five system tables, as bean-query does by @robcohen in #2165
  • fix(query): give #entries.meta its source keys, and empty meta a map by @robcohen in #2167
  • fix(query): head results the way bean-query does by @robcohen in #2170
  • docs(query): record the two metadata divergences as decisions by @robcohen in #2172
  • perf(query): stop #postings materializing balances no query reads by @robcohen in #2173
  • perf(query): skip #postings columns the query cannot observe by @robcohen in #2174
  • fix(query): head expression targets the way bean-query renders them by @robcohen in #2175
  • feat(query): make meta selectable on #transactions by @robcohen in #2181
  • fix(query): render boolean columns as TRUE/FALSE, like bean-query by @robcohen in #2182
  • fix(core): keep a note's tags and links by @robcohen in #2185
  • fix(parser): a blank line no longer eats a directive's tags by @robcohen in #2189
  • fix(format): stop deleting a note's tags and links by @robcohen in #2192
  • fix(booking): stop padding a balance on the pad's own date by @robcohen in #2187
  • fix(parser): a balance tolerance may follow an arithmetic amount by @robcohen in #2195
  • ci: report corpus baseline drift on a cadence instead of by accident by @robcohen in #2196
  • docs(core): cross-file booking order is not Python's, on purpose by @robcohen in #2197
  • fix(parser): a query refuses tags and links instead of dropping them by @robcohen in #2198
  • chore(ci): bump anomalyco/opencode/github from 1.18.21 to 1.18.25 by @dependabot[bot] in #2207
  • chore(deps): bump @types/node from 26.2.0 to 26.4.0 in /packages/mcp-server by @dependabot[bot] in #2204
  • chore(ci): bump the codeql-action group with 2 updates by @dependabot[bot] in #2203
  • chore(deps): bump the rust-dependencies group with 2 updates by @dependabot[bot] in #2205
  • chore(deps): bump wit-bindgen from 0.60.0 to 0.61.1 by @dependabot[bot] in #2206
  • fix(deps): remove duplicate lockfile entries that break cargo on main by @robcohen in #2209
  • fix(parser): diagnose a balance tolerance that says two things at once by @robcohen in #2200
  • fix(ci): do not call a file deleted when its clone may have failed by @robcohen in #2211
  • fix(query): MIN and MAX order booleans, false before true by @robcohen in #2212
  • fix(query): ORDER BY an expression finds the column it names by @robcohen in #2215
  • fix(query): PIVOT BY applies when the query names a table by @robcohen in #2218
  • chore(deps): bump @types/node from 26.2.0 to 26.4.0 in /packages/vscode by @dependabot[bot] in #2202
  • chore(ci): bump actions/setup-java from 5.7.0 to 6.0.0 by @dependabot[bot] in #2208
  • fix(ci): the BQL harness compares column names by @robcohen in #2223
  • fix(query): a comparison with a NULL operand yields NULL by @robcohen in #2225
  • feat(query): SUM over a boolean counts the matching rows by @robcohen in #2227
  • fix(booking): a synthesi...
Read more

v0.22.0

Choose a tag to compare

@robcohen robcohen released this 21 Aug 11:25
07177b0

What's Changed

  • fix(release): path-only dev-deps in rustledger-wasm so publish never needs them by @robcohen in #1758
  • fix: allow path-only wildcard deps in cargo-deny bans by @robcohen in #1761
  • fix: pick price rates by date across both pair directions by @robcohen in #1760
  • docs: fold the 2026-07 import review into the importing roadmap by @robcohen in #1763
  • feat: expose import over the component boundary (WIT 3.5.0) by @robcohen in #1764
  • docs: add verifiable ledger statements (attestations) roadmap by @robcohen in #1762
  • feat: dedup + format-loaded on the component import surface by @robcohen in #1765
  • chore(ci): dependabot coverage for npm packages (mcp-server, vscode) by @robcohen in #1768
  • chore(ci): bump actions/setup-java from 5.4.0 to 5.5.0 by @dependabot[bot] in #1769
  • chore(deps): bump @rustledger/wasm from 0.16.5 to 0.21.0 in /packages/mcp-server by @dependabot[bot] in #1770
  • chore(deps): bump vitest from 4.1.9 to 4.1.10 in /packages/mcp-server by @dependabot[bot] in #1780
  • chore(ci): bump docker/login-action from 4.2.0 to 4.4.0 by @dependabot[bot] in #1777
  • chore(deps): bump @vscode/vsce from 3.7.1 to 3.9.2 in /packages/vscode by @dependabot[bot] in #1773
  • chore(ci): bump github/codeql-action/analyze from 4.36.3 to 4.37.0 by @dependabot[bot] in #1778
  • chore(ci): bump astral-sh/setup-uv from 8.2.0 to 8.3.2 by @dependabot[bot] in #1781
  • chore(deps): bump vscode-languageclient from 10.0.0 to 10.1.0 in /packages/vscode by @dependabot[bot] in #1779
  • chore(deps): bump @types/vscode from 1.91.0 to 1.125.0 in /packages/vscode by @dependabot[bot] in #1776
  • chore(deps): bump wit-bindgen from 0.58.0 to 0.59.0 by @dependabot[bot] in #1784
  • chore(deps): bump the rust-dependencies group with 4 updates by @dependabot[bot] in #1783
  • fix: dedupe Cargo.lock after conflicting dependabot merges by @robcohen in #1787
  • fix(ci): align codeql-action init with the bumped analyze version by @robcohen in #1788
  • chore(ci): bump dtolnay/rust-toolchain from 67ef31d5b988238dd797d409d6f9574278e20537 to fa04a1451ff1842e2626ccb99004d0195b455a88 by @dependabot[bot] in #1775
  • chore(deps): bump typescript from 6.0.3 to 7.0.2 in /packages/mcp-server by @dependabot[bot] in #1772
  • chore(deps): bump typescript from 6.0.3 to 7.0.2 in /packages/vscode by @dependabot[bot] in #1782
  • chore(deps): bump @types/node from 22.19.19 to 26.1.1 in /packages/vscode by @dependabot[bot] in #1771
  • chore(deps): bump @types/node from 25.9.3 to 26.1.1 in /packages/mcp-server by @dependabot[bot] in #1774
  • chore(deps): bump lsp-server from 0.8.0 to 0.9.0 by @dependabot[bot] in #1785
  • chore(ci): bump cachix/install-nix-action from 31.10.6 to 31.10.7 by @dependabot[bot] in #1790
  • chore(ci): bump softprops/action-gh-release from 3.0.1 to 3.0.2 by @dependabot[bot] in #1791
  • chore(ci): bump anomalyco/opencode/github from 1.17.13 to 1.17.18 by @dependabot[bot] in #1792
  • chore(ci): bump docker/build-push-action from 7.2.0 to 7.3.0 by @dependabot[bot] in #1793
  • fix: stop stripping backslashes from BQL string literals by @robcohen in #1798
  • feat: dotted attribute and string subscript access in BQL by @robcohen in #1800
  • fix: price sources must honor --date or refuse it by @robcohen in #1801
  • feat: window-primitive price source architecture (#1802) by @robcohen in #1803
  • feat: historical support for the five remaining sources (#1802) by @robcohen in #1804
  • feat: session carries ledger options over the WIT boundary (3.7.0) by @robcohen in #1805
  • feat: formatter honors per-currency display precision (#1766) by @robcohen in #1807
  • feat: session.format renders held entries with ledger display precision (WIT 3.8.0) by @robcohen in #1808
  • fix: ops::clamp threads account config instead of hardcoding Equity roots by @robcohen in #1810
  • test: skip plugin-feature-gated fixtures in corpus_parity (#1809) by @robcohen in #1812
  • fix: recompile the Python cwasm cache when it can't be deserialized by @robcohen in #1811
  • fix(lsp): validate multi-file ledgers once, not once per file (#1799) by @robcohen in #1813
  • feat(config): add RLEDGER_CONFIG_DIR and deprecate RLEDGER_CONFIG. by @idheepan in #1795
  • feat(returns): add rustledger-returns crate with XIRR (money-weighted return) by @robcohen in #1815
  • feat(returns): cash-flow extraction from a booked ledger by @robcohen in #1816
  • chore(ci): bump cachix/install-nix-action from 31.10.7 to 31.11.0 by @dependabot[bot] in #1824
  • chore(ci): bump actions/setup-java from 5.5.0 to 5.6.0 by @dependabot[bot] in #1823
  • feat(returns): rledger report returns (money-weighted / XIRR) by @robcohen in #1818
  • chore(ci): bump github/codeql-action/analyze from 4.37.0 to 4.37.1 by @dependabot[bot] in #1822
  • chore(deps): bump the rust-dependencies group with 10 updates by @dependabot[bot] in #1826
  • fix(ci): align codeql-action init to v4.37.1 (unbreak CodeQL) by @robcohen in #1831
  • chore(ci): bump anomalyco/opencode/github from 1.17.18 to 1.18.4 by @dependabot[bot] in #1834
  • chore(deps): bump the rust-dependencies group with 2 updates by @dependabot[bot] in #1836
  • feat(returns): time-weighted return (TWR) in engine and report by @robcohen in #1830
  • chore(ci): batch GitHub-Actions dependency bumps (checkout, setup-python, setup-node, rust-toolchain) by @robcohen in #1837
  • chore(deps): bump body-parser from 2.2.2 to 2.3.0 in /packages/mcp-server in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1839
  • chore(deps): batch wasmtime 47 + lsp-server 0.10 (build-verified) by @robcohen in #1838
  • fix(returns): xirr returns None for identically-zero NPV (not the seed) by @robcohen in #1840
  • feat(returns): opt-in per-group breakdown for report returns (--by-group) by @robcohen in #1841
  • perf(returns): single-pass realization for twr (was O(flows × directives)) by @robcohen in #1842
  • perf(returns): single-pass compute_returns entry point (one extract + one realize per group) by @robcohen in #1843
  • perf(returns): share one realization across all --by-group scopes by @robcohen in #1844
  • docs(returns): document the report returns command and returns-group metadata by @robcohen in #1846
  • perf(returns): compute all groups' self-containment in one transaction pass by @robcohen in #1845
  • test(returns): cross-validate XIRR against an independent solver by @robcohen in #1848
  • feat(returns): expose session.returns on the WIT component (Phase 3, #1847) by @robcohen in #1849
  • chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates by @dependabot[bot] in #1854
  • feat(returns): value net units at market, not lot-matched inventory by @robcohen in #1851
  • feat(returns): --by-group partial report on unvaluable scopes (#1850 §4) by @robcohen in #1852
  • test(returns): messy-imported-ledger suite (#1850 §6, §5) by @robcohen in #1853
  • docs(returns)...
Read more

v0.21.0

Choose a tag to compare

@robcohen robcohen released this 11 Jul 02:25
23b9068

What's Changed

  • chore(ci): bump dorny/paths-filter from 4.0.1 to 4.0.2 by @dependabot[bot] in #1716
  • chore(ci): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #1717
  • chore(ci): bump github/codeql-action/init from 4.36.2 to 4.36.3 by @dependabot[bot] in #1719
  • chore(ci): bump anomalyco/opencode/github from 1.17.11 to 1.17.13 by @dependabot[bot] in #1721
  • chore(ci): bump docker/setup-buildx-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #1718
  • chore(deps): bump the rust-dependencies group with 4 updates by @dependabot[bot] in #1722
  • chore(ci): bump docker/metadata-action from 6.1.0 to 6.2.0 by @dependabot[bot] in #1720
  • fix(ci): unblock main by resolving CodeQL action skew and RustSec advisory by @robcohen with @Copilot in #1723
  • fix(deps): resolve Cargo Deny failure on main by upgrading crossbeam-epoch by @robcohen with @Copilot in #1724
  • chore: add cargo-vet exemption for crossbeam-epoch 0.9.20 by @robcohen with @Copilot in #1725
  • Correct balances and balsheet reports for reductions in holdings by @weslem in #1726
  • refactor(report): single source of truth for account balances (#1726) by @robcohen in #1727
  • feat(report): balances/balsheet show lots at cost, like beancount by @robcohen in #1728
  • chore: fix Rust 1.97 toolchain breakage (clippy lints + BQL parse stack) by @robcohen in #1745
  • chore(test): pin BQL BALANCES == report balances on netted reductions by @robcohen in #1733
  • fix: honor name_* account-root renames in reports and BQL (beanquery parity) by @robcohen in #1731
  • fix: compound costs mispriced in doctor region and ops clamp by @robcohen in #1732
  • refactor: single-source the booking-order comparator (LSP + validator) by @robcohen in #1734
  • refactor: promote transaction tolerance semantics to booking as the canonical by @robcohen in #1735
  • refactor: single-source the posting weight arithmetic in booking by @robcohen in #1736
  • fix: one canonical account-name rule; validate FFI ingress; warn on bad name_* roots by @robcohen in #1739
  • refactor(parser): share cost-spec and meta-value semantics between green and red walkers by @robcohen in #1737
  • chore(parser): pin includes/plugins/warnings/bom/alignment in green-red parity by @robcohen in #1738
  • chore: pin CostNumber wire parity across all five mirrors by @robcohen in #1740
  • refactor(lsp): inlay tooltip balances from the loaded ledger; document valuation FIFO by @robcohen in #1743
  • fix(validate): catch postings dated before their account's open by @robcohen in #1742
  • chore: run the python-gated cargo tests with bean-check installed by @robcohen in #1746
  • chore: consolidate utility copies (CSV/JSON escaping, account-type checks, quarter math) by @robcohen in #1741
  • fix: make pager and config tests hermetic under a TTY by @robcohen in #1747
  • fix(ci): probe bean-price with --help, not --version by @robcohen in #1748
  • chore(ci): pin the CI toolchain to 1.97.0 instead of floating stable by @robcohen in #1749
  • fix(ci): pin rust-toolchain.toml in lockstep with the workflow pin by @robcohen in #1751
  • feat(report): render numbers through the ledger DisplayContext (U4) by @robcohen in #1750
  • docs: canonical-function discipline and toolchain-bump runbook by @robcohen in #1752
  • feat(fuzz): fuzz the FFI ingress boundary (input_entry_to_directive) by @robcohen in #1753
  • feat(ffi): session.from-entries — hold a directive set across calls (WIT 3.4.0) by @robcohen in #1755
  • fix(ci): channel-only rust-toolchain.toml — kill the implicit component sync by @robcohen in #1756
  • feat(ci): randomized nightly synthetic corpus with an absolute differential gate by @robcohen in #1754
  • chore: release v0.21.0 by @robcohen in #1757

New Contributors

Full Changelog: v0.20.2...v0.21.0

What's Changed

  • chore(ci): bump dorny/paths-filter from 4.0.1 to 4.0.2 by @dependabot[bot] in #1716
  • chore(ci): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #1717
  • chore(ci): bump github/codeql-action/init from 4.36.2 to 4.36.3 by @dependabot[bot] in #1719
  • chore(ci): bump anomalyco/opencode/github from 1.17.11 to 1.17.13 by @dependabot[bot] in #1721
  • chore(ci): bump docker/setup-buildx-action from 4.1.0 to 4.2.0 by @dependabot[bot] in #1718
  • chore(deps): bump the rust-dependencies group with 4 updates by @dependabot[bot] in #1722
  • chore(ci): bump docker/metadata-action from 6.1.0 to 6.2.0 by @dependabot[bot] in #1720
  • fix(ci): unblock main by resolving CodeQL action skew and RustSec advisory by @robcohen with @Copilot in #1723
  • fix(deps): resolve Cargo Deny failure on main by upgrading crossbeam-epoch by @robcohen with @Copilot in #1724
  • chore: add cargo-vet exemption for crossbeam-epoch 0.9.20 by @robcohen with @Copilot in #1725
  • Correct balances and balsheet reports for reductions in holdings by @weslem in #1726
  • refactor(report): single source of truth for account balances (#1726) by @robcohen in #1727
  • feat(report): balances/balsheet show lots at cost, like beancount by @robcohen in #1728
  • chore: fix Rust 1.97 toolchain breakage (clippy lints + BQL parse stack) by @robcohen in #1745
  • chore(test): pin BQL BALANCES == report balances on netted reductions by @robcohen in #1733
  • fix: honor name_* account-root renames in reports and BQL (beanquery parity) by @robcohen in #1731
  • fix: compound costs mispriced in doctor region and ops clamp by @robcohen in #1732
  • refactor: single-source the booking-order comparator (LSP + validator) by @robcohen in #1734
  • refactor: promote transaction tolerance semantics to booking as the canonical by @robcohen in #1735
  • refactor: single-source the posting weight arithmetic in booking by @robcohen in #1736
  • fix: one canonical account-name rule; validate FFI ingress; warn on bad name_* roots by @robcohen in #1739
  • refactor(parser): share cost-spec and meta-value semantics between green and red walkers by @robcohen in #1737
  • chore(parser): pin includes/plugins/warnings/bom/alignment in green-red parity by @robcohen in #1738
  • chore: pin CostNumber wire parity across all five mirrors by @robcohen in #1740
  • refactor(lsp): inlay tooltip balances from the loaded ledger; document valuation FIFO by @robcohen in #1743
  • fix(validate): catch postings dated before their account's open by @robcohen in #1742
  • chore: run the python-gated cargo tests with bean-check installed by @robcohen in #1746
  • chore: consolidate utility copies (CSV/JSON escaping, account-type checks, quarter math) by @robcohen in #1741
  • fix: make pager and config tests hermetic under a TTY by @robcohen in #1747
  • fix(ci): probe bean-price with --help, not --version by @robcohen in #1748...
Read more

v0.20.2

Choose a tag to compare

@github-actions github-actions released this 04 Jul 13:42
e0e96fa

What's Changed

  • fix(parser): green compound-cost conversion retries unparsable numbers like red by @robcohen in #1714
  • fix(query): typed scalar functions propagate NULL (beanquery parity) by @robcohen in #1711
  • chore: release v0.20.2 by @robcohen in #1715

Full Changelog: v0.20.1...v0.20.2

v0.20.1

Choose a tag to compare

@github-actions github-actions released this 03 Jul 19:43
d567b61

What's Changed

Full Changelog: v0.20.0...v0.20.1

v0.20.0

Choose a tag to compare

@github-actions github-actions released this 03 Jul 15:57
58d5e22

What's Changed

  • fix(query): only() propagates NULL in its first argument by @robcohen in #1702
  • fix(query,ffi): one-arg value() is type-stable; column datatypes from first non-NULL row by @robcohen in #1703
  • fix(parser,booking)!: compound cost {a # b} carries both components (N*a + b) by @robcohen in #1704
  • chore: release v0.20.0 by @robcohen in #1707

Full Changelog: v0.19.1...v0.20.0

v0.19.1

Choose a tag to compare

@github-actions github-actions released this 02 Jul 23:51
409d871

What's Changed

  • feat(cli): rledger explain — describe validation error codes by @robcohen in #1675
  • fix(core): failed reductions must not mutate inventory + booking property tests by @robcohen in #1677
  • ci(compat): error-count metric on both-fail files + gate on check regressions by @robcohen in #1678
  • ci: downstream rustfava job — embedder tests against the PR component by @robcohen in #1679
  • test(ffi): corpus-driven CLI↔FFI parity sweep by @robcohen in #1680
  • ci(release-test): raise AUR from-source timeout to 90m by @robcohen in #1681
  • ci(release-test): make the AUR from-source smoke test fit its timeout by @robcohen in #1682
  • test(core): error-path conformance for TLA+ refinement — Err must be a stutter by @robcohen in #1683
  • ci(tla): restore the TLC counterexample → Rust-test converter; check all specs per run by @robcohen in #1684
  • test(core): behavior-replay conformance against the TLA+ model (MBT) by @robcohen in #1685
  • ci(downstream): pin bytecodealliance/actions to a commit SHA by @robcohen in #1689
  • test(core): booking-family behavior replay + fix NONE shorting (#1686) by @robcohen in #1688
  • fix(core): try_reduce is now reduce-on-a-clone — equivalent by construction by @robcohen in #1690
  • test(tla): implementation-trace validation — the dual refinement direction by @robcohen in #1691
  • spec(tla): exact-arithmetic AVERAGE model; replay checks pool value by @robcohen in #1692
  • ci(tla): coverage lint — spec/CI/corpus/docs drift fails loudly by @robcohen in #1693
  • test(tla): weekly bounds-escalated corpus replay by @robcohen in #1694
  • test(tla): behavior replay for MultiCurrency, AccountStateMachine, PriceDB by @robcohen in #1695
  • spec(tla): pad-directive model + behavior replay against process_pads by @robcohen in #1696
  • test(kani): NONE-shorting proofs + real-Inventory feasibility finding by @robcohen in #1697
  • chore: release v0.19.1 by @robcohen in #1698

Full Changelog: v0.19.0...v0.19.1

v0.19.0

Choose a tag to compare

@github-actions github-actions released this 01 Jul 21:41
81113b7

What's Changed

Full Changelog: v0.18.0...v0.19.0

v0.18.0

Choose a tag to compare

@github-actions github-actions released this 01 Jul 05:31
4dfc863

What's Changed

Full Changelog: v0.17.4...v0.18.0