Dependency rules
The core vertical preserves this direction:
Additional modules follow the same principle: abstractions and domain models do not depend on transport, EF Core, concrete providers, Microsoft Agent Framework, or hosts.
- Management abstractions and kind constants are owned by their resource families; no shared Management catch-all assembly is permitted. Identity, authorization and PAT contracts live in
Identity.Contracts; provider-neutral audit contracts live inSecurity.Contracts; Extension registration and AEP contracts live inExtensions.Contracts; Pack installation, Pack catalog schemas, authoring and composition contracts live inPacks.Contracts; Source and Source Registry resources, trust, discovery, refresh, network policy, Bootstrap provenance and provider-neutral catalog/content ports live inSources.Contracts.Packsmay implement Source catalog handlers and consume Source content ports;SourcesandSources.Contractsmust not reference Pack assemblies. Generic Bootstrap documents, planning and handler ports live inResourceManagement.Contracts; composed Bootstrap application and transport contracts live in the narrowBootstrap.Contractsfaçade. Validation and use cases live in plural resource-family modules; EF Core lives inResourceManagement.Storage.*or family-specific storage projects. - Flow domain and application projects remain provider-neutral; EF Core lives in
Flows.Storage.Sqlite. - Work owns functional state and calls the runtime through
IWorkExecutionGateway; Work SQLite does not share Management or Runtime storage. - Concrete Microsoft Agent Framework types live only in
Runtime.AgentFramework. - Endpoints, UI components, MCP tools, workers, and
Program.csdelegate business behavior to application services.
Architecture tests enforce important project-reference boundaries.