@jmruthers/pace-core 0.6.6 → 0.6.7

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 (246) hide show
  1. package/{scripts/audit/audit-dependencies.cjs → audit-tool/00-dependencies.cjs} +12 -13
  2. package/audit-tool/audits/01-pace-core-compliance.cjs +556 -0
  3. package/audit-tool/audits/02-project-structure.cjs +255 -0
  4. package/audit-tool/audits/03-architecture.cjs +196 -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 +544 -0
  8. package/audit-tool/audits/07-api-tech-stack.cjs +301 -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 +291 -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 +241 -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-7PMH7XN7.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-DlsCaR5v.d.ts} +26 -16
  28. package/dist/{chunk-FENMYN2U.js → chunk-5X4QLXRG.js} +1 -3
  29. package/dist/{chunk-4T7OBVTU.js → chunk-6F3IILHI.js} +1 -1
  30. package/dist/{chunk-SD6WQY43.js → chunk-7ILTDCL2.js} +9 -1
  31. package/dist/{chunk-3QC3KRHK.js → chunk-A3W6LW53.js} +16 -1
  32. package/dist/{chunk-7TYHROIV.js → chunk-BM4CQ5P3.js} +50 -8
  33. package/dist/{chunk-2HGJFNAH.js → chunk-FEJLJNWA.js} +1 -15
  34. package/dist/{chunk-OHIK3MIO.js → chunk-GHYHJTYV.js} +2 -2
  35. package/dist/{chunk-UIYSCEV7.js → chunk-IUBRCBSY.js} +1 -1
  36. package/dist/{chunk-LAZMKTTF.js → chunk-JGWDVX64.js} +281 -347
  37. package/dist/{chunk-MAGBIDNS.js → chunk-L4XMVJKY.js} +2 -2
  38. package/dist/{chunk-A55DK444.js → chunk-OJ4SKRSV.js} +1 -7
  39. package/dist/{chunk-ZS5VO5JB.js → chunk-Q7Q7V5NV.js} +406 -451
  40. package/dist/{chunk-3O3WHILE.js → chunk-VBCS3DUA.js} +236 -60
  41. package/dist/{chunk-BVP2BCJF.js → chunk-ZKAWKYT4.js} +8 -8
  42. package/dist/components.d.ts +5 -4
  43. package/dist/components.js +27 -32
  44. package/dist/eslint-rules/index.cjs +22 -9
  45. package/{src/eslint-rules/rules/compliance.cjs → dist/eslint-rules/rules/01-pace-core-compliance.cjs} +184 -23
  46. package/dist/eslint-rules/rules/04-code-quality.cjs +290 -0
  47. package/dist/eslint-rules/rules/05-styling.cjs +61 -0
  48. package/dist/eslint-rules/rules/{rbac.cjs → 06-security-rbac.cjs} +26 -10
  49. package/dist/eslint-rules/rules/07-api-tech-stack.cjs +263 -0
  50. package/dist/eslint-rules/rules/08-testing.cjs +94 -0
  51. package/dist/hooks.d.ts +5 -5
  52. package/dist/hooks.js +6 -6
  53. package/dist/index.d.ts +6 -6
  54. package/dist/index.js +18 -17
  55. package/dist/rbac/index.js +6 -6
  56. package/dist/theming/runtime.d.ts +14 -1
  57. package/dist/theming/runtime.js +1 -1
  58. package/dist/{types-B-K_5VnO.d.ts → types-DXstZpNI.d.ts} +0 -17
  59. package/dist/{usePublicRouteParams-COZ28Mvq.d.ts → usePublicRouteParams-MamNgwqe.d.ts} +19 -19
  60. package/dist/utils.d.ts +2 -2
  61. package/dist/utils.js +8 -8
  62. package/docs/README.md +1 -1
  63. package/docs/api/modules.md +47 -31
  64. package/docs/api-reference/components.md +18 -20
  65. package/docs/api-reference/hooks.md +80 -80
  66. package/docs/api-reference/types.md +1 -1
  67. package/docs/api-reference/utilities.md +1 -1
  68. package/docs/architecture/README.md +1 -1
  69. package/docs/core-concepts/events.md +3 -3
  70. package/docs/core-concepts/organisations.md +6 -6
  71. package/docs/core-concepts/permissions.md +6 -6
  72. package/docs/documentation-index.md +12 -18
  73. package/docs/getting-started/documentation-index.md +1 -1
  74. package/docs/getting-started/examples/README.md +4 -4
  75. package/docs/getting-started/examples/full-featured-app.md +1 -1
  76. package/docs/getting-started/faq.md +2 -2
  77. package/docs/getting-started/quick-reference.md +4 -4
  78. package/docs/implementation-guides/authentication.md +15 -15
  79. package/docs/implementation-guides/component-styling.md +1 -1
  80. package/docs/implementation-guides/data-tables.md +126 -33
  81. package/docs/implementation-guides/datatable-rbac-usage.md +1 -1
  82. package/docs/implementation-guides/dynamic-colors.md +3 -3
  83. package/docs/implementation-guides/file-upload-storage.md +2 -2
  84. package/docs/implementation-guides/hierarchical-datatable.md +40 -60
  85. package/docs/implementation-guides/inactivity-tracking.md +3 -3
  86. package/docs/implementation-guides/large-datasets.md +3 -2
  87. package/docs/implementation-guides/organisation-security.md +2 -2
  88. package/docs/implementation-guides/performance.md +2 -2
  89. package/docs/implementation-guides/permission-enforcement.md +1 -1
  90. package/docs/migration/V0.3.44_organisation-context-timing-fix.md +1 -1
  91. package/docs/migration/V0.4.0_rbac-migration.md +6 -6
  92. package/docs/rbac/README.md +5 -5
  93. package/docs/rbac/advanced-patterns.md +6 -6
  94. package/docs/rbac/api-reference.md +20 -20
  95. package/docs/rbac/event-based-apps.md +3 -3
  96. package/docs/rbac/examples.md +41 -41
  97. package/docs/rbac/getting-started.md +37 -37
  98. package/docs/rbac/performance.md +1 -1
  99. package/docs/rbac/quick-start.md +52 -52
  100. package/docs/rbac/secure-client-protection.md +1 -1
  101. package/docs/rbac/troubleshooting.md +1 -1
  102. package/docs/security/README.md +5 -5
  103. package/docs/standards/0-standards-overview.md +220 -0
  104. package/docs/standards/{00-pace-core-compliance.md → 1-pace-core-compliance-standards.md} +204 -185
  105. package/docs/standards/{02-project-structure.md → 2-project-structure-standards.md} +11 -47
  106. package/docs/standards/3-architecture-standards.md +606 -0
  107. package/docs/standards/4-code-quality-standards.md +728 -0
  108. package/docs/standards/{08-markup-quality.md → 5-styling-standards.md} +12 -9
  109. package/docs/standards/{09-rbac-compliance.md → 6-security-rbac-standards.md} +126 -18
  110. package/docs/standards/7-api-tech-stack-standards.md +662 -0
  111. package/docs/standards/8-testing-documentation-standards.md +401 -0
  112. package/docs/standards/9-operations-standards.md +1102 -0
  113. package/docs/standards/README.md +203 -104
  114. package/docs/troubleshooting/README.md +4 -4
  115. package/docs/troubleshooting/common-issues.md +2 -2
  116. package/docs/troubleshooting/debugging.md +9 -9
  117. package/docs/troubleshooting/migration.md +4 -4
  118. package/eslint-config-pace-core.cjs +21 -10
  119. package/package.json +6 -5
  120. package/scripts/install-cursor-rules.cjs +11 -243
  121. package/scripts/install-eslint-config.cjs +284 -0
  122. package/src/__tests__/helpers/__tests__/component-test-utils.test.tsx +2 -2
  123. package/src/__tests__/helpers/__tests__/test-providers.test.tsx +2 -2
  124. package/src/__tests__/helpers/__tests__/test-utils.test.tsx +10 -10
  125. package/src/__tests__/integration/UserProfile.test.tsx +14 -14
  126. package/src/__tests__/rbac/PagePermissionGuard.test.tsx +6 -6
  127. package/src/__tests__/templates/accessibility.test.template.tsx +9 -9
  128. package/src/__tests__/templates/component.test.template.tsx +18 -15
  129. package/src/components/Calendar/Calendar.tsx +201 -47
  130. package/src/components/ContextSelector/ContextSelector.tsx +137 -153
  131. package/src/components/DataTable/AUDIT_REPORT.md +293 -0
  132. package/src/components/DataTable/__tests__/DataTableCore.test.tsx +10 -2
  133. package/src/components/DataTable/__tests__/a11y.basic.test.tsx +10 -4
  134. package/src/components/DataTable/__tests__/test-utils/sharedTestUtils.tsx +9 -9
  135. package/src/components/DataTable/components/ColumnFilter.tsx +63 -74
  136. package/src/components/DataTable/components/ColumnVisibilityDropdown.tsx +43 -41
  137. package/src/components/DataTable/components/DataTableErrorBoundary.tsx +9 -11
  138. package/src/components/DataTable/components/DataTableLayout.tsx +5 -16
  139. package/src/components/DataTable/components/EditableRow.tsx +5 -7
  140. package/src/components/DataTable/components/EmptyState.tsx +10 -9
  141. package/src/components/DataTable/components/FilterRow.tsx +2 -4
  142. package/src/components/DataTable/components/ImportModal.tsx +124 -126
  143. package/src/components/DataTable/components/LoadingState.tsx +5 -6
  144. package/src/components/DataTable/components/SortIndicator.tsx +50 -0
  145. package/src/components/DataTable/components/__tests__/COVERAGE_NOTE.md +4 -4
  146. package/src/components/DataTable/components/__tests__/ColumnFilter.test.tsx +23 -82
  147. package/src/components/DataTable/components/__tests__/DataTableErrorBoundary.test.tsx +37 -9
  148. package/src/components/DataTable/components/__tests__/EmptyState.test.tsx +7 -4
  149. package/src/components/DataTable/components/__tests__/FilterRow.test.tsx +12 -4
  150. package/src/components/DataTable/components/__tests__/LoadingState.test.tsx +41 -27
  151. package/src/components/DataTable/components/index.ts +2 -1
  152. package/src/components/DataTable/types.ts +0 -18
  153. package/src/components/DataTable/utils/a11yUtils.ts +17 -0
  154. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.test.tsx +2 -1
  155. package/src/components/DatePickerWithTimezone/DatePickerWithTimezone.tsx +11 -15
  156. package/src/components/DateTimeField/DateTimeField.tsx +7 -8
  157. package/src/components/Dialog/Dialog.test.tsx +1 -0
  158. package/src/components/Dialog/Dialog.tsx +25 -8
  159. package/src/components/ErrorBoundary/ErrorBoundary.tsx +77 -79
  160. package/src/components/FileUpload/FileUpload.test.tsx +52 -14
  161. package/src/components/FileUpload/FileUpload.tsx +112 -130
  162. package/src/components/Progress/Progress.tsx +2 -4
  163. package/src/components/ProtectedRoute/ProtectedRoute.tsx +8 -8
  164. package/src/components/Select/Select.tsx +86 -77
  165. package/src/components/Select/types.ts +3 -0
  166. package/src/hooks/__tests__/ServiceHooks.test.tsx +16 -16
  167. package/src/hooks/__tests__/hooks.integration.test.tsx +49 -49
  168. package/src/hooks/__tests__/useFocusTrap.unit.test.tsx +97 -97
  169. package/src/hooks/public/usePublicEvent.ts +5 -5
  170. package/src/hooks/public/usePublicEventLogo.ts +5 -5
  171. package/src/hooks/public/usePublicFileDisplay.ts +2 -2
  172. package/src/hooks/public/usePublicRouteParams.ts +5 -5
  173. package/src/hooks/useAppConfig.ts +2 -2
  174. package/src/hooks/useEventTheme.test.ts +7 -7
  175. package/src/hooks/useEventTheme.ts +1 -4
  176. package/src/hooks/useFileDisplay.ts +2 -2
  177. package/src/providers/UnifiedAuthProvider.smoke.test.tsx +21 -21
  178. package/src/providers/__tests__/AuthProvider.test.tsx +21 -21
  179. package/src/providers/__tests__/EventProvider.test.tsx +61 -61
  180. package/src/providers/__tests__/InactivityProvider.test.tsx +56 -56
  181. package/src/providers/__tests__/OrganisationProvider.test.tsx +75 -75
  182. package/src/providers/__tests__/ProviderLifecycle.test.tsx +37 -37
  183. package/src/providers/__tests__/UnifiedAuthProvider.test.tsx +103 -103
  184. package/src/providers/services/__tests__/AuthServiceProvider.integration.test.tsx +7 -7
  185. package/src/providers/services/__tests__/UnifiedAuthProvider.integration.test.tsx +10 -10
  186. package/src/styles/core.css +7 -0
  187. package/src/theming/__tests__/parseEventColours.test.ts +9 -3
  188. package/src/theming/parseEventColours.ts +22 -10
  189. package/src/utils/__tests__/lazyLoad.unit.test.tsx +42 -39
  190. package/src/utils/storage/README.md +1 -1
  191. package/cursor-rules/01-standards-compliance.mdc +0 -285
  192. package/cursor-rules/04-testing-standards.mdc +0 -270
  193. package/cursor-rules/05-bug-reports-and-features.mdc +0 -248
  194. package/cursor-rules/06-code-quality.mdc +0 -311
  195. package/cursor-rules/07-tech-stack-compliance.mdc +0 -216
  196. package/cursor-rules/10-error-handling-patterns.mdc +0 -179
  197. package/cursor-rules/11-performance-optimization.mdc +0 -169
  198. package/cursor-rules/12-ci-cd-integration.mdc +0 -150
  199. package/dist/DataTable-LRJL4IRV.js +0 -15
  200. package/dist/eslint-rules/rules/compliance.cjs +0 -348
  201. package/dist/eslint-rules/rules/components.cjs +0 -113
  202. package/dist/eslint-rules/rules/imports.cjs +0 -102
  203. package/docs/best-practices/README.md +0 -472
  204. package/docs/best-practices/accessibility.md +0 -604
  205. package/docs/best-practices/common-patterns.md +0 -516
  206. package/docs/best-practices/deployment.md +0 -1103
  207. package/docs/best-practices/performance.md +0 -1328
  208. package/docs/best-practices/security.md +0 -940
  209. package/docs/best-practices/testing.md +0 -1034
  210. package/docs/rbac/compliance/compliance-guide.md +0 -544
  211. package/docs/standards/01-standards-compliance.md +0 -188
  212. package/docs/standards/03-solid-principles.md +0 -39
  213. package/docs/standards/04-testing-standards.md +0 -36
  214. package/docs/standards/05-bug-reports-and-features.md +0 -27
  215. package/docs/standards/06-code-quality.md +0 -34
  216. package/docs/standards/07-tech-stack-compliance.md +0 -30
  217. package/docs/standards/10-error-handling-patterns.md +0 -401
  218. package/docs/standards/11-performance-optimization.md +0 -348
  219. package/docs/standards/12-ci-cd-integration.md +0 -370
  220. package/docs/standards/ALIGNMENT_REVIEW_SUMMARY.md +0 -192
  221. package/scripts/audit/audit-compliance.cjs +0 -1295
  222. package/scripts/audit/audit-components.cjs +0 -260
  223. package/scripts/audit/audit-rbac.cjs +0 -954
  224. package/scripts/audit/audit-standards.cjs +0 -1268
  225. package/scripts/audit/index.cjs +0 -1927
  226. package/src/components/DataTable/components/DataTableBody.tsx +0 -478
  227. package/src/components/DataTable/components/DraggableColumnHeader.tsx +0 -156
  228. package/src/components/DataTable/components/ExpandButton.tsx +0 -113
  229. package/src/components/DataTable/components/GroupHeader.tsx +0 -54
  230. package/src/components/DataTable/components/ViewRowModal.tsx +0 -68
  231. package/src/components/DataTable/components/VirtualizedDataTable.tsx +0 -525
  232. package/src/components/DataTable/components/__tests__/ExpandButton.test.tsx +0 -462
  233. package/src/components/DataTable/components/__tests__/GroupHeader.test.tsx +0 -393
  234. package/src/components/DataTable/components/__tests__/ViewRowModal.test.tsx +0 -476
  235. package/src/components/DataTable/components/__tests__/VirtualizedDataTable.test.tsx +0 -128
  236. package/src/components/DataTable/core/DataTableContext.tsx +0 -216
  237. package/src/components/DataTable/core/__tests__/DataTableContext.test.tsx +0 -136
  238. package/src/components/DataTable/hooks/__tests__/useColumnReordering.test.ts +0 -570
  239. package/src/components/DataTable/hooks/useColumnReordering.ts +0 -123
  240. package/src/components/DataTable/utils/debugTools.ts +0 -514
  241. package/src/eslint-rules/index.cjs +0 -22
  242. package/src/eslint-rules/rules/components.cjs +0 -113
  243. package/src/eslint-rules/rules/imports.cjs +0 -102
  244. package/src/eslint-rules/rules/rbac.cjs +0 -790
  245. package/src/eslint-rules/utils/helpers.cjs +0 -42
  246. package/src/eslint-rules/utils/manifest-loader.cjs +0 -75
