Skip to main content

Requirements — overview

The requirements catalogs describe what the applications are capable of, at the level a user observes it. They serve two purposes:

  1. A readable capability overview of the tracking app and the portal.
  2. The anchor for system tests: every stable requirement is covered by at least one manual test case in System tests, and every test case declares which requirements it covers.

This is deliberately not a full V-model artifact. There are no separate architecture or module specifications — the code and the rest of /docs are the source of truth for how. What we keep from that world is traceability: requirement ↔ test case, both directions, via stable IDs.

Documents​

DocumentPrefixScope
Shared requirementsSHR-*Behavior shared by both apps via @enode/core / @enode/ui: auth flow, i18n, units, error handling
Tracking app requirementsTRK-*@enode/tracking — the coach-facing training app (Capacitor iOS/Android + PWA)
Portal requirementsPOR-*@enode/portal — the browser-based coach/admin console

ID scheme​

<APP>-<AREA>-<NN> e.g. TRK-LIVE-03, POR-USERS-07, SHR-ERR-01
  • APP — TRK (tracking), POR (portal), SHR (shared).
  • AREA — a short feature-area code, defined at the top of each catalog.
  • NN — two-digit sequence within the area.

IDs are stable. Never renumber or reuse an ID. When a requirement is dropped, keep the row, strike the text, and note why. New requirements get the next free number in their area.

Status legend​

StatusMeaningGets system tests?
stableImplemented and expected to work in release buildsYes
flagBehind an in-code flag (flag name noted); both branches existOnly if the flag is ON in release builds
wipVisibly present but known-incompleteNo — noted as known behaviour
mockedUI exists but renders mock/preview dataNo — noted as known behaviour

Traceability​

  • Each requirement row has a Tests column listing the covering test-case IDs (e.g. TRK-ST-4.2) — filled in as protocols are written.
  • Each test protocol ends with a coverage table listing every stable requirement and its cases, so gaps are visible at a glance. A stable requirement with no system test needs an explicit reason there (e.g. "covered by unit tests only — not observable at system level").

Change rules​

  • A PR that changes user-facing behavior updates the affected requirement row(s) and the linked test cases in the same PR (same rule as the rest of /docs — see the repo CLAUDE.md).
  • Requirements state user-observable behavior, 1–3 sentences, present tense ("The user can …", "The app shows …"). Implementation details belong in the linked architecture docs, not here.