@jmruthers/pace-core 0.6.6 → 0.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/{scripts/audit/audit-dependencies.cjs → audit-tool/00-dependencies.cjs} +227 -22
  2. package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
  3. package/audit-tool/audits/02-project-structure.cjs +240 -0
  4. package/audit-tool/audits/03-architecture.cjs +224 -0
  5. package/audit-tool/audits/04-code-quality.cjs +149 -0
  6. package/audit-tool/audits/05-styling.cjs +224 -0
  7. package/audit-tool/audits/06-security-rbac.cjs +554 -0
  8. package/audit-tool/audits/07-api-tech-stack.cjs +355 -0
  9. package/audit-tool/audits/08-testing-documentation.cjs +202 -0
  10. package/audit-tool/audits/09-operations.cjs +208 -0
  11. package/audit-tool/index.cjs +295 -0
  12. package/audit-tool/utils/code-utils.cjs +218 -0
  13. package/audit-tool/utils/file-utils.cjs +230 -0
  14. package/audit-tool/utils/report-utils.cjs +380 -0
  15. package/cursor-rules/00-standards-overview.mdc +156 -0
  16. package/cursor-rules/{00-pace-core-compliance.mdc → 01-pace-core-compliance.mdc} +187 -34
  17. package/cursor-rules/02-project-structure.mdc +37 -5
  18. package/cursor-rules/{03-solid-principles.mdc → 03-architecture.mdc} +125 -11
  19. package/cursor-rules/04-code-quality.mdc +419 -0
  20. package/cursor-rules/{08-markup-quality.mdc → 05-styling.mdc} +55 -10
  21. package/cursor-rules/{09-rbac-compliance.mdc → 06-security-rbac.mdc} +62 -6
  22. package/cursor-rules/07-api-tech-stack.mdc +377 -0
  23. package/cursor-rules/08-testing-documentation.mdc +324 -0
  24. package/cursor-rules/09-operations.mdc +365 -0
  25. package/dist/DataTable-6RMSCQJ6.js +15 -0
  26. package/dist/{DataTable-2N_tqbfq.d.ts → DataTable-DRUIgtUH.d.ts} +1 -1
  27. package/dist/{PublicPageProvider-BBH6Vqg7.d.ts → PublicPageProvider-CIGSujI2.d.ts} +40 -24
  28. package/dist/{UnifiedAuthProvider-ZT6TIGM7.js → UnifiedAuthProvider-7SNDOWYD.js} +2 -2
  29. package/dist/{api-Y4MQWOFW.js → api-7P7DI652.js} +1 -1
  30. package/dist/{chunk-MAGBIDNS.js → chunk-4DDCYDQ3.js} +8 -7
  31. package/dist/{chunk-BVP2BCJF.js → chunk-5W2A3DRC.js} +10 -9
  32. package/dist/{chunk-SD6WQY43.js → chunk-7ILTDCL2.js} +9 -1
  33. package/dist/{chunk-3QC3KRHK.js → chunk-A3W6LW53.js} +16 -1
  34. package/dist/{chunk-3O3WHILE.js → chunk-EF2UGZWY.js} +239 -63
  35. package/dist/{chunk-LAZMKTTF.js → chunk-EURB7QFZ.js} +341 -337
  36. package/dist/{chunk-2HGJFNAH.js → chunk-FEJLJNWA.js} +1 -15
  37. package/dist/{chunk-7TYHROIV.js → chunk-GS5672WG.js} +55 -13
  38. package/dist/{chunk-UIYSCEV7.js → chunk-IUBRCBSY.js} +1 -1
  39. package/dist/{chunk-ZFYPMX46.js → chunk-LX6U42O3.js} +1 -1
  40. package/dist/{chunk-FENMYN2U.js → chunk-MPBLMWVR.js} +3 -3
  41. package/dist/{chunk-ZS5VO5JB.js → chunk-NKHKXPI4.js} +408 -453
  42. package/dist/{chunk-A55DK444.js → chunk-OJ4SKRSV.js} +1 -7
  43. package/dist/{chunk-4T7OBVTU.js → chunk-S6ZQKDY6.js} +1 -1
  44. package/dist/{chunk-FTCRZOG2.js → chunk-T5CVK4R3.js} +5 -5
  45. package/dist/{chunk-OHIK3MIO.js → chunk-Z2FNRKF3.js} +13 -13
  46. package/dist/components.d.ts +5 -4
  47. package/dist/components.js +29 -34
  48. package/dist/eslint-rules/index.cjs +22 -9
  49. package/{src/eslint-rules/rules/compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +184 -23
  50. package/dist/eslint-rules/rules/04-code-quality.cjs +346 -0
  51. package/dist/eslint-rules/rules/05-styling.cjs +61 -0
  52. package/dist/eslint-rules/rules/{rbac.cjs → 06-security-rbac.cjs} +34 -13
  53. package/dist/eslint-rules/rules/07-api-tech-stack.cjs +385 -0
  54. package/dist/eslint-rules/rules/08-testing.cjs +94 -0
  55. package/dist/{functions-DHebl8-F.d.ts → functions-lBy5L2ry.d.ts} +1 -1
  56. package/dist/hooks.d.ts +5 -5
  57. package/dist/hooks.js +8 -8
  58. package/dist/index.d.ts +7 -7
  59. package/dist/index.js +21 -20
  60. package/dist/providers.js +2 -2
  61. package/dist/rbac/index.d.ts +1 -1
  62. package/dist/rbac/index.js +8 -8
  63. package/dist/theming/runtime.d.ts +61 -1
  64. package/dist/theming/runtime.js +1 -1
  65. package/dist/{types-B-K_5VnO.d.ts → types-DXstZpNI.d.ts} +0 -17
  66. package/dist/types.d.ts +2 -2
  67. package/dist/{usePublicRouteParams-COZ28Mvq.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +19 -19
  68. package/dist/utils.d.ts +2 -2
  69. package/dist/utils.js +8 -8
  70. package/docs/README.md +1 -1
  71. package/docs/api/modules.md +106 -41
  72. package/docs/api-reference/components.md +18 -20
  73. package/docs/api-reference/hooks.md +80 -80
  74. package/docs/api-reference/types.md +1 -1
  75. package/docs/api-reference/utilities.md +1 -1
  76. package/docs/architecture/README.md +1 -1
  77. package/docs/core-concepts/events.md +3 -3
  78. package/docs/core-concepts/organisations.md +6 -6
  79. package/docs/core-concepts/permissions.md +6 -6
  80. package/docs/documentation-index.md +12 -18
  81. package/docs/getting-started/dependencies.md +23 -0
  82. package/docs/getting-started/documentation-index.md +1 -1
  83. package/docs/getting-started/examples/README.md +4 -4
  84. package/docs/getting-started/examples/full-featured-app.md +1 -1
  85. package/docs/getting-started/faq.md +2 -2
  86. package/docs/getting-started/quick-reference.md +4 -4
  87. package/docs/implementation-guides/app-layout.md +1 -1
  88. package/docs/implementation-guides/authentication.md +15 -15
  89. package/docs/implementation-guides/component-styling.md +1 -1
  90. package/docs/implementation-guides/data-tables.md +127 -34
  91. package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
  92. package/docs/implementation-guides/dynamic-colors.md +3 -3
  93. package/docs/implementation-guides/file-upload-storage.md +2 -2
  94. package/docs/implementation-guides/hierarchical-datatable.md +40 -60
  95. package/docs/implementation-guides/inactivity-tracking.md +3 -3
  96. package/docs/implementation-guides/large-datasets.md +3 -2
  97. package/docs/implementation-guides/organisation-security.md +2 -2
  98. package/docs/implementation-guides/performance.md +2 -2
  99. package/docs/implementation-guides/permission-enforcement.md +1 -1
  100. package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
  101. package/docs/migration/V0.4.0_rbac-migration.md +6 -6
  102. package/docs/rbac/README.md +5 -5
  103. package/docs/rbac/advanced-patterns.md +6 -6
  104. package/docs/rbac/api-reference.md +20 -20
  105. package/docs/rbac/event-based-apps.md +3 -3
  106. package/docs/rbac/examples.md +41 -41
  107. package/docs/rbac/getting-started.md +37 -37
  108. package/docs/rbac/performance.md +1 -1
  109. package/docs/rbac/quick-start.md +52 -52
  110. package/docs/rbac/secure-client-protection.md +1 -1
  111. package/docs/rbac/troubleshooting.md +1 -1
  112. package/docs/security/README.md +5 -5
  113. package/docs/standards/0-standards-overview.md +220 -0
  114. package/docs/standards/{00-pace-core-compliance.md → 1-pace-core-compliance-standards.md} +241 -185
  115. package/docs/standards/{02-project-structure.md → 2-project-structure-standards.md} +11 -47
  116. package/docs/standards/3-architecture-standards.md +606 -0
  117. package/docs/standards/4-code-quality-standards.md +728 -0
  118. package/docs/standards/{08-markup-quality.md → 5-styling-standards.md} +12 -9
  119. package/docs/standards/{09-rbac-compliance.md → 6-security-rbac-standards.md} +126 -18
  120. package/docs/standards/7-api-tech-stack-standards.md +662 -0
  121. package/docs/standards/8-testing-documentation-standards.md +401 -0
  122. package/docs/standards/9-operations-standards.md +1102 -0
  123. package/docs/standards/README.md +203 -104
  124. package/docs/troubleshooting/README.md +4 -4
  125. package/docs/troubleshooting/common-issues.md +2 -2
  126. package/docs/troubleshooting/debugging.md +9 -9
  127. package/docs/troubleshooting/migration.md +4 -4
  128. package/eslint-config-pace-core.cjs +50 -20
  129. package/package.json +50 -19
  130. package/scripts/eslint-audit.cjs +123 -0
  131. package/scripts/install-cursor-rules.cjs +11 -243
  132. package/scripts/install-eslint-config.cjs +349 -0
  133. package/scripts/validate-dependencies.cjs +248 -0
  134. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +2 -2
  135. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
  136. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +30 -18
  137. package/src/__tests__/integration/UserProfile.test.tsx +14 -14
  138. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
  139. package/src/__tests__/templates/accessibility.test.template.tsx +10 -9
  140. package/src/__tests__/templates/component.test.template.tsx +18 -15
  141. package/src/components/AddressField/AddressField.tsx +26 -1
  142. package/src/components/Alert/Alert.test.tsx +86 -22
  143. package/src/components/Alert/Alert.tsx +19 -11
  144. package/src/components/Badge/Badge.tsx +1 -1
  145. package/src/components/Calendar/Calendar.tsx +201 -47
  146. package/src/components/Checkbox/Checkbox.test.tsx +2 -1
  147. package/src/components/ContextSelector/ContextSelector.tsx +108 -126
  148. package/src/components/DataTable/AUDIT_REPORT.md +293 -0
  149. package/src/components/DataTable/DataTable.tsx +1 -19
  150. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +6 -2
  151. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +21 -6
  152. package/src/components/DataTable/__tests__/pagination.modes.test.tsx +3 -2
  153. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
  154. package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
  155. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
  156. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
  157. package/src/components/DataTable/components/DataTableLayout.tsx +5 -16
  158. package/src/components/DataTable/components/EditableRow.tsx +5 -7
  159. package/src/components/DataTable/components/EmptyState.tsx +11 -10
  160. package/src/components/DataTable/components/FilterRow.tsx +2 -4
  161. package/src/components/DataTable/components/ImportModal.tsx +124 -126
  162. package/src/components/DataTable/components/LoadingState.tsx +5 -6
  163. package/src/components/DataTable/components/SortIndicator.tsx +50 -0
  164. package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
  165. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
  166. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
  167. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
  168. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
  169. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +45 -27
  170. package/src/components/DataTable/components/index.ts +2 -1
  171. package/src/components/DataTable/types.ts +0 -18
  172. package/src/components/DataTable/utils/a11yUtils.ts +17 -0
  173. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +1 -1
  174. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
  175. package/src/components/DateTimeField/DateTimeField.tsx +7 -8
  176. package/src/components/Dialog/Dialog.test.tsx +1 -0
  177. package/src/components/Dialog/Dialog.tsx +25 -8
  178. package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
  179. package/src/components/FileUpload/FileUpload.test.tsx +45 -16
  180. package/src/components/FileUpload/FileUpload.tsx +141 -130
  181. package/src/components/NavigationMenu/NavigationMenu.test.tsx +48 -12
  182. package/src/components/PaceAppLayout/PaceAppLayout.performance.test.tsx +9 -9
  183. package/src/components/PaceAppLayout/PaceAppLayout.security.test.tsx +30 -30
  184. package/src/components/PaceAppLayout/PaceAppLayout.test.tsx +4 -4
  185. package/src/components/PaceLoginPage/PaceLoginPage.test.tsx +7 -1
  186. package/src/components/Progress/Progress.tsx +2 -4
  187. package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
  188. package/src/components/Select/Select.tsx +86 -77
  189. package/src/components/Select/types.ts +3 -0
  190. package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
  191. package/src/hooks/__tests__/hooks.integration.test.tsx +49 -49
  192. package/src/hooks/__tests__/useDataTablePerformance.unit.test.ts +8 -5
  193. package/src/hooks/__tests__/useFileUrl.unit.test.ts +4 -0
  194. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +99 -99
  195. package/src/hooks/__tests__/useInactivityTracker.unit.test.ts +45 -8
  196. package/src/hooks/__tests__/usePerformanceMonitor.unit.test.ts +22 -2
  197. package/src/hooks/public/usePublicEvent.ts +5 -5
  198. package/src/hooks/public/usePublicEventLogo.ts +5 -5
  199. package/src/hooks/public/usePublicFileDisplay.ts +2 -2
  200. package/src/hooks/public/usePublicRouteParams.ts +13 -9
  201. package/src/hooks/useAddressAutocomplete.test.ts +18 -18
  202. package/src/hooks/useAppConfig.ts +2 -2
  203. package/src/hooks/useEventTheme.test.ts +7 -7
  204. package/src/hooks/useEventTheme.ts +2 -1
  205. package/src/hooks/useFileDisplay.ts +2 -2
  206. package/src/hooks/useFileUrl.ts +52 -8
  207. package/src/hooks/useOrganisationSecurity.test.ts +2 -1
  208. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
  209. package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
  210. package/src/providers/__tests__/EventProvider.test.tsx +61 -61
  211. package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
  212. package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
  213. package/src/providers/__tests__/ProviderLifecycle.test.tsx +38 -38
  214. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
  215. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
  216. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +10 -10
  217. package/src/rbac/__tests__/auth-rbac.e2e.test.tsx +15 -6
  218. package/src/rbac/__tests__/rbac-functions.test.ts +3 -3
  219. package/src/rbac/api.test.ts +104 -0
  220. package/src/rbac/engine.ts +1 -1
  221. package/src/rbac/hooks/useCan.test.ts +2 -2
  222. package/src/rbac/secureClient.ts +1 -1
  223. package/src/rbac/types/functions.ts +1 -1
  224. package/src/styles/core.css +7 -0
  225. package/src/theming/__tests__/parseEventColours.test.ts +118 -3
  226. package/src/theming/parseEventColours.ts +77 -11
  227. package/src/types/supabase.ts +2 -3
  228. package/src/utils/__tests__/bundleAnalysis.unit.test.ts +9 -9
  229. package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
  230. package/src/utils/file-reference/__tests__/file-reference.test.ts +4 -0
  231. package/src/utils/formatting/formatDate.test.ts +3 -2
  232. package/src/utils/formatting/formatDateTime.test.ts +2 -2
  233. package/src/utils/google-places/googlePlacesUtils.test.ts +36 -24
  234. package/src/utils/storage/README.md +1 -1
  235. package/src/utils/storage/__tests__/helpers.unit.test.ts +19 -12
  236. package/src/utils/storage/helpers.test.ts +69 -3
  237. package/cursor-rules/01-standards-compliance.mdc +0 -285
  238. package/cursor-rules/04-testing-standards.mdc +0 -270
  239. package/cursor-rules/05-bug-reports-and-features.mdc +0 -248
  240. package/cursor-rules/06-code-quality.mdc +0 -311
  241. package/cursor-rules/07-tech-stack-compliance.mdc +0 -216
  242. package/cursor-rules/10-error-handling-patterns.mdc +0 -179
  243. package/cursor-rules/11-performance-optimization.mdc +0 -169
  244. package/cursor-rules/12-ci-cd-integration.mdc +0 -150
  245. package/dist/DataTable-LRJL4IRV.js +0 -15
  246. package/dist/eslint-rules/rules/compliance.cjs +0 -348
  247. package/dist/eslint-rules/rules/components.cjs +0 -113
  248. package/dist/eslint-rules/rules/imports.cjs +0 -102
  249. package/docs/best-practices/README.md +0 -472
  250. package/docs/best-practices/accessibility.md +0 -604
  251. package/docs/best-practices/common-patterns.md +0 -516
  252. package/docs/best-practices/deployment.md +0 -1103
  253. package/docs/best-practices/performance.md +0 -1328
  254. package/docs/best-practices/security.md +0 -940
  255. package/docs/best-practices/testing.md +0 -1034
  256. package/docs/rbac/compliance/compliance-guide.md +0 -544
  257. package/docs/standards/01-standards-compliance.md +0 -188
  258. package/docs/standards/03-solid-principles.md +0 -39
  259. package/docs/standards/04-testing-standards.md +0 -36
  260. package/docs/standards/05-bug-reports-and-features.md +0 -27
  261. package/docs/standards/06-code-quality.md +0 -34
  262. package/docs/standards/07-tech-stack-compliance.md +0 -30
  263. package/docs/standards/10-error-handling-patterns.md +0 -401
  264. package/docs/standards/11-performance-optimization.md +0 -348
  265. package/docs/standards/12-ci-cd-integration.md +0 -370
  266. package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +0 -192
  267. package/scripts/audit/audit-compliance.cjs +0 -1295
  268. package/scripts/audit/audit-components.cjs +0 -260
  269. package/scripts/audit/audit-rbac.cjs +0 -954
  270. package/scripts/audit/audit-standards.cjs +0 -1268
  271. package/scripts/audit/index.cjs +0 -1927
  272. package/src/components/DataTable/components/DataTableBody.tsx +0 -478
  273. package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
  274. package/src/components/DataTable/components/ExpandButton.tsx +0 -113
  275. package/src/components/DataTable/components/GroupHeader.tsx +0 -54
  276. package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
  277. package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
  278. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
  279. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
  280. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
  281. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
  282. package/src/components/DataTable/core/DataTableContext.tsx +0 -216
  283. package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
  284. package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
  285. package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
  286. package/src/components/DataTable/utils/debugTools.ts +0 -514
  287. package/src/eslint-rules/index.cjs +0 -22
  288. package/src/eslint-rules/rules/components.cjs +0 -113
  289. package/src/eslint-rules/rules/imports.cjs +0 -102
  290. package/src/eslint-rules/rules/rbac.cjs +0 -790
  291. package/src/eslint-rules/utils/helpers.cjs +0 -42
  292. package/src/eslint-rules/utils/manifest-loader.cjs +0 -75
@@ -1,6 +1,6 @@
1
- # Styling Standard for Consuming Apps
1
+ # Styling Standards
2
2
 
3
- **🤖 Cursor Rule**: See [08-markup-quality.mdc](../../cursor-rules/08-markup-quality.mdc) for AI-optimized directives that automatically enforce markup quality (this rule is ALWAYS APPLIED).
3
+ **🤖 Cursor Rule**: See [05-styling.mdc](../../cursor-rules/05-styling.mdc) for AI-optimized directives that automatically enforce markup quality (this rule is ALWAYS APPLIED).
4
4
 
5
5
  ## Purpose
6
6
 
@@ -11,7 +11,8 @@ This standard defines the **REQUIRED** configuration for consuming apps to prope
11
11
  - ✅ Tailwind v4 content scanning works properly
12
12
  - ✅ Consistent styling across all PACE suite applications
13
13
 
14
- ## Component & Markup Guidance (aligns with Cursor rules)
14
+ ## Component & Markup Guidance
15
+
15
16
  - Components should be stateless when possible, fully typed, and accessibility-first.
16
17
  - Prefer semantic HTML elements; use `<div>` only when no semantic element fits or when required by a library.
17
18
  - Use React Fragments for grouping instead of wrapper nodes; keep markup minimal and avoid wrappers solely for styling.
@@ -20,12 +21,14 @@ This standard defines the **REQUIRED** configuration for consuming apps to prope
20
21
  - Apply layout utilities to existing semantic parents or pace-core layout components.
21
22
 
22
23
  ### Component Principles
24
+
23
25
  - Stateless when possible; keep surface area small and composable.
24
26
  - Accessible by default with correct roles, keyboard support, and visible focus.
25
27
  - UI primitives only; never add domain logic or data fetching inside components.
26
28
  - Support controlled + uncontrolled usage where applicable.
27
29
 
28
30
  ### Testing Expectations
31
+
29
32
  - Use React Testing Library + userEvent.
30
33
  - Test key interactions; snapshots only for simple components.
31
34
  - Keep components small—move non-UI logic to hooks/services.
@@ -185,7 +188,7 @@ import '@jmruthers/pace-core/styles/core.css'; /* ❌ WRONG */
185
188
 
186
189
  **All shades (50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950) plus `-raw` are REQUIRED.**
187
190
 
188
- ## Required Import in Entry Point (and avoiding duplicate imports)
191
+ ## Required Import in Entry Point
189
192
 
190
193
  **MUST** import `app.css` in your entry point (e.g., `src/main.tsx`):
191
194
 
@@ -209,7 +212,7 @@ When you have additional entry points (storybook, tests, preview servers):
209
212
  - If you need raw styles for non-React tooling, **import `@jmruthers/pace-core/styles/core.css` once** in that tool-specific stylesheet, never alongside `app.css`.
210
213
  - If you are unsure, default to a single `app.css` import and remove any extra `core.css` imports.
211
214
 
212
- ## Styling & Markup Rules (aligns with Cursor)
215
+ ## Styling & Markup Rules
213
216
 
214
217
  - **No inline styles**: Do not use `style={{ ... }}` except when a third-party library strictly requires it. Prefer pace-core variants + Tailwind utilities.
215
218
  - **Use theme tokens only**: Avoid arbitrary Tailwind colors (`text-gray-500`, `bg-red-500`) and bracket syntax (`bg-[oklch(...)]`). Use `main-*`, `sec-*`, `acc-*`, or semantic tokens like `text-foreground`.
@@ -334,12 +337,12 @@ import './app.css';
334
337
 
335
338
  ## Related Documentation
336
339
 
337
- - [PACE Core Styling Guide](../styles/README.md) - Complete styling documentation
338
- - [Project Structure Guide](./00-project-structure-guide.md) - File organization standards
339
- - [Component Standard](./03-component-standard.md) - Component development standards
340
+ - [Standards Overview](./0-standards-overview.md) - Standards system overview
341
+ - [Project Structure](./2-project-structure-standards.md) - File organization standards
342
+ - [Architecture](./3-architecture-standards.md) - Component development standards
340
343
 
341
344
  ---
342
345
 
343
346
  **Last Updated:** 2025-01-28
344
- **Version:** 1.0.0
347
+ **Version:** 2.0.0
345
348
  **Applies to:** All consuming apps using `@jmruthers/pace-core`
@@ -1,17 +1,13 @@
1
- ---
2
- lastUpdated: 2025-01-28T00:00:00+11:00
3
- version: 0.5.182
4
- reviewedBy: rls-audit-and-fixes
5
- ---
6
-
7
- # RBAC and RLS Standard
1
+ # Security & RBAC Standards
8
2
 
9
- **🤖 Cursor Rule**: See [09-rbac-compliance.mdc](../../cursor-rules/09-rbac-compliance.mdc) for AI-optimized directives that automatically enforce RBAC contract compliance (ESLint-enforced).
3
+ **🤖 Cursor Rule**: See [06-security-rbac.mdc](../../cursor-rules/06-security-rbac.mdc) for AI-optimized directives that automatically enforce RBAC contract compliance (ESLint-enforced).
10
4
 
11
5
  ## Purpose
12
6
 
13
7
  Define standards for Row-Level Security (RLS) policies and Role-Based Access Control (RBAC) integration to ensure security, performance, and maintainability.
14
8
 
9
+ **Note:** General performance optimization patterns (React, caching, bundle size) are covered in [Operations Standards](./9-operations-standards.md). This document focuses on RLS-specific performance requirements.
10
+
15
11
  ## Principles
16
12
 
17
13
  - **Performance First**: All RLS policies must use optimized helper functions
@@ -426,6 +422,52 @@ USING (
426
422
 
427
423
  **Example:** `file_references`, `pace_address` (can be either organisation or user-scoped)
428
424
 
425
+ **Real-World Example: File References Table**
426
+
427
+ ```sql
428
+ -- Real-world example: file_references table supports both organisation and user-scoped files
429
+ CREATE POLICY "rbac_select_file_references" ON file_references
430
+ FOR SELECT
431
+ USING (
432
+ -- Service role can access all files (for system operations)
433
+ is_service_role()
434
+ OR
435
+ -- Organisation-scoped files (shared within organisation)
436
+ (
437
+ organisation_id IS NOT NULL
438
+ AND is_authenticated_user()
439
+ AND (
440
+ is_super_admin(safe_get_user_id_for_rls())
441
+ OR check_user_organisation_access(organisation_id)
442
+ )
443
+ )
444
+ OR
445
+ -- User-scoped files (personal files)
446
+ (
447
+ organisation_id IS NULL
448
+ AND is_authenticated_user()
449
+ AND get_effective_user_id() = user_id
450
+ )
451
+ );
452
+
453
+ -- INSERT policy: Users can upload files to their organisation or personal storage
454
+ CREATE POLICY "rbac_insert_file_references" ON file_references
455
+ FOR INSERT TO authenticated
456
+ WITH CHECK (
457
+ -- Organisation-scoped: Must have organisation access
458
+ (
459
+ organisation_id IS NOT NULL
460
+ AND check_user_organisation_access(organisation_id)
461
+ )
462
+ OR
463
+ -- User-scoped: Must be own user_id
464
+ (
465
+ organisation_id IS NULL
466
+ AND get_effective_user_id() = user_id
467
+ )
468
+ );
469
+ ```
470
+
429
471
  ### Service Role Policy
430
472
 
431
473
  **Use Case:** Allow service_role to bypass RLS for system operations.
@@ -476,6 +518,66 @@ USING (
476
518
 
477
519
  **Example:** `event` (public events), `forms` (published forms)
478
520
 
521
+ **Real-World Example: Public Event Registration**
522
+
523
+ ```sql
524
+ -- Real-world example: Events table with public registration
525
+ -- Public users can view and register for public events
526
+ -- Authenticated users can view all events in their organisation
527
+
528
+ -- Public access: Anonymous users can view public events
529
+ CREATE POLICY "public_select_events" ON events
530
+ FOR SELECT TO anon
531
+ USING (
532
+ is_public = true
533
+ AND organisation_id IS NOT NULL
534
+ AND status = 'published'
535
+ );
536
+
537
+ -- Authenticated access: Users can view events in their organisation
538
+ CREATE POLICY "rbac_select_events" ON events
539
+ FOR SELECT TO authenticated
540
+ USING (
541
+ -- Public events (anyone can see)
542
+ (is_public = true AND organisation_id IS NOT NULL)
543
+ OR
544
+ -- Organisation events (members can see)
545
+ (
546
+ organisation_id IS NOT NULL
547
+ AND (
548
+ is_super_admin(safe_get_user_id_for_rls())
549
+ OR check_user_organisation_access(organisation_id)
550
+ )
551
+ )
552
+ );
553
+
554
+ -- Public registration: Anonymous users can create registrations for public events
555
+ CREATE POLICY "public_insert_event_registrations" ON event_registrations
556
+ FOR INSERT TO anon
557
+ WITH CHECK (
558
+ -- Only for public events
559
+ event_id IN (
560
+ SELECT id FROM events
561
+ WHERE is_public = true AND status = 'published'
562
+ )
563
+ );
564
+
565
+ -- Authenticated registration: Users can register for events in their organisation
566
+ CREATE POLICY "rbac_insert_event_registrations" ON event_registrations
567
+ FOR INSERT TO authenticated
568
+ WITH CHECK (
569
+ -- Must have access to the event's organisation
570
+ event_id IN (
571
+ SELECT id FROM events
572
+ WHERE organisation_id IS NOT NULL
573
+ AND (
574
+ is_super_admin(safe_get_user_id_for_rls())
575
+ OR check_user_organisation_access(organisation_id)
576
+ )
577
+ )
578
+ );
579
+ ```
580
+
479
581
  **Combined Public + Authenticated Pattern:**
480
582
  ```sql
481
583
  -- Public access
@@ -494,7 +596,7 @@ USING (
494
596
  OR (
495
597
  organisation_id IS NOT NULL
496
598
  AND (
497
- is_super_admin()
599
+ is_super_admin(safe_get_user_id_for_rls())
498
600
  OR check_user_organisation_access(organisation_id)
499
601
  )
500
602
  )
@@ -519,7 +621,7 @@ USING (
519
621
  is_authenticated_user()
520
622
  AND organisation_id IS NOT NULL
521
623
  AND (
522
- is_super_admin()
624
+ is_super_admin(safe_get_user_id_for_rls())
523
625
  OR check_user_organisation_access(organisation_id)
524
626
  )
525
627
  )
@@ -710,7 +812,8 @@ export async function checkPermission(userId: string, permission: string) {
710
812
  5. **MUST NOT** create custom RBAC helper functions
711
813
  6. **MUST NOT** call `rbac_check_permission_simplified` RPC directly
712
814
 
713
- ## Security Baseline (aligns with Security Standard)
815
+ ## Security Baseline
816
+
714
817
  - Never bypass RLS; validate all inputs and sanitize logs (no tokens/PII).
715
818
  - Use safe, user-friendly error messaging.
716
819
  - Prefer pace-core security helpers and secure clients (`useSecureSupabase`, RBAC helpers) over custom implementations.
@@ -779,17 +882,17 @@ Tables are assigned to specific apps for RBAC permission checking:
779
882
  supabase advisors security
780
883
  ```
781
884
 
782
- 3. **Run Database Tests**:
885
+ 2. **Run Database Tests**:
783
886
  ```bash
784
887
  timeout 120 npm run test:db
785
888
  ```
786
889
 
787
- 4. **Run Application Tests**:
890
+ 3. **Run Application Tests**:
788
891
  ```bash
789
892
  timeout 60 npm run test
790
893
  ```
791
894
 
792
- 5. **Verify Performance**:
895
+ 4. **Verify Performance**:
793
896
  - Use EXPLAIN ANALYZE to verify no InitPlan nodes
794
897
  - Verify queries complete in < 1 second
795
898
  - Check Supabase Advisors show zero `auth_rls_initplan` warnings
@@ -868,7 +971,12 @@ date +"%Y%m%d%H%M%S"
868
971
 
869
972
  ## Related Documentation
870
973
 
871
- - Security baseline (see section above)
872
- - [RLS Policy Remediation Plan](../troubleshooting/rls-policy-remediation-plan-combined.md)
873
- - [Database Unhealthiness Diagnosis](../troubleshooting/database-unhealthiness-diagnosis.md)
874
- - [RBAC-RLS Integration Guide](../rbac/rbac-rls-integration.md)
974
+ - [Standards Overview](./0-standards-overview.md) - Standards system overview
975
+ - [pace-core Compliance](./1-pace-core-compliance-standards.md) - Secure Supabase client usage
976
+ - [Operations](./9-operations-standards.md) - General performance patterns (React, caching, etc.)
977
+
978
+ ---
979
+
980
+ **Last Updated:** 2025-01-28
981
+ **Version:** 2.0.0
982
+ **Applies to:** All pace-core and consuming apps