Supersedes 0011. Every row change that earlier
ADRs made to the 0011 table is collected here, so the table has one source again. The rows that
changed are named in Decision.
Amended by 0267: a row is added for Agent Vault, which
is deferred. The row changes only by a new ADR, and 0267 is that ADR.
Context
0011 is the one table of rejected and deferred technologies. Since it was written, waves 1 to 3 added or changed rows in separate ADRs: the Encore row (0124), the runtime schema engine (0110, 0154), the delegation row (0193), and others. A reader had to read sixteen ADRs to learn one row. The owner’s answers also added rows that the table never held (Better Auth, Storybook, GraphQL and others).Decision
- One table. The table below replaces the 0011 table. Do not introduce anything in the Not introduced column. If a task seems to need one, stop and route to the owner. Rejected means no. Deferred means not yet, and the trigger names when. A row changes only by a new ADR.
- Rows changed.
- The Encore row is the hand-written form only:
encore.devand~encore/*in service members are rejected, and Encore is the generated target in.stackra/encore(0091, 0124). - The delegation row is removed. Agents run by tier under 0193.
- The AI gateway row is reworded. An LLM proxy gateway in front of model providers stays rejected. One MCP gateway in the ai service is allowed (0155).
- The search row: OpenSearch is built on a measured trigger (0221).
- The authorization row: the OpenFGA and OPA adapters come later, behind the policy decision point (0208).
- The shared component row: the replacement is the
@stackra/uicontract (0165). - The observability row points to 0184.
- The runtime schema engine row adds the allowed forms that later ADRs record: tenant content types (0226), tenant automations (0153), and pricing blocks with no expressions (0219).
- The Encore row is the hand-written form only:
- Rows added. Better Auth, change-data-capture, XState, Storybook, GraphQL, hand-written gRPC, the Kafka/NATS/Redpanda bus drivers, and the deferred platform items: a vector store, a graph database, an OLAP engine, sharding, a second non-TypeScript runtime. Active-active across regions is rejected (0186).
Table
Consequences
- A proposal that touches one of these rows starts with a new ADR, not a pull request.
- Product-specific rejections (billing vendors, wallet design and similar) are not carried here; a product repository records its own.
- The Temporal driver stays as the Pro driver (0151); this table does not list it.
Enforcement
FORBIDDEN_DEPENDENCIESintools/scripts/validate-repository.mjsfails a member that listseslint,prettier,jest,@nestjs/core,@nestjs/common,reflect-metadata,prisma,@prisma/client,drizzle-orm,express,fastify,typeormorknex.packages/tooling/oxlint/src/boundaries.jsoncbansencore.devin packages.- planned — extend
FORBIDDEN_DEPENDENCIESwithnext,better-auth,xstate,@storybook/*andgraphql, the rows this table adds. - The
architecture-guardianagent reads this page.
Alternatives
- Leave the scattered row changes in their own ADRs and keep 0011 as it is. Rejected, because a reader would need sixteen ADRs to learn one row.
Supersedes and sources
Supersedes: 0011. Sources: the wave 4 entry for 0227 in the decision register (gap B18, row changes C-24 and the 0193 delegation row); owner answers on Next.js, Better Auth and the identity provider (stackra-decisions-2026-10-19.md, 2026-10-20).