Visitar URL original
468a3da broke income statements that use -X, -e and -M · Issue #2385 · hledgerorg/hledger · GitHub
Skip to content

468a3da broke income statements that use -X, -e and -M #2385

Closed

Description

@basvandijk

@Xitian9 468a3da broke income statements that use -X, -e and -M:

$ git rev-parse HEAD
468a3da1b70bbcc8499ba398a6904ef86f9eea20
$ cabal run hledger -- incomestatement -f ~/finances/all-years.journal -X CHF -e thismonth -M
Configuration is affected by the following files:
- cabal.project
hledger: Error: journalApplyValuationFromOpts: expected all spans to have an end date
CallStack (from HasCallStack):
  error, called at ./Hledger/Reports/ReportOptions.hs:646:11 in hledger-lib-1.42.99-inplace:Hledger.Reports.ReportOptions

Activity

  1. added
    A-BUGSomething wrong, confusing or sub-standard in the software, docs, or user experience.
    on May 11, 2025
  2. simonmichael commented on May 11, 2025

    @simonmichael
    Member

    Woah, surprising. This is a bug with master, right @basvandijk ?

  3. basvandijk commented on May 11, 2025

    @basvandijk
    ContributorAuthor

    This is a bug with master, right @basvandijk ?

    Yes. I did a git bisect which identified 468a3da as the culprit. Interesting that the strict data types cause this error to be thrown.

  4. basvandijk commented on May 11, 2025

    @basvandijk
    ContributorAuthor

    If I trace latestSpanContaining like:

    latestSpanContaining :: [DateSpan] -> Day -> Maybe DateSpan
    latestSpanContaining datespans d =
        trace ("latestSpanContaining " ++ show datespans ++ " " ++ show d ++ " = " ++ show r) r
      where
        r = go d
        ...

    and run it without StrictData I get:

    $ cabal run hledger -- incomestatement -f ~/finances/all-years.journal -X CHF -b 2025-03 -e 2025-04 -M
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-05 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-02 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-13 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-14 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-31 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-04 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-26 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-19 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-31 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-31 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-27 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-27 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-27 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-26 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-24 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-24 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-22 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-17 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-17 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-17 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-14 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-12 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-11 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-10 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-07 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-06 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-06 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-06 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-27 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-04 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-26 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-15 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-10 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-22 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-10 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-17 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-19 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-31 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-27 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-22 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-04 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-01 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-26 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-06 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-07 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-13 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-04 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-04 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-15 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-04 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-31 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-20 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-07 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-07 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-06 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-14 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-24 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-30 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-26 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-23 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-20 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-18 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-16 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-13 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-07 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-19 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-27 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-20 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-20 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-19 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-19 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-19 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-27 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-17 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-17 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-05 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-31 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-23 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-24 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-28 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-26 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-22 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-19 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-14 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-11 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-06 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-05 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-04 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-20 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-25 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-27 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-21 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-11 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-31 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-03 = Just DateSpan 2025-03
    Monthly Income Statement 2025-03, valued at period ends
    ...
    

    but with StrictData I get:

    $ cabal run hledger -- incomestatement -f ~/finances/all-years.journal -X CHF -b 2025-03 -e 2025-04 -M
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-08-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-08-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-27 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-03 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-17 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-17 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-05-17 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-11-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-11-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-11-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-11-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-11-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-11-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-01-06 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-01-06 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-02-25 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-02-25 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-03-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2022-03-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-01-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-02-02 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-02-02 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-03-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-03-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-04-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-04-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-05-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-05-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-06-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-06-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-06-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-06-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-07-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-07-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-08-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-08-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-09-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-09-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-10-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-10-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-11-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-11-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-12-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2023-12-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-02-01 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-03-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-03-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-04-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-04-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-06-04 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-06-04 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-07-06 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-07-06 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-07-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-07-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-08-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-08-31 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-10-05 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-10-05 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-11-02 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-11-02 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-11-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2024-11-30 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-01-05 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-01-05 = Just DateSpan ..2025-02-28
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-02 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-03-02 = Just DateSpan 2025-03
    latestSpanContaining [DateSpan ..2025-02-28,DateSpan 2025-03] 2025-04-02 = Nothing
    hledger: Error: journalApplyValuationFromOpts: expected all spans to have an end date
    CallStack (from HasCallStack):
      error, called at ./Hledger/Reports/ReportOptions.hs:646:11 in hledger-lib-1.42.99-inplace:Hledger.Reports.ReportOptions
    

    So with StrictData latestSpanContaining is called on the extra day 2025-04-02 outside the given datespans range.

  5. basvandijk commented on May 11, 2025

    @basvandijk
    ContributorAuthor

    Ok going for bed now so I'm leaving my last debugging notes here:

    The Day 2025-04-02 is returned by the following (censored) invocation of postingDateOrDate2:

    postingDateOrDate2
      PrimaryDate
      PostingPP {
        pdate="Nothing",
        pdate2="Nothing",
        pstatus="",
        paccount="XXX",
        pamount=Mixed (fromList [(MixedAmountKeyNoCost "CHF",Amount {acommodity = "CHF", aquantity = XXX, astyle = AmountStylePP L True Just (DigitGroups ',' [3]) Just '.' Precision 2 NoRounding, acost = Nothing})]),
        pcomment="",
        ptype=RegularPosting,
        ptags=[("type","A")],
        pbalanceassertion=Just (BalanceAssertion {baamount = Amount {acommodity = "CHF", aquantity = XXX, astyle = AmountStylePP L True Just (DigitGroups ',' [3]) Just '.' Precision 0 NoRounding, acost = Nothing}, batotal = False, bainclusive = False, baposition = SourcePos {sourceName = "XXX", sourceLine = Pos 118, sourceColumn = Pos 40}}),
        ptransaction=Just "txn",
        poriginal=Just PostingPP {pdate="Nothing", pdate2="Nothing", pstatus="", paccount="XXX", pamount=Mixed (fromList [(MixedAmountKeyNoCost "AUTO",Amount {acommodity = "AUTO", aquantity = 0, astyle = AmountStylePP L False Nothing Just '.' Precision 0 NoRounding, acost = Nothing})]), pcomment="", ptype=RegularPosting, ptags=[("type","A")], pbalanceassertion=Just (BalanceAssertion {baamount = Amount {acommodity = "CHF", aquantity = XXX, astyle = AmountStylePP L True Just (DigitGroups ',' [3]) Just '.' Precision 0 NoRounding, acost = Nothing}, batotal = False, bainclusive = False, baposition = SourcePos {sourceName = "XXX", sourceLine = Pos 118, sourceColumn = Pos 40}}), ptransaction=Just "txn", poriginal=Nothing}}
      = 2025-04-02
    

    When trying to show the ptransaction field I noticed this comment about co-recursive types. I'm just wondering, are these co-recursive types safe in the context of StrictData?

    For the record, I indeed have a transaction on that date but I wonder why it's being processed when it falls outside the specified period (-b 2025-03 -e 2025-04 -M):

    $ cabal run hledger -- print -f ~/finances/all-years.journal XXX date:2025-04-02
    2025-04-02 Balance
        XXX                                  = CHF XXX.
        XXX
    
  6. basvandijk commented on May 11, 2025

    @basvandijk
    ContributorAuthor

    Another interesting observation about my trace of latestSpanContaining above is that the function is not just applied to one Day outside of the specified period but to many when StrictData is enabled.

  7. Xitian9 commented on May 12, 2025

    @Xitian9
    Collaborator

    When trying to show the ptransaction field I noticed this comment about co-recursive types. I'm just wondering, are these co-recursive types safe in the context of StrictData?

    I think in this particular case it's safe, as the co-recursive type is wrapped in a Maybe which is not itself strict. The StrictData will evaluate ptransaction to weak head normal form, which means instead of ptransaction = thunk it will evaluate to either ptransaction = Nothing or ptransaciton = Just thunk. The actual corecursion won't appear until you evaluate one more layer of thunks.

  8. basvandijk commented on May 12, 2025

    @basvandijk
    ContributorAuthor

    So the following patch on master fixes the issue but I have no idea why:

    diff --git a/hledger-lib/Hledger/Data/Types.hs b/hledger-lib/Hledger/Data/Types.hs
    index 177a276be..dbb7e7178 100644
    --- a/hledger-lib/Hledger/Data/Types.hs
    +++ b/hledger-lib/Hledger/Data/Types.hs
    @@ -475,7 +475,7 @@ data Posting = Posting {
           pdate2            :: Maybe Day,         -- ^ this posting's secondary date, if different from the transaction's
           pstatus           :: Status,
           paccount          :: AccountName,
    -      pamount           :: MixedAmount,
    +      pamount           :: ~MixedAmount,
           pcomment          :: Text,              -- ^ this posting's comment lines, as a single non-indented multi-line string
           ptype             :: PostingType,
           ptags             :: [Tag],                   -- ^ tag names and values, extracted from the posting comment
  9. basvandijk commented on May 12, 2025

    @basvandijk
    ContributorAuthor

    In case it's useful I attached a stack trace of when hledger (built from the latest master 00442a6) crashes:

    cabal run --enable-library-profiling --enable-profiling hledger -- \
      incomestatement -f ~/finances/all-years.journal -X CHF -b 2025-03 -e 2025-04 -M \
      +RTS -xc -RTS \
        2> hledger-stderr.txt
    

    hledger-stderr.txt

  10. Xitian9 commented on May 12, 2025

    @Xitian9
    Collaborator

    To be honest, I think the best approach to resolving this is to rewrite the code to avoid the possibility of encountering that error condition in the first place. Looking a bit at the logic, we go through a lot of contortions to work around the fact that 1. DateSpans do not necessarily contain either start or end dates and 2. DateSpans do not necessarily form a partition of time. As a result, we keep adding or subtracting 1 from start or end dates, constructing artificial DateSpans which have certain properties with respect to the ordering, and so on. My guess is there was a subtle bug in all that logic which laziness hid from us and is now being dredged up.

    I can gave a go at this, but the general approach I'll take is to replace DateSpan with (Day, Day) when we know they must both exist. Maybe even create a new data type representing a partition of time (to replace [DateSpan]) with appropriate functions to access start and end dates.

  11. simonmichael commented on May 13, 2025

    @simonmichael
    Member

    What are you thinking of @igs-raiderler ?

  12. Xitian9 commented on May 13, 2025

    @Xitian9
    Collaborator

    I've found the problem, and have one proposed solution #2387. I'll note that my proposed solution conflicts with the proposed change in #2373, so I think we need some discussion about whether that's the correct approach.

    The nub of the problem is as follows. Valuation currently happens before filtration, so we are valuing all postings even if they don't appear in the final report. Since we have a report with an early end date, we are not providing interval end dates out to the end of the journal, and so we encounter this error. Previously this wasn't a problem, because the thunks were never evaluated before being filtered out, but with StrictData they're now being evaluated and encountering the error condition.

  13. Xitian9 commented on May 13, 2025

    @Xitian9
    Collaborator

    Other potential solutions:

    1. @basvandijk's solution to keep the pamount field lazy.
    2. Ensure that period end dates out to the end of the journal are supplied (even if they're not going to be used).
    3. Filter by date before valuation, but do the rest of the filtering after valuation.
  14. simonmichael commented on May 13, 2025

    @simonmichael
    Member

    Great debugging info. I haven't been able to make a repro though. Could anyone make a small one ?

    I did some more benchmarking of #2381, compiled with ghc 9.10.1 on mac.
    Reductions (-) are good:

    command 1k txns 10k txns 100k txns
    time:
    all commands = = =
    memory:
    print +slightly -10% -1%
    register -10% -18% -5%
    balance +slightly -13% -5%

    So while this won't be noticeable to most users, it does seem like a win and worth updating the code for.

  15. simonmichael commented on May 13, 2025

    @simonmichael
    Member

    Ah! Found the repro in #2387.

  16. simonmichael commented on May 13, 2025

    @simonmichael
    Member

    We now have three versions of journalValueAndFilterPostingsWith:

    1. current: filter by amt: and cur:, then do valuation, then other filtering.

    2. pr 2373: do valuation, then filtering.
      This is a WIP proposal of mine to fix bug 2371 (filtering breaks boolean queries, caused by 1). It also fixes bug 2385.

    3. pr 2387: do filtering, then valuation.
      This is Xitian9's fix for bug 2385, caused by pr 2381. It probably also fixes bug 2371 ?

    2 is not finished; I was planning to add pre-valuation origamt: and origcur: queries there, to preserve the old behaviour for people relying on that.

    3 does the filtering first, intending to be more efficient, avoiding "we are valuing all postings even if they don't appear in the final report". Have we really been doing wasted work here ? Perhaps laziness was avoiding it ? Perhaps until pr 2381 added StrictData ?

    3 changes the long-standing query/valuation order, and I was expecting that to break something. But we were already doing cur: and amt: filtering before valuation, and I guess the other query types aren't affected by valuation. (Or if they are, tests don't cover it ?)

    It seems like 3 must also fix bug 2371, in a simpler and better way. I have a question mark only because I don't seem to have a specific test handy.

  17. basvandijk commented on May 15, 2025

    @basvandijk
    ContributorAuthor

    I can confirm #2387 fixes the issue for me.

  18. simonmichael commented on May 17, 2025

    @simonmichael
    Member

    I have merged #2387 which fixes this bug, and some tests confirming that it also fixes #2371.
    Now we do all query-filtering before valuation (not just amt: and cur:).
    Let's watch out for any breakage or docs that need updating.
    Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-BUGSomething wrong, confusing or sub-standard in the software, docs, or user experience.affects2-devsAffects packagers or developers.annoyance4-majorMajor usability/doc bug, or any regression or crash.valuation

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions