Context
The repository holds@stackra/* packages, three apps and two services, and the root package.json description still mentions “the Encore app”.
Without a stated purpose every new feature asks whether it belongs here or in a product, and product literals creep into
shared code. The owner agreed the purpose on 2026-10-19.
Decision
- Stackra is the shared framework tier. It holds the
@stackra/*packages (DI, contracts, tooling presets, brand and the rest) and the reference members that prove them:apps/console(an operator and admin console, not a customer UI),apps/mobile,apps/docsandservices/*. - Products live in their own repositories (Academorix, Juristra and Retail OS are examples) and install published
@stackra/*packages (0025). Product code never lands in this repository. - Shared packages never contain a product literal: no product name, project id or brand URL of a product. They expose factories; the product supplies the definition (0003).
- Foundation quality comes before features, with no fixed deadline. The first end-to-end deliverable is deliberately not decided yet; choosing it is a later ADR.
- The team is one maintainer plus AI agents. Two-person approval stays deferred, as 0012 records.
Consequences
- A reviewer can reject a diff because it is product code, citing this page.
- Reference apps must stay small enough to prove a package, not grow into products.
- Products depend on released versions, so a breaking change here costs a coordinated upgrade elsewhere.
- The root
package.jsondescription (“the Encore app”) is stale and is fixed when this ADR is accepted.
Enforcement
Planned — the product-literal check already planned in 0003, scanningpackages/**/src
for product names (academorix, juristra, retail-os). Nothing checks this today; review and the architecture-guardian agent are the only guard.
Supersedes and sources
Supersedes: none. Sources: owner decision in chat, 2026-10-19; user rulesmodule-boundary.md (literal-value rule).