4dcd3a99

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

centjes-chart Tier 1: enforce alignment, select by account type, data-driven render

Address the review's structural gaps:

- Make the days/series alignment a real invariant: ChartReport gets a Validity
  instance asserting every series has one value per day, an aligned-by-
  construction GenValid generator, genValidSpec, and a shouldBeInvalid test
  that proves the check is non-vacuous.
- Select accounts by declared AccountType (produceChartReport takes
  [AccountType]; the assets chart passes [AccountTypeAssets]) instead of a name
  substring, so 'the assets chart' means assets.
- Pick the chart primitive from the data: stacked area only when every value is
  non-negative, overlaid lines otherwise, so a signed series (e.g. an overdraft)
  no longer renders a misleading stack.
- Test the rendering math: stackBands and lineSeries are exported and property-
  tested (bands partition each day's total from zero; one point per day).

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 2s 2s 2s 0s
Eval 1s 3m32s 3m32s 3m34s 0s
Build 2m35s 2m00s 1m00s 3m36s 0s
Suite 0s 5m35s 3m36s 3m36s 0s

Timeline

0s20s40s1m1m20s1m40s2m2m20s2m40s3m3m20s