Context

The convention is almost entirely reuse: the route-merge macro is a sibling of the existing route/island/agent macros, module handlers slot into the same Bun.serve route table and compose() middleware, and the bun --hot dev loop and deploy adapters are unchanged. The only net-new code is the module convention, the public-API boundary check (ADR-003), and the route-merge macro. That makes it important to record what is deliberately not built.

Decision

Out of scope, permanently: a DI container, @Injectable/@Inject and any decorators, reflect-metadata, AST type-extraction, guards/pipes/interceptors/filters, DI scopes, and a cycle resolver (cycles are a build failure per ADR-008, not something to resolve at runtime). This is a convention over Bun's module system, not a NestJS reimplementation.

Consequences

patties' existing full-stack surface — React SSR, islands, the UI catalog (patties-ui), the markdown/image pipelines, and every deploy adapter — is untouched; the convention sits beside it, opt-in. Cost: developers expecting Nest-style machinery won't find it, by design (see ADR-002, ADR-004, ADR-005).

Patties design specifications · a design exploration · All decisions