Rule IDs
Rules use category-scoped IDs:FE-<AREA>-NN, where <AREA> is the (stable, uppercase)
section code below and NN is a zero-padded number within that area — for example
FE-TS-01.
- To add a rule, take the next free number in the relevant area (a third TypeScript rule
is
FE-TS-03), so each section grows independently and the ID always tells you the category. - IDs are stable. Never renumber an existing rule or reuse the ID of a retired one — mark a dropped rule as retired instead.
Several frontend standards are still being written (marked TODO in the coding
standards). Where a rule is not yet fixed, an agent must ask a human rather than invent
a convention — see FE-TODO-01.
Project structure
- FE-STRUCT-01 — Group code by feature, not by type. Keep a feature’s components, services, and models together.
Components
- FE-COMP-01 — Prefer standalone components and the modern Angular APIs. Do not
scaffold new
NgModule-based components unless an existing area requires it. - FE-COMP-02 — Keep components presentational where possible; move logic into services. A component that fetches, transforms, and renders is doing too much.
TypeScript & linting
- FE-TS-01 — Code must pass ESLint + Prettier; CI fails on violations. Do not disable
rules inline (
// eslint-disable) to get a change through — fix the cause. - FE-TS-02 —
strictmode is on intsconfig. Avoidany— use precise types, generics, orunknownwith narrowing. Never addany(oras any) to silence the compiler.
State & RxJS
- FE-STATE-01 — Always clean up subscriptions: use the
asyncpipe,takeUntilDestroyed, or an explicit unsubscribe. Never leave an open subscription that outlives its component.
Testing
- FE-TEST-01 — Write unit tests with Jasmine/Karma (or Jest) for logic-bearing services and components. As on the backend, non-trivial logic ships with tests.
Styling
- FE-STYLE-01 — Follow the project’s existing styling approach and naming; match the surrounding component’s conventions rather than introducing a new pattern.
When a standard is undefined
- FE-TODO-01 — Where the frontend coding standards still say TODO (folder structure, inputs/outputs and change-detection conventions, state-management approach, SCSS/design-token conventions, coverage expectations), do not guess a convention. Match the existing code, and flag the ambiguity for a human to resolve.
As the frontend standards are filled in, promote each resolved decision into a concrete
rule here in the same pull request, so this ruleset grows alongside the human docs.