What's Changed
- chore: refactor to Maven multi-module structure by @ifsantana in #21
- chore: update Docker Compose for full local dev stack by @ifsantana in #22
- chore: configure GitHub Actions CI pipeline by @ifsantana in #23
- feat: implement core value objects (#4) by @ifsantana in #24
- feat: implement MonetaryEntry sealed class (#5) by @ifsantana in #25
- feat: implement Account and JournalLine domain objects (#6) by @ifsantana in #26
- feat: implement Transaction aggregate with double-entry invariant (#7) by @ifsantana in #27
- feat: define Repository interfaces in core module (#8) by @ifsantana in #28
- feat: implement PostTransactionUseCase (#9) by @ifsantana in #29
- feat: implement QueryBalanceUseCase (#10) by @ifsantana in #30
- feat: Flyway migrations V1-V7 (#11) by @ifsantana in #31
- feat: implement PostgreSQL repository adapters (#12) by @ifsantana in #32
- feat: implement PostgresIdempotencyStore (#13) by @ifsantana in #33
- feat: POST /api/v1/transactions REST endpoint (#14) by @ifsantana in #34
- feat: GET /api/v1/accounts/{accountId}/balance REST endpoint (#15) by @ifsantana in #35
- test: verify application use case unit tests complete (#17) by @ifsantana in #37
- test: infrastructure integration tests — Audit and WebhookOutbox adapters (#18) by @ifsantana in #38
- chore: wire app module — application.yaml profiles and Spring Modulith boundary tests by @ifsantana in #39
- refactor: one class per file — split all multi-class .kt files (#59) by @ifsantana in #60
- feat: ApiKey entity + Flyway migration (api_keys table) by @ifsantana in #61
- feat: ApiKeyService — generate, validate, revoke (bcrypt + Redis cache) by @ifsantana in #62
- feat: ChainCheckpoint entity + repository (#46) by @ifsantana in #66
- feat: EvmChainReader + watched_addresses DB table (#47, #69) by @ifsantana in #67
- docs: document ApiKey, ValidatedApiKey, ApiScope, ChainCheckpoint entities by @ifsantana in #68
- feat: SolanaChainReader — QuickNode JSON-RPC polling for USDC/USDT SPL transfers (#48) by @ifsantana in #70
- docs: EVM/Alchemy chain reader architecture doc by @ifsantana in #71
- feat: TronChainReader — Tronscan REST polling for USDC/USDT TRC-20 transfers (#49) by @ifsantana in #78
- feat: AlchemyWebhookReceiver — POST /internal/webhooks/alchemy (EVM primary) (#73) by @ifsantana in #79
- feat: QuickNodeWebhookReceiver — primary Solana chain event source (#74) by @ifsantana in #80
- fix: disambiguate Solana idempotency key by accountIndex (#81) by @ifsantana in #82
- feat: BasicReconciliationService — PENDING -> SETTLED auto-matching (#75) by @ifsantana in #83
- feat: ChainReaderOrchestrator — central wiring for chain event sources (#76) by @ifsantana in #84
- feat: sender-address-aware settlement matching (reconciliation hardening) by @ifsantana in #86
- feat: redesign webhook_outbox retry state machine (#54) by @ifsantana in #90
- chore: add redis service to compose.yaml for local dev by @ifsantana in #92
- test: AlchemyWebhookReceiver + BasicReconciliationService integration tests (#77) by @ifsantana in #93
- fix: parse QuickNode Streams {data,metadata} envelope by @ifsantana in #96
- feat: send TRON-PRO-API-KEY header from TronChainReader by @ifsantana in #97
- feat: WebhookOutboxPoller -- scheduled HTTP dispatch with per-tenant retry (#55) by @ifsantana in #98
- fix: bound idem.webhook.max-attempts to RetrySchedule's supported range by @ifsantana in #101
- fix: QuickNode webhook HMAC validation uses nonce+timestamp+payload scheme by @ifsantana in #102
- feat: GET /api/v1/accounts/{id}/entries - paginated entry timeline (#52) by @ifsantana in #104
- feat: GET /api/v1/accounts/{id}/statement - account statement (#53) by @ifsantana in #105
- Port API key security layer onto main (#103) by @ifsantana in #113
- chore: scaffold idem-sdk-kotlin Maven module (#56) by @ifsantana in #114
- test: SDK integration tests against real server (#58) by @ifsantana in #116
- docs: sync domain-model.md with recent core entity changes by @ifsantana in #117
- feat: propagate X-Idem-Trace-Id for request correlation (#118) by @ifsantana in #119
- Feat/idem client 57 by @ifsantana in #120
- refactor: run chain reader recovery sweep off the main startup thread (#88) by @ifsantana in #121
- feat: dead-letter table and alerting for failed chain entry posts (#87) by @ifsantana in #122
- chore: add SECURITY.md with responsible disclosure policy (#111) by @ifsantana in #126
- chore: add ShedLock for multi-replica @scheduled coordination (#89) by @ifsantana in #124
- perf: batch getTransaction RPC calls in SolanaChainReader (#72) by @ifsantana in #125
- feat: anonymous opt-out telemetry ping service (#106) by @ifsantana in #128
- chore: attribution clause + telemetry docs (#112) by @ifsantana in #129
- feat: soft tenant nudge — log INFO when tenant count exceeds threshold (#107) by @ifsantana in #130
- refactor: rename AlchemyWebhookPort and QuickNodeWebhookPort to *UseCase by @ifsantana in #132
- chore: GPG signing setup for Maven artifacts (#108) by @ifsantana in #133
- chore: Docker image publishing + Cosign keyless signing (#109) by @ifsantana in #134
- fix: Dockerfile missing sdk-kotlin pom and src by @ifsantana in #135
- security: require ADMIN scope for /actuator/** endpoints (#123) by @ifsantana in #136
- security: fail fast on blank audit HMAC secret (#137) by @ifsantana in #141
- security: fail fast on blank webhook signing keys (#138) by @ifsantana in #142
- security: block SSRF via tenant webhook URL validation (#139) by @ifsantana in #143
- security: batch hardening -- audit ordering, SNAPSHOT dep, error disclosure, @Valid (#140) by @ifsantana in #144
- chore: permit Swagger UI and OpenAPI docs without API key (#151) by @ifsantana in #152
- docs: rewrite README to reflect actual implementation state by @ifsantana in #145
- feat: tenant bootstrap — Makefile, seed script, DevDataSeeder (#148) by @ifsantana in #153
- feat: API key management endpoints — POST/GET/DELETE /api/v1/api-keys (#146) by @ifsantana in #154
- feat: webhook config endpoints — PUT/GET /api/v1/tenant/webhook (#147) by @ifsantana in #155
- fix: expand GlobalExceptionHandler with domain errors and safe fallback (#150) by @ifsantana in #156
- feat: reconciliation batch endpoint — POST /api/v1/reconciliation/batch (#149) by @ifsantana in #157
- test: JaCoCo coverage for CreateAccountCommand + ListAccountsQuery (#190) by @ifsantana in #191
- fix: add testnet network mappings to Alchemy and QuickNode webhook services (#192) by @ifsantana in #193
- feat: scaffold MCP server module with Spring AI MCP starter (#165) by @ifsantana in #194
- docs: sync domain-model and reconciliation docs with recent merges by @ifsantana in #196
- feat: PolicyRule + PolicyGuard pre-flight evaluation (#159) by @ifsantana in #195
- feat: ExecuteWorkflowUseCase + RollbackWorkflowUseCase (#163) by @ifsantana in #197
- feat: ReconcileEntriesUseCase — time-window reconciliation sweep (#164) by @ifsantana in #198
- feat: MCP tools — post_transaction, get_balance, list_entries, describe_account (#166) by @ifsantana in #199
- feat: WorkflowPlan + WorkflowStep domain enhancement (#161) by @ifsantana in #201
- feat: complete RollbackWorkflowService — EXECUTING status, compensating_for metadata, per-step ROLLED_BACK by @ifsantana in #202
- feat: MCP tools — rollback_workflow, reconcile_batch, get_agent_audit_log (#167) by @ifsantana in #203
- test: unit tests for agentic domain invariants (#168) by @ifsantana in #204
- test: integration tests — ExecuteWorkflowUseCase + RollbackWorkflowUseCase (#169) by @ifsantana in #205
- test: MCP server integration tests via ToolCallbackProvider (#170) by @ifsantana in #206
- feat: wire idem-sdk-kotlin publishing to Maven Central (#206) by @ifsantana in #207
- fix: separate GPG import from setup-java in publish-sdk job by @ifsantana in #208
- fix: set release version from tag before publishing sdk-kotlin by @ifsantana in #209
- fix: add flatten-maven-plugin to produce self-contained pom for Central by @ifsantana in #210
- fix: upgrade central-publishing-maven-plugin 0.6.0 → 0.11.0 by @ifsantana in #211
- fix: bump GitHub Actions to Node 24-compatible versions by @ifsantana in #212
- feat: IVMS 101 data model — core value objects + DB schema + adapter (#171) by @ifsantana in #213
- fix: Travel Rule compliance hardening — threshold currency, idempotency, RLS (#215) by @ifsantana in #216
- feat: TravelRuleValidator — IVMS 101 pre-flight check on OnChainEntry (#172) by @ifsantana in #214
- docs: sync domain-model.md with week of 2026-06-21 merges by @ifsantana in #219
- feat: GET /api/v1/compliance/audit-export — LGPD audit export (#175) by @ifsantana in #217
- feat: @PiiField annotation + LGPD data retention (#174) by @ifsantana in #218
- feat: PolicyRepository — wire real policy rules into MCP (#200) by @ifsantana in #220
- feat: settlements CRUD endpoints — register, list, get, cancel (#178) by @ifsantana in #221
- chore: ktlint + Detekt static analysis in CI by @ifsantana in #223
- chore: add CONTRIBUTING.md + DCO configuration by @ifsantana in #222
- test: full-stack compliance integration coverage by @ifsantana in #225
- chore: GraalVM native image configuration by @ifsantana in #226
- fix: scope native-image compile to app module only in CI by @ifsantana in #227
- feat: OpenAPI spec generation via springdoc-openapi-maven-plugin (#176) by @ifsantana in #229
- chore: Docker Hub + Maven Central publishing pipelines (#184, #185) by @ifsantana in #228
- fix: update Docker Hub namespace to id3mfin4nc3/idem by @ifsantana in #230
- docs: sync domain-model.md with settlements CRUD endpoints (#221) by @ifsantana in #231
- docs: correct stale MCP tool docs (#186) by @ifsantana in #232
- feat(sdk): add account creation, reconciliation, and settlement lifecycle to IdemClient by @ifsantana in #235
- fix(agentic): durable agent audit trail for denied/failed workflows + API-key filter resilience by @ifsantana in #236
- ci: fix native-build artifact storage-quota failure by @ifsantana in #237
- ci(release): cap retention on handoff artifacts to fix storage-quota failures by @ifsantana in #238
- docs: end-to-end architecture overview with diagrams by @ifsantana in #240
- ci: cut redundant work from all three workflows by @ifsantana in #244
- test: share one Postgres per module + fix API-key prefix collision by @ifsantana in #246
- ci(release): reuse the signed jar for JVM images; skip re-test at tag by @ifsantana in #247
- docs: reflect ApiKeyRepository.findAllByPrefix in domain model by @ifsantana in #248
- docs: link documentation site by @ifsantana in #249
- docs: ship idem-ledger Claude Skill as MCP front door by @ifsantana in #251
- fix: route Makefile recipes through Git Bash on Windows by @ifsantana in #254
- chore: gitignore Claude Code tool state + remove stale plan docs by @ifsantana in #259
- docs: clarify QuickNodeWebhookService checkpoint-advance comment by @ifsantana in #260
- docs: document account creation in Quick Start by @ifsantana in #261
- feat: per-token on-chain balance breakdown on GET /balance by @ifsantana in #262
- fix: grant actions:read to release CI gate by @ifsantana in #263
Full Changelog: https://github.com/idem-finance/idem/commits/v0.1.0