;doc: changelogs: edit

This commit is contained in:
Simon Michael 2023-12-01 17:11:24 -10:00
parent 0b4b4ed70c
commit 71222d75e5
5 changed files with 220 additions and 904 deletions

View File

@ -19,284 +19,97 @@ General changes in the hledger project.
For package-specific changes, see the hledger package changelogs.
Docs
# e601adaee
- hledger manual:
Scripts/addons
- Updated:
- Decimal marks, digit group marks
- commodity directive
- CSV > if table (#2107)
- Timedot
- Added:
- Amount formatting, parseability: an explanation of trailing decimal marks
and number formatting differences between reports. (#2115)
- hledger-install.sh: replaced hledger-stockquotes with pricehist
- Ledger: more notes on commodity directives, from chat.
- added gsheet-csv.hs: fetch a google sheet as CSV
- Ledger: interoperating tips updates, more about commodity directives and balance assertions.
- added hledger-report1: an example custom compound report, with haskell and bash versions
- Checking for errors: tips on enforcing account lifetimes, from reddit,
and on minimising diffs in reports, from mail list.
- As part of Precisiongeddon, I started expanding hledger's "code docs", in the Hledger module's haddock.
I spent time learning how to navigate Haddock and producing a fast-feedback authoring workflow (`make haddock-watch`).
And documented a bunch of "jargon" terms, and how we handle precision and display styles.
- The "Regular expressions" manual section has been rewritten and now has examples:
<https://hledger.org/dev/hledger.html#regular-expressions>.
- Unmentioned last week: I added a News page on hledger.org as a stable home
for This Week In Hledger and other news updates.
- moved regression bounty info to <https://hledger.org/REGRESSIONS.html>
- hledger manual > Journal > Commodity display style: rewritten
- hledger manual > aregister, hledger-ui manual > Register screen: note how separately-dated postings get combined
- [How to record journal entries](https://hledger.org/how-to-record.html#how-to-record-journal-entries)
- [hledgermatic](https://hledger.org/hledgermatic.html#hledgermatic) , a simple up-to-date workflow
- Cleanups: Common workflows, Simon's old setup
- All hledger docs now use the `cli` class instead of `shell` for command-line examples,
avoiding inaccurate highlighting.
- Videos: reorder hledger fan videos.
- REGRESSIONS: cleanups, mention real names.
- justfile: updated import, time report scripts
Examples
- justfile: forecast-import: show but don't consume future-dated forecast transactions
- hledger-report1: a custom compound report script, haskell and bash versions
- Fidelity CSV rules
Tools
Docs
- tools: ghci :rmain - like :main, but reloads first, useful eg when changing --debug level
- New:
- Started a weekly This Week In Hledger news post, inspired by Matrix.
- There's now a News page, for This Week In Hledger etc.
- hledgermatic, an up-to-date, simple journal-first workflow
- How to record journal entries: added
- Reporting version control stats: added
- Moved regression bounty info from the issue tracker to Developer docs > REGRESSIONS.
- Updated:
- Checking for errors
- Common workflows
- Ledger
- Simon's old setup
- Videos
- All docs now use the `cli` class instead of `shell` for command-line examples,
avoiding inaccurate highlighting.
Ops
Infrastructure
- Updated the stars.hledger.org redirect (we have reached the top 30 Haskell projects by github stars 🌟 🎉).
- hledger.org website:
- Fixed a problem with cloudflare authentication that was preventing
automatic TLS certificate renewal on hledger.org.
- Fixed the webhook that was not updating the site on git push.
- Fixed a problem with cloudflare authentication that was preventing
automatic TLS certificate renewal on hledger.org.
- Updated and committed hledger.org's caddy config and short urls (redirects)
- Enabled https for code.hledger.org and site.hledger.org short urls.
- Committed hledger.org's caddy config.
- Updated the stars.hledger.org redirect
(we have reached the top 30 github-starred Haskell projects 🌟 🎉).
- Set up a self-hosted Sandstorm server, and a public hledger-web
instance (sandbox.hledger.org) in it that is fully writable (until
spammers find it). Use it as a pastebin for examples, eg.
- Fixed the hledger.org webhook that was not updating the site on git push.
- Enabled https for "code.hledger.org" and "site.hledger.org" short urls.
- CI (continuous integration) workflows on github have been optimised a bit:
- Github CI (continuous integration) workflows have been optimised somewhat:
- Scheduled weekly builds have been disabled, as they were propagating
to forks and running wastefully there in some cases.
- Some repeated rebuilding of the hledger-lib and hledger packages
that seems unnecessary has been stopped.
- hledger-ui no longer builds its modules twice.
- Haddock testing has been moved to the release workflows to save time.
- Haddock testing now done only at release time.
- Set up a self-hosted Sandstorm server and learned how to configure it.
- Set up a public hledger-web instance in it: sandbox.hledger.org.
Unlike <https://demo.hledger.org>, and until the spammers find it,
sandbox is fully writable - use it as a pastebin for examples, eg.
- renamed main CI workflow and branch to "ci"
- renamed main CI workflow and branch to "ci"
- Tools:
- updated and committed hledger.org's caddy config and short urls (redirects)
- .ghci: added an :rmain alias, which is like :main but reloads first -
saves typing, and is useful eg when changing --debug level.
- there's now an easy short url for trying out the hledger-web app on Sandstorm: <https://sandstorm.hledger.org>.
- make haddock-watch is now fast
Finance
- Updated project finance scripts, regenerated the project ledger with
consistent precisions in assertions, updated it with the last few
months of data from Open Collective.
- Updated project finance scripts, regenerated the journal with consistent precisions.
- Updated reports with the last few months of data from Open Collective.
# e601adaee
- ;doc: changelogs (from TWIH)
- ;tools: bake lastweek: drop an unnecessary report
- ;doc: use ```cli not ```shell for command-line examples
- ;doc:REGRESSIONS: note real name exposure
- ;doc:REGRESSIONS: note one pending
- ;bin:bar: cleanup
- ;tools:bake lastweek: time percentage report
- ;tools: bake jargon - extract Hledger.hs haddock examples to a test journal
- ;tools: make haddock-watch etc.: new fast version, cleanups
- ;tools:bake dbgstrs
- ;tools:ghci :rmain
- ci: do haddock testing less often, in the mac binaries workflow
It costs 1m+, doesn't fail that often, and is not hard to fix even if
detected late.
- ci: really fix some redundant building of hledger-lib and hledger
- ci: fix some redundant building of hledger-lib and hledger
- ;ci: disable weekly scheduled builds
They also run in forks, which I don't want.
- ci: fix tests breakage
- ;tools:make:etags: include .test files
- ;dev: tests: ledger-compat tests cleanup
- ;doc: TESTS name/link
- ;tools:bake:lastweek: improvements
- ;bin:report1: cleanups
- ;web:sandstorm: bump app version, tweak title
- imp:web: cleanups; use --allow on Sandstorm (#834)
- imp:web: access control UX cleanups (fix #834)
Changes:
1. rename the sandstorm "manage" permission to "edit"
(old permission names: view, add, manage;
new permission names: view, add, edit).
Rationale: "edit" best describes this permission's current powers, to users and to operators.
If we ever added more manager-type features we'd want that to be a new permission,
not a rename of the existing one (which would change the powers of existing users).
2. rename the sandstorm roles for consistency with permissions
(old role names: viewer, editor, manager;
new role names: viewer, adder, editor)
Rationale: it's needed to avoid confusion.
3. add a new option: --allow=view|add|edit|sandstorm (default: add).
'sandstorm' sets permissions according to the X-Sandstorm-Permissions header.
Drop the --capabilities and --capabilities-header options.
Rationale: it's simpler and more intuitive.
4. replace "capability" with "permission" in ui/docs/code.
Rationale: consistent with the above, more familiar.
- ;bin:report1: cleanups
- ;bin: link hledger-report1 scripts
- ;bin: hledger-report1: a custom compound report in haskell and bash
- ;make: copy-exe[s]-*: fix help
vv# examples/shared-expenses.journal
- ;feat: Upgrade Sandstorm package with permissions (Jacob Weisz)
- ;dev:bake lastweek
- ;examples:csv: note where to find vanguard, fidelity CSV
- ;bin:justfile: rename forecast.journal, forecast-import refinement
- ;dev:ci: rename usual CI branch to "ci"
- ;dev:ci: clean up, rename main CI workflow
Back to ci.yml.
- ;doc:REGRESSIONS: update
- ;doc:REGRESSIONS: update
- ;doc:REGRESSIONS: update
- ;dev:stack: ghc 9.4 fix
- ;doc:LINKS: updates
- ;doc:REGRESSIONS: add 2034
- ;doc:REGRESSIONS: cleanup
- ;doc:REGRESSIONS: cleanup
- ;doc:REGRESSIONS: update
- ;dev:stack: stack9.8.yaml
- ;dev:stack: drop stack9.6.yaml
- dev:stack: bump default GHC to 9.6.3
- ;doc:REGRESSIONS: update
- ;doc:REGRESSIONS: update
- ;doc:REGRESSIONS: update
- ;doc:REGRESSIONS: cleanup, update
- ;doc:regressions: fix link
- ;doc: REGRESSIONS, moved from issue tracker; renamed FINANCE section
- ;doc:examples/bin: add gsheet-csv.hs
- ;doc:justfile: update import, time report scripts
- ;doc:examples: fidelity csv rules
- ci:test-linux: temporary workaround for haddock failure
- ci:test-linux: temporary workaround for bad commit message
- dev:cli: merge Hledger.Cli.Main with Hledger.Cli
- make: fix haddock[-watch|-open]
- dev:ci: cleanup
- dev:ci: update notes
- pkg:stack: build with nightly/ghc 9.6 by default
- ;doc:RELEASING: updates
- ;bin: tt,ft comment
- ;doc:RELEASING: updates
- ;pkg: bump version to 1.31.99
- ;doc: merge 1.31 changelogs
- ;doc: announce
- install: bump to latest versions
- install: replace hledger-stockquotes with pricehist
# 1.31 2023-09-03
Scripts/addons
- ft, tt shell scripts for collecting financial and time reports

View File

@ -14,221 +14,22 @@ Internal/api/developer-ish changes in the hledger-lib (and hledger) packages.
For user-visible changes, see the hledger package changelog.
# b6a46f637
- feat:timedot: tagged time logging with letters
- ;dev: lotcostp: cleanup
Misc. changes
- imp:ledger-compat: accept lot costs with spaces after {, like Ledger
- styleAmounts is used in more places
- imp:print:beancount: conversion improvements
- omit balance assertions
- replace more currency symbols, and match within symbols like C$
- do more account validation, and error if conversion is too hard
- backslash-escape double quotes and backslashes in payee and note
- journalApplyCommodityStyles renamed to journalStyleAmounts
- imp:print:beancount: also convert cost amounts
- "hard" and "all" rounding strategies have been added
- doc: update manuals
- debug output improvements, eg for precision handling
- ;cabal: update cabal files
- Table is now Showable, for debugging
- feat:print: add a basic beancount output format
This prints journal output more likely (but not guaranteed) to
be readable by Beancount.
All packages now require text 1.2.4.1 or greater.
- fix: non-print-like reports no longer add trailing decimal marks (fix #2115)
That 1.31 change was advertised as being for the print command only,
but it affected all commands. Now it affects only print and other
"print-like" commands (ie all commands that show whole journal entries
that we might want to re-parse).
Also three classes of hledger output, and how they modify the
commodity display styles' digit group marks and decimal marks
to suit different consumers, have been identified and documented
(under REPORTING CONCEPTS).
- fix:csv: fix tag: queries on CSV data (#2114)
- ;doc: Hledger.Read: cleanups (#2113)
- ;doc: Hledger.Read: cleanups (#2113)
- imp:reading: better timing of strict checks and .latest writing (#2113)
Strict checks now run only once, at end of the high level read operation,
and not for each individual file; this fixes some spurious --strict failures,
like account declarations not affecting a sibling file as they should.
And .latest file writing now happens as the last step, after passing
strict checks. This is mainly for the import command, but it also
means that hledger print --new now does not update .latest files
if strict checks are failing.
The file reading API has been improved and documented in more detail.
- imp: web: round amounts to display precision as before (precisiongeddon)
- doc:code: add Jargon section; describe styling/precision in detail (precisiongeddon)
- ;doc: move Hledger.hs haddock to a named chunk below code
- dev: Amount: cleanups
- imp: roi: limit large decimals to 8 digits by default (precisiongeddon)
With valuation now preserving more decimal digits, roi could show
excessively precise decimals if there was no known display precision
for the valuation commodity. Now in that situation it limits the
precision to a maximum of 8 digits.
- imp: more precision handling fixes, debug output, test updates (precisiongeddon)
This and the preceding commits were "work in progress" that got out of control.
There's more to do, but this one brings these precision-related improvements
(at least):
When "infinite decimals" arise, they are now generally shown with
8 decimal digits rather than 255.
print and prices no longer add trailing decimal zeros unnecessarily.
Some code has been refactored or given more debug output.
All tests have been updated to match the recent changes.
- imp: prices: clarify, fixes, improve semantics (precisiongeddon)
- The prices comand now more accurately lists the prices that hledger
uses when calculating value reports (similar to what you'd see with
eg `hledger bal -V --debug=2`).
- The prices command's --infer-reverse-prices flag was confusing since
we always infer and use reverse prices; it has been renamed to --show-reverse.
- --infer-market-prices and --show-reverse combine properly.
- --show-reverse now ignores all zero prices rather than giving an error.
- Reverse prices (which can be infinite decimals) are now displayed
with at most 8 decimal digits (rather than the internal precision of
255 digits).
- Filtering prices by cur: or amt: now works properly.
- Price amounts are styled, but all decimal digits are shown.
- imp: set display style, natural precision on valued amounts (fix #2105, precisiongeddon)
Cost/value conversion now applies the standard display style, and
sets the display precision equal to the internal decimal precision
(or 8 if the decimal appears to be infinite).
This means value reports and especially `print -V` now show amounts
with more accurate and standard style and precision.
New tests have been added describing and explaining various
style/precision behaviours in print cost/value reports.
- dev: clarify some amount operations
- lib: Hledger.Utils.Debug: lbl_ helper, cleanups, notes
- feat: import: interpolate regex matches in field templates (#2009) (Jonathan Dowland)
Replace occurrences of '\N' (where N is a positive number) in field
templates with the corresponding regular expression match group, if it
exists.
E.g. Warp the date to the first of the month for the second posting
if %date (....-..)-..
comment2 date:\1-01
E.g. Strip a prefix from an imported account name
if %account1 liabilities:jon:(.*)
account1 \1
Fixes #2009.
Signed-off-by: Jonathan Dowland <jon@dow.land>
- ;dev: add Utils.Regex.regexMatchTextGroups (Jonathan Dowland)
A matcher function which returns the list of match-groups, which may
be empty.
Signed-off-by: Jonathan Dowland <jon@dow.land>
- ;fix: import: minor typo (Jonathan Dowland)
- fix: auto postings: detect redundant costs properly (fix #2110)
- feat: cli: Add tsv output (#869) (Peter Sagerson)
All commands that suport csv output now also support tsv output. The
data is identical, but the fields are separated by tab characters and
there is no quoting or escaping. Tab, carriage return, and newline
characters in data are converted to spaces (this should rarely if ever
happen in practice).
- ;doc: haddock, comment fixes
- ;doc:print: cleanups (#2085)
- feat:print: add --round option for more control of precisions (#2085)
- ;doc:internals: Precision and rounding
- dev: refactor transactionCheckBalanced
- lib!: use styleAmounts in more places; add rounding strategies
- dev: journalApplyCommodityStyles -> journalStyleAmounts
- dev:print: refactor, add AmountStyle "rounding strategy"
Changes to enable more control of "rounding" behaviour
(ie, choosing display precisions for amounts).
This reverts 1.31's change of asprecision, making it a non-Maybe
again, and adds a new asrounding field providing more control over how
a target display precision is applied to existing amounts (two options
for now, more later). Functionality is in an interim state (reports do
no rounding).
- fix:timedot: parse unitful quantities more accurately (fix #2096)
A quantity with a unit like "15m" was being parsed internally as
0.249999999... rather than 0.25 (and since hledger 1.21, printed that
way also). Now we round such quantities to two places during parsing,
to get exact quarter-hour amounts.
- lib: add Show to Table render functions for debugging
- fix: balance-assigned amounts affect styles again (fix #2091)
- imp: lib: include adeclarationinfo, if present, in accounts JSON (S. Zeid)
Note that this does not add the declaration info if it is not already
present.
- feat: balance: Add summary-only flag (#1012) (Stephen Morgan)
Add a flag --summary-only for multi-column balance reports, which does
not display the main date columns for a report, but only displays the
summary columns (--row-total, --average). This is useful when there are
many columns (a weekly summary over many years) where you're only
interested in the average (or some other summary).
- Add support for negating a Matcher (bobobo1618)
https://github.com/simonmichael/hledger/issues/2054
- ;cabal: update cabal files
- ;doc: main module haddock cleanups
- ;doc: package description cleanups
- fix: failing balance assertions with cost show correct highlight #2083
- ;doc: update manuals
- ;cabal: update cabal files
- ;pkg: bump version to 1.31.99
- ;doc: merge 1.31 changelogs
# 1.31 2023-09-03
Breaking changes
- There is a new consolidated API for styling amounts, and a

View File

@ -22,45 +22,17 @@ User-visible changes in hledger-ui.
See also the hledger changelog.
# 0c85b48d2
- ;doc: use ```cli not ```shell for command-line examples
- doc: update manuals
Fixes
- ;cabal: update cabal files
- The V key now preserves the valuation mode specified at the command
line, if any. (#2084)
- feat:print: add a basic beancount output format
This prints journal output more likely (but not guaranteed) to
be readable by Beancount.
- The hledger-ui package no longer wastefully builds its modules
twice.
All packages now require text 1.2.4.1 or greater.
- imp: ui: round amounts to display precision as before (precisiongeddon)
- cabal: update cabal files
- pkg:ui: fix wasteful double-building of hledger-ui modules
- ;doc:areg,ui: note how separately-dated postings get combined
- ;cabal: update cabal files
- ;doc: main module haddock cleanups
- ;doc: package description cleanups
- lib!: export less from cli and web packages, and more from ui
- fix:ui: V key preserves startup valuation, if any (fix #2084)
Also: hledger-ui cost/value doc improvement and a useful cost/value test file.
- ;doc: update manuals
- ;cabal: update cabal files
- ;pkg: bump version to 1.31.99
- ;doc: merge 1.31 changelogs
# 1.31 2023-09-03
Improvements
- Allow megaparsec 9.5

View File

@ -21,90 +21,37 @@ API
User-visible changes in hledger-web.
See also the hledger changelog.
# 0c85b48d2
- ;doc: use ```cli not ```shell for command-line examples
Features
- doc: update manuals
- The hledger-web app on the Sandstorm cloud platform has been updated to
a recent version (Jacob Weisz, #2102), and now uses Sandstorm's access
control. (Jakub Zárybnický, #821)
- ;cabal: update cabal files
Improvements
- feat:print: add a basic beancount output format
This prints journal output more likely (but not guaranteed) to
be readable by Beancount.
- The --capabilities and --capabilities-header options have been replaced
with an easier `--allow=view|add|edit|sandstorm` option.
`add` is the default access level, while `sandstorm` is for use on Sandstorm.
UI and docs now speak of "permissions" rather than "capabilities".
(#834)
All packages now require text 1.2.4.1 or greater.
- The Sandstorm app's permissions and roles have been renamed for clarity. (#834)
- imp: web: round amounts to display precision as before (precisiongeddon)
- Permissions are now checked earlier, before the web app is started,
producing clearer command line errors when appropriate.
- cabal: update cabal files
- Account's `adeclarationinfo` field is now included in JSON output. (#2097) (S. Zeid)
- pkg:web: clean up some apparently redundant declarations and deps
Fixes
- dev:web: refactor permission checking
- The app can now serve on address 0.0.0.0 (exposing it on all interfaces),
which previously didn't work.
(#2099) (Philipp Klocke)
- ;cabal: update cabal files
- The broken "File format help" link in the edit form has been fixed. (#2103)
- imp:web: cleanups; use --allow on Sandstorm (#834)
- imp:web: access control UX cleanups (fix #834)
Changes:
1. rename the sandstorm "manage" permission to "edit"
(old permission names: view, add, manage;
new permission names: view, add, edit).
Rationale: "edit" best describes this permission's current powers, to users and to operators.
If we ever added more manager-type features we'd want that to be a new permission,
not a rename of the existing one (which would change the powers of existing users).
2. rename the sandstorm roles for consistency with permissions
(old role names: viewer, editor, manager;
new role names: viewer, adder, editor)
Rationale: it's needed to avoid confusion.
3. add a new option: --allow=view|add|edit|sandstorm (default: add).
'sandstorm' sets permissions according to the X-Sandstorm-Permissions header.
Drop the --capabilities and --capabilities-header options.
Rationale: it's simpler and more intuitive.
4. replace "capability" with "permission" in ui/docs/code.
Rationale: consistent with the above, more familiar.
- fix:web: check options like --capabilities before starting the app
- fix:web:edit form: fix broken "File format help" link (fix #2103)
Now not broken, https rather than http, and pointing to the "Data
formats" section, which has links to each of the file formats
(in case editing a non-journal file).
- web: Use guessAppRootOr to enable relative root if desired (fix #2099) (Philipp Klocke)
This is useful when serving on 0.0.0.0, such that querying from any
other device with <IP>:<PORT> does not fallback to 0.0.0.0:PORT,
which would fail.
Tested: Manually
- imp: web: include adeclarationinfo in accounts JSON (S. Zeid)
- ;cabal: update cabal files
- ;doc: main module haddock cleanups
- ;doc: package description cleanups
- lib!: export less from cli and web packages, and more from ui
- ;doc: update manuals
- ;cabal: update cabal files
- ;pkg: bump version to 1.31.99
- ;doc: merge 1.31 changelogs
# 1.31 2023-09-03
Improvements
- Allow aeson 2.2, megaparsec 9.5

View File

@ -23,393 +23,176 @@ User-visible changes in the hledger command line tool and library.
Breaking changes
- This week I completed the months-long yak shave that became
Precisiongeddon, and it has landed in master; see
<https://github.com/simonmichael/hledger/pull/2111> for details.
Heads up: this can change default precisions shown especially by
cost and value reports - all for the better hopefully.
- Display styles and display precision are now managed more carefully
during calculations and output, fixing a number of issues (#2111,
"Precisiongeddon"). In brief:
- Cost and value reports, such as `print -V`, now (1) consistently
apply commodity display styles, and (2) do not add or discard
decimal digits unnecessarily. (#2105)
- When "infinite decimals" arise during calculations (eg in value
reports, or in `prices` or `roi` output), these are now shown
limited to 8 decimal digits rather than 255.
- Non-print-like reports no longer add trailing decimal marks to
disambiguate digit group marks (this was an unintended regression
in 1.31). (#2115)
- We now document number formatting adjustments made in certain
reports and output formats (hledger manual > REPORTING CONCEPTS >
Amount formatting, parseability).
Features
- The `print` command has a new `beancount` output format for exporting to Beancount.
- Timedot format supports a new letters syntax for easier tagged time logging.
(#2116)
- Timedot format supports a new letters syntax for easier tagged time logging. (#2116)
- Add tsv output (#869) (Peter Sagerson)
- import: interpolate regex matches in field templates (#2009) (Jonathan Dowland)
- print: add --round option for more control of precisions (#2085)
- [feat: balance: Add only-summary flag (#1012) #2086](https://github.com/simonmichael/hledger/pull/2086) (Stephen Morgan)
- [feat: CSV rule negation #2088](https://github.com/simonmichael/hledger/pull/2088) (bobobo1618)
Improvements
- Journal format now accepts lot costs with spaces after `{`, improving Ledger compatibility.
- A new hledger user pointed out in chat out that -s/--strict mode
didn't work with the import command. This exposed a bug (#2113) and
led to some reworking of the API in Hledger.Read. Until now, when
reading multiple files, -s/--strict checks were performed for each
individual file, causing spurious failures, with import and other
commands. Now strict checks are done only once, for the overall
journal. Also, the import command now only updates .latest files at
the end of a successful run (after successfully passing strict
checks and after updating the journal file).
- web: access control UX cleanups: replace --capabilities and --capabilities-header with --allow, and validate it before starting the app (#834)
- web: sandstorm web app cleanups; rename/reorder roles & permissions
- Jacob Weisz has updated the hledger-web app on Sandstorm
- [imp: web: include account declaration info in accounts JSON #2097](https://github.com/simonmichael/hledger/pull/2097) (S. Zeid)
Fixes
- Non-print-like reports no longer add trailing decimal marks (a regression in 1.31).
Clarified the policy on number formatting adjustments made in certain reports/output formats. (#2115)
- `tag:` queries now work when reading CSV files. (#2114)
- `-o`/`--outputfile` with a .json or .sql extension now properly selects those formats.
- amounts in value reports can sometimes be shown unstyled / with zero decimal digits,
<https://github.com/simonmichael/hledger/issues/2105>
- auto postings break redundant equity/cost detection and transaction balancing,
<https://github.com/simonmichael/hledger/issues/2110>
- demo: avoid a bug in asciinema 2.3.0, and improve the error message when asciinema fails (#2094)
- web: fix broken "File format help" link in the edit form (#2103)
- balance-assigned amounts affect commodity styles again (#2091, regression in 1.30)
- timedot: parse unitful quantities more accurately (#2096)
Breaking changes
Features
Improvements
Fixes
- `print` now shows zeros with a commodity symbol and decimal digits when possible, preserving more information.
- `print` now formats balance assertion costs with standard commodity styles, like other amounts.
- `print` has a new option for rounding amounts to commodity display precisions:
- `--round=none` - show amounts with original precisions (default; like 1.31; avoids implying less or more precision than was recorded)
- `--round=soft` - add/remove decimal zeros in non-cost amounts (like 1.30 but also affects balance assertion amounts)
- `--round=hard` - round non-cost amounts (can hide significant digits)
- `--round=all` - round all amounts and costs
**Past behaviour**
Comparing amount styling behaviour across hledger versions can be confusing;
here's a summary (for my own sanity).
print shows four kinds of amount: posting amounts, balance assertion amounts, and costs for each of those.
Which amounts does print do basic styling (eg symbol placement) on ?
| hledger | amt | cost | bal | balcost |
|-----------|-----|------|-----|---------|
| 1.1-1.14 | Y | N | N | N |
| 1.15-1.22 | Y | N | Y | N |
| 1.23-1.30 | Y | Y | Y | N |
| | | | | |
| 1.31- | Y | Y | Y | Y |
Which kind of rounding does print do on each amount ?
| hledger | amt | cost | bal | balcost |
|---------------------|------|------|------|---------|
| 1.0-1.20 | hard | none | none | none |
| 1.21-1.30 | soft | none | none | none |
| 1.31 | none | none | none | none |
| | | | | |
| 1.31.1 | none | none | none | none |
| 1.31.1 --round=soft | soft | none | soft | none |
| 1.31.1 --round=hard | hard | none | hard | none |
| 1.31.1 --round=all | hard | hard | hard | hard |
Docs
API
# e601adaee
- ;doc: changelogs (from TWIH)
- ;doc: timedot: example tweak
- ;doc: Amount formatting, parseability: improve example
- ;doc: Amount formatting, parseability: fix link
- ;doc: use ```cli not ```shell for command-line examples
- ;doc: Amount formatting, parseability: fix link
- ;doc: Amount formatting, parseability: examples, links
- feat:timedot: tagged time logging with letters
- ;doc:timedot: cleanups
- imp:print:beancount: conversion improvements
- omit balance assertions
- replace more currency symbols, and match within symbols like C$
- do more account validation, and error if conversion is too hard
- backslash-escape double quotes and backslashes in payee and note
- imp:print:beancount: also convert cost amounts
- doc: update manuals
- ;doc: update command help
- ;cabal: update cabal files
- feat:print: add a basic beancount output format
This prints journal output more likely (but not guaranteed) to
- `print` has a new `beancount` output format for exporting to Beancount.
This prints journal output more likely (though not guaranteed) to
be readable by Beancount.
All packages now require text 1.2.4.1 or greater.
- In CSV rules, matchers using regular expressions can now interpolate
their matched texts into the values they assign to fields (field
assignment values can reference match groups).
(#2009) (Jonathan Dowland)
- In CSV rules, matchers can be negated by prepending `!`.
(#2088) (bobobo1618)
- fix: -o/--outputfile with a .json or .sql extension now selects those formats
- Multi-column balance reports (from `bal`, `bs`, `is` etc.) can use
the new `--summary-only` flag (`--summary` also works) to display
just the Total and Average columns (if enabled by `--row-total` and
`-A/--average`) and hide the rest.
(#1012) (Stephen Morgan)
- ;doc:commodity directive: edits
- All commands that suport csv output now also support `tsv`
(tab-separated values) output. The data is identical, but the fields
are separated by tab characters and there is no quoting or
escaping. Tab, carriage return, and newline characters in data are
converted to spaces (this should rarely if ever happen in practice).
(#869) (Peter Sagerson).
- ;doc:commodity directive: explain why decimal mark is required
- ;doc: amount formatting: correction, csv does not force . (#2115)
Improvements
- ;doc: amount formatting: edits (#2115)
- Journal format no longer fails to parse Ledger-style lot costs with spaces
after the `{`, improving Ledger compatibility.
- ;doc: amount formatting: edits (#2115)
- ;doc: amount formatting: edits (#2115)
- fix: non-print-like reports no longer add trailing decimal marks (fix #2115)
That 1.31 change was advertised as being for the print command only,
but it affected all commands. Now it affects only print and other
"print-like" commands (ie all commands that show whole journal entries
that we might want to re-parse).
Also three classes of hledger output, and how they modify the
commodity display styles' digit group marks and decimal marks
to suit different consumers, have been identified and documented
(under REPORTING CONCEPTS).
- ;doc:csv:if table: clarify, explain why backslash won't work (#2107)
- fix:csv: fix tag: queries on CSV data (#2114)
- ;doc:journal: decimal marks, commodity directives: rewrites
- imp:import: support -s/--strict properly (fix #2113)
hledger import -s now runs strict checks on an in-memory copy of the
updated journal, before updating the journal file; if strict checks
fail, nothing is written to disk.
And hledger import now does not update any .latest files until it has
run without error (no failing strict checks, no failure while writing
- `import` now does not update any .latest files until it has run
without error (no failing strict checks, no failure while writing
the journal file). This makes it more idempotent, so you can run it
again after fixing problems.
- ;doc: regular expressions: add examples (hledger_site#224)
- `print` now shows zeros with a commodity symbol and decimal digits
when possible, preserving more information.
- ;doc: More valuation examples: drop obsolete explanation (precisiongeddon)
- `print` has a new option for controlling amount rounding (#2085):
- `--round=none` - show amounts with original precisions (default;
like 1.31; avoids implying less or more precision than was
recorded)
- imp: roi: limit large decimals to 8 digits by default (precisiongeddon)
With valuation now preserving more decimal digits, roi could show
excessively precise decimals if there was no known display precision
for the valuation commodity. Now in that situation it limits the
precision to a maximum of 8 digits.
- `--round=soft` - add/remove decimal zeros in non-cost amounts
(like 1.30 but also affects balance assertion amounts)
- imp: more precision handling fixes, debug output, test updates (precisiongeddon)
This and the preceding commits were "work in progress" that got out of control.
There's more to do, but this one brings these precision-related improvements
(at least):
- `--round=hard` - round non-cost amounts (can hide significant digits)
When "infinite decimals" arise, they are now generally shown with
8 decimal digits rather than 255.
- `--round=all` - round all amounts and costs
print and prices no longer add trailing decimal zeros unnecessarily.
For the record:
`print` shows four kinds of amount: posting amounts,
balance assertion amounts, and costs for each of those.
Past hledger versions styled and rounded these inconsistently.
Since 1.31 they are all styled, and since 1.32 they are rounded as follows:
| hledger-1.32 print | amt | cost | bal | balcost |
|--------------------|------|------|------|---------|
| (default) | none | none | none | none |
| --round=soft | soft | none | soft | none |
| --round=hard | hard | none | hard | none |
| --round=all | hard | hard | hard | hard |
Some code has been refactored or given more debug output.
- The `prices` command has had a number of fixes and improvements (#2111):
All tests have been updated to match the recent changes.
- It now more accurately lists the prices that hledger would use
when calculating value reports (similar to what you'd see with
`hledger bal -V --debug=2`).
- The --infer-reverse-prices flag was confusing, since we always
infer and use reverse prices; it has been renamed to `--show-reverse`.
- `--show-reverse` and `--infer-market-prices` flags now combine properly.
- `--show-reverse` now ignores zero prices rather than giving an error.
- Price amounts are now shown styled.
- Price amounts are now shown with all their decimal digits; or with
8 decimal digits if they appear to be infinite decimals (which can
arise with reverse prices).
- Filtering prices with `cur:` or `amt:` now works properly.
- imp: prices: clarify, fixes, improve semantics (precisiongeddon)
- The prices comand now more accurately lists the prices that hledger
uses when calculating value reports (similar to what you'd see with
eg `hledger bal -V --debug=2`).
Fixes
- The prices command's --infer-reverse-prices flag was confusing since
we always infer and use reverse prices; it has been renamed to --show-reverse.
- `print` now styles balance assertion costs consistently, like other
amounts.
- --infer-market-prices and --show-reverse combine properly.
- `import` now works with `-s/--strict`.
And more generally, when reading multiple input files, eg with
multiple `-f` options, strict checks are done only for the overall
combined journal (not for each individual file).
(#2113)
- --show-reverse now ignores all zero prices rather than giving an error.
- `tag:` queries now work when reading CSV files. (#2114)
- Reverse prices (which can be infinite decimals) are now displayed
with at most 8 decimal digits (rather than the internal precision of
255 digits).
- Using a `.json` or `.sql` file extension with `-o`/`--outputfile`
now properly selects those output formats.
- Filtering prices by cur: or amt: now works properly.
- Auto postings no longer break redundant equity/cost detection and
transaction balancing. (#2110)
- Amounts set by balance assignment now affect commodity styles again.
(#2091, a regression in 1.30)
- Price amounts are styled, but all decimal digits are shown.
- Timedot quantities with units are parsed more accurately.
Eg a quantity like "15m" was evaluated as 0.249999999 not 0.25,
and since hledger 1.21, it was printed that way also.
Now we round such quantities to two places during parsing to get
exact quarter-hour amounts. (#2096)
- imp: set display style, natural precision on valued amounts (fix #2105, precisiongeddon)
Cost/value conversion now applies the standard display style, and
sets the display precision equal to the internal decimal precision
(or 8 if the decimal appears to be infinite).
This means value reports and especially `print -V` now show amounts
with more accurate and standard style and precision.
- The `demo` command no longer triggers a JSON decode error in asciinema
2.3.0. It now also shows a better error message if asciinema fails
(#2094).
New tests have been added describing and explaining various
style/precision behaviours in print cost/value reports.
- Failing balance assertions with a cost now show correct markers in
the error message. (#2083)
- ;dev: valuation.test: cleanup
- ;doc: import: document Match Groups (Jonathan Dowland)
Add a description of Match Groups to the manual; Section "Matchers".
Include two examples.
Docs
Clarify a description of regular expression features with respect
to match groups.
- New:
- Amount formatting, parseability
- Started new code docs for developers, based in the Hledger module's haddock
Expand the description of field assignments to cover match group
interpolation, cross-referencing to Section "Matchers" for the full
description.
- Updated:
- aregister
- commodity directive
- Commodity display style
- if table
- Decimal marks, digit group marks
- Regular expressions
- Timedot
Signed-off-by: Jonathan Dowland <jon@dow.land>
- test: import: functional tests for match group interpolation (Jonathan Dowland)
Add functional tests for matching substrings in field matchers and
interpolating them into the corresponding field assignments. Check
the following properties and use-cases:
- Use-case 1: matching a portion of a date in a known format
(YYY-MM-DD) and writing a comment-command to warp a posting date.
Useful for credit cards.
- Use-case 2: match a portion of a CSV field and use it as an
account assignment. Useful for my byzantine setup with two
separate ledgers cross-importing to each other.
- Ensure bracketed portions of field matchers are captured.
- Ensure bracketed portions of record matchers are captured.
- Check match token numerical offset is relative to match group,
not the whole rules file.
- Check nested matches work.
- Ensure match group token expansion works with or without
surrounding text.
Signed-off-by: Jonathan Dowland <jon@dow.land>
- ;doc: Setting LEDGER_FILE: fix a quote (hledger_site#93)
- fix: auto postings: detect redundant costs properly (fix #2110)
- feat: cli: Add tsv output (#869) (Peter Sagerson)
All commands that suport csv output now also support tsv output. The
data is identical, but the fields are separated by tab characters and
there is no quoting or escaping. Tab, carriage return, and newline
characters in data are converted to spaces (this should rarely if ever
happen in practice).
- ;doc:tests:readme
- ;dev: tests: ledger-compat tests cleanup
- ;dev: tests: add outshine headings for more readability (in emacs)
- ;doc: TESTS name/link
- ;imp:Hledger.Cli.Script: don't export main, do export CompoundBalanceCommand
- imp:demo: improve error message when asciinema fails
- fix:demo: avoid breaking asciinema 2.3.0 (fix #2094)
We were adding a trailing newline, which causes asciinema 2.3.0 to
show a JSON decode error.
- ;doc:cli:Data formats: link to each format's doc
- imp:cli:Hledger.Cli.Version: export packagemajorversion
- ;doc:areg,ui: note how separately-dated postings get combined
- ;doc:print: cleanups (#2085)
- ;doc:CHANGES: document print and zero-rendering changes (#2085)
- feat:print: add --round option for more control of precisions (#2085)
- lib!: use styleAmounts in more places; add rounding strategies
- dev:print: refactor, add AmountStyle "rounding strategy"
Changes to enable more control of "rounding" behaviour
(ie, choosing display precisions for amounts).
This reverts 1.31's change of asprecision, making it a non-Maybe
again, and adds a new asrounding field providing more control over how
a target display precision is applied to existing amounts (two options
for now, more later). Functionality is in an interim state (reports do
no rounding).
- fix:timedot: parse unitful quantities more accurately (fix #2096)
A quantity with a unit like "15m" was being parsed internally as
0.249999999... rather than 0.25 (and since hledger 1.21, printed that
way also). Now we round such quantities to two places during parsing,
to get exact quarter-hour amounts.
- ;doc:journal: rewrite Commodity display style
- fix: balance-assigned amounts affect styles again (fix #2091)
- ;doc:troubleshooting: nix locale config (#2089)
- ;doc: csv: negative matchers (#2088)
- feat: balance: Add summary-only flag (#1012) (Stephen Morgan)
Add a flag --summary-only for multi-column balance reports, which does
not display the main date columns for a report, but only displays the
summary columns (--row-total, --average). This is useful when there are
many columns (a weekly summary over many years) where you're only
interested in the average (or some other summary).
- ;cabal: update cabal files
- ;doc: main module haddock cleanups
- lib!: export less from cli and web packages, and more from ui
- dev:cli: merge Hledger.Cli.Main with Hledger.Cli
- fix: failing balance assertions with cost show correct highlight #2083
- ;doc:journal: clarify valuation date, note bug #2084
- ;doc: update manuals
- ;doc: update command help
- ;cabal: update cabal files
- ;pkg: bump version to 1.31.99
- ;doc: merge 1.31 changelogs
# 1.31 2023-09-03
Features
- Multi-pivot: the --pivot option now accepts multiple arguments,