v0.9.0 — The paper-trail release
The money you move now explains itself.
Highlights
Statutory credit-note documents (CDN). Credit notes record their tax breakdown at creation — taxable value, IGST/CGST/SGST, HSN — and the downloadable document renders a GST-grade CDN an Indian buyer can use to reverse input tax. Invoice-linked credits slice the invoice's tax with the same math the GSTR-1 CDNR report uses, so the document and the return always agree; downgrade credits carry the proration tax actually reversed. The dashboard's detail view mirrors the figures, and all three SDKs expose them. (#428, #431, migration 000160)
Customers hear about their money. A refund or account credit was the one money event that never notified — refunded customers learned from their bank statement. Credit notes now email at issuance: "your refund is on its way" or "credit added, applied to upcoming invoices". Maker-checker notes email at approval, when they actually take effect. (#436)
The portal shows every figure in its own currency. Total Paid / Outstanding summed minor units across currencies and formatted the result as USD — an INR customer saw "$118,000.00", and zero-decimal currencies were mangled by the wrong exponent. Per-currency now, with a regression lock. (#432, #442)
A schema-wide index audit. The invoices table — the busiest in the product — had no index on tenant, customer, subscription, gateway payment, or the dunning due-date shape; the dashboard list, every settlement webhook, and the dunning sweep could only sequential-scan. Rev-rec's per-reconciliation sum, the per-payment schedule check, and the webhook delivery worker's continuous claim loop likewise gained the partial indexes they lacked. Every shape EXPLAIN-verified; every other hot table verified already-indexed. (#438–#440, migrations 000161–000163)
Also: the last three unclamped list limits closed (one accepted negative values verbatim), invoice reads now surface tax_type (the column was missing from the scan), reconciliation findings show human labels, structured logging throughout the rev-rec path, and the customer portal gained its first tests.
Migrations
000160–000163 — all additive with fast defaults, run automatically on boot, already live.
Container image
docker pull ghcr.io/recurso-dev/recurso:v0.9.0
The Docker image is the release artifact; no binaries are attached.