By: Tom Sydney Kerckhove <syd@cs-syd.eu>
Add the centjes-chart package A 'centjes-chart' executable that renders an SVG chart of account balances over time from a ledger. The package is structured around a backend-agnostic, pure report so the data pipeline is total and testable and rendering is isolated: - Centjes.Chart.Report: the ChartReport/ChartSeries intermediate representation, a typed ChartError (unknown currency / no data / conversion failure) whose ToReport delegates to ConvertError, and a total produceChartReport. Accounts are selected by declared AccountType, balances are sampled onto a daily x-axis (sampleStepFunction) and re-valued at each day's rate. The days/series alignment is a checked Validity invariant. - Centjes.Chart.Render: the only place precise money becomes Double. Renders a stacked area chart when all values are non-negative and overlaid lines otherwise, via Chart + Chart-diagrams (no cairo C dependency). - Centjes.Chart.OptParse / Command.All: the 'all' command, with currency, account filter, output path and title as settings. - centjes-chart-test: genValidSpec and an alignment-rejection test for the invariant, property tests for the sampling and stacking math, a golden for the report, and error goldens for every ChartError constructor.