The Amber Ledger
How many hours did this project actually take, sealed so the number can't be quietly edited.
The ingredients 5 gifts
The idea
The one clean, honest, left-to-right pipe in the set — and it actually type-checks: a source at the head feeding two folds. Also the most immediately useful if you freelance. The effort number is derived from byte-truth and tamper-evident: change any input and the seal breaks and names what moved.
The parts + how they wire
gitlog (source — git history to one JSON object per commit) → worklog (fold — group by day or author, counts + subjects) → timesheet (fold — estimate worked-hours as the day's span minus every gap longer than a break threshold) → amber + sha256 seal the finished report into a fixity capsule.
The one piece you build
Almost nothing — a few lines of shell to chain them and pick your break-gap. This is the buildable-in-an-afternoon one.
The technical breakdown
The three stages share a port-verb algebra, so the chain type-checks: gitlog is a source (emits records, consumes none), worklog and timesheet are folds (consume records, emit a reduced view) — a source at the head feeding folds is a well-formed pipeline, which is exactly what typecheck confirms before you run it. It's re-pointable and re-lensable from the same spine: the fold-chain re-points at any repo (swap the gitlog target), and swapping the lens in worklog (group by day vs. author vs. file-churn) gives a different honest report from the same parts. amber + sha256 make the floor auditable: the number you handed a client can be re-checked against the repo, and any edit to the sealed report breaks the capsule's fixity and names the changed member.
The honest edge
timesheet is explicit that commit timestamps bound work, they don't measure it — it's floor-biased and under-counts on purpose (an isolated commit reads as 0; invisible thinking reads as 0). Do not bill a client to the minute with it. It's a defensible floor for 'was this 40 hours or 400,' not a timeclock. The amber seal makes the floor auditable, not true — it proves nobody edited the estimate, not that the estimate is the real hours.
These are ingredients, not instructions you have to follow. If you cook something from them — or something stranger — we want to see it.