Skip to content

v0.4.0 — Distributed tracing, dev-loop speedup, and the last Low-severity Roadmap items

Latest

Choose a tag to compare

@pablofelipe pablofelipe released this 03 Aug 21:17

Structural 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-race CI 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 /refunds page) in orders-service.

Fixed

  • inventory-service's OutboxPublisher never set DeliveryMode, so a hard broker kill could lose a message even after a positive publisher confirm.
  • ReserveStock's post-TTL duplication window.
  • registerUser now writes user.registered through the Outbox instead of publishing directly.
  • A real regression the change above surfaced: delayed user.registered deactivating 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.secret removed as dead configuration from all four Spring services.
  • api-gateway's circuit breaker status-code heuristic and its worst-case-open latency.
  • /health across 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.xml and frontend/package.json/package-lock.json bumped to 0.4.0.

Full changelog: https://github.com/pablofelipe/easydora/blob/main/CHANGELOG.md#040---2026-08-03