T2 chain · data → picture:nika:readloads the CSV,nika:converttypes it into rows,nika:jqaggregates by region,nika:chartrenders the bar chart as a real image, andnika:writeassembles the markdown report around it. Five tasks, zero model calls — the whole pipeline is deterministic data plumbing.
The job
The Monday deck needs one chart and one table, and the ritual is always the same: open the sheet, pivot, screenshot, paste. This workflow replaces the ritual with a file — drop the CSV, run once, and the report (chart image + aggregate table) is on disk, identical every time the data is identical.The shape
The file
csv-chart-report.nika.yaml
What this file teaches
nika:convertis the typed seam — CSV text becomes structured rows once, at one task, and everything downstream works on data, not strings. The jq aggregation reads fields, never re-parses.- A chart is an artifact, not a side effect —
nika:chartreturns a rendered image the report links by path. Re-running with the same CSV produces the same bytes: the chart can live in git, and a diff on it means the data moved. - No model, no bill, no network —
nika checkshows an empty cost interval, and the run works on a plane. Determinism is the feature: this is the workflow you trust in a cron.
Run it
const.sales_csv at it — the aggregation key and the chart spec are
the only two lines to adapt.