Skip to content

Latest commit

 

History

History
122 lines (105 loc) · 9.94 KB

File metadata and controls

122 lines (105 loc) · 9.94 KB

Module Audit

Per-module status of the Go port. Updated 2026-05-07 (v26.04.01).

Quality bar (latest sweep 2026-05-07):

  • 52 / 52 modules build green (go build ./...)
  • 52 / 52 modules pass go test ./...
  • 52 / 52 modules pass go test -race ./... (no data races)
  • 0 go vet issues; gofmt -l . clean
  • Cross-module integration tests in tests/ cover CQRS → callbacks → HMAC-signed delivery → audit, HMAC-validated webhook ingestion, and saga compensation rollback
  • Sample wires the new lifecycle.Application + actuator endpoints

Status semantics:

  • Full — public surface implemented, tests green, ready for production wiring.
  • Partial — public surface implemented, but the integration against an external system is contract-only (returns a typed Err…NotImplemented sentinel). Wire is in scope for the next release.
  • Stub — package and types declared, sentinel-error smoke tests guard the port assertion.

01 — Foundational

Module Status Tests Notes
kernel Full RFC 7807, Result, Clock, errors, correlation
utils Full Try, Retry.Do, Slugify, AES-256-GCM, text/html templates, base64
validators Full 12+ validators with mod-97 / Luhn / regex / DNI checksums
web Full Problem renderer, correlation, idempotency (memory store), PII masking
config Full Layered Static / YAML / Env / Flag sources, profile selection, struct-tag binder
i18n Full Bundle + Accept-Language picker + LocaleMiddleware + region→language fallback

02 — Platform

Module Status Tests Notes
cache Full Memory + NoOp + Fallback + typed wrapper. Redis adapter scheduled for next release.
observability Full slog + correlation, health composite, startup banner. OTel SDK wiring is the application's job.
data Full Filter DSL → SQL, paging, in-memory Repository. pgx-backed store scheduled.
cqrs Full Generic bus, validation + query-cache middleware
eda Partial In-memory broker is full; Kafka (franz-go) and RabbitMQ (amqp091-go) ports defined, factories return ErrKafkaUnavailable / ErrRabbitMQUnavailable.
eventsourcing Full AggregateRoot, MemoryEventStore (with optimistic concurrency), MemorySnapshotStore, ProjectionRunner. Postgres-backed store scheduled.
orchestration Full Saga, Workflow (DAG with parallel branches), TCC
ruleengine Full YAML AST + evaluator (Eq/Ne/Lt/Lte/Gt/Gte/In/NotIn/Contains/StartsWith/EndsWith/Matches/IsNull/IsNotNull)
plugins Full Registry + lifecycle SPI
lifecycle Full Application.Run(ctx) with ordered start/stop hooks, signal trap, http drain
actuator Full /actuator/{health,info,metrics,env,goroutines,version}; lock-free Counter/Gauge
scheduling Full Cron parser + Scheduler with FixedRate / FixedDelay / Cron triggers
resilience Full CircuitBreaker, RateLimiter, Bulkhead, Timeout + composable [Chain]
security Full Authentication ctx, [BearerMiddleware], path-pattern [FilterChain] RBAC
migrations Full V{n}__{desc}.sql runner with firefly_migrations table + checksum guard
openapi Full OAS 3.1 generator from Go types, /openapi.json, Swagger-UI shim
sse Full Server-Sent Events writer with heartbeat ping + Last-Event-Id helper
transactional Full WithTx, Exec, nested-tx participation, database/sql.DB integration
testkit Full HMAC signers (SignHMAC / SignStripe / SignGitHub / SignTwilio), SpyBroker

03 — Adapters

Module Status Tests Notes
client Full REST builder w/ retry, problem decode, correlation propagation
client (SOAP / gRPC / WS) Stub Placeholder builders return ErrTransportNotRegistered (asserted)
configserver Full Memory store; production deployments back onto a Git/database Store.
idp Full Port + types + sentinel guard
idpinternaldb Full bcrypt + HS256 JWT, full lifecycle
idpkeycloak Stub Port assertion + ErrNotImplemented smoke tests
idpazuread Stub Port assertion + ErrNotImplemented smoke tests
idpawscognito Stub Port assertion + ErrNotImplemented smoke tests
ecm Full LocalStore + in-memory document service
ecmstorageaws Stub Port assertion + ErrNotImplemented smoke tests
ecmstorageazure Stub Port assertion + ErrNotImplemented smoke tests
ecmesignaturedocusign Stub Port assertion + ErrNotImplemented smoke tests
ecmesignatureadobesign Stub Port assertion + ErrNotImplemented smoke tests
ecmesignaturelogalty Stub Port assertion + ErrNotImplemented smoke tests
notifications Full Dispatcher + MemoryChannel
notificationssendgrid Stub Port assertion + ErrNotImplemented smoke tests
notificationsresend Stub Port assertion + ErrNotImplemented smoke tests
notificationstwilio Stub Port assertion + ErrNotImplemented smoke tests
notificationsfirebase Stub Port assertion + ErrNotImplemented smoke tests
callbacks Full HMAC-signing dispatcher + retry + audit + REST admin + SDK
webhooks Full Generic HMAC + Stripe + GitHub + Twilio validators; pipeline + DLQ + ingestion endpoint + SDK

04 — Starters

Module Status Tests Notes
startercore Full Default in-memory wiring; consumer supplies overrides
starterapplication Full Composes startercore + plugins.Registry
starterdomain Full Composes startercore + in-memory event-sourcing stores
starterdata Full Composes startercore; consumer supplies the DB
backoffice Full starterapplication + back-office context middleware

05 — Tests

Module Status Tests Notes
tests Full Cross-module integration suite (CQRS+callbacks roundtrip, webhook ingestion, saga rollback)

06 — Samples

Path Status Tests Notes
samples/orders Full Five-package layout, idempotent POST + cached GET, end-to-end test green

Roadmap

The sequencing for the 26.05.x cycle is, in priority order:

  1. Wire the EDA Kafka adapter against github.com/twmb/franz-go.
  2. Wire the EDA RabbitMQ adapter against github.com/rabbitmq/amqp091-go.
  3. Wire the cache Redis adapter against github.com/redis/go-redis/v9.
  4. Wire the data Postgres repository against github.com/jackc/pgx/v5 with Flyway-equivalent migrations.
  5. Wire the IDP adapters in this order: Keycloak (admin REST API), AWS Cognito (AWSSDK.CognitoIdentityProvider), Azure AD (MSAL + Microsoft Graph).
  6. Wire the ECM storage and e-signature adapters.
  7. Wire the notifications channel adapters.

Each stub today returns a typed sentinel error (ErrNotImplemented, ErrKafkaUnavailable, etc.) — the contract is locked, the wire is the follow-up. Stub modules already carry sentinel-assertion smoke tests so regressions in port shape get caught the moment the real implementation lands.