Skip to content

Tach is one backend dependency gate. It enforces declared boundaries and external import policy, but a green result is not a complete architecture claim until every production module is declared and the structural tests cover ADR 029.

Application slices are declared under application/<bounded_context>/features/<feature>. Application owns use cases and consumer ports; runtime composition belongs under orchestration/<bounded_context>/features/<feature>. Existing application/reservation_orchestration is migration debt, not a pattern for new code.

Adapter slices follow the same rule. Pricing settlement adapters live under adapters/pricing_settlement/features/<feature>, not flat adapters/payment, adapters/pricing, or adapters/settlement folders.

Terminal window
uv run tach check --dependencies --interfaces --exact
uv run tach check-external

pytest also includes architecture tests that assert the DDD folder shape.

The 2026-07-13 audit observed exact = false, no declared public-interface count, and an incomplete module graph in tach.toml. The CLI is still invoked with --exact, but that does not discover undeclared production ownership. Backend ee7b9b8 added initial root restrictions and a full-tree structural layer-direction test. Report the gate as partial until declarations and public feature contracts cover the complete domain, application, adapters, interfaces, orchestration, and platform graph.