Architecture
SunLicense Cloud is four Spring Boot services behind a gateway, each with its own database. They talk to each other through events, so the validation path keeps working when the rest is down.

| Service | Owns |
|---|---|
| Gateway | The only entry point: checks the session or API key, decides the organization, enforces roles and rate limits |
| Identity | Organizations, users, roles, plans, API keys |
| Licensing | Products, policies, licenses, signing keys (private keys never leave it) |
| Validation | Its own copy of licenses and policies, machine activations, the validate endpoints |
How a revocation travels

The change and its event are saved in one database transaction (a transactional outbox), then published to RabbitMQ. Validation applies each event once and ignores out-of-date ones, so a revocation is never lost and never applied twice.