@@ -1,104 +1,203 @@
1
- # 📚 PACE Standards — Master README
2
-
3
- ## Purpose
4
- This document is the single source of truth for all engineering standards for pace-core and consuming apps.
5
-
6
- ## pace-core Standards (aligned with Cursor rule filenames)
7
-
8
- Each standard document has a corresponding Cursor rule file (`.mdc`) that enforces the standard automatically. The numbering ensures traceability. Standards 00-09 are core standards, while 10-12 are enhanced standards covering additional best practices.
9
-
10
- | Standard | Cursor Rule | Purpose |
11
- |----------|------------|---------|
12
- | **00-pace-core-compliance.md** | `00-pace-core-compliance.mdc` | Enforce pace-core usage patterns and prevent custom solutions |
13
- | **01-standards-compliance.md** | `01-standards-compliance.mdc` | Enforce all pace-core standards across architecture, API, components, code style, security, testing, and RBAC/RLS |
14
- | **02-project-structure.md** | `02-project-structure.mdc` | Define standard folder structure and file organization |
15
- | **03-solid-principles.md** | `03-solid-principles.mdc` | Enforce SOLID architecture principles |
16
- | **04-testing-standards.md** | `04-testing-standards.mdc` | Enforce testing framework consistency and standards |
17
- | **05-bug-reports-and-features.md** | `05-bug-reports-and-features.mdc` | Standardized templates for bug reports and feature requests |
18
- | **06-code-quality.md** | `06-code-quality.mdc` | Enforce code quality standards including TypeScript, ESLint, formatting, performance, and accessibility |
19
- | **07-tech-stack-compliance.md** | `07-tech-stack-compliance.mdc` | Enforce tech stack compliance including Tailwind v4, React 19+, Supabase, and other required technologies |
20
- | **08-markup-quality.md** | `08-markup-quality.mdc` | Enforce clean markup standards, semantic HTML usage, and pace-core component patterns |
21
- | **09-rbac-compliance.md** | `09-rbac-compliance.mdc` | Enforce RBAC contract compliance - strict rules for permission checking, page protection, and RBAC usage patterns |
22
- | **10-error-handling-patterns.md** | `10-error-handling-patterns.mdc` | Enforce consistent error handling patterns including type-safe errors, user-friendly messages, and proper logging |
23
- | **11-performance-optimization.md** | `11-performance-optimization.mdc` | Enforce performance optimization patterns including React memoization, database query optimization, and caching strategies |
24
- | **12-ci-cd-integration.md** | `12-ci-cd-integration.mdc` | Enforce CI/CD integration patterns including automated quality checks, deployment processes, and security scanning |
25
-
26
- **Note**: Standards are human-readable documentation. Rules are AI-optimized directives for Cursor. Both should be kept in sync. Standards 00-09 are core standards, while 10-12 are enhanced standards covering additional best practices.
27
-
28
- ## Consuming App Standards
29
-
30
- All standards in this directory apply to consuming apps. The standards are organized by topic:
31
-
32
- ### Core Standards (00-09)
33
- These are fundamental standards that all consuming apps must follow:
34
- - **00-pace-core-compliance.md** - Use pace-core components, hooks, and utilities
35
- - **01-standards-compliance.md** - Meta-standard for precedence and traceability
36
- - **02-project-structure.md** - Standard folder structure and file organization
37
- - **03-solid-principles.md** - SOLID architecture principles
38
- - **04-testing-standards.md** - Testing framework consistency
39
- - **05-bug-reports-and-features.md** - Issue reporting templates
40
- - **06-code-quality.md** - TypeScript, ESLint, formatting, accessibility
41
- - **07-tech-stack-compliance.md** - Required technology versions
42
- - **08-markup-quality.md** - Clean markup, semantic HTML, CSS configuration
43
- - **09-rbac-compliance.md** - RBAC contract and RLS policy patterns
44
-
45
- ### Enhanced Standards (10-12)
46
- These are best practice standards for advanced patterns:
47
- - **10-error-handling-patterns.md** - Consistent error handling
48
- - **11-performance-optimization.md** - Performance best practices
49
- - **12-ci-cd-integration.md** - CI/CD pipeline patterns
50
-
51
- ## Precedence
52
- 1. Security
53
- 2. API/RPC
54
- 3. Components
55
- 4. Code Style
56
- 5. Testing
57
- 6. Documentation
58
- 7. Consuming App Standards
59
-
60
- ## AI Rules
61
- - Read relevant standards
62
- - Apply Cursor Checklists
63
- - Prefer pace-core for reusable logic
64
- - Update docs on API changes
65
-
66
- ## Cursor Rules
67
-
68
- pace-core provides comprehensive Cursor rules that automatically enforce these standards in consuming apps.
69
-
70
- ### Installation
71
-
72
- Install cursor rules in your consuming app:
73
-
74
- ```bash
75
- node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs
76
- ```
77
-
78
- ### Rule Files
79
-
80
- The cursor rules automatically enforce the corresponding standards. Each rule file (`.mdc`) is optimized for AI agents with:
81
- - Clear MUST/SHOULD/MAY directives
82
- - Decision trees for common scenarios
83
- - ✅/❌ code examples
84
- - Actionable checklists
85
-
86
- **Rule Standard Mapping:**
87
- - **00-pace-core-compliance.mdc** `00-pace-core-compliance.md`
88
- - **01-standards-compliance.mdc** `01-standards-compliance.md`
89
- - **02-project-structure.mdc** → `02-project-structure.md`
90
- - **03-solid-principles.mdc** `03-solid-principles.md`
91
- - **04-testing-standards.mdc** `04-testing-standards.md`
92
- - **05-bug-reports-and-features.mdc** `05-bug-reports-and-features.md`
93
- - **06-code-quality.mdc** `06-code-quality.md`
94
- - **07-tech-stack-compliance.mdc** → `07-tech-stack-compliance.md`
95
- - **08-markup-quality.mdc** `08-markup-quality.md`
96
- - **09-rbac-compliance.mdc** `09-rbac-compliance.md`
97
- - **10-error-handling-patterns.mdc** `10-error-handling-patterns.md`
98
- - **11-performance-optimization.mdc** `11-performance-optimization.md`
99
- - **12-ci-cd-integration.mdc** → `12-ci-cd-integration.md`
100
-
101
- ### Documentation
102
-
103
- - [Cursor Rules Quick Start](../getting-started/cursor-rules.md)
104
- - [Cursor Rules README](../../cursor-rules/README.md)
1
+ # Pace Standards
2
+
3
+ This repository defines the **canonical development standards** for **pace-core** and **all consuming applications** in the pace-suite.
4
+
5
+ These standards are **human-readable first**, but are deliberately structured so they can be **enforced by automation**, including Cursor rules, ESLint, and custom audit tooling.
6
+
7
+ They are the **single source of truth**.
8
+ All other quality tools must align *to these standards*, not reinterpret them.
9
+
10
+ ---
11
+
12
+ ## How to use these standards
13
+
14
+ ### pace-core
15
+ - Treat these standards as **hard constraints**
16
+ - pace-core sets the bar and defines the contracts
17
+ - Any deviation must be explicitly documented here
18
+
19
+ ### Consuming applications
20
+ - Inherit these standards by default
21
+ - Only diverge where a documented exception exists
22
+ - Consuming apps should never weaken standards silently
23
+
24
+ ### AI agents (Cursor, Codex, etc.)
25
+ - Follow these standards **strictly**
26
+ - Do **not** silence rules to "make things pass"
27
+ - If compliance is unclear, stop and report rather than guessing
28
+
29
+ ---
30
+
31
+ ## The Four Layers of Quality Enforcement
32
+
33
+ The pace-suite uses **four complementary quality layers**, each with a distinct responsibility.
34
+ They are intentionally overlapping in *coverage*, but **not duplicative in purpose**.
35
+
36
+ Think of this as *defence in depth*, not redundancy.
37
+
38
+ ---
39
+
40
+ ### 1. Standards Documents (Source of Truth)
41
+
42
+ **What they are**
43
+ - Human-readable `.md` documents
44
+ - Describe *intent*, *principles*, and *expectations*
45
+ - Technology-agnostic where possible
46
+
47
+ **What they are used for**
48
+ - Defining *what "good" looks like*
49
+ - Onboarding humans and AI agents
50
+ - Resolving ambiguity when tools disagree
51
+ - Designing new rules, lint checks, and audits
52
+
53
+ **What they are NOT**
54
+ - They are not executable
55
+ - They do not enforce anything by themselves
56
+ - They should not contain implementation hacks
57
+
58
+ ➡️ **If there is a conflict, the standards win.**
59
+
60
+ ---
61
+
62
+ ### 2. Cursor Rules (Real-time Guidance)
63
+
64
+ **What they are**
65
+ - AI-optimised interpretations of the standards
66
+ - Applied while code is being written or modified
67
+ - Prevent mistakes *before* they land
68
+
69
+ **What they are used for**
70
+ - Steering AI agents toward correct patterns
71
+ - Enforcing architectural intent during development
72
+ - Reducing rework later in linting or audits
73
+
74
+ **What they are NOT**
75
+ - They are not a replacement for lint or audits
76
+ - They should not invent new standards
77
+ - They should not silence problems "to move on"
78
+
79
+ ➡️ Cursor rules **translate standards into behaviour**, but do not redefine them.
80
+
81
+ ---
82
+
83
+ ### 3. ESLint (Fast, Local Static Analysis)
84
+
85
+ **What it is**
86
+ - Deterministic, file-level static analysis
87
+ - Runs locally and in CI
88
+ - Focused on correctness, safety, and consistency
89
+
90
+ **What it is used for**
91
+ - Catching obvious issues early (types, hooks, imports, patterns)
92
+ - Enforcing mechanically checkable rules
93
+ - Preventing regressions during refactors
94
+
95
+ **What it is NOT**
96
+ - ESLint should not encode complex business rules
97
+ - It should not contain subjective or architectural debates
98
+ - It should not be silenced to "get green builds"
99
+
100
+ ➡️ ESLint enforces *how code is written*, not *whether the system is correct*.
101
+
102
+ ---
103
+
104
+ ### 4. Audit Tool (Deep, System-Level Analysis)
105
+
106
+ **What it is**
107
+ - A custom static analysis tool
108
+ - Operates across files, folders, and systems
109
+ - Understands pace-core contracts and invariants
110
+
111
+ **What it is used for**
112
+ - Validating architectural compliance (RBAC, data access, boundaries)
113
+ - Catching issues ESLint cannot see
114
+ - Providing actionable remediation plans
115
+
116
+ **What it is NOT**
117
+ - It is not a linter replacement
118
+ - It should not report stylistic issues
119
+ - It should not contradict the standards
120
+
121
+ ➡️ The audit tool answers: *"Is this system actually compliant?"*
122
+
123
+ ---
124
+
125
+ ## How the layers work together
126
+
127
+ | Layer | Strength | Timing |
128
+ |--------------|----------------------------------|-----------------|
129
+ | Standards | Intent & clarity | Design time |
130
+ | Cursor rules | Preventive guidance | Write time |
131
+ | ESLint | Fast mechanical enforcement | Dev / CI |
132
+ | Audit tool | Deep architectural verification | Review / CI |
133
+
134
+ No single layer is sufficient on its own.
135
+ Together, they create a **repeatable, scalable quality system** for both humans and AI.
136
+
137
+ ---
138
+
139
+ ## Standards Documents
140
+
141
+ The standards are organized into **10 files**, each covering a specific domain:
142
+
143
+ ### 0. [Standards Overview](./0-standards-overview.md)
144
+ Entry point, precedence, how standards work, and the four layers of quality enforcement.
145
+
146
+ ### 1. [pace-core Compliance](./1-pace-core-compliance-standards.md)
147
+ pace-core usage patterns, ESLint rules, secure Supabase client requirements, and compliance enforcement.
148
+
149
+ ### 2. [Project Structure](./2-project-structure-standards.md)
150
+ Standard directory structure, file organization patterns, naming conventions, and migration guides.
151
+
152
+ ### 3. [Architecture](./3-architecture-standards.md)
153
+ SOLID principles, component design, API design, and architectural patterns.
154
+
155
+ ### 4. [Code Quality](./4-code-quality-standards.md)
156
+ TypeScript rules, naming conventions, code style patterns, and React patterns.
157
+
158
+ ### 5. [Styling](./5-styling-standards.md)
159
+ **CRITICAL:** Required CSS configuration, Tailwind v4 setup, markup quality, and styling patterns.
160
+
161
+ ### 6. [Security & RBAC](./6-security-rbac-standards.md)
162
+ RLS policy patterns, RBAC integration, helper functions, and security requirements.
163
+
164
+ ### 7. [API & Tech Stack](./7-api-tech-stack-standards.md)
165
+ Required tech stack, API/RPC naming conventions, result shapes, and deprecation policy.
166
+
167
+ ### 8. [Testing & Documentation](./8-testing-documentation-standards.md)
168
+ Testing strategy, documentation requirements, bug report templates, and feature request templates.
169
+
170
+ ### 9. [Operations](./9-operations-standards.md)
171
+ Error handling patterns, performance optimization, caching strategies, and CI/CD integration.
172
+
173
+ ---
174
+
175
+ ## Key Principles
176
+
177
+ - **Do not silence tools** — fix the underlying issue
178
+ - **Do not duplicate rules** — each layer has a purpose
179
+ - **Do not diverge silently** — document exceptions explicitly
180
+ - **Standards always win** — tools must align to them
181
+
182
+ ---
183
+
184
+ ## Getting Started
185
+
186
+ 1. **Read the Overview** - Start with [0-standards-overview.md](./0-standards-overview.md) to understand the system
187
+ 2. **Review Critical Standards** - Pay special attention to:
188
+ - [5-styling-standards.md](./5-styling-standards.md) - **CRITICAL CSS configuration**
189
+ - [1-pace-core-compliance-standards.md](./1-pace-core-compliance-standards.md) - pace-core usage
190
+ - [6-security-rbac-standards.md](./6-security-rbac-standards.md) - Security and RBAC
191
+ 3. **Set Up Quality Enforcement** - Install Cursor rules and ESLint config:
192
+ - `npm run setup:cursor-rules` - Install Cursor rules for AI-assisted enforcement
193
+ - `npm run setup:eslint` - Install ESLint config for real-time linting
194
+ 4. **Run Audits** - Use the audit tool to validate compliance:
195
+ - `npm run audit:pace-core` - Run comprehensive audit organized by standards
196
+ 5. **Follow the Standards** - Use the standards as your guide for all development work
197
+ 6. **Reference When Needed** - Use the standards to resolve conflicts and answer questions
198
+
199
+ ---
200
+
201
+ **Last Updated:** 2025-01-28
202
+ **Version:** 2.0.0
203
+ **Applies to:** All pace-core and consuming apps
@@ -84,7 +84,7 @@ import '@jmruthers/pace-core/src/styles/core.css';
84
84
  ```tsx
85
85
  // ✅ Check if user has proper context
86
86
  const { hasPermission, isLoading } = useCan();
87
- if (isLoading) return <div>Loading permissions...</div>;
87
+ if (isLoading) return <p>Loading permissions...</p>;
88
88
 
89
89
  // ✅ Ensure proper scope
90
90
  <PermissionGuard
@@ -525,8 +525,8 @@ function useDebugRender(componentName: string, props?: any) {
525
525
  function MyComponent({ data, loading }) {
526
526
  useDebugRender('MyComponent', { data, loading });
527
527
 
528
- if (loading) return <div>Loading...</div>;
529
- return <div>{data}</div>;
528
+ if (loading) return <p>Loading...</p>;
529
+ return <p>{data}</p>;
530
530
  }
531
531
  ```
