Changelog
View SourceFormat: Keep a Changelog. Versioning: SemVer.
[Unreleased]
[0.3.1] - 2026-06-01
Fixed
- Mesh connect no longer gated on the service-principal cert.
hecate_om_identity:attach_client/1 previously short-circuited to
undefined(never calling macula:connect/2) whenever the cert file was absent, leaving every cert-less service permanentlyno_client. The cert was a spurious gate: it is never passed toconnect(the SDK auto-generates an ephemeral peering identity for empty opts), only loaded and held forservice_cert/0/ the v2 realm-membership swap-in. Connect now keys off configuredstation_seeds, not cert presence. - Connect is deferred off the init path and retried. At boot
hecate_omcould start before the macula SDK app was fully up; a single inline connect raced it and lost.init/1now schedulesself() ! connect, retries every?RECONNECT_MSuntil a pool attaches, monitors the pool, and re-attaches if it later dies.
Added
- Optional
identity_key_pathenv: when set + loadable, the service peers under a stable on-disk macula-native keypair (consistent node id across restarts) via#{identity => KeyPair}; otherwise the SDK auto-generates an ephemeral identity. Identity is for peering, not authorization.
[0.3.0] - 2026-05-19
Added
hecate_om_storemodule: canonical reckon-db + evoq wiring helper. Encapsulatesreckon_db_sup:start_store/1+ 30s readiness wait +evoq_store_subscription:start_link/1. The pattern documented as mandatory inhecate-corpus/skills/ANTIPATTERNS_EVENT_SOURCING.mdnow lives in one place.- Optional callbacks on
hecate_om_service:store_id/0anddata_dir/0. When a service module exports both,hecate_om:boot/1auto-runs the canonical wiring beforeServiceMod:start/1. - New template
templates/sys.config.src.tmplwith the canonical reckon_db + evoq blocks. scripts/scaffold-service.shnow rendersconfig/sys.config.srcalongside the service modules.
Changed
_service.erl.tmplincludes the optionalstore_id/0+data_dir/0callbacks by default; producer-only services remove both.rebar.configadds reckon_db, evoq, reckon_evoq as deps so services usinghecate_omget the store-wiring stack for free. Producer-only services inherit the image-size cost but not the runtime cost (nothing starts unless the service module declaresstore_id/0).
Why
Each new CMD/PRJ service was rediscovering the canonical reckon-db
wiring (or, more often, missing pieces of it). The parksim trio
shipped without {evoq, [{event_store_adapter, ...}]} and without
any reckon_db_sup:start_store/1 call, leaving evoq in default
in-memory mode despite being configured as event-sourced. This
release moves the pattern into the library so future services pick
it up just by exporting two callbacks.
[0.2.0]
Added
- Initial scaffold:
hecate_om_servicebehaviour, helpers for identity claim, capability advertise, and/healthendpoint. - Templates for
Containerfile, Quadlet unit,manifest.json, and CI workflow. - Guides: service anatomy, identity model, container deployment.
Planned
- UCAN-delegated identity wiring once
hecate-realmissues service principals - Common Test framework helpers for service test suites
[0.1.0] - YYYY-MM-DD
Not yet released.