Skip to content

Effectus v0.4.0

Effectus v0.4.0 removes duplicate execution systems and reduces the supported product surface.

This release has one production execution path:

bundle.SourceBundlecompiler.CompileCheckedir.Checkedruntime.Generationruntime.Engine.Execute

The engine uses the durable ledger, workflow store, fencing provider, and invocation executor for all production transports.

Product surface

The repository now has these limits:

  • 11 product package domains.
  • 16 public Go packages, including generated and compatibility packages.
  • 3 immediate examples.
  • 18 visible Just recipes.
  • 1 Go module.

Repository guardrails check these limits. They also reject old package edges, stale documentation, and unsupported commands.

Runtime changes

  • HTTP, Kafka, generated gRPC, and recovery use one immutable generation.
  • HTTP requires bearer authentication and an idempotency key.
  • Durable HTTP admission returns status 202.
  • A matching replay returns the original execution identity.
  • A conflicting replay returns status 409.
  • Kafka selects durable acceptance or terminal completion as its acknowledgement boundary.
  • PostgreSQL stores durable execution, workflow, outbox, and Kafka-attempt state.
  • Recovery loads the generation identified by the durable execution artifact.

Compiler and bundle changes

  • compiler.CompileChecked accepts a bundle.SourceBundle.
  • effectusc supports check, compile, and inspect.
  • effectusd accepts one source bundle from --bundle or --oci-ref.
  • Release jobs publish the canonical order-review source bundle.
  • OCI verification remains an operator-supplied trust-policy boundary.

Removed systems

This release removes these duplicate or unsupported systems:

  • The callback compiler and callback runtime.
  • The list and flow execution stacks.
  • The unified bundle and loader stacks.
  • The second runtime generation model.
  • The old rule-storage and deployment model.
  • AMQP, CDC, Redis Streams, S3, Iceberg, and generic source adapters.
  • Runtime management features in the VS Code extension.

The VS Code extension now provides syntax highlighting and snippets. It does not call removed CLI commands or daemon endpoints.

Onboarding

Effectus has two first-run paths. Both use the order-review rule and scenario.

  • The embedded path requires Go only.
  • The durable path requires Docker Compose only.

The durable example checks authentication, admission, replay, conflict handling, restart behavior, and destination idempotency.

v0.3 compatibility packages

Version 0.4.0 introduces these compatibility import paths:

  • github.com/josephjohncox/effectus/compat/v03/embedded
  • github.com/josephjohncox/effectus/compat/v03/executorhttp
  • github.com/josephjohncox/effectus/compat/v03/invocation

Published v0.3.0 does not contain these paths. The release workflow verifies the v0.4.0 paths through https://proxy.golang.org after publication.

Breaking changes

This release removes public packages and APIs. It does not provide forwarding aliases for removed systems.

Before adoption:

  1. Replace callback compiler use with compiler.CompileChecked.
  2. Build a bundle.SourceBundle before compilation.
  3. Replace legacy runtime use with runtime.Generation and runtime.Engine.
  4. Replace removed effectusc commands with check, compile, or inspect.
  5. Remove imports of deleted adapter, AST, common, flow, list, loader, lint, path, and unified packages.
  6. Use a compat/v03 package only when source compatibility is required.
  7. Test HTTP clients for status 202 and status 409 behavior.
  8. Test Kafka consumers with the selected acknowledgement boundary.

Update Go consumers with:

go get github.com/josephjohncox/effectus@v0.4.0
go mod tidy

Database migration

Version 0.4.0 adds no database migration. The migrations published with v0.3.0 remain current.

Back up the database and test the restore drill before deployment. Do not run old and new daemons against one workload.

External assumptions

  • External destinations must enforce the supplied idempotency key or fencing grant.
  • The system does not provide an ACID transaction across an external destination and the Effectus database.
  • A trusted ingress or service mesh must provide production TLS and network policy.
  • Operators must provide PostgreSQL availability, backups, capacity limits, monitoring, and recovery tests.
  • Kafka DLQ publication and source-offset commit can duplicate a DLQ record after a crash.
  • OCI verification requires an operator-provided verifier and trust policy.