The address table. Shipping takes a districtId and never reads customer_address — that is a module boundary, not an implementation detail.
Order snapshots. An order must snapshot the quoted fee; repricing a district never changes what an existing order was charged (see address/backend §2).
Bulk semantics: scopes union and de-duplicate; a status-only bulk is a plain UPDATE (never an upsert) so it cannot write a stale fee over a concurrent price change; districts without a fee under a status-only call are skipped and named in the report.
Quote resolves one district and answers { fee, serviceable }. Serviceability is batched for many districts (the address book's list reads) and sits behind one cache key in the shipping cache domain — a single admin edit invalidates all of it, so no address list can serve a stale availability.
Every admin write (upsert, delete, bulk) invalidates the domain after commit; the quote and the address book's serviceability read sit behind the same key, so one edit refreshes every surface.
Permissions come from one list: packages/db/src/authorization/permission-catalog.ts. The API's PermissionCode union and the seed's role grants both derive from it, and permissions-catalog.spec.ts fails the build if they diverge. Adding a module means adding it there, then running permissions:sync and db:seed — never a manual grant. The seed grants every module's permissions to admin except System_*; superadmin bypasses the check.
Customer quote: JwtAuthGuard (not @Public()) — quoting is a signed-in step, and the account-keyed throttle is only meaningful for an authenticated caller.
Rate limits: ADMIN_READ 30/min, ADMIN_WRITE 10/min, ADMIN_BULK_WRITE5/min (one request can reprice all 77 districts), CUSTOMER_READ 60/min keyed on the account.