1.3 KiB
Frozen public barrels
Rule. Cross-module imports inside src/ go through exactly these five public entries:
@/features/online-board@/features/schedule@/features/flights-map@/features/popular-requests@/ui
No file outside src/features/<feature>/ may import from src/features/<feature>/components/... or any deeper path. No file outside src/ui/ may import src/ui/primitives/Button. Enforcement lands in sub-plan 1A-3 via eslint-plugin-boundaries + no-restricted-imports.
Why this is frozen. Phase 0 assumption A1 (customer's standard remote-frontend module template) may arrive after 1A-1 ships. When it does, the rename pass documented in rename-pass-plan.md must be a mechanical move: rename directories, update import paths at the five barrels, done. If cross-module imports fan out through deep paths, the rename becomes a surgery across dozens of files.
What this unblocks. Every Phase 1 sub-plan can add internal files to a feature/UI directory without coordinating with other sub-plans, because nothing outside the barrel depends on internals. The barrel file itself is the review gate.
What this costs. Small friction when a sub-plan wants to expose a new symbol — it must update the barrel. Acceptable cost for the refactor safety it buys.