AI-consumed reference. Optimized for Claude to read during execution. Human-readable explanation: see docs/architecture/HIERARCHICAL_PLANNING.md or docs/getting-started/ depending on topic.
Angular Expert — Gotchas & Decisions
Use Context7 for full Angular docs.
Key Decisions
decisions[4]{choice,use_when}:
Signals vs Observables,"Signals for sync UI state. Observables for async streams/HTTP. Bridge with toSignal()/toObservable()"
NgRx vs Signals,"NgRx for complex shared state with effects. Signals for component/simple app state"
Standalone vs Module,"Always standalone (Angular 17+). Modules only for legacy"
OnPush vs Default,"Always OnPush. Requires immutable patterns"
Gotchas
@forrequirestrack— usetrack item.idnottrackByfunctiontakeUntilDestroyed(this.destroyRef)must be called in injection context (constructor or field init)toSignal()returnsSignal<T | undefined>— handle the undefinedNonNullableFormBuilderfor typed forms — plainFormBuilderloses types@defer (on viewport)needs@placeholderblock or nothing renders- Functional guards/interceptors: use
inject()not constructor DI