licence-class-reportingrun.md02_define/output/spec.mdOnce every user holds exactly one role, the business needs to know what its user base costs to licence — but as a number it can look at, not as a gate that locks people out of a platform they are mid-project on (FR-12, BR-27; proves AC-8).
A licence report derived entirely from the role each user already holds — no new stored data.
LICENCE_CLASS_BY_ROLE) is completed per Jamie's ruling (2026-08-17):
Admin → Platform, Sales → Sales, CSM → Sales, SDM → Delivery, Expert → Delivery,
Customer → Delivery; Vendor stays Sales. Every role now maps to exactly one of the three
classes — the customer's former "no class" is retired, so the map carries no nulls and every
user appears in exactly one class.03_build/output/notes.mdpackages/services/src/permissions/licence.ts: LICENCE_CLASS_BY_ROLE
completed per Jamie's ruling (2026-08-17) — Admin → Platform, Sales → Sales,
CSM → Sales (was Delivery), SDM → Delivery, Expert → Delivery,
Customer → Delivery (was unclassed); Vendor stays Sales. The map's type
tightens to Record<UserRole, LicenceClass> — no nulls, every user in
exactly one class. licence.test.ts now asserts the full partition (every
role counted, none twice, total = all roles).apps/web/app/(app)/admin/settings/scope/page.tsx: the Scope & licences tab
gains the per-user licence report — userService.listTenantDirectory
mapped through LICENCE_CLASS_BY_ROLE at render, sorted by class then
name; counts per class derive from the same rows, so the totals always add
up to the list. The "no licence class" branches are gone with the nulls._components/licence-report.tsx (new): the report table — User, Email,
Role, Licence class — with per-class counts and the total in the header._components/licence-band.tsx: each class card shows its seat count
("N users in this organisation"); the unclassed-roles footnote is retired.apps/docs/app/technical/packages/services/page.mdx: the licence-class
paragraph's customer parenthetical updated — this PR falsified it.team-region-country-filters; last of the six-stub batch.