Releases
v0.1.0
Compare
Sorry, something went wrong.
No results found
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 sohag.web.dev@gmail.com )
e11c62c : docs(book): pair each special-edition Q&A right after its blog (Sohag Hasan sohag.web.dev@gmail.com )
577b4a2 : docs(book): premium polish pass on The Ledger Book (Phase 7) (Sohag Hasan sohag.web.dev@gmail.com )
f75e527 : docs(book): print-readiness fixes from full audit (Sohag Hasan sohag.web.dev@gmail.com )
119fbeb : docs(book): rebuild The Ledger Book for Week 10 (Docker + VPS IaC) and the CI/CD special edition (Sohag Hasan sohag.web.dev@gmail.com )
9d7a1c8 : docs(book): rebuild The Ledger Book with Week 11 (multi-currency + FX) blog, Q&A, ADR-014, and the FX clearing diagram (Sohag Hasan sohag.web.dev@gmail.com )
9503e9b : docs(book): rebuild The Ledger Book with the security-hardening special edition and ADR-012 (Sohag Hasan sohag.web.dev@gmail.com )
2b3dd35 : docs(book): redesign the edition/copyright page as a proper colophon (Sohag Hasan sohag.web.dev@gmail.com )
705d92c : docs(book): refresh cover artifact from rebuild (Sohag Hasan sohag.web.dev@gmail.com )
612896c : docs(book): render special-03 diagrams as vector TikZ (FX bug, chain fork, crypto-shred) (Sohag Hasan sohag.web.dev@gmail.com )
9c8d475 : docs(book): syntax-highlight code listings (Go, SQL, bash, YAML, JSON) in both formats (Sohag Hasan sohag.web.dev@gmail.com )
0dcd175 : docs(book): update project timeline to reflect 14-week development period (Sohag Hasan sohag.web.dev@gmail.com )
251344b : docs(book): vector diagram for modeling double-entry accounting in go (transaction-validate-flow) (Sohag Hasan sohag.web.dev@gmail.com )
f930f4a : docs(book): vector diagram for the FX clearing-account flow (week 11) (Sohag Hasan sohag.web.dev@gmail.com )
bab3bc4 : docs(book): vector diagrams for PR-vs-push checks and the repo layout (Sohag Hasan sohag.web.dev@gmail.com )
7d5f259 : docs(book): vector diagrams for Postgres schema post (derived-balance-postings, tenant-isolation-composite-fk) (Sohag Hasan sohag.web.dev@gmail.com )
61be255 : docs(book): vector diagrams for REST API post (resources-verbs, running-balance, keyset-pagination) (Sohag Hasan sohag.web.dev@gmail.com )
1391a64 : docs(book): vector diagrams for atomic posting post (interleaving, retry loop, atomic steps, missing-index conflict) (Sohag Hasan sohag.web.dev@gmail.com )
1f003ca : docs(book): vector diagrams for gRPC and tracing posts (rest-grpc-shared-domain, trace-waterfall) (Sohag Hasan sohag.web.dev@gmail.com )
191ab18 : docs(book): vector diagrams for idempotency/audit post (race-flow, atomic-write, audit-routes) (Sohag Hasan sohag.web.dev@gmail.com )
6458cbe : docs(book): vector diagrams for nginx safe-reload and auth middleware flows (Sohag Hasan sohag.web.dev@gmail.com )
3afd33d : docs(book): vector diagrams for testing post (ambiguous-commit sequence, test pyramid) (Sohag Hasan sohag.web.dev@gmail.com )
1908291 : docs(examples): gRPC Go client example and grpcurl smoke (Sohag Hasan sohag.web.dev@gmail.com )
f489c2c : docs(fx): clarify appliedE8 non-overflow and the Down-migration trigger no-op (final review minors) (Sohag Hasan sohag.web.dev@gmail.com )
df74151 : docs: add ADR-002 money representation (int64 minor units) (Sohag Hasan sohag.web.dev@gmail.com )
90aa03d : docs: add ADR-007 (idempotency + audit log), rebuild ledger book (Sohag Hasan sohag.web.dev@gmail.com )
955424e : docs: enhance README with detailed project description and roadmap (Sohag Hasan sohag.web.dev@gmail.com )
a41bf6d : docs: full getting-started README and CONTRIBUTING (ADR-019) (Sohag Hasan sohag.web.dev@gmail.com )
f73b98e : docs: hedge the release-binary section until releases are published (Task 6 review) (Sohag Hasan sohag.web.dev@gmail.com )
c163f53 : feat(admin): add tenant PII crypto-shredding operation (Task 6.2) (Sohag Hasan sohag.web.dev@gmail.com )
27ce704 : feat(admin): add tenant/api-key admin surface (REST + ledgerctl CLI) (Sohag Hasan sohag.web.dev@gmail.com )
c7e3870 : feat(admin,api,cli): webhook subscription CRUD surface (Task 4.1) (Sohag Hasan sohag.web.dev@gmail.com )
49b683f : feat(api): Idempotency-Key header, replay, and audit endpoints (Sohag Hasan sohag.web.dev@gmail.com )
595e04f : feat(api): POST /v1/transactions/convert with FX rate detail and 422 mapping (Sohag Hasan sohag.web.dev@gmail.com )
4302f70 : feat(api): add GET /v1/accounts list endpoint (Sohag Hasan sohag.web.dev@gmail.com )
54a0766 : feat(api): add OpenAPI-backed Scalar playground at /playground (Sohag Hasan sohag.web.dev@gmail.com )
b5f2d59 : feat(api): audit chain verification endpoint (Sohag Hasan sohag.web.dev@gmail.com )
c848469 : feat(api): bound postings count and request body, complete server timeouts (Sohag Hasan sohag.web.dev@gmail.com )
386b816 : feat(api): filter transaction list/export/gRPC by effective_at value date (Sohag Hasan sohag.web.dev@gmail.com )
722d5b2 : feat(api): paginate account audit endpoint with keyset cursor (Sohag Hasan sohag.web.dev@gmail.com )
44c6231 : feat(api): require API key on /v1 and derive tenant from the key (Sohag Hasan sohag.web.dev@gmail.com )
e6a5cc4 : feat(api): surface audit chain lag (pending) in verify (Sohag Hasan sohag.web.dev@gmail.com )
321df29 : feat(api): v1 REST endpoints on chi and huma (Sohag Hasan sohag.web.dev@gmail.com )
dcc71ef : feat(api,grpc): require an idempotency key on transaction posts (Sohag Hasan sohag.web.dev@gmail.com )
c9612ac : feat(audit): add the single background chainer with leader election (Sohag Hasan sohag.web.dev@gmail.com )
ee97165 : feat(audit): include tenant id in the row hash; make genesis derivation explicit (Sohag Hasan sohag.web.dev@gmail.com )
8dc2061 : feat(audit): per-tenant tamper-evident hash chain (Sohag Hasan sohag.web.dev@gmail.com )
f2eb252 : feat(audit): stream verify in bounded pages and add off-box chain anchoring (Sohag Hasan sohag.web.dev@gmail.com )
d876e6f : feat(auth): api_keys table, key hashing, and repository lookup (Sohag Hasan sohag.web.dev@gmail.com )
6d50238 : feat(auth): bearer-key resolver with short-TTL cache (Sohag Hasan sohag.web.dev@gmail.com )
e4b0e6a : feat(auth): gate REST and gRPC on tenant status (ADR-015, Task 2.1) (Sohag Hasan sohag.web.dev@gmail.com )
db9546e : feat(auth): give api keys a lifecycle: scopes, expiry, last-used (Task 2.2) (Sohag Hasan sohag.web.dev@gmail.com )
d43f735 : feat(auth): per-key token-bucket rate limiting (Sohag Hasan sohag.web.dev@gmail.com )
adbb9b9 : feat(auth,nginx): edge and negative-lookup throttling (Task 5.2, audit A2.5/A6.4) (Sohag Hasan sohag.web.dev@gmail.com )
0c02b0f : feat(console): operator console with tenant, key, webhook, policy, reporting panels (ADR-019) (Sohag Hasan sohag.web.dev@gmail.com )
84cf8f4 : feat(console): redesign operator console (sidebar + Overview home, spacious) (Sohag Hasan sohag.web.dev@gmail.com )
35e215b : feat(console): serve GET /console/config mode signal (ADR-019) (Sohag Hasan sohag.web.dev@gmail.com )
5818d27 : feat(console): use the home wordmark logo and add an Overview intro (Sohag Hasan sohag.web.dev@gmail.com )
c8ae8f9 : feat(crypto): add envelope encryption for PII crypto-shredding (Task 6.2) (Sohag Hasan sohag.web.dev@gmail.com )
4c2f13b : feat(crypto): version per-tenant DEKs so a shred does not brick the tenant (Sohag Hasan sohag.web.dev@gmail.com )
1e1625f : feat(db): add initial Postgres schema migration (Sohag Hasan sohag.web.dev@gmail.com )
89d6035 : feat(db): add sqlc queries and generated code (Sohag Hasan sohag.web.dev@gmail.com )
9db0a93 : feat(db): add tuned NewPool with bounded conns and timeouts (Sohag Hasan sohag.web.dev@gmail.com )
b150905 : feat(db): enforce balance invariant with a deferred trigger (Sohag Hasan sohag.web.dev@gmail.com )
16aac83 : feat(db): enforce per-account currency integrity (ADR-005) (Sohag Hasan sohag.web.dev@gmail.com )
70314c0 : feat(db): implement Postgres repository adapter (Sohag Hasan sohag.web.dev@gmail.com )
afc28da : feat(db): per-posting description and account statement (Sohag Hasan sohag.web.dev@gmail.com )
fd6a6b8 : feat(db): post transactions under SERIALIZABLE with jittered retry (Sohag Hasan sohag.web.dev@gmail.com )
35f5690 : feat(deploy): migrate-before-swap, health-check rollback, off-box logs (Task 5.6b) (Sohag Hasan sohag.web.dev@gmail.com )
1621373 : feat(dev): full local compose stack (app + postgres + jaeger + prometheus) (Sohag Hasan sohag.web.dev@gmail.com )
6593f40 : feat(domain): add Account type with validation (Sohag Hasan sohag.web.dev@gmail.com )
983f2d7 : feat(domain): add AccountType enum (Sohag Hasan sohag.web.dev@gmail.com )
7533dde : feat(domain): add Currency with shape validation (Sohag Hasan sohag.web.dev@gmail.com )
a9de473 : feat(domain): add Money value type (Sohag Hasan sohag.web.dev@gmail.com )
c79c8a0 : feat(domain): add Money.String formatting (Sohag Hasan sohag.web.dev@gmail.com )
551089c : feat(domain): add Repository port and supporting helpers (Sohag Hasan sohag.web.dev@gmail.com )
f9e5e26 : feat(domain): add Transaction.Fingerprint for idempotency (Sohag Hasan sohag.web.dev@gmail.com )
b9bf5fa : feat(domain): add Transaction.Validate enforcing balance invariant (Sohag Hasan sohag.web.dev@gmail.com )
01b2cbc : feat(domain): add overflow-guarded Money arithmetic (Sohag Hasan sohag.web.dev@gmail.com )
b269687 : feat(domain): add sentinel errors (Sohag Hasan sohag.web.dev@gmail.com )
7ca07f2 : feat(domain): add typed write errors and document posting allowances (Sohag Hasan sohag.web.dev@gmail.com )
5ff1f1a : feat(domain): idempotency + audit types, errors, and ports (Sohag Hasan sohag.web.dev@gmail.com )
e048bc5 : feat(domain): integer-only FX conversion with banker's rounding and spread (Sohag Hasan sohag.web.dev@gmail.com )
65471a2 : feat(domain): per-currency zero-sum, system account flag, per-posting fingerprint (Sohag Hasan sohag.web.dev@gmail.com )
8d2396e : feat(fx): per-tenant FX rates and spread (audit A3.3) (Sohag Hasan sohag.web.dev@gmail.com )
1b2c983 : feat(fx): rate provider (db, inverse-aware) and env seeding, float-free parsing (Sohag Hasan sohag.web.dev@gmail.com )
7aa5fa5 : feat(grpc): Convert RPC with REST-parity FX semantics and errors (Sohag Hasan sohag.web.dev@gmail.com )
d6616b1 : feat(grpc): authenticate via bearer metadata and derive tenant (Sohag Hasan sohag.web.dev@gmail.com )
1193861 : feat(grpc): bring gRPC to parity with REST rate limiting and input caps (Task 5.1, audit A2.2) (Sohag Hasan sohag.web.dev@gmail.com )
482fe3c : feat(grpcserver): LedgerService handlers over the shared services (Sohag Hasan sohag.web.dev@gmail.com )
2ddeb27 : feat(grpcserver): OTel stats handler for spans and RPC metrics (Sohag Hasan sohag.web.dev@gmail.com )
992da48 : feat(grpcserver): domain error to gRPC status mapping (Sohag Hasan sohag.web.dev@gmail.com )
4dae851 : feat(grpcserver): recovery, logging, and tenant interceptors (Sohag Hasan sohag.web.dev@gmail.com )
3a71970 : feat(idempotency): give idempotency keys a bounded TTL and background sweep (Sohag Hasan sohag.web.dev@gmail.com )
9ec1248 : feat(idempotency): tag stored fingerprints with a scheme id (Task 2.3, audit A1.6) (Sohag Hasan sohag.web.dev@gmail.com )
00b8e97 : feat(infra): app (users, dirs, sudoers) and hardened systemd unit roles (Sohag Hasan sohag.web.dev@gmail.com )
27e3fc5 : feat(infra): base (ufw, fail2ban) and postgres (16, tuning, backups) roles (Sohag Hasan sohag.web.dev@gmail.com )
f968005 : feat(infra): nginx vhost (gzip, portfolio-200 guard) and certbot tls roles (Sohag Hasan sohag.web.dev@gmail.com )
9cbd03d : feat(infra): replace same-disk pg_dump durability with pgBackRest (ADR-016) (Sohag Hasan sohag.web.dev@gmail.com )
120c328 : feat(infra): scaffold ansible playbook with gitignored inventory and vault (Sohag Hasan sohag.web.dev@gmail.com )
5e3717d : feat(ledger): add AccountService and TransactionService.Get (Sohag Hasan sohag.web.dev@gmail.com )
ad6fdd9 : feat(ledger): add TransactionService.Post and expose /metrics (Sohag Hasan sohag.web.dev@gmail.com )
30c4f04 : feat(ledger): add a reversal primitive for posted transactions (Sohag Hasan sohag.web.dev@gmail.com )
3932169 : feat(ledger): add external reference and value dating to transactions (Sohag Hasan sohag.web.dev@gmail.com )
bf9abc2 : feat(ledger): add pre-post screening hook veto and account party references (Task 6.1, audit A9.1) (Sohag Hasan sohag.web.dev@gmail.com )
4cdcd07 : feat(ledger): cross-currency convert through per-tenant fx clearing accounts (Sohag Hasan sohag.web.dev@gmail.com )
b3571a3 : feat(ledger): encrypt posting descriptions at rest, decrypt on read (Task 6.2) (Sohag Hasan sohag.web.dev@gmail.com )
4af9b46 : feat(ledger): idempotent Post with replay + audit write (Sohag Hasan sohag.web.dev@gmail.com )
ab4273c : feat(ledger): screen reversals through the pre-post hook (Sohag Hasan sohag.web.dev@gmail.com )
a3a85c8 : feat(ledger): span around PostTransaction with safe attributes (Sohag Hasan sohag.web.dev@gmail.com )
13f88d8 : feat(ledger): write audit events to the outbox; remove the per-tenant mutex (Sohag Hasan sohag.web.dev@gmail.com )
4b9628b : feat(ledger,postgres,api,grpc): account status and minimum balance, enforced in the posting transaction (Task 5.5, audit A1.5) (Sohag Hasan sohag.web.dev@gmail.com )
8511020 : feat(metrics): OTel meter provider exporting RED via the shared registry (Sohag Hasan sohag.web.dev@gmail.com )
dc59b5e : feat(metrics): add Prometheus collectors and scrape handler (Sohag Hasan sohag.web.dev@gmail.com )
e79f93f : feat(metrics): register Go runtime and process collectors (Sohag Hasan sohag.web.dev@gmail.com )
cf5f246 : feat(observability): OTel setup and trace-correlating slog handler (Sohag Hasan sohag.web.dev@gmail.com )
c9cd7ef : feat(observability): build-revision health field, async-subsystem gauges, invariant canary, alert rules (Sohag Hasan sohag.web.dev@gmail.com )
8b62798 : feat(observability): enrich access log with resolved key id and tenant id (Sohag Hasan sohag.web.dev@gmail.com )
15a531c : feat(policy): per-tenant posting guardrails, enforced per currency (Task 2.4b, audit A3.4) (Sohag Hasan sohag.web.dev@gmail.com )
bf02cd4 : feat(postgres): Postgres row-level security as defense in depth (Task 5.4b, audit A3.5) (Sohag Hasan sohag.web.dev@gmail.com )
6328605 : feat(postgres): add audit_outbox transactional outbox + id-ordered audit reads (Sohag Hasan sohag.web.dev@gmail.com )
4e3d188 : feat(postgres): add covering index for account history reads (Sohag Hasan sohag.web.dev@gmail.com )
c6f523a : feat(postgres): add crypto_keys table and tenant key-shredding (Task 6.2) (Sohag Hasan sohag.web.dev@gmail.com )
14578ff : feat(postgres): idempotency + append-only audit log schema (Sohag Hasan sohag.web.dev@gmail.com )
0417001 : feat(postgres): idempotency + audit adapter methods (Sohag Hasan sohag.web.dev@gmail.com )
fe65a74 : feat(postgres): migration for per-currency postings, fx_rates, clearing, triggers (Sohag Hasan sohag.web.dev@gmail.com )
663def0 : feat(postgres): sqlc queries for fx rates, clearing accounts, posting currency (Sohag Hasan sohag.web.dev@gmail.com )
120f807 : feat(postgres): trace SQL statements with otelpgx (query args off) (Sohag Hasan sohag.web.dev@gmail.com )
3023ee5 : feat(postgres): webhook subscription/delivery schema and repository CRUD (Task 4.1) (Sohag Hasan sohag.web.dev@gmail.com )
8690432 : feat(postgres,domain): add tenants table with status gating (ADR-015, Task 2.1) (Sohag Hasan sohag.web.dev@gmail.com )
14baefa : feat(proto): LedgerService protobuf + buf codegen (Sohag Hasan sohag.web.dev@gmail.com )
32a2914 : feat(reports,disputes): trial balance report, dispute model on the reversal primitive, period statement export (Task 6.3) (Sohag Hasan sohag.web.dev@gmail.com )
1b37db6 : feat(run): docker compose demo and local profiles with migrate init (ADR-019) (Sohag Hasan sohag.web.dev@gmail.com )
4cdbcf1 : feat(seed): clear idempotency + audit on reset via gated purge (Sohag Hasan sohag.web.dev@gmail.com )
29f50b8 : feat(seed): periodic demo-data seeder with realistic backdated history (Sohag Hasan sohag.web.dev@gmail.com )
9419333 : feat(server): DEFAULT_CURRENCY, FX_RATES seeding, rate provider wiring (Sohag Hasan sohag.web.dev@gmail.com )
f40bc2b : feat(server): first-boot admin provisioning (demo admin scope, prod printed key) (ADR-019) (Sohag Hasan sohag.web.dev@gmail.com )
b5dcd75 : feat(server): interactive first-run Postgres setup, TTY-gated (ADR-019) (Sohag Hasan sohag.web.dev@gmail.com )
67f3b29 : feat(server): provision demo and load keys and wire per-key rate limiting (Sohag Hasan sohag.web.dev@gmail.com )
15ba725 : feat(server): serve gRPC on GRPC_ADDR with graceful shutdown (Sohag Hasan sohag.web.dev@gmail.com )
dbce635 : feat(server): serve metrics on a separate loopback port (Sohag Hasan sohag.web.dev@gmail.com )
1251b11 : feat(server): start the webhook worker alongside the audit chainer (Task 4.1) (Sohag Hasan sohag.web.dev@gmail.com )
775e2ec : feat(server): wire LEDGER_MASTER_KEY and inject the PII cipher (Task 6.2) (Sohag Hasan sohag.web.dev@gmail.com )
f0bf6ce : feat(server): wire OTel setup, trace-aware logs, and HTTP tracing (Sohag Hasan sohag.web.dev@gmail.com )
745e941 : feat(server): wire chi, Postgres pool, and startup migrations (Sohag Hasan sohag.web.dev@gmail.com )
972b8c0 : feat(transactions): filtered, keyset-paginated list and CSV/JSON export (Task 4.4, audit A7.2) (Sohag Hasan sohag.web.dev@gmail.com )
84603ed : feat(verify): restore-and-verify tool plus weekly CI job (ADR-016, A4.1/A8.1) (Sohag Hasan sohag.web.dev@gmail.com )
e020dc0 : feat(web): add a developer console at /console (Sohag Hasan sohag.web.dev@gmail.com )
d1ad9c5 : feat(web): add favicon + Open Graph share image across landing, console, playground (Sohag Hasan sohag.web.dev@gmail.com )
43fcb16 : feat(web): add live API playground CTA on the hero code card (Sohag Hasan sohag.web.dev@gmail.com )
7157064 : feat(web): clearer statement view in console + playground intro links (Sohag Hasan sohag.web.dev@gmail.com )
8b7c8d9 : feat(web): console authenticates with the public demo key and sends idempotency keys (Sohag Hasan sohag.web.dev@gmail.com )
1f248bc : feat(web): hide horizontal scrollbar in code blocks for improved aesthetics (Sohag Hasan sohag.web.dev@gmail.com )
a435037 : feat(web): improve landing page mobile UX and fix feature accuracy (Sohag Hasan sohag.web.dev@gmail.com )
aebd853 : feat(web): mark Week 8 observability shipped on the landing page (Sohag Hasan sohag.web.dev@gmail.com )
7e0d450 : feat(web): mark weeks 6 to 7 shipped on the landing page (Sohag Hasan sohag.web.dev@gmail.com )
3aca81c : feat(web): publish The Ledger Book with downloads (Sohag Hasan sohag.web.dev@gmail.com )
f59eaaa : feat(web): restore the Launchpadly badge in the footer (Sohag Hasan sohag.web.dev@gmail.com )
cb8fd2b : feat(web): serve landing page at / (Sohag Hasan sohag.web.dev@gmail.com )
f9c8238 : feat(web): ship the redesigned landing page (Sohag Hasan sohag.web.dev@gmail.com )
2994469 : feat(web): statement in a modal, derived currency, collapsible create card (Sohag Hasan sohag.web.dev@gmail.com )
8e60bf2 : feat(web): sync landing page to week 9 (9/12 weeks, 11 ADRs, testing current) (Sohag Hasan sohag.web.dev@gmail.com )
95034ab : feat(webhook): fan-out and delivery worker with leader election (Task 4.1) (Sohag Hasan sohag.web.dev@gmail.com )
7ee0263 : feat: update The Ledger Book with new EPUB and PDF formats (Sohag Hasan sohag.web.dev@gmail.com )
bce150b : fix(ansible): gate archive_mode behind provisioned-repo check to avoid WAL disk-fill (Sohag Hasan sohag.web.dev@gmail.com )
fd9db8f : fix(api): add Retry-After to the retry-exhausted 503 (audit A7.4) (Sohag Hasan sohag.web.dev@gmail.com )
a8b23af : fix(api): map ErrTenantKeyShredded to a client error (Sohag Hasan sohag.web.dev@gmail.com )
f967f23 : fix(api): map currency-mismatch and balance trigger errors to 422 (Sohag Hasan sohag.web.dev@gmail.com )
ab88f9f : fix(api): map party-length errors to 422/InvalidArgument (Sohag Hasan sohag.web.dev@gmail.com )
7016822 : fix(audit): order chain by DB-assigned chain_seq, add outbox_id unique backstop (Sohag Hasan sohag.web.dev@gmail.com )
fb8b17a : fix(book): match multi-word attribute fences in the fence-language scan (Sohag Hasan sohag.web.dev@gmail.com )
f300c60 : fix(book): render LuaLaTeX as plain text on the colophon (LaTeX logo overlapped in the heading font) (Sohag Hasan sohag.web.dev@gmail.com )
2c85c7d : fix(book): restore navy on all part dividers, keep pre-divider and chapter pages white (Sohag Hasan sohag.web.dev@gmail.com )
0d311be : fix(book): route json/yaml to their listings languages; drop no-op numberstyle that recolored the gutter (Sohag Hasan sohag.web.dev@gmail.com )
92b63a0 : fix(book): skip only raw ({=...}) fences and make the fence/lstlisting pairing guard symmetric (Sohag Hasan sohag.web.dev@gmail.com )
316cfbe : fix(book): stop the part-divider navy background from bleeding onto the previous chapter's trailing page (Sohag Hasan sohag.web.dev@gmail.com )
446b8e0 : fix(chainer): drain on the lock-holding connection to prevent double-leader fork (Sohag Hasan sohag.web.dev@gmail.com )
0ce8197 : fix(cmd/server,seed): provision tenant rows now that api_keys/accounts have a tenants FK (Sohag Hasan sohag.web.dev@gmail.com )
c00a98f : fix(compose): put the dev stack behind a 'dev' profile so it does not collide with the load-test stack (Sohag Hasan sohag.web.dev@gmail.com )
3ad9103 : fix(console): escape all server values interpolated into innerHTML (Sohag Hasan sohag.web.dev@gmail.com )
6c92245 : fix(console): only auto-open the Start-here guide on first visit (Sohag Hasan sohag.web.dev@gmail.com )
b329811 : fix(deploy): make pre-swap migrate best-effort when the box lacks the sudoers wrapper (Sohag Hasan sohag.web.dev@gmail.com )
da8dd05 : fix(deploy): run migrate as the app user not root to close a privilege-escalation path (Sohag Hasan sohag.web.dev@gmail.com )
6d5028f : fix(deploy): verify served /healthz revision matches the deployed SHA (audit A6.2) (Sohag Hasan sohag.web.dev@gmail.com )
8913939 : fix(domain): apply currency minor-unit exponents in FX Convert and Money.String (A1.1, A8.3) (Sohag Hasan sohag.web.dev@gmail.com )
cb34c21 : fix(domain): length-prefix fingerprint fields to prevent boundary collisions (Sohag Hasan sohag.web.dev@gmail.com )
5169f8c : fix(domain): make Money.String safe for MinInt64 (Sohag Hasan sohag.web.dev@gmail.com )
c509ecc : fix(domain): reject MinInt64+MinInt64 silent overflow in Money.Add, add boundary test (Sohag Hasan sohag.web.dev@gmail.com )
cc96994 : fix(ebook): keep the ADR appendix list on its divider page (Sohag Hasan sohag.web.dev@gmail.com )
eb549cb : fix(examples): drop spurious gosec nolint in grpc client (Sohag Hasan sohag.web.dev@gmail.com )
116d9dd : fix(fx): stamp omitted rate effective_at server-side to avoid clock-skew invisibility (Sohag Hasan sohag.web.dev@gmail.com )
b8e9573 : fix(grpc): distinguish auth failure from backend error in the auth interceptor (Sohag Hasan sohag.web.dev@gmail.com )
fe91d4b : fix(grpcserver): clamp gRPC page limits, log panics, harden shutdown (Sohag Hasan sohag.web.dev@gmail.com )
75af655 : fix(idempotency): bump fingerprint to v2 covering reference and effective_at (Sohag Hasan sohag.web.dev@gmail.com )
be65d44 : fix(infra): create backup dumps mode 0600 (umask 077), not world-readable (Sohag Hasan sohag.web.dev@gmail.com )
60832a4 : fix(infra): declare collection deps, self-heal nginx validation, harden backup dir, ADR wording (Sohag Hasan sohag.web.dev@gmail.com )
fc2b1cd : fix(ledger): record reversed transaction id in the reversal audit snapshot (Sohag Hasan sohag.web.dev@gmail.com )
026bae1 : fix(load): use a valid UUID for the load-test DEFAULT_TENANT_ID (Sohag Hasan sohag.web.dev@gmail.com )
039c9c1 : fix(observability): complete alert rules and wire them into Prometheus (follow-up F3) (Sohag Hasan sohag.web.dev@gmail.com )
7a6f8a4 : fix(postgres): add row-level security to api_keys (follow-up F1) (Sohag Hasan sohag.web.dev@gmail.com )
2c1183f : fix(postgres): composite tenant FKs on transaction_id (Task 5.4a, audit A4.4) (Sohag Hasan sohag.web.dev@gmail.com )
98d2c1b : fix(postgres): guard webhook delivery mark queries against a terminal-state regression (Sohag Hasan sohag.web.dev@gmail.com )
6169ac2 : fix(postgres): make the per-tenant mutex wait respect context cancellation (Sohag Hasan sohag.web.dev@gmail.com )
0163594 : fix(postgres): route CreateAccount through the tenant GUC for RLS WITH CHECK backstop (Sohag Hasan sohag.web.dev@gmail.com )
4a2c229 : fix(postgres): serialize per-tenant posts with a session advisory lock to stop audit-chain serialization storms (Sohag Hasan sohag.web.dev@gmail.com )
0aa521f : fix(postgres): serialize per-tenant posts with an in-process mutex (no held connection, no DB lock timeout) (Sohag Hasan sohag.web.dev@gmail.com )
cda856b : fix(security): make demo behavior opt-in and refuse unsafe production boot (A2.1) (Sohag Hasan sohag.web.dev@gmail.com )
014035c : fix(seed): clear audit_outbox on demo reset before deleting transactions (Sohag Hasan sohag.web.dev@gmail.com )
08e7952 : fix(server): don't brick boot on a suspended tenant, reconcile demo key scopes on restart (ADR-019 review) (Sohag Hasan sohag.web.dev@gmail.com )
c100767 : fix(server): flush telemetry after servers drain, on every exit path (Sohag Hasan sohag.web.dev@gmail.com )
06b7dd7 : fix(server): validate DEFAULT_CURRENCY at boot; test account default-currency branch (Sohag Hasan sohag.web.dev@gmail.com )
c0f3654 : fix(web): converge balance arrows on zero (Sohag Hasan sohag.web.dev@gmail.com )
8446e9c : fix(web): drop redundant "Amount unit" label in console (Sohag Hasan sohag.web.dev@gmail.com )
9eb6ae1 : fix(web): keep mobile nav on one row, hide Blog Series and GitHub (Sohag Hasan sohag.web.dev@gmail.com )
910291d : fix(web): mobile nav shows Console, console page mobile polish (Sohag Hasan sohag.web.dev@gmail.com )
c180f83 : fix(web): repair mobile layout (Sohag Hasan sohag.web.dev@gmail.com )
7916781 : init go-ledger (Sohag Hasan sohag.web.dev@gmail.com )
d965c0b : lint: silence unused-parameter on RunInTx's tenantID (Sohag Hasan sohag.web.dev@gmail.com )
a5080dc : merge: Week 10 Docker hardening + VPS infrastructure-as-code (ADR-013) (Sohag Hasan sohag.web.dev@gmail.com )
ca75489 : merge: Week 11 multi-currency + FX conversion (ADR-014) (Sohag Hasan sohag.web.dev@gmail.com )
9c9f68c : merge: Week 9 testing (unit, property, integration, chaos, load, CI, badges) (Sohag Hasan sohag.web.dev@gmail.com )
c46be28 : merge: audit remediation (ADR-015) - white-label hardening, durability, multi-instance, compliance (Sohag Hasan sohag.web.dev@gmail.com )
384c6ce : merge: audit-remediation follow-up - close verification-audit residuals (Sohag Hasan sohag.web.dev@gmail.com )
ce115a9 : merge: book premium upgrades (5 vector diagrams, syntax highlighting, framing section) (Sohag Hasan sohag.web.dev@gmail.com )
7d44ec5 : merge: convert all remaining blog ASCII diagrams to vector (21 diagrams) (Sohag Hasan sohag.web.dev@gmail.com )
c422a87 : merge: deploy health gate verifies served revision (audit A6.2) (Sohag Hasan sohag.web.dev@gmail.com )
5931794 : merge: favicon + OG share image (landing, console, playground) (Sohag Hasan sohag.web.dev@gmail.com )
aec62f1 : merge: onboarding, operator console, and release binaries (ADR-019) (Sohag Hasan sohag.web.dev@gmail.com )
0498671 : merge: security hardening (ADR-012) - auth, mandatory idempotency, input caps, rate limiting, tamper-evident audit chain, per-tenant serialization (Sohag Hasan sohag.web.dev@gmail.com )
523b006 : perf(idempotency): batch the expired-key sweep delete (Sohag Hasan sohag.web.dev@gmail.com )
bed81f6 : refactor(db): typed errors, detached rollback, single validation (Sohag Hasan sohag.web.dev@gmail.com )
cc7b2a1 : refactor(paging): extract shared keyset cursor for REST and gRPC (Sohag Hasan sohag.web.dev@gmail.com )
d53cbdb : refactor: update comments and formatting in various files for clarity (Sohag Hasan sohag.web.dev@gmail.com )
5a20391 : test(api): add error-mapping matrix and malformed-cursor coverage (Sohag Hasan sohag.web.dev@gmail.com )
4d7295a : test(api): assert audit after-payload raw JSON and replay id (Sohag Hasan sohag.web.dev@gmail.com )
1f51368 : test(api): make the postings maxItems test actually guard the cap; fix body-limit comment (Sohag Hasan sohag.web.dev@gmail.com )
87bc5c5 : test(audit): migration up/down/up, xmin ordering, leader election, two-instance no-fork (Sohag Hasan sohag.web.dev@gmail.com )
edb0252 : test(db): add testcontainers integration test for the happy path (Sohag Hasan sohag.web.dev@gmail.com )
46413e3 : test(domain): add rapid property tests for balance invariant (Sohag Hasan sohag.web.dev@gmail.com )
a87b75f : test(domain): cover ParseAccountType, Sub error path, and Posting.Validate to clear 90% floor (Sohag Hasan sohag.web.dev@gmail.com )
255f72d : test(domain): property-test money round-trip, overflow, and mismatch (Sohag Hasan sohag.web.dev@gmail.com )
e0d8fb8 : test(domain): stateful model and concurrency property tests for the balance invariant (Sohag Hasan sohag.web.dev@gmail.com )
6969b92 : test(fx): per-currency invariant property test and FX round-trip reconciliation (Sohag Hasan sohag.web.dev@gmail.com )
14c67be : test(fx): property test now catches cross-currency-canceling imbalance; drop tautological round-trip identity (Sohag Hasan sohag.web.dev@gmail.com )
291becc : test(fx): truncate effective_at to microseconds in reference tests (Sohag Hasan sohag.web.dev@gmail.com )
7feb401 : test(fx): week 11 verification green (multi-currency + FX) (Sohag Hasan sohag.web.dev@gmail.com )
606bb9b : test(grpcserver): cover remaining handlers and error mapping (Sohag Hasan sohag.web.dev@gmail.com )
654f1b9 : test(idempotency): widen TTL margin to de-flake expiry test (Sohag Hasan sohag.web.dev@gmail.com )
5b86272 : test(ledger): add hot-account contention test for the worst SERIALIZABLE case (Sohag Hasan sohag.web.dev@gmail.com )
18aefc3 : test(ledger): concurrent posting stress test and trigger rejection (Sohag Hasan sohag.web.dev@gmail.com )
c1a1680 : test(ledger): cover crypto decrypt-on-read, audit head/anchor, and edge branches (Sohag Hasan sohag.web.dev@gmail.com )
56ef0bd : test(ledger): cover idempotency conflict, rollback, and lookup branches to 85% (Sohag Hasan sohag.web.dev@gmail.com )
d14a3a3 : test(ledger): inject real ambiguous-commit ack-loss in chaos Case B (Sohag Hasan sohag.web.dev@gmail.com )
7c2c35c : test(ledger): toxiproxy chaos test for mid-transaction rollback and ambiguous-commit idempotency (Sohag Hasan sohag.web.dev@gmail.com )
94bf4ed : test(load): add load-test Compose profile with app and postgres, seeder off (Sohag Hasan sohag.web.dev@gmail.com )
0b3c767 : test(load): authenticate k6 with a high-limit load key (Sohag Hasan sohag.web.dev@gmail.com )
466bab8 : test(load): k6 script with fan-out and hot-account scenarios, unique idempotency keys (Sohag Hasan sohag.web.dev@gmail.com )
2e38f32 : test(load): spread the load test across many tenants so 500 RPS holds under the per-tenant audit chain (Sohag Hasan sohag.web.dev@gmail.com )
9db4609 : test(postgres): add direct repository tests for crypto_keys, disputes, reports, and audit reads (Sohag Hasan sohag.web.dev@gmail.com )
1067c63 : test(postgres): add tenant-isolation tests for idempotency and audit tables (Sohag Hasan sohag.web.dev@gmail.com )
ef05586 : test(postgres,metrics): cover constraint mapping, paging, and collector paths (Sohag Hasan sohag.web.dev@gmail.com )
e23a676 : test(seed): cover the demo seeder against real Postgres, assert balanced rows (Sohag Hasan sohag.web.dev@gmail.com )
e0c6190 : test(web): match console-served assertion to the redesigned console (Sohag Hasan sohag.web.dev@gmail.com )
08a4c7e : test: add statement-weighted coverage gate with money-path floors (Sohag Hasan sohag.web.dev@gmail.com )
d7e081d : test: adjust existing suites for asynchronous audit chaining (ADR-017) (Sohag Hasan sohag.web.dev@gmail.com )
e8833b9 : test: cover retry paths, currency trigger, and honest concurrency (Sohag Hasan sohag.web.dev@gmail.com )
ef64cd7 : test: cover tenant CRUD/gating and fix integration tests for the tenants FK (Task 2.1) (Sohag Hasan sohag.web.dev@gmail.com )
a6f22d7 : test: fix coverage gate weighting and bash 3.2 portability (Sohag Hasan sohag.web.dev@gmail.com )
12c7458 : test: share one Postgres container per package via TestMain (Sohag Hasan sohag.web.dev@gmail.com )
7d6e4a8 : test: wait on postgres readiness log to fix CI container races (Sohag Hasan sohag.web.dev@gmail.com )
You can’t perform that action at this time.