Skip to content

Releases: pablofelipe/easydora

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

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

v0.3.0 — RabbitMQ steady-state resilience and frontend completion

Choose a tag to compare

@pablofelipe pablofelipe released this 23 Jul 17:31

Closes the RabbitMQ reconnection gaps found while validating steady-state failure recovery: inventory-service now redeclares exchange/queue topology after every reconnect (the actual root cause of a prior incident, not just the dropped-TCP-connection symptom already fixed), its Outbox publisher uses publisher confirms instead of a fire-and-forget publish, and per-event channel validation stops one bad outbox row from poisoning an entire poll batch. All six services now expose the same reconnection observability contract — rabbitmq_reconnect_attempts_total, rabbitmq_topology_setup_total{outcome}, messaging_last_progress_timestamp_seconds — visualized in a new "EasyDora / Resilience" Grafana dashboard. orders-service and billing-service's JWT filters were also standardized to let the filter chain continue on an unknown token instead of returning 401 directly, matching products-service's existing behavior.

On the product side, the frontend gained three screens that close out its remaining thin-client gaps: signup with an on-screen email-verification token (no real email sending, consistent with notification-service's own scope), seller product creation, and buyer-initiated order cancellation from PENDING/PROCESSING/INVENTORY_RESERVED. A .dockerignore was added to every service's build context.

This release also formalizes how the project versions and releases itself: every pom.xml and frontend/package.json/package-lock.json now track the release tag instead of an untouched generator default, and docs/project-governance/versioning-and-release-policy.md documents what a version number means here (1.0.0 as architectural stabilization, not a production-readiness claim — this remains an educational/portfolio project), an objective test for what counts as an architectural change, and the release checklist. A few stale README claims about contract-test and Outbox coverage were also corrected to match ADR-0002's and ADR-0037's actual current scope.

See ADR-0038's 2026-07-20 Update for the full RabbitMQ incident writeup and the reconnection observability contract this release completes, and docs/project-governance/versioning-and-release-policy.md for the versioning policy.

Structural ADRs this release: 1 (ADR-0038's 2026-07-20 Update) — consecutive non-structural releases: 0.

v0.2.0 — Quantitative observability via Prometheus and Grafana

Choose a tag to compare

@pablofelipe pablofelipe released this 15 Jul 00:51

Adds native Prometheus metrics across all seven services (Micrometer for the four Spring Boot services, promhttp for the two Go services, prometheus_client for notification-service) plus RabbitMQ's built-in metrics plugin, scraped by a provisioned Prometheus and visualized in seven pre-built Grafana dashboards (per-language infra dashboards plus a business-metrics dashboard covering orders, payments, inventory reservations, and notifications). Complements the qualitative tracing/logging observability introduced earlier (ADR-0024) without adding a tracing backend, Alertmanager, or a log aggregator — see ADR-0036 for the full rationale and scope boundaries. Current service status in the README.

v0.1.0 — First public milestone

Choose a tag to compare

@pablofelipe pablofelipe released this 13 Jul 12:21

Eight services implemented across Go, Spring Boot, and FastAPI. Event contracts validated against versioned JSON Schemas; Outbox Pattern on auth and inventory; multi-phase CI (unit, real-infrastructure integration, cross-service e2e). Current service status in the README.