@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
- # pace-core Compliance Enforcement
1
+ # pace-core Compliance Standards
2
2
 
3
- **🤖 Cursor Rule**: See [00-pace-core-compliance.mdc](../../cursor-rules/00-pace-core-compliance.mdc) for AI-optimized directives that automatically enforce these standards.
3
+ **🤖 Cursor Rule**: See [01-pace-core-compliance.mdc](../../cursor-rules/01-pace-core-compliance.mdc) for AI-optimized directives that automatically enforce these standards.
4
4
 
5
5
  This guide explains how to enforce pace-core usage patterns in consuming apps to ensure consistent design, reduce duplication, and maintain high code quality.
6
6
 
@@ -8,8 +8,8 @@ This guide explains how to enforce pace-core usage patterns in consuming apps to
8
8
 
9
9
  pace-core provides a comprehensive enforcement system that includes:
10
10
 
11
- 1. **ESLint Rules** - Real-time linting during development (15 rules)
12
- 2. **Static Analysis Script** - Comprehensive codebase scanning for file-system and config checks
11
+ 1. **ESLint Rules** - Real-time linting during development (organized by standards: 01, 04, 05, 06, 07, 08)
12
+ 2. **Audit Tool** - Comprehensive system-level analysis organized by standards (01-09)
13
13
  3. **ESLint Config Preset** - Easy setup for consuming apps
14
14
  4. **Cursor Rules Integration** - AI-assisted enforcement via Cursor IDE
15
15
 
@@ -63,16 +63,17 @@ npm install @jmruthers/pace-core
63
63
 
64
64
  ### Step 2: Setup ESLint (Recommended)
65
65
 
66
- **Option A: Automated Setup (Easiest)**
66
+ **Automated Setup (Easiest)**
67
67
 
68
- Use the installation script to set up both Cursor rules and ESLint:
68
+ Use the installation script to set up ESLint:
69
69
 
70
70
  ```bash
71
- node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs
71
+ npm run setup:eslint
72
+ # or
73
+ node node_modules/@jmruthers/pace-core/scripts/install-eslint-config.cjs
72
74
  ```
73
75
 
74
76
  This script will:
75
- - ✅ Install Cursor rules to `.cursor/rules/`
76
77
  - ✅ Configure ESLint to use pace-core rules
77
78
  - ✅ Create `eslint.config.js` if it doesn't exist
78
79
  - ✅ Add pace-core config to existing ESLint config
@@ -80,8 +81,6 @@ This script will:
80
81
 
81
82
  **Options:**
82
83
  - `--force` - Force update even if already configured
83
- - `--skip-cursor` - Skip Cursor rules installation
84
- - `--skip-eslint` - Skip ESLint config setup
85
84
 
86
85
  **Option B: Manual Setup**
87
86
 
@@ -132,9 +131,41 @@ export default [
132
131
  ];
133
132
  ```
134
133
 
134
+ **Example with `tseslint.config()` wrapper:**
135
+ ```javascript
136
+ // eslint.config.js
137
+ import tseslint from 'typescript-eslint';
138
+ import paceCoreConfig from '@jmruthers/pace-core/eslint-config';
139
+
140
+ export default tseslint.config(
141
+ ...paceCoreConfig, // Spread pace-core config as first arguments
142
+ // your other config objects
143
+ );
144
+ ```
145
+
135
146
  ### Step 3: Setup Cursor Rules (Optional but Recommended)
136
147
 
137
- To enable AI-assisted enforcement in Cursor IDE, copy the pace-core cursor rules to your project:
148
+ **Automated Setup (Easiest)**
149
+
150
+ Use the installation script to set up Cursor rules:
151
+
152
+ ```bash
153
+ npm run setup:cursor-rules
154
+ # or
155
+ node node_modules/@jmruthers/pace-core/scripts/install-cursor-rules.cjs
156
+ ```
157
+
158
+ This script will:
159
+ - ✅ Install Cursor rules to `.cursor/rules/`
160
+ - ✅ Create backups before updating existing rules
161
+ - ✅ Automatically update pace-core rules when they change
162
+
163
+ **Options:**
164
+ - `--force` - Force update even if already configured
165
+
166
+ **Manual Setup (Alternative)**
167
+
168
+ To manually enable AI-assisted enforcement in Cursor IDE, copy the pace-core cursor rules to your project:
138
169
 
139
170
  ```bash
