made-core
The domain core of MADE by Underpass — the Multi-Agent Deliberation Engine. Entities, value objects, domain events and ports. No IO, no transport, no framework glue.
Everything else in the workspace depends on this crate; this crate depends on nothing of ours. If a type here needed a socket, a clock or a database to make sense, it would belong somewhere else.
What lives here
- Entities and aggregates — councils, deliberations, ceremony definitions and instances. An aggregate protects its own transitions; callers never mutate its fields.
- Value objects — the vocabulary the boundaries speak. No primitive
obsession: a specialty, a score or a ceremony id is a type, not a
Stringor anf64, and its invariants are checked at construction rather than trusted afterwards. - Events — what the engine says happened, in the shape the AsyncAPI contract publishes.
- Ports — the traits the application layer composes and the adapters implement: repositories, agents, executors, messaging, clock, metrics.
Domain errors are typed. IO errors do not exist here, because IO does not.
Features
conformance ships a reusable test suite that any adapter implementing a
port can run against itself, so a new repository or agent proves it obeys
the same rules as the in-tree ones instead of hoping it does.
Stability
This is a library published so the rest of the engine can be published,
not a curated public API. It moves with the engine's releases. Consumers
who want a stable surface should use
made-api, which is versioned by
meaning rather than by release.
License
Apache-2.0.