v0.4.0 — Distributed tracing, dev-loop speedup, and the last Low-severity Roadmap items
LatestStructural ADRs this release: 1 (ADR-0024's 2026-08-02 Update — adopting OpenTelemetry and a Jaeger backend, additive to CorrelationId).
Added
- OpenTelemetry distributed tracing with a Jaeger backend across all eight services: a real login produces one trace spanning 6 services and 13 spans across three languages.
- Trace context now propagates across the Outbox pattern's write-to-publish gap in auth-service, orders-service, billing-service, and inventory-service. A first version built on raw OpenTelemetry API passed every unit test but was caught by live validation against a real trace; corrected to build on Micrometer Tracing's own Tracer/Propagator and re-validated live — a real order-creation trace now spans 20 spans across 5 services, rooted at the original HTTP request.
- Standalone RabbitMQ vs Kafka broker benchmark harness and ADR-0041.
- Fast local dev loop via
docker compose watch(ADR-0042). notification_retry_total{outcome}metric and a Grafana panel.boot-raceCI job (one per Spring service), replacing a one-time manual confirmation of startup-race tolerance with a test that runs on every push.- Payment readiness guard in billing-service and an ADMIN-gated refund-retry endpoint (plus a frontend
/refundspage) in orders-service.
Fixed
- inventory-service's
OutboxPublishernever setDeliveryMode, so a hard broker kill could lose a message even after a positive publisher confirm. ReserveStock's post-TTL duplication window.registerUsernow writesuser.registeredthrough the Outbox instead of publishing directly.- A real regression the change above surfaced: delayed
user.registereddeactivating already-active buyers/sellers. - auth-service's weak dev JWT secret fallback.
- notification-service's unbounded RabbitMQ boot connection, now bounded to match its own Postgres connection.
JWT_SECRET/jwt.secretremoved as dead configuration from all four Spring services.- api-gateway's circuit breaker status-code heuristic and its worst-case-open latency.
/healthacross all four Spring services and both Go services now probes the real database.- A recurring e2e flake in order creation.
Changed
- README and
docs/architecture/rewritten in Simplified Technical English. - Every
pom.xmlandfrontend/package.json/package-lock.jsonbumped to0.4.0.
Full changelog: https://github.com/pablofelipe/easydora/blob/main/CHANGELOG.md#040---2026-08-03