140
171
  # Create .cursor/rules directory if it doesn't exist
@@ -144,7 +175,7 @@ mkdir -p .cursor/rules
144
175
  cp node_modules/@jmruthers/pace-core/cursor-rules/*.mdc .cursor/rules/
145
176
  ```
146
177
 
147
- Or manually create `.cursor/rules/00-pace-core-compliance.mdc` and reference the pace-core rules:
178
+ Or manually create `.cursor/rules/01-pace-core-compliance.mdc` and reference the pace-core rules:
148
179
 
149
180
  ```markdown
150
181
  ---
@@ -155,7 +186,7 @@ alwaysApply: false
155
186
 
156
187
  # pace-core Compliance
157
188
 
158
- **📚 Full Documentation**: See [pace-core compliance docs](node_modules/@jmruthers/pace-core/docs/standards/00-pace-core-compliance.md)
189
+ **📚 Full Documentation**: See [pace-core compliance docs](node_modules/@jmruthers/pace-core/docs/standards/1-pace-core-compliance-standards.md)
159
190
 
160
191
  **🔧 ESLint Setup**: Ensure ESLint is configured with `@jmruthers/pace-core/eslint-config`
161
192
 
@@ -179,63 +210,32 @@ See the full documentation for complete rules and examples.
179
210
  - Works alongside ESLint for comprehensive enforcement
180
211
  - Provides explanations and examples in real-time
181
212
 
182
- ### Option 2: Manual ESLint Rules Setup
183
-
184
- If you prefer more control, you can import the rules directly. Note: The rules are CommonJS, so use `createRequire` in ES modules:
213
+ ## ESLint Rules
185
214
 
186
- **For ES Module ESLint Config:**
187
- ```javascript
188
- // eslint.config.js
189
- import { createRequire } from 'module';
190
- const require = createRequire(import.meta.url);
191
- const paceCoreRules = require('@jmruthers/pace-core/eslint-rules').rules;
215
+ pace-core provides ESLint rules organized by standards (01, 04, 05, 06, 07, 08). Rules are organized to match the 10-file standards structure:
192
216
 
193
- export default [
194
- {
195
- plugins: {
196
- 'pace-core-compliance': {
197
- rules: paceCoreRules
198
- }
199
- },
200
- rules: {
201
- 'pace-core-compliance/no-restricted-imports': 'error',
202
- 'pace-core-compliance/prefer-pace-core-components': 'warn',
203
- 'pace-core-compliance/prefer-pace-core-hooks': 'warn',
204
- 'pace-core-compliance/prefer-pace-core-utils': 'warn',
205
- 'pace-core-compliance/no-local-component-duplication': 'error'
206
- }
207
- }
208
- ];
209
- ```
217
+ - **Standard 1 (pace-core Compliance)**: 6 rules
218
+ - **Standard 4 (Code Quality)**: 3 rules
219
+ - **Standard 5 (Styling)**: 1 rule
220
+ - **Standard 6 (Security & RBAC)**: 8 rules
221
+ - **Standard 7 (API & Tech Stack)**: 3 rules
222
+ - **Standard 8 (Testing)**: 1 rule
210
223
 
211
- **For CommonJS ESLint Config:**
212
- ```javascript
213
- // eslint.config.cjs
214
- const paceCoreRules = require('@jmruthers/pace-core/eslint-rules').rules;
224
+ **Total: 22 rules** organized across 6 standards files.
215
225
 
216
- module.exports = [
217
- {
218
- plugins: {
219
- 'pace-core-compliance': {
220
- rules: paceCoreRules
221
- }
222
- },
223
- rules: {
224
- 'pace-core-compliance/no-restricted-imports': 'error',
225
- 'pace-core-compliance/prefer-pace-core-components': 'warn',
226
- 'pace-core-compliance/prefer-pace-core-hooks': 'warn',
227
- 'pace-core-compliance/prefer-pace-core-utils': 'warn',
228
- 'pace-core-compliance/no-local-component-duplication': 'error'
229
- }
230
- }
231
- ];
232
- ```
226
+ ### Rule Organization
233
227
 
234
- ## ESLint Rules
228
+ Rules are organized in `packages/core/eslint-rules/rules/`:
229
+ - `01-pace-core-compliance.cjs` - pace-core usage patterns
230
+ - `04-code-quality.cjs` - Naming conventions, component/type naming
231
+ - `05-styling.cjs` - Inline styles
232
+ - `06-security-rbac.cjs` - Security and RBAC patterns
233
+ - `07-api-tech-stack.cjs` - RPC naming, React 19+, import.meta.env
234
+ - `08-testing.cjs` - Test file naming
235
235
 
236
- pace-core provides **15 ESLint rules** organized into four categories:
236
+ ### Detailed Rule Descriptions
237
237
 
238
- ### Import Rules
238
+ #### Import Rules
239
239
 
240
240
  #### no-restricted-imports
241
241
 
@@ -603,25 +603,6 @@ The script generates a color-coded terminal report showing:
603
603
  - 💡 **Suggestions** - Recommendations for improvement
604
604
  - ✅ **Summary** - Overall compliance status
605
605
 
606
- Example output:
607
- ```
608
- ═══════════════════════════════════════════════════════════
609
- pace-core Compliance Report
610
- ═══════════════════════════════════════════════════════════
611
-
612
- ❌ Restricted Imports Found: 3
613
-
614
- • src/components/CustomDialog.tsx:5
615
- Import: @radix-ui/react-dialog
616
- Reason: Use Dialog component from pace-core instead
617
-
618
- Summary:
619
- Total Issues: 3
620
- - Restricted Imports: 3
621
- - Duplicate Components/Hooks/Utils: 0
622
- - Suggestions: 0
623
- ```
624
-
625
606
  ## Best Practices
626
607
 
627
608
  ### 1. Always Import from pace-core
@@ -683,116 +664,93 @@ Before creating a new component, check if pace-core already provides it:
683
664
  2. Check `core-usage-manifest.json` for available components
684
665
  3. Search pace-core exports
685
666
 
686
- ## Troubleshooting
687
-
688
- ### ESLint Rules Not Working
689
-
690
- 1. **Verify plugin is loaded**: Check that the config is imported correctly:
691
- ```javascript
692
- // In your eslint.config.js, add temporarily:
693
- import paceCoreConfig from '@jmruthers/pace-core/eslint-config';
694
- console.log('Config:', paceCoreConfig);
695
- console.log('Has plugins:', paceCoreConfig[0]?.plugins);
696
- ```
697
-
698
- 2. **Check rule names**: Rules must be prefixed with `pace-core-compliance/`
667
+ ## MUST: Provider Nesting Order
699
668
 
700
- 3. **Verify manifest exists**: Rules load from `core-usage-manifest.json` in the pace-core package
669
+ **⚠️ CRITICAL: Provider nesting order matters!** Incorrect nesting causes React context errors.
701
670
 
702
- 4. **CommonJS/ES Module issues**: If you're using ES modules and rules aren't loading:
703
- - Ensure you're using the config preset (Option 1) which handles this automatically
704
- - Or use `createRequire` when importing rules directly (Option 2)
671
+ **MUST** nest providers in this exact order (outermost to innermost):
705
672
 
706
- 5. **Verify rules are available**: Check that the rules file exists:
707
- ```bash
708
- ls node_modules/@jmruthers/pace-core/dist/eslint-rules/index.cjs
709
- ```
673
+ 1. `QueryClientProvider` (outermost)
674
+ 2. `BrowserRouter`
675
+ 3. `UnifiedAuthProvider`
676
+ 4. `OrganisationProvider`
677
+ 5. `App` (innermost)
710
678
 
711
- 6. **Check rule count**: Verify all 15 rules are loaded:
712
- ```bash
713
- node -e "const rules = require('@jmruthers/pace-core/eslint-rules'); console.log('Rules:', Object.keys(rules.rules).length);"
714
- ```
715
- Should output: `Rules: 15`
716
-
717
- ### Static Analysis Script Errors
718
-
719
- 1. **Manifest not found**: Ensure `core-usage-manifest.json` exists in pace-core package
720
- 2. **No files scanned**: Check that you're running from the project root
721
- 3. **Permission errors**: Ensure script has read access to source files
722
-
723
- ### False Positives
724
-
725
- If you encounter false positives:
726
-
727
- 1. **Component name conflicts**: If you have a legitimate reason to create a local component with a pace-core name, consider:
728
- - Renaming your component
729
- - Using a namespace/prefix
730
- - Documenting why pace-core doesn't meet your needs
731
-
732
- 2. **Hook/Util patterns**: The pattern matching may flag similar names. Review the suggestion and decide if migration makes sense.
733
-
734
- ## Integration with CI/CD
735
-
736
- While CI/CD integration is not included in the initial release, you can easily add it:
737
-
738
- ```yaml
739
- # .github/workflows/pace-core-compliance.yml
740
- name: pace-core Compliance
679
+ ```tsx
680
+ // ✅ CORRECT: main.tsx
681
+ import { BrowserRouter } from 'react-router-dom';
682
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
683
+ import { UnifiedAuthProvider, OrganisationProvider } from '@jmruthers/pace-core';
684
+ import { createClient } from '@supabase/supabase-js';
741
685
 
742
- on: [push, pull_request]
686
+ const queryClient = new QueryClient();
687
+ const supabase = createClient(
688
+ import.meta.env.VITE_SUPABASE_URL,
689
+ import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY
690
+ );
743
691
 
744
- jobs:
745
- compliance:
746
- runs-on: ubuntu-latest
747
- steps:
748
- - uses: actions/checkout@v3
749
- - uses: actions/setup-node@v3
750
- - run: npm ci
751
- - run: npm run check:pace-core
752
- - run: npm run lint
692
+ createRoot(document.getElementById("root")!).render(
693
+ <QueryClientProvider client={queryClient}>
694
+ <BrowserRouter>
695
+ <UnifiedAuthProvider supabaseClient={supabase} appName="YourApp">
696
+ <OrganisationProvider>
697
+ <App />
698
+ </OrganisationProvider>
699
+ </UnifiedAuthProvider>
700
+ </BrowserRouter>
701
+ </QueryClientProvider>
702
+ );
753
703
  ```
754
704
 
755
- ## Verification
756
-
757
- After setting up the ESLint config, verify it's working:
758
-
759
- 1. **Check ESLint can load the config**:
760
- ```bash
761
- npx eslint --print-config src/App.tsx
762
- ```
763
- Look for `pace-core-compliance` in the plugins section.
764
-
765
- 2. **Test with a violation**: Create a test file that imports a restricted library:
766
- ```typescript
767
- // test-violation.ts
768
- import { Dialog } from '@radix-ui/react-dialog'; // Should trigger error
769
- ```
770
- Run ESLint and verify it reports the violation.
705
+ **Common mistakes to avoid:**
706
+ - ❌ `BrowserRouter` inside `UnifiedAuthProvider` (causes Router context errors)
707
+ - `UnifiedAuthProvider` wrapping `BrowserRouter` (causes context errors)
708
+ - ❌ Missing `BrowserRouter` (causes `useNavigate` errors)
771
709
 
772
- 3. **Run static analysis**: Use the compliance script to get a full report:
773
- ```bash
774
- npm run check:pace-core
775
- ```
710
+ ## MUST: Vite Configuration
776
711
 
777
- ## Getting Help
712
+ **⚠️ CRITICAL: Vite configuration prevents React context mismatches!**
778
713
 
779
- - **Documentation**: See [pace-core docs](../README.md)
780
- - **Issues**: Report false positives or rule issues
781
- - **Manifest**: Check `core-usage-manifest.json` for available exports
782
- - **ESLint Config**: The config file is at `@jmruthers/pace-core/eslint-config` (CommonJS)
783
- - **ESLint Rules**: The rules are at `@jmruthers/pace-core/eslint-rules` (CommonJS)
714
+ **MUST** configure Vite to exclude `@jmruthers/pace-core` and `react-router-dom` from pre-bundling:
784
715
 
785
- ## File Locations
716
+ ```typescript
717
+ // vite.config.ts
718
+ import { defineConfig } from 'vite';
719
+ import react from '@vitejs/plugin-react';
720
+ import path from 'path';
721
+
722
+ export default defineConfig({
723
+ plugins: [react()],
724
+ resolve: {
725
+ alias: {
726
+ '@': path.resolve(__dirname, './src'),
727
+ },
728
+ // CRITICAL: Dedupe React dependencies
729
+ dedupe: ['react', 'react-dom', 'react-router-dom'],
730
+ },
731
+ optimizeDeps: {
732
+ include: [
733
+ 'react',
734
+ 'react-dom',
735
+ 'react/jsx-runtime',
736
+ ],
737
+ // CRITICAL: Exclude pace-core to prevent React context mismatches
738
+ exclude: ['@jmruthers/pace-core', 'react-router-dom'],
739
+ },
740
+ });
741
+ ```
786
742
 
787
- When installed in a consuming app, the compliance tools are available at:
743
+ **Why this matters:**
744
+ - Pre-bundling `@jmruthers/pace-core` creates separate React instances
745
+ - This causes "useUnifiedAuth must be used within a UnifiedAuthProvider" errors
746
+ - Excluding it ensures pace-core uses the same React instance as your app
747
+ - `react-router-dom` must also be excluded and deduped to prevent Router context errors
788
748
 
789
- - **ESLint Config**: `node_modules/@jmruthers/pace-core/eslint-config-pace-core.cjs`
790
- - **ESLint Rules**: `node_modules/@jmruthers/pace-core/dist/eslint-rules/index.cjs`
791
- - **Rule Modules**: `node_modules/@jmruthers/pace-core/dist/eslint-rules/rules/*.cjs`
792
- - **Rule Utils**: `node_modules/@jmruthers/pace-core/dist/eslint-rules/utils/*.cjs`
793
- - **Static Analysis Script**: `node_modules/@jmruthers/pace-core/scripts/check-pace-core-compliance.cjs`
794
- - **Manifest**: `node_modules/@jmruthers/pace-core/core-usage-manifest.json`
795
- - **Cursor Rules**: `node_modules/@jmruthers/pace-core/cursor-rules/*.mdc`
749
+ **If you encounter context errors:**
750
+ 1. Verify `@jmruthers/pace-core` is in `optimizeDeps.exclude`
751
+ 2. Verify `react-router-dom` is in both `resolve.dedupe` and `optimizeDeps.exclude`
752
+ 3. Clear Vite cache: `rm -rf node_modules/.vite`
753
+ 4. Restart dev server
796
754
 
797
755
  ## MUST: Use Secure Supabase Client
798
756
 
@@ -906,7 +864,23 @@ function useSecureSupabase(
906
864
 
907
865
  **NO OTHER EXCEPTIONS ARE PERMITTED** - All other uses of `createClient()` are security violations and MUST be fixed.
908
866
 
909
- ### Detection / Audit
867
+ ### Detection / Audit Tool
868
+
869
+ The audit tool (`npm run audit:pace-core`) performs comprehensive system-level analysis organized by standards:
870
+
871
+ - **Standard 1 (pace-core Compliance)**: Provider nesting, core styles import, RBAC setup, Vite aliases, secure Supabase client location, Cursor rules, ESLint config
872
+ - **Standard 2 (Project Structure)**: Directory structure, config files, import paths, test colocation, Supabase structure
873
+ - **Standard 3 (Architecture)**: Component boundaries, ApiResult usage
874
+ - **Standard 4 (Code Quality)**: TypeScript config, test coverage config
875
+ - **Standard 5 (Styling)**: app.css structure, Tailwind v4 config
876
+ - **Standard 6 (Security & RBAC)**: RLS policies, PagePermissionGuard coverage, Edge Functions RBAC
877
+ - **Standard 7 (API & Tech Stack)**: RPC naming in SQL, tech stack versions, Vite config
878
+ - **Standard 8 (Testing & Documentation)**: Test timeout config, testing tools, test structure
879
+ - **Standard 9 (Operations)**: Error handling patterns, CI/CD config, error boundaries
880
+
881
+ **Reference**: See [packages/core/audit-tool/](../../audit-tool/) for audit tool implementation.
882
+
883
+ ### Detection / Audit (Legacy)
910
884
 
911
885
  - `rg "createClient\(" src` must return **exactly ONE match** in the file that creates the base client for `UnifiedAuthProvider`.
912
886
  - That file MUST be one of: `main.tsx`, `App.tsx`, or `lib/supabase.ts` (or `.jsx`/`.js` equivalents).
@@ -938,8 +912,10 @@ If you encounter a situation where a rule seems to conflict with a legitimate re
938
912
  **Example of proper documentation:**
939
913
  ```tsx
940
914
  // @pace-core-compliance-exception: Legacy integration requires direct Supabase client
941
- // TODO: Migrate to useSecureSupabase() when legacy system is updated
942
- // See: https://github.com/your-org/pace-core/issues/123
915
+ // Reason: Third-party service requires unauthenticated client for initial handshake
916
+ // Migration plan: Migrate to useSecureSupabase() when legacy system is updated (Q2 2025)
917
+ // Tracking issue: https://github.com/your-org/pace-core/issues/123
918
+ // Expected removal date: Q2 2025
943
919
  const legacyClient = createClient(...);
944
920
  ```
945
921
 
@@ -958,10 +934,90 @@ During audits, documented exceptions will be:
958
934
 
959
935
  **Invalid exceptions** (undocumented, unnecessary, or security-related) will be flagged as violations requiring remediation.
960
936
 
937
+ ## Troubleshooting
938
+
939
+ ### ESLint Setup Issues
940
+
941
+ **Error: "Could not find 'no-restricted-imports' in plugin 'pace-core-compliance'"**
942
+ - **Cause**: This rule was removed from the plugin (it's now handled by standard ESLint `no-restricted-imports`)
943
+ - **Fix**: Update to the latest version of `@jmruthers/pace-core` and run `npm run setup:eslint --force`
944
+
945
+ **Error: "TypeError: Unexpected array" when using `tseslint.config()`**
946
+ - **Cause**: Incorrect spreading of `paceCoreConfig` in `tseslint.config()` wrapper
947
+ - **Fix**: Run `npm run setup:eslint --force` to fix the config structure, or manually ensure `paceCoreConfig` is spread correctly:
948
+ ```javascript
949
+ import paceCoreConfig from '@jmruthers/pace-core/eslint-config';
950
+
951
+ export default tseslint.config(
952
+ ...paceCoreConfig, // Spread here, not nested
953
+ // your other config
954
+ );
955
+ ```
956
+
957
+ **ESLint rules not loading**
958
+ - **Cause**: Path resolution issues or rules not copied to `dist/`
959
+ - **Fix**:
960
+ 1. Ensure `@jmruthers/pace-core` is built: `npm run build` in pace-core
961
+ 2. Check that `node_modules/@jmruthers/pace-core/dist/eslint-rules/` exists
962
+ 3. Run `npm run setup:eslint --force` to regenerate config
963
+
964
+ ### ESLint Rules Not Working
965
+
966
+ 1. **Verify plugin is loaded**: Check that the config is imported correctly
967
+ 2. **Check rule names**: Rules must be prefixed with `pace-core-compliance/`
968
+ 3. **Verify manifest exists**: Rules load from `core-usage-manifest.json` in the pace-core package
969
+ 4. **CommonJS/ES Module issues**: If you're using ES modules and rules aren't loading, ensure you're using the config preset which handles this automatically
970
+ 5. **Verify rules are available**: Check that the rules file exists
971
+ 6. **Check rule count**: Verify all rules are loaded
972
+
973
+ ### Static Analysis Script Errors
974
+
975
+ 1. **Manifest not found**: Ensure `core-usage-manifest.json` exists in pace-core package
976
+ 2. **No files scanned**: Check that you're running from the project root
977
+ 3. **Permission errors**: Ensure script has read access to source files
978
+
979
+ ### False Positives
980
+
981
+ If you encounter false positives:
982
+
983
+ 1. **Component name conflicts**: If you have a legitimate reason to create a local component with a pace-core name, consider:
984
+ - Renaming your component
985
+ - Using a namespace/prefix
986
+ - Documenting why pace-core doesn't meet your needs
987
+
988
+ 2. **Hook/Util patterns**: The pattern matching may flag similar names. Review the suggestion and decide if migration makes sense.
989
+
990
+ ## Verification
991
+
992
+ After setting up the ESLint config, verify it's working:
993
+
994
+ 1. **Check ESLint can load the config**:
995
+ ```bash
996
+ npx eslint --print-config src/App.tsx
997
+ ```
998
+ Look for `pace-core-compliance` in the plugins section.
999
+
1000
+ 2. **Test with a violation**: Create a test file that imports a restricted library:
1001
+ ```typescript
1002
+ // test-violation.ts
1003
+ import { Dialog } from '@radix-ui/react-dialog'; // Should trigger error
1004
+ ```
1005
+ Run ESLint and verify it reports the violation.
1006
+
1007
+ 3. **Run static analysis**: Use the compliance script to get a full report:
1008
+ ```bash
1009
+ npm run check:pace-core
1010
+ ```
1011
+
961
1012
  ## Related Documentation
962
1013
 
963
- - [Component Standards](./03-component-standard.md)
964
- - [API & RPC Standards](./02-api-and-rpc-standard.md)
965
- - [Getting Started Guide](../getting-started/README.md)
966
- - [RBAC Getting Started](../rbac/getting-started.md) - Secure client usage
1014
+ - [Standards Overview](./0-standards-overview.md) - Standards system overview
1015
+ - [Project Structure](./2-project-structure-standards.md) - Project structure and organization
1016
+ - [Security & RBAC](./6-security-rbac-standards.md) - RBAC and security standards
1017
+ - [API & Tech Stack](./7-api-tech-stack-standards.md) - API and tech stack standards
1018
+
1019
+ ---
967
1020
 
1021
+ **Last Updated:** 2025-01-28
1022
+ **Version:** 2.0.0
1023
+ **Applies to:** All consuming apps using `@jmruthers/pace-core`
@@ -1,4 +1,4 @@
1
- # Project Structure Guide for Consuming Apps
1
+ # Project Structure Standards
2
2
 
3
3
  **🤖 Cursor Rule**: See [02-project-structure.mdc](../../cursor-rules/02-project-structure.mdc) for AI-optimized directives that automatically enforce this structure.
4
4
 
@@ -37,8 +37,8 @@ Every consuming app **MUST** follow this base structure:
37
37
  your-app/
38
38
  ├── .cursor/
39
39
  │ └── rules/ # Cursor rules (pace-core + local)
40
- │ ├── 00-pace-core-compliance.mdc
41
- │ ├── 01-standards-compliance.mdc
40
+ │ ├── 00-standards-overview.mdc
41
+ │ ├── 01-pace-core-compliance.mdc
42
42
  │ ├── 02-project-structure.mdc
43
43
  │ └── [local-rules].mdc
44
44
 
@@ -79,7 +79,7 @@ your-app/
79
79
  │ │
80
80
  │ ├── App.tsx # Main app component
81
81
  │ ├── main.tsx # Application entry point
82
- │ └── app.css # Global styles (MUST follow 08-markup-quality.md)
82
+ │ └── app.css # Global styles (MUST follow 5-styling-standards.md)
83
83
 
84
84
  ├── supabase/ # Supabase configuration
85
85
  │ ├── migrations/ # Database migrations
@@ -762,12 +762,6 @@ your-app/
762
762
  find src -type f -name "*.tsx" -exec sed -i '' 's|from.*EventCard|from "@/components/events/EventCard"|g' {} +
763
763
  ```
764
764
 
765
- Or use a script:
766
- ```typescript
767
- // scripts/update-imports.ts
768
- // Update imports programmatically
769
- ```
770
-
771
765
  #### Phase 4: Cleanup
772
766
 
773
767
  1. **Remove Duplicate pace-core Components**
@@ -796,7 +790,6 @@ your-app/
796
790
  ```bash
797
791
  # Check pace-core compliance
798
792
  node node_modules/@jmruthers/pace-core/scripts/check-pace-core-compliance.cjs
799
-
800
793
  ```
801
794
 
802
795
  3. **Verify Build**
@@ -849,26 +842,6 @@ your-app/
849
842
  - Ensure path aliases work in test environment
850
843
  - Update test setup files
851
844
 
852
- ### Migration Tools
853
-
854
- **Automated Import Updates:**
855
- ```bash
856
- # Using jscodeshift (if available)
857
- npx jscodeshift -t transform-imports src/
858
- ```
859
-
860
- **Manual Find-and-Replace:**
861
- ```bash
862
- # Update specific import patterns
863
- find src -type f -name "*.tsx" -exec sed -i '' 's|old/path|new/path|g' {} +
864
- ```
865
-
866
- **TypeScript Compiler:**
867
- ```bash
868
- # Check for import errors
869
- npx tsc --noEmit
870
- ```
871
-
872
845
  ---
873
846
 
874
847
  ## Structure Checklist
@@ -960,26 +933,17 @@ import { Button } from '@jmruthers/pace-core';
960
933
 
961
934
  ---
962
935
 
963
- ## Getting Help
964
-
965
- - **Documentation**: See [pace-core documentation](../../README.md)
966
- - **Standards**: Review other standards in this directory
967
- - **Cursor Rules**: Check `.cursor/rules/` for automated enforcement
968
-
969
- ---
970
-
971
936
  ## Related Documentation
972
937
 
973
- - [pace-core Compliance](./00-pace-core-compliance.md) - pace-core usage patterns
974
- - [Markup Quality](./08-markup-quality.md) - **CRITICAL: Required CSS configuration**
975
- - [Code Quality](./06-code-quality.md) - Code style and TypeScript standards
976
- - [Tech Stack](./07-tech-stack-compliance.md) - Tech stack requirements
977
- - [SOLID Principles](./03-solid-principles.md) - Architecture principles
978
- - [Cursor Rules Documentation](../../getting-started/cursor-rules.md)
938
+ - [Standards Overview](./0-standards-overview.md) - Standards system overview
939
+ - [pace-core Compliance](./1-pace-core-compliance-standards.md) - pace-core usage patterns
940
+ - [Styling Standards](./5-styling-standards.md) - **CRITICAL: Required CSS configuration**
941
+ - [Code Quality](./4-code-quality-standards.md) - Code style and TypeScript standards
942
+ - [API & Tech Stack](./7-api-tech-stack-standards.md) - Tech stack requirements
943
+ - [Architecture](./3-architecture-standards.md) - Architecture principles
979
944
 
980
945
  ---
981
946
 
982
947
  **Last Updated:** 2025-01-28
983
- **Version:** 1.0.0
948
+ **Version:** 2.0.0
984
949
  **Applies to:** All consuming apps using `@jmruthers/pace-core`
985
-