Releases: sohag-pro/go-ledger
Release list
v1.0.0
A production-grade double-entry payment ledger in Go, built in public over 14 weeks and deployed live at go.sohag.pro.
The core invariant: every transaction is two or more postings that sum to zero per currency, enforced in the domain type and a Postgres CHECK trigger. Balances are derived from an append-only posting history, never stored.
What's in v1.0.0
- Atomic posting under
SERIALIZABLE+ retry, stress-tested under heavy contention - Mandatory idempotency keys with a bounded replay window
- A tamper-evident, hash-chained audit log with signed off-box anchors
- REST + gRPC over one shared domain core (RFC 7807 errors, generated OpenAPI)
- Multi-currency + FX: env rates or a free live feed with a staleness guard, USD-hub triangulation, per-currency clearing accounts
- Account hierarchy + rollup reporting, trial balance (the zero-proof)
- Approval workflows with real per-key four-eyes (maker-checker)
- In-DB outbox event stream + signed, SSRF-guarded, at-least-once webhooks (no Kafka)
- Per-tenant Postgres RLS, PII crypto-shredding
- OpenTelemetry traces +
slog+ Prometheus - VPS deploy on push: migrate-before-swap, health-check, rollback
The record
27 ADRs, one per significant decision. The Ledger Book (682 pages, attached as PDF + EPUB) collects every weekly essay, the senior-engineer interview Q&A, and the ADRs.
The final week's retrospective is candid about what shipped wrong (a four-eyes control that did nothing until an external audit caught it, among others) and what held up. The self-audit is the point: the history is honest, and everything else is a cache.
v0.1.0
Changelog
- 7478259: Merge dev-console: account list endpoint + developer console (Sohag Hasan sohag.web.dev@gmail.com)
- f67b26d: Merge landing-page-mobile-audit: mobile UX + feature accuracy (Sohag Hasan sohag.web.dev@gmail.com)
- 88ac7dc: Merge week-2-domain-model: double-entry domain model (Sohag Hasan sohag.web.dev@gmail.com)
- 3db9656: Merge week-3-postgres-schema: Postgres schema + repository layer (Sohag Hasan sohag.web.dev@gmail.com)
- 7ae2926: Merge week-4-posting-concurrency: atomic posting, concurrency, audit hardening (Sohag Hasan sohag.web.dev@gmail.com)
- 5294f8f: Merge week-5-rest-api: REST API on chi + huma (Sohag Hasan sohag.web.dev@gmail.com)
- 11a6bdd: Refactor code structure for improved readability and maintainability (Sohag Hasan sohag.web.dev@gmail.com)
- f45d706: build(docker): harden Dockerfile to real distroless <20MB with image-size gate (Sohag Hasan sohag.web.dev@gmail.com)
- 3602c1e: build: add OpenTelemetry SDK, exporters, and instrumentation deps (Sohag Hasan sohag.web.dev@gmail.com)
- b6095f2: chore(api): regenerate OpenAPI for idempotency + audit (Sohag Hasan sohag.web.dev@gmail.com)
- daf0023: chore(deps): add go-chi/chi router (Sohag Hasan sohag.web.dev@gmail.com)
- 5850bcb: chore(deps): add pgx, sqlc, goose, testcontainers, uuid (Sohag Hasan sohag.web.dev@gmail.com)
- eed2933: chore(deps): add prometheus client_golang (Sohag Hasan sohag.web.dev@gmail.com)
- d0dbaaf: chore(observability): Jaeger compose, env template, make jaeger (Sohag Hasan sohag.web.dev@gmail.com)
- 3d3339b: chore(web): mark week 4 shipped on the landing page (Sohag Hasan sohag.web.dev@gmail.com)
- ac423fa: chore(web): mark week 5 shipped on the landing page (Sohag Hasan sohag.web.dev@gmail.com)
- 8c43806: chore: rebuild ledger book (PDF + EPUB) (Sohag Hasan sohag.web.dev@gmail.com)
- 8029c41: chore: rebuild ledger book with ADR-008 appendix (Sohag Hasan sohag.web.dev@gmail.com)
- 68fa11d: chore: rebuild ledger book with Week 7 gRPC content (Sohag Hasan sohag.web.dev@gmail.com)
- 31ef2b8: chore: rebuild ledger book with Week 8 observability content (Sohag Hasan sohag.web.dev@gmail.com)
- 3cced50: chore: update .gitignore and replace binary files for the ledger book (Sohag Hasan sohag.web.dev@gmail.com)
- 692497d: chore: update .gitignore to include all docs and CLAUDE directory (Sohag Hasan sohag.web.dev@gmail.com)
- eada632: chore: update binary files for the ledger book (EPUB and PDF) (Sohag Hasan sohag.web.dev@gmail.com)
- bf60f03: ci: add test, lint, and deploy workflow (Sohag Hasan sohag.web.dev@gmail.com)
- c7ad234: ci: bump actions to Node 24 versions (Sohag Hasan sohag.web.dev@gmail.com)
- ad477e9: ci: cap test-job parallelism and fail the smoke-load health wait when unhealthy (Sohag Hasan sohag.web.dev@gmail.com)
- 63bba86: ci: cross-platform release binaries via GoReleaser on tag (ADR-019) (Sohag Hasan sohag.web.dev@gmail.com)
- 1fc2122: ci: make binary backup atomic in deploy swap (Sohag Hasan sohag.web.dev@gmail.com)
- 50a9e92: ci: publish self-hosted coverage badge to badges branch; add badges to README (Sohag Hasan sohag.web.dev@gmail.com)
- 5063228: ci: split into parallel lint, test (with coverage gate), and smoke-load jobs; cancelable PR runs (Sohag Hasan sohag.web.dev@gmail.com)
- ab43d5f: content: extend the roadmap to 14 weeks and update all references (Sohag Hasan sohag.web.dev@gmail.com)
- dd3b835: docs(adr): ADR-013 VPS infrastructure-as-code with Ansible, Docker dev-only (Sohag Hasan sohag.web.dev@gmail.com)
- f40f2a8: docs(adr): ADR-014 multi-currency accounts and FX conversion (Sohag Hasan sohag.web.dev@gmail.com)
- a2baca6: docs(adr): ADR-015 audit remediation, white-label hardening, durability, scale (Sohag Hasan sohag.web.dev@gmail.com)
- 81eb261: docs(adr): ADR-016 durability and DR (pgBackRest, WAL, PITR, offsite encrypted, restore-verify); renumber remediation sub-ADR refs (Sohag Hasan sohag.web.dev@gmail.com)
- 97bb3c1: docs(adr): ADR-017 multi-instance audit chain (transactional outbox + single chainer, xmin ordering, advisory-lock leader) (Sohag Hasan sohag.web.dev@gmail.com)
- 2d5aabc: docs(adr): ADR-018 PII crypto-shredding (versioned envelope keys, erase-the-key-not-the-row) (Sohag Hasan sohag.web.dev@gmail.com)
- 6b41fcb: docs(adr): ADR-019 operator console, public-demo admin, one-command onboarding, release binaries (Sohag Hasan sohag.web.dev@gmail.com)
- a7d875e: docs(adr): add ADR-003 Postgres schema and repository layer (Sohag Hasan sohag.web.dev@gmail.com)
- 4cf2653: docs(adr): add ADR-004 concurrency control (Sohag Hasan sohag.web.dev@gmail.com)
- da72ed9: docs(adr): add ADR-006 and a Bruno API collection (Sohag Hasan sohag.web.dev@gmail.com)
- 684b61a: docs(adr): add ADR-008 for the account-history covering index (Sohag Hasan sohag.web.dev@gmail.com)
- 4b42404: docs(adr): add ADR-009 for the gRPC layer (Sohag Hasan sohag.web.dev@gmail.com)
- 63a7212: docs(adr): add ADR-010 for observability and Week 8 plan (Sohag Hasan sohag.web.dev@gmail.com)
- f550502: docs(adr): add ADR-011 testing strategy (unit, property, integration, chaos, load) (Sohag Hasan sohag.web.dev@gmail.com)
- bde9258: docs(adr): add ADR-012 API authentication, mandatory idempotency, input hardening, audit hash chain (Sohag Hasan sohag.web.dev@gmail.com)
- 4c49c10: docs(adr): note inverted-pair provenance (mid_rate_e8 vs fx_rate_id) (Sohag Hasan sohag.web.dev@gmail.com)
- 2d5220a: docs(adr): note observability and metrics exposure in ADR-004 (Sohag Hasan sohag.web.dev@gmail.com)
- b4a7550: docs(adr): reconcile RateProvider signature with the implemented (FXQuote, int32, error) (Sohag Hasan sohag.web.dev@gmail.com)
- cec1aea: docs(adr): record chain_seq linearization key and outbox_id fork backstop in ADR-017 (Sohag Hasan sohag.web.dev@gmail.com)
- dc41b2f: docs(api): document authentication and mandatory idempotency in the spec (Sohag Hasan sohag.web.dev@gmail.com)
- d7dfe4e: docs(api): tag and describe admin/reporting endpoints for the playground (ADR-019) (Sohag Hasan sohag.web.dev@gmail.com)
- c99ed7f: docs(book): add a 'Who This Is For' framing section up front (Sohag Hasan sohag.web.dev@gmail.com)
- 261335d: docs(book): add a back-of-book index ("Where to Find It") (Sohag Hasan sohag.web.dev@gmail.com)
- 148d924: docs(book): add edition page, glossary, further reading, and a QR support page (Sohag Hasan sohag.web.dev@gmail.com)
- f576ef5: docs(book): add special-03 audit-remediation essay + interview (348 pages) (Sohag Hasan sohag.web.dev@gmail.com)
- 2d79576: docs(book): auto-generate blog diagrams from book:diagram comments; render special-03 figures (Sohag Hasan sohag.web.dev@gmail.com)
- adc0009: docs(book): derive colophon and support pages from the book manifest (Sohag Hasan sohag.web.dev@gmail.com)
- 71fd8b6: docs(book): expand glossary (+20 terms), add About the Author page with photo, expand RED/DoD acronyms (Sohag Hasan sohag.web.dev@gmail.com)
- 4315758: docs(book): final verified rebuild (all 26 diagrams, clean regenerate) (Sohag Hasan sohag.web.dev@gmail.com)
- 35629e3: docs(book): give the table of contents a title, 'What's Inside' (Sohag Hasan sohag.web.dev@gmail.com)
- 4048b12: docs(book): hero diagram for per-tenant in-process serialization (Sohag Hasan sohag.web.dev@gmail.com)
- 2a10d22: docs(book): hero diagram for the deploy pipeline (Sohag Hasan sohag.web.dev@gmail.com)
- 9af2e57: docs(book): hero diagram for the multi-stage Docker build (Sohag Hasan sohag.web.dev@gmail.com)
- 1b4d103: docs(book): hero diagram for the tamper-evident audit hash chain (Sohag Hasan sohag.web.dev@gmail.com)
- 7bd38a6: docs(book): hero diagram pipeline (TikZ vector + PNG fallback) and the double-entry diagram (Sohag Hasan...