532
532
 
@@ -922,5 +922,5 @@ When issues occur intermittently:
922
922
  - [Common Issues](./common-issues.md) - Specific problem solutions
923
923
  - [Styling Issues](./styling-issues.md) - Component styling problems
924
924
  - [Authentication Guide](../implementation-guides/authentication.md) - Auth troubleshooting
925
- - [Performance Guide](../best-practices/performance.md) - Performance debugging
925
+ - [Performance Optimization](../standards/9-operations-standards.md#performance-optimization) - Performance debugging
926
926
  - [API Reference](../api-reference/) - Component documentation
@@ -142,7 +142,7 @@ import { useUnifiedAuth } from '@jmruthers/pace-core'
142
142
  function DebugComponent() {
143
143
  const auth = useUnifiedAuth()
144
144
  console.log('Auth context:', auth)
145
- return <div>Check console for auth context</div>
145
+ return <p>Check console for auth context</p>
146
146
  }
147
147
  ```
148
148
 
@@ -154,7 +154,7 @@ import { useRBAC } from '@jmruthers/pace-core'
154
154
  function DebugRBAC() {
155
155
  const rbac = useRBAC()
156
156
  console.log('RBAC context:', rbac)
157
- return <div>Check console for RBAC context</div>
157
+ return <p>Check console for RBAC context</p>
158
158
  }
159
159
  ```
160
160
 
@@ -46,8 +46,8 @@ function useDebugRender(componentName: string, props?: any) {
46
46
  function MyComponent({ data, loading }) {
47
47
  useDebugRender('MyComponent', { data, loading });
48
48
 
49
- if (loading) return <div>Loading...</div>;
50
- return <div>{data}</div>;
49
+ if (loading) return <p>Loading...</p>;
50
+ return <p>{data}</p>;
51
51
  }
52
52
  ```
53
53
 
@@ -205,7 +205,7 @@ function MyComponent() {
205
205
  prevState.current = state;
206
206
  }, [state]);
207
207
 
208
- return <div>{state.count}</div>;
208
+ return <p>{state.count}</p>;
209
209
  }
210
210
  ```
211
211
 
@@ -273,7 +273,7 @@ function ExpensiveComponent() {
273
273
  useRenderDebug('ExpensiveComponent');
274
274
 
275
275
  // Component logic here
276
- return <div>Expensive content</div>;
276
+ return <p>Expensive content</p>;
277
277
  }
278
278
  ```
279
279
 
@@ -320,11 +320,11 @@ export function useAuthDebug() {
320
320
  function AuthDebugger() {
321
321
  const auth = useAuthDebug();
322
322
 
323
- if (auth.loading) return <div>Loading auth...</div>;
324
- if (auth.error) return <div>Auth error: {auth.error}</div>;
325
- if (!auth.user) return <div>Not authenticated</div>;
323
+ if (auth.loading) return <p>Loading auth...</p>;
324
+ if (auth.error) return <p>Auth error: {auth.error}</p>;
325
+ if (!auth.user) return <p>Not authenticated</p>;
326
326
 
327
- return <div>Authenticated as: {auth.user.email}</div>;
327
+ return <p>Authenticated as: {auth.user.email}</p>;
328
328
  }
329
329
  ```
330
330
 
@@ -589,7 +589,7 @@ function MyComponent() {
589
589
  useMemoryLeakDetection('MyComponent');
590
590
 
591
591
  // Component logic
592
- return <div>Content</div>;
592
+ return <p>Content</p>;
593
593
  }
594
594
  ```
595
595
 
@@ -31,10 +31,10 @@ function MyComponent() {
31
31
  const { hasPermission } = usePermissions();
32
32
 
33
33
  return (
34
- <div>
34
+ <section>
35
35
  {user && <p>Welcome, {user.email}</p>}
36
36
  {hasPermission('read:users') && <UserList />}
37
- </div>
37
+ </section>
38
38
  );
39
39
  }
40
40
 
@@ -47,10 +47,10 @@ function MyComponent() {
47
47
  const { hasPermission } = useCan();
48
48
 
49
49
  return (
50
- <div>
50
+ <section>
51
51
  {user && <p>Welcome, {user.email}</p>}
52
52
  {hasPermission('read:users') && <UserList />}
53
- </div>
53
+ </section>
54
54
  );
55
55
  }
56
56
  ```
@@ -31,11 +31,11 @@ try {
31
31
  console.warn('Warning: Could not load core-usage-manifest.json for ESLint config');
32
32
  }
33
33
 
34
- // Load pace-core compliance rules
34
+ // Load pace-core ESLint rules
35
35
  let paceCoreRules = {};
36
36
  try {
37
- // Try source path first (for development)
38
- const sourceRulesPath = path.resolve(__dirname, 'src/eslint-rules/index.cjs');
37
+ // Try source path first (for development) - new location at package root
38
+ const sourceRulesPath = path.resolve(__dirname, 'eslint-rules/index.cjs');
39
39
  if (fs.existsSync(sourceRulesPath)) {
40
40
  paceCoreRules = require(sourceRulesPath).rules;
41
41
  } else {
@@ -77,20 +77,23 @@ module.exports = [
77
77
  }
78
78
  },
79
79
  rules: {
80
- // Import rules
80
+ // Standard 1: pace-core Compliance
81
81
  'pace-core-compliance/no-restricted-imports': 'error',
82
-
83
- // Compliance rules
84
82
  'pace-core-compliance/prefer-pace-core-components': 'warn',
85
83
  'pace-core-compliance/prefer-pace-core-hooks': 'warn',
86
84
  'pace-core-compliance/prefer-pace-core-utils': 'warn',
87
85
  'pace-core-compliance/no-local-component-duplication': 'error',
88
- 'pace-core-compliance/no-inline-styles': 'error',
89
-
90
- // Component rules
91
86
  'pace-core-compliance/prefer-pace-core-form': 'error',
92
87
 
93
- // RBAC rules
88
+ // Standard 4: Code Quality
89
+ 'pace-core-compliance/naming-convention': 'warn',
90
+ 'pace-core-compliance/component-naming': 'warn',
91
+ 'pace-core-compliance/type-naming': 'warn',
92
+
93
+ // Standard 5: Styling
94
+ 'pace-core-compliance/no-inline-styles': 'error',
95
+
96
+ // Standard 6: Security & RBAC
94
97
  'pace-core-compliance/no-direct-supabase-client': 'error',
95
98
  'pace-core-compliance/rbac-permission-loading': 'error',
96
99
  'pace-core-compliance/no-direct-rbac-rpc': 'error',
@@ -100,6 +103,14 @@ module.exports = [
100
103
  'pace-core-compliance/no-rbac-wrapper-components': 'error',
101
104
  'pace-core-compliance/no-rbac-wrapper-functions': 'error',
102
105
 
106
+ // Standard 7: API & Tech Stack
107
+ 'pace-core-compliance/rpc-naming-pattern': 'warn',
108
+ 'pace-core-compliance/no-class-components': 'error',
109
+ 'pace-core-compliance/prefer-import-meta-env': 'error',
110
+
111
+ // Standard 8: Testing
112
+ 'pace-core-compliance/test-file-naming': 'warn',
113
+
103
114
  // Also use standard no-restricted-imports (ESLint 9 flat config format)
104
115
  // Note: ESLint 9 uses a simpler array format
105
116
  'no-restricted-imports': ['error', ...restrictedImportRules]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jmruthers/pace-core",
3
- "version": "0.6.6",
3
+ "version": "0.6.7",
4
4
  "description": "React component library with Tailwind v4",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -79,8 +79,6 @@
79
79
  "./core-usage-manifest.json": "./core-usage-manifest.json",
80
80
  "./cursor-rules": "./cursor-rules",
81
81
  "./scripts/install-cursor-rules": "./scripts/install-cursor-rules.cjs",
82
- "./scripts/audit-dependencies": "./scripts/audit/audit-dependencies.cjs",
83
- "./scripts/audit": "./scripts/audit/index.cjs",
84
82
  "./source": {
85
83
  "import": "./src/index.ts",
86
84
  "default": "./src/index.ts"
@@ -153,7 +151,8 @@
153
151
  "core-usage-manifest.json",
154
152
  "eslint-config-pace-core.cjs",
155
153
  "scripts",
156
- "cursor-rules"
154
+ "cursor-rules",
155
+ "audit-tool"
157
156
  ],
158
157
  "scripts": {
159
158
  "_comment_build": "Build package and documentation",
@@ -198,7 +197,9 @@
198
197
  "docs:generate": "node scripts/generate-docs.js generate",
199
198
  "docs:update-index": "node scripts/generate-docs.js update-index",
200
199
  "docs:generate-api": "node scripts/generate-docs.js generate-api",
201
- "docs:all": "node scripts/generate-docs.js all"
200
+ "docs:all": "node scripts/generate-docs.js all",
201
+ "_comment_audit": "Audit tool for consuming apps",
202
+ "audit:pace-core": "node packages/core/audit-tool/index.cjs"
202
203
  },
203
204
  "keywords": [
204
205
  "react",