@etus/bhono-app 0.1.5 → 0.1.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 (300) hide show
  1. package/dist/index.js +0 -0
  2. package/package.json +7 -2
  3. package/templates/base/.claude/commands/check-skill-rules.md +112 -29
  4. package/templates/base/.claude/commands/linear/implement-issue.md +383 -55
  5. package/templates/base/.claude/commands/ship.md +77 -13
  6. package/templates/base/.claude/hooks/package-lock.json +0 -419
  7. package/templates/base/.claude/hooks/skill-activation-prompt.ts +185 -113
  8. package/templates/base/.claude/hooks/skill-tool-guard.sh +6 -0
  9. package/templates/base/.claude/hooks/skill-tool-guard.ts +198 -0
  10. package/templates/base/.claude/scripts/validate-skill-rules.sh +55 -32
  11. package/templates/base/.claude/settings.json +18 -11
  12. package/templates/base/.claude/skills/skill-rules.json +326 -173
  13. package/templates/base/.env.example +3 -0
  14. package/templates/base/CLAUDE.md +5 -5
  15. package/templates/base/README.md +40 -27
  16. package/templates/base/config/eslint.config.js +1 -0
  17. package/templates/base/config/wrangler.json +16 -17
  18. package/templates/base/docs/SETUP-GUIDE.md +566 -0
  19. package/templates/base/docs/app_spec.txt +13 -10
  20. package/templates/base/docs/architecture/README.md +162 -5
  21. package/templates/base/docs/architecture/api-catalog.md +575 -0
  22. package/templates/base/docs/architecture/c4-component.md +309 -0
  23. package/templates/base/docs/architecture/c4-container.md +183 -0
  24. package/templates/base/docs/architecture/c4-context.md +106 -0
  25. package/templates/base/docs/architecture/data-requirements.md +4 -3
  26. package/templates/base/docs/architecture/db-bootstrap.md +39 -0
  27. package/templates/base/docs/architecture/dependencies.md +327 -0
  28. package/templates/base/docs/architecture/drizzle-migration-plan.md +125 -0
  29. package/templates/base/docs/architecture/erd.md +1 -1
  30. package/templates/base/docs/architecture/sql-standards.md +100 -0
  31. package/templates/base/docs/architecture/tech-debt.md +184 -0
  32. package/templates/base/docs/testing.md +36 -29
  33. package/templates/base/package.json +26 -20
  34. package/templates/base/schema.sql +84 -0
  35. package/templates/base/scripts/capture-prod-session.ts +2 -2
  36. package/templates/base/scripts/init.sh +244 -59
  37. package/templates/base/scripts/sync-template.sh +104 -0
  38. package/templates/base/src/client/hooks/use-auth.ts +5 -0
  39. package/templates/base/src/client/routes/_authenticated/dashboard.tsx +1 -1
  40. package/templates/base/src/client/routes/index.tsx +1 -1
  41. package/templates/base/src/server/db/client.ts +3 -5
  42. package/templates/base/src/server/db/records.ts +81 -0
  43. package/templates/base/src/server/db/seed.ts +3 -2
  44. package/templates/base/src/server/db/sql.ts +116 -0
  45. package/templates/base/src/server/index.ts +17 -2
  46. package/templates/base/src/server/lib/audit.ts +74 -26
  47. package/templates/base/src/server/lib/audited-db.ts +219 -109
  48. package/templates/base/src/server/lib/transaction.ts +10 -16
  49. package/templates/base/src/server/middleware/account.ts +9 -16
  50. package/templates/base/src/server/middleware/auth.ts +102 -38
  51. package/templates/base/src/server/middleware/rate-limit.ts +8 -6
  52. package/templates/base/src/server/routes/accounts/handlers.ts +18 -6
  53. package/templates/base/src/server/routes/audits/handlers.ts +3 -1
  54. package/templates/base/src/server/routes/auth/handlers.ts +15 -10
  55. package/templates/base/src/server/routes/auth/test-login.ts +99 -45
  56. package/templates/base/src/server/routes/health/handlers.ts +4 -4
  57. package/templates/base/src/server/routes/index.ts +9 -0
  58. package/templates/base/src/server/routes/invitations/handlers.ts +9 -6
  59. package/templates/base/src/server/routes/openapi.ts +1 -1
  60. package/templates/base/src/server/routes/users/handlers.ts +21 -14
  61. package/templates/base/src/server/services/accounts.ts +242 -217
  62. package/templates/base/src/server/services/audits.ts +114 -61
  63. package/templates/base/src/server/services/auth.ts +310 -180
  64. package/templates/base/src/server/services/invitations.ts +282 -222
  65. package/templates/base/src/server/services/users.ts +383 -293
  66. package/templates/base/src/server/types/index.ts +1 -2
  67. package/templates/base/src/shared/types/api.ts +66 -198
  68. package/templates/base/tests/e2e/auth.setup.ts +1 -1
  69. package/templates/base/{src/server/__tests__/fixtures.ts → tests/fixtures/server.ts} +3 -3
  70. package/templates/base/{src/client/__tests__/setup-browser.ts → tests/helpers/client-setup-browser.ts} +2 -2
  71. package/templates/base/{src/client/__tests__/setup.ts → tests/helpers/client-setup.ts} +1 -1
  72. package/templates/base/{src/client/__tests__/test-utils.tsx → tests/helpers/client-test-utils.tsx} +2 -2
  73. package/templates/base/{src/server/__tests__/setup.ts → tests/helpers/server.ts} +9 -9
  74. package/templates/base/tests/integration/accounts/crud.test.ts +2 -11
  75. package/templates/base/tests/integration/audits/list.test.ts +2 -11
  76. package/templates/base/tests/integration/auth/auth-service.test.ts +1 -10
  77. package/templates/base/tests/integration/auth/invitation-token.test.ts +2 -11
  78. package/templates/base/tests/integration/auth/logout.test.ts +2 -11
  79. package/templates/base/tests/integration/auth/oauth.test.ts +23 -42
  80. package/templates/base/tests/integration/auth/refresh-token.test.ts +1 -9
  81. package/templates/base/tests/integration/auth/session-expiry.test.ts +1 -9
  82. package/templates/base/tests/integration/auth/session.test.ts +2 -11
  83. package/templates/base/tests/integration/auth/super-admin.test.ts +1 -9
  84. package/templates/base/tests/integration/authorization/analytics-role.test.ts +2 -11
  85. package/templates/base/tests/integration/authorization/billing-role.test.ts +2 -11
  86. package/templates/base/tests/integration/authorization/guards-roles.test.ts +1 -9
  87. package/templates/base/tests/integration/authorization/multi-tenancy.test.ts +2 -11
  88. package/templates/base/tests/integration/authorization/roles.test.ts +2 -11
  89. package/templates/base/tests/integration/config/production-behavior.test.ts +2 -11
  90. package/templates/base/tests/integration/health/health.test.ts +25 -44
  91. package/templates/base/tests/integration/invitations/crud.test.ts +2 -11
  92. package/templates/base/tests/integration/invitations/email.test.ts +1 -9
  93. package/templates/base/tests/integration/middleware/auth.test.ts +3 -12
  94. package/templates/base/tests/integration/middleware/request-logger.test.ts +1 -9
  95. package/templates/base/tests/integration/performance/response-times.test.ts +1 -9
  96. package/templates/base/tests/integration/security/cookie-security.test.ts +2 -11
  97. package/templates/base/tests/integration/security/csrf-protection.test.ts +2 -11
  98. package/templates/base/tests/integration/security/log-sanitization.test.ts +1 -9
  99. package/templates/base/tests/integration/security/rate-limiting.test.ts +1 -9
  100. package/templates/base/tests/integration/security/sql-injection.test.ts +7 -18
  101. package/templates/base/tests/integration/security/xss-prevention.test.ts +2 -11
  102. package/templates/base/tests/integration/setup.ts +13 -90
  103. package/templates/base/tests/integration/smoke.test.ts +3 -2
  104. package/templates/base/tests/integration/storage/upload.test.ts +2 -11
  105. package/templates/base/tests/integration/storage/validation.test.ts +2 -11
  106. package/templates/base/tests/integration/users/crud.test.ts +2 -11
  107. package/templates/base/tests/integration/users/list.test.ts +2 -11
  108. package/templates/base/tests/integration/vitest.config.ts +2 -9
  109. package/templates/base/{src/server/__tests__ → tests}/mocks/db.ts +1 -1
  110. package/templates/base/{src/server/__tests__ → tests}/mocks/index.ts +1 -1
  111. package/templates/base/{src/server/__tests__ → tests}/mocks/kv.ts +1 -1
  112. package/templates/base/{src/server/__tests__ → tests}/mocks/r2.ts +1 -1
  113. package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/sidebar.test.tsx +1 -1
  114. package/templates/base/{src/client/components/ui/__tests__ → tests/unit/client/components/ui}/avatar.test.tsx +1 -1
  115. package/templates/base/{src/client/__tests__ → tests/unit/client/components/ui}/button.test.tsx +1 -1
  116. package/templates/base/{src/client/components/ui/__tests__ → tests/unit/client/components/ui}/card.test.tsx +1 -1
  117. package/templates/base/{src/client/components/ui/__tests__ → tests/unit/client/components/ui}/dialog.test.tsx +1 -1
  118. package/templates/base/{src/client/components/ui/__tests__ → tests/unit/client/components/ui}/input.test.tsx +1 -1
  119. package/templates/base/{src/client/components/ui/__tests__ → tests/unit/client/components/ui}/loading-skeleton.test.tsx +1 -1
  120. package/templates/base/{src/client/components/ui/__tests__ → tests/unit/client/components/ui}/skeleton.test.tsx +1 -1
  121. package/templates/base/{src/client/components/ui/__tests__ → tests/unit/client/components/ui}/sonner.test.tsx +1 -1
  122. package/templates/base/{src/client/components/ui/__tests__ → tests/unit/client/components/ui}/tabs.test.tsx +1 -1
  123. package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/account.test.tsx +1 -1
  124. package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/integrations.test.tsx +1 -1
  125. package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/settings.test.tsx +1 -1
  126. package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/team.test.tsx +1 -1
  127. package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/authenticated-layout.test.tsx +1 -1
  128. package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/dashboard.test.tsx +1 -1
  129. package/templates/base/{src/client/routes/__tests__ → tests/unit/client/routes}/invite.test.tsx +1 -1
  130. package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/login.test.tsx +1 -1
  131. package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/navigation.test.tsx +1 -1
  132. package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/root-layout.test.tsx +1 -1
  133. package/templates/base/{src/server/auth/__tests__ → tests/unit/server/auth}/guards.test.ts +2 -2
  134. package/templates/base/{src → tests/unit}/server/auth/permissions.test.ts +1 -1
  135. package/templates/base/{src → tests/unit}/server/auth/roles.test.ts +1 -1
  136. package/templates/base/tests/unit/server/db/sql.test.ts +68 -0
  137. package/templates/base/{src → tests/unit}/server/env.test.ts +1 -1
  138. package/templates/base/tests/unit/server/lib/audited-db.test.ts +78 -0
  139. package/templates/base/{src → tests/unit}/server/lib/email.test.ts +1 -1
  140. package/templates/base/{src → tests/unit}/server/lib/errors.test.ts +1 -1
  141. package/templates/base/{src → tests/unit}/server/lib/oauth.test.ts +1 -1
  142. package/templates/base/{src → tests/unit}/server/lib/pagination.test.ts +1 -1
  143. package/templates/base/{src → tests/unit}/server/lib/password.test.ts +1 -1
  144. package/templates/base/{src → tests/unit}/server/lib/providers.test.ts +1 -1
  145. package/templates/base/{src → tests/unit}/server/lib/r2-storage.test.ts +2 -2
  146. package/templates/base/{src → tests/unit}/server/lib/session.test.ts +2 -2
  147. package/templates/base/{src → tests/unit}/server/lib/tokens.test.ts +1 -1
  148. package/templates/base/{src → tests/unit}/server/lib/transaction.test.ts +5 -14
  149. package/templates/base/{src → tests/unit}/server/middleware/account.test.ts +16 -24
  150. package/templates/base/tests/unit/server/middleware/auth.test.ts +647 -0
  151. package/templates/base/{src → tests/unit}/server/middleware/cors.test.ts +1 -1
  152. package/templates/base/{src → tests/unit}/server/middleware/error-handler.test.ts +2 -2
  153. package/templates/base/{src → tests/unit}/server/middleware/rate-limit.test.ts +3 -2
  154. package/templates/base/{src → tests/unit}/server/middleware/request-context.test.ts +1 -1
  155. package/templates/base/{src → tests/unit}/server/middleware/request-logger.test.ts +1 -1
  156. package/templates/base/{src/server/__tests__/mocks/__tests__ → tests/unit/server/mocks}/db.test.ts +1 -1
  157. package/templates/base/{src/server/__tests__/mocks/__tests__ → tests/unit/server/mocks}/kv.test.ts +1 -1
  158. package/templates/base/{src/server/__tests__/mocks/__tests__ → tests/unit/server/mocks}/r2.test.ts +1 -1
  159. package/templates/base/{src/server/routes/accounts/__tests__ → tests/unit/server/routes/accounts}/handlers.test.ts +12 -12
  160. package/templates/base/{src/server/routes/audits/__tests__ → tests/unit/server/routes/audits}/handlers.test.ts +11 -11
  161. package/templates/base/{src/server/routes/auth/__tests__ → tests/unit/server/routes/auth}/handlers.test.ts +124 -13
  162. package/templates/base/{src/server/routes/health/__tests__ → tests/unit/server/routes/health}/handlers.test.ts +27 -23
  163. package/templates/base/{src/server/routes/invitations/__tests__ → tests/unit/server/routes/invitations}/handlers.test.ts +14 -17
  164. package/templates/base/{src/server/routes/storage/__tests__ → tests/unit/server/routes/storage}/handlers.test.ts +6 -6
  165. package/templates/base/{src/server/routes/users/__tests__ → tests/unit/server/routes/users}/handlers.test.ts +81 -17
  166. package/templates/base/tests/unit/server/services/accounts.test.ts +406 -0
  167. package/templates/base/tests/unit/server/services/audits.test.ts +360 -0
  168. package/templates/base/tests/unit/server/services/auth.test.ts +656 -0
  169. package/templates/base/tests/unit/server/services/invitations.test.ts +343 -0
  170. package/templates/base/tests/unit/server/services/users.test.ts +706 -0
  171. package/templates/base/{src/shared/schemas/__tests__ → tests/unit/shared}/schemas.test.ts +1 -1
  172. package/templates/base/tsconfig.json +2 -1
  173. package/templates/base/vite.config.ts +3 -1
  174. package/templates/base/vitest.config.browser.ts +3 -2
  175. package/templates/base/vitest.config.frontend.ts +3 -2
  176. package/templates/base/vitest.config.ts +7 -14
  177. package/templates/base/.claude/settings.local.json +0 -11
  178. package/templates/base/.github/workflows/test.yml +0 -127
  179. package/templates/base/auth-setup-error.png +0 -0
  180. package/templates/base/config/drizzle.config.ts +0 -10
  181. package/templates/base/pnpm-lock.yaml +0 -8175
  182. package/templates/base/src/server/db/schema/accounts.ts +0 -20
  183. package/templates/base/src/server/db/schema/audit-logs.ts +0 -26
  184. package/templates/base/src/server/db/schema/index.ts +0 -7
  185. package/templates/base/src/server/db/schema/invitations.ts +0 -30
  186. package/templates/base/src/server/db/schema/refresh-tokens.ts +0 -22
  187. package/templates/base/src/server/db/schema/user-accounts.ts +0 -25
  188. package/templates/base/src/server/db/schema/users.ts +0 -33
  189. package/templates/base/src/server/lib/audited-db.test.ts +0 -107
  190. package/templates/base/src/server/lib/schema-helpers.ts +0 -16
  191. package/templates/base/src/server/middleware/auth.test.ts +0 -345
  192. package/templates/base/src/server/services/__tests__/accounts.test.ts +0 -764
  193. package/templates/base/src/server/services/__tests__/audits.test.ts +0 -235
  194. package/templates/base/src/server/services/__tests__/auth.test.ts +0 -765
  195. package/templates/base/src/server/services/__tests__/invitations.test.ts +0 -704
  196. package/templates/base/src/server/services/__tests__/users.test.ts +0 -755
  197. package/templates/base/tests/e2e/_auth/.gitkeep +0 -0
  198. package/templates/base/tests/integration/lib/schema-helpers.test.ts +0 -129
  199. package/templates/base/tsconfig.tsbuildinfo +0 -1
  200. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/__screenshots__/sidebar.test.tsx/Sidebar-can-be-collapsed-by-default-1.png +0 -0
  201. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/__screenshots__/sidebar.test.tsx/Sidebar-expands-when-collapsed-and-expand-button-is-clicked-1.png +0 -0
  202. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/__screenshots__/sidebar.test.tsx/Sidebar-handles-logout-button-click-1.png +0 -0
  203. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/__screenshots__/sidebar.test.tsx/Sidebar-handles-navigation-clicks-1.png +0 -0
  204. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/__screenshots__/sidebar.test.tsx/Sidebar-hides-navigation-labels-when-collapsed-1.png +0 -0
  205. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/__screenshots__/sidebar.test.tsx/Sidebar-highlights-active-route-1.png +0 -0
  206. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/__screenshots__/sidebar.test.tsx/Sidebar-renders-sidebar-navigation-items-1.png +0 -0
  207. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/__screenshots__/sidebar.test.tsx/Sidebar-shows-keyboard-shortcut-hint-when-expanded-1.png +0 -0
  208. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/__screenshots__/sidebar.test.tsx/Sidebar-shows-user-info-when-authenticated-1.png +0 -0
  209. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/__screenshots__/sidebar.test.tsx/Sidebar-shows-user-initials-in-avatar-fallback-1.png +0 -0
  210. /package/templates/base/{src/client/components/__tests__ → tests/unit/client/components}/error-boundary.test.tsx +0 -0
  211. /package/templates/base/{src/client/components/ui/__tests__ → tests/unit/client/components/ui}/error-fallback.test.tsx +0 -0
  212. /package/templates/base/{src/client/hooks/__tests__ → tests/unit/client/hooks}/use-auth.test.tsx +0 -0
  213. /package/templates/base/{src/client/hooks/__tests__ → tests/unit/client/hooks}/use-theme.test.tsx +0 -0
  214. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-display-dashboard-stats-cards-1.png +0 -0
  215. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-display-quick-action-cards-1.png +0 -0
  216. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-display-recent-activity-section-1.png +0 -0
  217. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-display-user-first-name-in-welcome-message-1.png +0 -0
  218. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-display-user-information-in-sidebar-1.png +0 -0
  219. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-render-dashboard-when-authenticated-1.png +0 -0
  220. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-show-navigation-sidebar-1.png +0 -0
  221. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-unauthenticated-should-redirect-to-login-when-not-authenticated-1.png +0 -0
  222. /package/templates/base/{src/client/routes/__tests__ → tests/unit/client/routes}/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-display-accept-invitation-button-1.png +0 -0
  223. /package/templates/base/{src/client/routes/__tests__ → tests/unit/client/routes}/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-display-decline-button-linking-to-homepage-1.png +0 -0
  224. /package/templates/base/{src/client/routes/__tests__ → tests/unit/client/routes}/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-display-invitation-details--email--workspace--role--1.png +0 -0
  225. /package/templates/base/{src/client/routes/__tests__ → tests/unit/client/routes}/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-have-a-logo-link-to-homepage-1.png +0 -0
  226. /package/templates/base/{src/client/routes/__tests__ → tests/unit/client/routes}/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-render-invitation-page-with-inviter-name-and-workspace-1.png +0 -0
  227. /package/templates/base/{src/client/routes/__tests__ → tests/unit/client/routes}/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-show-terms-of-service-and-privacy-policy-links-1.png +0 -0
  228. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/login.test.tsx/Login-Page-should-display-Google-OAuth-login-button-1.png +0 -0
  229. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/login.test.tsx/Login-Page-should-have-a-link-back-to-home-page-1.png +0 -0
  230. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/login.test.tsx/Login-Page-should-render-login-content-without-waiting-for-authentication-1.png +0 -0
  231. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/login.test.tsx/Login-Page-should-render-login-page-at--login-route-1.png +0 -0
  232. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/login.test.tsx/Login-Page-should-show-Terms-of-Service-and-Privacy-Policy-links-1.png +0 -0
  233. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/login.test.tsx/Login-Page-should-trigger-OAuth-flow-when-clicking-login-button-1.png +0 -0
  234. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-404-handling-should-display-404-text-on-not-found-page-1.png +0 -0
  235. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-404-handling-should-have-navigation-options-on-404-page-1.png +0 -0
  236. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-404-handling-should-render-404-page-for-unknown-routes-1.png +0 -0
  237. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-authenticated-navigation-should-navigate-from-dashboard-to-account-page-1.png +0 -0
  238. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-authenticated-navigation-should-navigate-from-dashboard-to-integrations-page-1.png +0 -0
  239. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-authenticated-navigation-should-navigate-from-dashboard-to-settings-page-1.png +0 -0
  240. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-authenticated-navigation-should-navigate-from-dashboard-to-team-page-1.png +0 -0
  241. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-home-page-navigation-should-display-navigation-links-on-home-page-1.png +0 -0
  242. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-home-page-navigation-should-have-correct-link-destinations-on-home-page-1.png +0 -0
  243. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-unauthenticated-navigation-should-allow-access-to-home-page-without-authentication-1.png +0 -0
  244. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-unauthenticated-navigation-should-allow-access-to-login-page-without-authentication-1.png +0 -0
  245. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-unauthenticated-navigation-should-redirect-unauthenticated-users-from-dashboard-to-login-1.png +0 -0
  246. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-unauthenticated-navigation-should-redirect-unauthenticated-users-from-settings-to-login-1.png +0 -0
  247. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/__screenshots__/navigation.test.tsx/Navigation-unauthenticated-navigation-should-redirect-unauthenticated-users-from-team-to-login-1.png +0 -0
  248. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/account.test.tsx/Account-Page-should-render-Active-Sessions-section-with-session-cards-1.png +0 -0
  249. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/account.test.tsx/Account-Page-should-render-page-with-correct-title--Account--1.png +0 -0
  250. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/account.test.tsx/Account-Page-should-show-API-Access-section-1.png +0 -0
  251. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/account.test.tsx/Account-Page-should-show-Connected-Accounts-section-with-Google-connected-1.png +0 -0
  252. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/account.test.tsx/Account-Page-should-show-Danger-Zone-section-with-delete-button-1.png +0 -0
  253. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/account.test.tsx/Account-Page-should-show-Security-section-with-Two-Factor-Authentication-1.png +0 -0
  254. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-API-documentation-section-should-display-API-documentation-link-section-1.png +0 -0
  255. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-Create-Webhook-Dialog-should-have-Add-Webhook-trigger-button-1.png +0 -0
  256. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-category-filters-should-display-all-category-buttons-1.png +0 -0
  257. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-integration-cards-should-display-all-integration-cards-with-names-1.png +0 -0
  258. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-integration-cards-should-display-category-badges-on-cards-1.png +0 -0
  259. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-integration-cards-should-show-Configure-button-for-connected-integrations-1.png +0 -0
  260. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-integration-cards-should-show-Connect-button-for-not-connected-integrations-1.png +0 -0
  261. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-integration-cards-should-show-Connected-badge-for-connected-integrations-1.png +0 -0
  262. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-display-Available-Integrations-section-1.png +0 -0
  263. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-display-Webhooks-section-1.png +0 -0
  264. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-display-connected-count-1.png +0 -0
  265. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-display-page-description-1.png +0 -0
  266. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-display-search-input-1.png +0 -0
  267. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-render-with-correct-title--Integrations--1.png +0 -0
  268. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-search-functionality-should-filter-integrations-based-on-search-query-1.png +0 -0
  269. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-search-functionality-should-search-by-description-1.png +0 -0
  270. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-search-functionality-should-show-no-results-message-when-search-has-no-matches-1.png +0 -0
  271. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-webhooks-section-should-display-existing-webhook-1.png +0 -0
  272. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-webhooks-section-should-display-webhook-events-1.png +0 -0
  273. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-webhooks-section-should-display-webhook-last-delivery-info-1.png +0 -0
  274. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-webhooks-section-should-display-webhook-success-status-1.png +0 -0
  275. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/integrations.test.tsx/Integrations-Page-webhooks-section-should-have-Add-Webhook-button-1.png +0 -0
  276. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Account-tab-should-display-connected-accounts-section-with-Google-provider-1.png +0 -0
  277. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Account-tab-should-display-sessions-and-danger-zone-sections-1.png +0 -0
  278. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Notifications-tab-should-display-all-notification-toggle-options-1.png +0 -0
  279. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Notifications-tab-should-display-email-notifications-section-1.png +0 -0
  280. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Notifications-tab-should-display-toggle-switches-for-notification-options-1.png +0 -0
  281. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Notifications-tab-should-have-toggles-checked-by-default-1.png +0 -0
  282. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display--Save-Changes--button-1.png +0 -0
  283. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display-personal-information-form-1.png +0 -0
  284. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display-profile-picture-section-1.png +0 -0
  285. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display-user-email-in-disabled-email-input-1.png +0 -0
  286. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display-user-initials-in-avatar-1.png +0 -0
  287. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display-user-name-in-the-name-input-1.png +0 -0
  288. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-page-rendering-should-display-all-three-tabs-1.png +0 -0
  289. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-page-rendering-should-display-page-description-1.png +0 -0
  290. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-page-rendering-should-render-with-correct-title--Settings--1.png +0 -0
  291. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-tab-navigation-should-show-Profile-tab-as-default-active-tab-1.png +0 -0
  292. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-tab-navigation-should-switch-to-Account-tab-when-clicked-1.png +0 -0
  293. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/settings.test.tsx/Settings-Page-tab-navigation-should-switch-to-Notifications-tab-when-clicked-1.png +0 -0
  294. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/team.test.tsx/Team-Page-should-display-Active-Members-section-with-member-count-1.png +0 -0
  295. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/team.test.tsx/Team-Page-should-display-Pending-Invitations-section-with-invitation-details-1.png +0 -0
  296. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/team.test.tsx/Team-Page-should-have-invite-member-button-that-can-be-clicked-1.png +0 -0
  297. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/team.test.tsx/Team-Page-should-render-page-with-correct-title-and-description-1.png +0 -0
  298. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/team.test.tsx/Team-Page-should-render-search-input-that-filters-team-members-1.png +0 -0
  299. /package/templates/base/{src/client/routes/_authenticated/__tests__ → tests/unit/client/routes/_authenticated}/__screenshots__/team.test.tsx/Team-Page-should-show-current-user-with---you---indicator-and-role-badge-1.png +0 -0
  300. /package/templates/base/{src/client/__tests__ → tests/unit/client}/routes/error-components.test.tsx +0 -0
@@ -76,20 +76,22 @@
76
76
  ],
77
77
  "SessionStart": [
78
78
  {
79
- "matcher": "startup|resume|compact|clear",
79
+ "matcher": "startup|resume|compact|clear",
80
80
  "hooks": [
81
81
  {
82
82
  "type": "command",
83
- "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/install_pkgs.sh"
83
+ "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/install_pkgs.sh",
84
+ "timeout": 10
85
+ },
86
+ {
87
+ "type": "command",
88
+ "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/validate-skill-rules.sh",
89
+ "timeout": 10
84
90
  },
85
- {
86
- "type": "command",
87
- "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/validate-skill-rules.sh"
88
- },
89
91
  {
90
92
  "type": "command",
91
93
  "command": "echo \"Current date: $(date '+%Y-%m-%d') | Year: $(date +%Y)\"",
92
- "timeout": 5
94
+ "timeout": 10
93
95
  }
94
96
  ]
95
97
  }
@@ -101,13 +103,18 @@
101
103
  {
102
104
  "type": "command",
103
105
  "command": "q=$(cat | jq -r '.tool_input.query'); y=$(date +%Y); echo $q | grep -qE '20[0-9]{2}|latest|recent|current|new|now|today' && nq=\"$q\" || nq=\"$q $y\"; echo \"{\\\"hookSpecificOutput\\\":{\\\"hookEventName\\\":\\\"PreToolUse\\\",\\\"permissionDecision\\\":\\\"allow\\\",\\\"updatedInput\\\":{\\\"query\\\":\\\"$nq\\\"}}}\"",
104
- "timeout": 5
106
+ "timeout": 10
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ "hooks": [
112
+ {
113
+ "type": "command",
114
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/skill-tool-guard.sh"
105
115
  }
106
116
  ]
107
117
  }
108
118
  ]
109
- },
110
- "enabledPlugins": {
111
- "frontend-design@claude-plugins-official": true
112
119
  }
113
120
  }
@@ -1,184 +1,337 @@
1
1
  {
2
- "version": "1.1",
3
- "description": "Skill activation rules for project and user skills",
4
- "skills": {
5
- "architecture-analyzer": {
6
- "type": "domain",
7
- "enforcement": "suggest",
8
- "priority": "high",
9
- "description": "Architectural analysis and documentation - C4 diagrams, ERD, dependency maps, tech debt assessment, API documentation",
10
- "promptTriggers": {
11
- "keywords": [
12
- "analyze architecture",
13
- "architecture analysis",
14
- "document codebase",
15
- "codebase documentation",
16
- "C4 diagram",
17
- "ERD",
18
- "entity relationship",
19
- "dependency map",
20
- "tech debt",
21
- "technical debt",
22
- "architecture report",
23
- "architecture review",
24
- "map dependencies",
25
- "generate diagram",
26
- "system diagram",
27
- "component diagram",
28
- "architecture documentation"
29
- ],
30
- "intentPatterns": [
31
- "(analyze|review|assess).*?architecture",
32
- "(generate|create|build).*?(C4|ERD|diagram|documentation)",
33
- "(map|visualize).*?dependenc",
34
- "(document|analyze).*?codebase",
35
- "tech.*?debt.*(analysis|assessment|report)",
36
- "architecture.*(report|review|assessment)"
37
- ]
38
- }
39
- },
2
+ "version": "1.2",
3
+ "description": "Skill activation rules for project and user skills",
4
+ "skills": {
5
+ "architecture-analyzer": {
6
+ "type": "domain",
7
+ "enforcement": "suggest",
8
+ "priority": "high",
9
+ "description": "Architectural analysis and documentation - C4 diagrams, ERD, dependency maps, tech debt assessment, API documentation",
10
+ "promptTriggers": {
11
+ "keywords": [
12
+ "analyze architecture",
13
+ "architecture analysis",
14
+ "document codebase",
15
+ "codebase documentation",
16
+ "C4 diagram",
17
+ "ERD",
18
+ "entity relationship",
19
+ "dependency map",
20
+ "tech debt",
21
+ "technical debt",
22
+ "architecture report",
23
+ "architecture review",
24
+ "map dependencies",
25
+ "generate diagram",
26
+ "system diagram",
27
+ "component diagram",
28
+ "architecture documentation"
29
+ ],
30
+ "intentPatterns": [
31
+ "(analyze|review|assess).*?architecture",
32
+ "(generate|create|build).*?(C4|ERD|diagram|documentation)",
33
+ "(map|visualize).*?dependenc",
34
+ "(document|analyze).*?codebase",
35
+ "tech.*?debt.*(analysis|assessment|report)",
36
+ "architecture.*(report|review|assessment)"
37
+ ]
38
+ }
39
+ },
40
40
 
41
- "dev-browser": {
42
- "type": "domain",
43
- "enforcement": "suggest",
44
- "priority": "high",
45
- "description": "Browser automation with persistent page state - navigate websites, fill forms, take screenshots, scrape data, test web apps",
46
- "promptTriggers": {
47
- "keywords": [
48
- "browser automation",
49
- "take screenshot",
50
- "fill form",
51
- "click button",
52
- "scrape website",
53
- "scrape page",
54
- "web scraping",
55
- "automate browser",
56
- "test website",
57
- "log into",
58
- "login to website",
59
- "navigate to",
60
- "go to url",
61
- "extract data",
62
- "web automation",
63
- "playwright automation"
64
- ],
65
- "intentPatterns": [
66
- "(go|navigate).*?(to|url|website|page)",
67
- "(click|press).*?(button|link|element)",
68
- "(fill|complete|submit).*?(form|input|field)",
69
- "(take|capture).*?screenshot",
70
- "(scrape|extract).*?(data|content|text|page)",
71
- "(automate|test).*?(browser|website|web)",
72
- "(log|sign).*?in.*?(to|website|page)",
73
- "browser.*(interact|automat)"
74
- ]
75
- }
76
- },
41
+ "dev-browser": {
42
+ "type": "domain",
43
+ "enforcement": "suggest",
44
+ "priority": "high",
45
+ "description": "Browser automation with persistent page state - navigate websites, fill forms, take screenshots, scrape data, test web apps",
46
+ "promptTriggers": {
47
+ "keywords": [
48
+ "browser automation",
49
+ "take screenshot",
50
+ "fill form",
51
+ "click button",
52
+ "scrape website",
53
+ "scrape page",
54
+ "web scraping",
55
+ "automate browser",
56
+ "test website",
57
+ "log into",
58
+ "login to website",
59
+ "navigate to",
60
+ "go to url",
61
+ "extract data",
62
+ "web automation",
63
+ "playwright automation"
64
+ ],
65
+ "intentPatterns": [
66
+ "(go|navigate).*?(to|url|website|page)",
67
+ "(click|press).*?(button|link|element)",
68
+ "(fill|complete|submit).*?(form|input|field)",
69
+ "(take|capture).*?screenshot",
70
+ "(scrape|extract).*?(data|content|text|page)",
71
+ "(automate|test).*?(browser|website|web)",
72
+ "(log|sign).*?in.*?(to|website|page)",
73
+ "browser.*(interact|automat)"
74
+ ]
75
+ }
76
+ },
77
77
 
78
- "linear": {
79
- "type": "domain",
80
- "enforcement": "suggest",
81
- "priority": "high",
82
- "description": "Linear issue tracking - teams, projects, issues, status, labels, comments via CLI scripts",
83
- "promptTriggers": {
84
- "keywords": [
85
- "linear",
86
- "linear issue",
87
- "linear team",
88
- "linear project",
89
- "issue status",
90
- "issue label",
91
- "create issue",
92
- "list issues",
93
- "linear workflow"
94
- ],
95
- "intentPatterns": [
96
- "(list|filter|get).*?linear.*?(issue|team|project)",
97
- "(create|update|archive).*?issue",
98
- "(manage|change).*?(status|priority|label|assignment)",
99
- "(add|view).*?comment"
100
- ]
101
- }
78
+ "linear": {
79
+ "type": "domain",
80
+ "enforcement": "suggest",
81
+ "priority": "high",
82
+ "description": "Linear issue tracking - teams, projects, issues, status, labels, comments via CLI scripts",
83
+ "promptTriggers": {
84
+ "keywords": [
85
+ "linear",
86
+ "linear issue",
87
+ "linear team",
88
+ "linear project",
89
+ "issue status",
90
+ "issue label",
91
+ "create issue",
92
+ "list issues",
93
+ "linear workflow"
94
+ ],
95
+ "intentPatterns": [
96
+ "(list|filter|get).*?linear.*?(issue|team|project)",
97
+ "(create|update|archive).*?issue",
98
+ "(manage|change).*?(status|priority|label|assignment)",
99
+ "(add|view).*?comment"
100
+ ]
101
+ }
102
+ },
103
+
104
+ "playwright-e2e-testing": {
105
+ "type": "domain",
106
+ "enforcement": "suggest",
107
+ "priority": "high",
108
+ "description": "Playwright-specific E2E testing - Page Objects, fixtures, OAuth, API testing, visual regression, debugging",
109
+ "promptTriggers": {
110
+ "keywords": [
111
+ "playwright",
112
+ "playwright test",
113
+ "page object",
114
+ "playwright fixture",
115
+ "playwright oauth",
116
+ "playwright api",
117
+ "visual regression",
118
+ "playwright debug",
119
+ "playwright selector",
120
+ "getByRole",
121
+ "getByText",
122
+ "toBeVisible"
123
+ ],
124
+ "intentPatterns": [
125
+ "(write|create|add).*?playwright.*?test",
126
+ "(debug|fix).*?playwright",
127
+ "playwright.*(oauth|authentication|login)",
128
+ "playwright.*(api|visual|snapshot)",
129
+ "(optimize|improve).*?playwright"
130
+ ]
131
+ },
132
+ "toolGuards": [
133
+ {
134
+ "tool": "Edit",
135
+ "patterns": ["\\.spec\\.ts$", "\\.test\\.ts$", "e2e/.*\\.ts$", "tests/.*\\.ts$"]
102
136
  },
137
+ {
138
+ "tool": "Write",
139
+ "patterns": ["\\.spec\\.ts$", "\\.test\\.ts$", "e2e/.*\\.ts$"]
140
+ }
141
+ ]
142
+ },
103
143
 
104
- "playwright-e2e-testing": {
105
- "type": "domain",
106
- "enforcement": "suggest",
107
- "priority": "high",
108
- "description": "Playwright-specific E2E testing - Page Objects, fixtures, OAuth, API testing, visual regression, debugging",
109
- "promptTriggers": {
110
- "keywords": [
111
- "playwright",
112
- "playwright test",
113
- "page object",
114
- "playwright fixture",
115
- "playwright oauth",
116
- "playwright api",
117
- "visual regression",
118
- "playwright debug",
119
- "playwright selector",
120
- "getByRole",
121
- "getByText",
122
- "toBeVisible"
123
- ],
124
- "intentPatterns": [
125
- "(write|create|add).*?playwright.*?test",
126
- "(debug|fix).*?playwright",
127
- "playwright.*(oauth|authentication|login)",
128
- "playwright.*(api|visual|snapshot)",
129
- "(optimize|improve).*?playwright"
130
- ]
131
- }
144
+ "wrangler": {
145
+ "type": "domain",
146
+ "enforcement": "suggest",
147
+ "priority": "high",
148
+ "description": "Cloudflare Wrangler CLI - Workers deployment, D1, KV, R2, Queues, Workflows, secrets, and local development",
149
+ "promptTriggers": {
150
+ "keywords": [
151
+ "wrangler",
152
+ "cloudflare worker",
153
+ "cloudflare workers",
154
+ "wrangler deploy",
155
+ "wrangler dev",
156
+ "wrangler d1",
157
+ "wrangler kv",
158
+ "wrangler r2",
159
+ "wrangler secret",
160
+ "wrangler queues",
161
+ "wrangler workflows",
162
+ "wrangler pages",
163
+ "wrangler init",
164
+ "cloudflare deploy",
165
+ "worker deploy",
166
+ "worker development"
167
+ ],
168
+ "intentPatterns": [
169
+ "(deploy|publish).*?(worker|cloudflare)",
170
+ "(run|start).*?wrangler",
171
+ "wrangler.*(command|cli|help)",
172
+ "(create|manage|configure).*?(d1|kv|r2|queue|workflow|secret)",
173
+ "(local|dev).*?worker",
174
+ "cloudflare.*(storage|database|queue)"
175
+ ]
176
+ },
177
+ "toolGuards": [
178
+ {
179
+ "tool": "Bash",
180
+ "patterns": ["wrangler deploy", "wrangler publish", "npx wrangler deploy", "pnpm wrangler deploy"]
132
181
  },
182
+ {
183
+ "tool": "Edit",
184
+ "patterns": ["wrangler\\.json$", "wrangler\\.toml$"]
185
+ }
186
+ ]
187
+ },
133
188
 
134
- "wrangler": {
135
- "type": "domain",
136
- "enforcement": "suggest",
137
- "priority": "high",
138
- "description": "Cloudflare Wrangler CLI - Workers deployment, D1, KV, R2, Queues, Workflows, secrets, and local development",
139
- "promptTriggers": {
140
- "keywords": [
141
- "wrangler",
142
- "cloudflare worker",
143
- "cloudflare workers",
144
- "wrangler deploy",
145
- "wrangler dev",
146
- "wrangler d1",
147
- "wrangler kv",
148
- "wrangler r2",
149
- "wrangler secret",
150
- "wrangler queues",
151
- "wrangler workflows",
152
- "wrangler pages",
153
- "wrangler init",
154
- "cloudflare deploy",
155
- "worker deploy",
156
- "worker development"
157
- ],
158
- "intentPatterns": [
159
- "(deploy|publish).*?(worker|cloudflare)",
160
- "(run|start).*?wrangler",
161
- "wrangler.*(command|cli|help)",
162
- "(create|manage|configure).*?(d1|kv|r2|queue|workflow|secret)",
163
- "(local|dev).*?worker",
164
- "cloudflare.*(storage|database|queue)"
165
- ]
166
- }
189
+ "superpowers:verification-before-completion": {
190
+ "type": "guardrail",
191
+ "enforcement": "suggest",
192
+ "priority": "critical",
193
+ "description": "Verify work before claiming completion - run tests, check build, confirm output",
194
+ "promptTriggers": {
195
+ "keywords": [
196
+ "verify",
197
+ "check if it works",
198
+ "make sure it works",
199
+ "test it",
200
+ "run tests"
201
+ ],
202
+ "intentPatterns": [
203
+ "(verify|confirm|check).*?(work|pass|succeed)",
204
+ "(make sure|ensure).*?(work|pass|build)"
205
+ ]
206
+ },
207
+ "toolGuards": [
208
+ {
209
+ "tool": "Bash",
210
+ "patterns": ["git push", "git push origin", "gh pr create", "npm publish", "pnpm publish"]
167
211
  }
212
+ ]
168
213
  },
169
- "notes": {
170
- "current_implementation": "Only promptTriggers are currently functional via UserPromptSubmit hook",
171
- "enforcement_types": {
172
- "suggest": "Skill suggestion appears but doesn't block execution (WORKING)",
173
- "block": "Requires skill to be used before proceeding (NOT IMPLEMENTED)",
174
- "warn": "Shows warning but allows proceeding (NOT IMPLEMENTED)"
175
- },
176
- "priority_levels": {
177
- "critical": "Highest - Always trigger when matched",
178
- "high": "Important - Trigger for most matches",
179
- "medium": "Moderate - Trigger for clear matches",
180
- "low": "Optional - Trigger only for explicit matches"
181
- },
182
- "trigger_detection": "Only prompt-based detection works: keywords (exact match) and intentPatterns (regex)"
214
+
215
+ "superpowers:brainstorming": {
216
+ "type": "guardrail",
217
+ "enforcement": "suggest",
218
+ "priority": "high",
219
+ "description": "Explore requirements and design before implementation",
220
+ "promptTriggers": {
221
+ "keywords": [
222
+ "brainstorm",
223
+ "design",
224
+ "plan feature",
225
+ "new feature",
226
+ "build feature"
227
+ ],
228
+ "intentPatterns": [
229
+ "(create|build|implement|add).*?(feature|component|module|service)",
230
+ "(design|plan|architect).*?(system|feature|solution)"
231
+ ]
232
+ },
233
+ "toolGuards": [
234
+ {
235
+ "tool": "Write",
236
+ "patterns": ["src/.*\\.(ts|tsx|js|jsx)$"]
237
+ }
238
+ ]
239
+ },
240
+
241
+ "superpowers:systematic-debugging": {
242
+ "type": "guardrail",
243
+ "enforcement": "suggest",
244
+ "priority": "high",
245
+ "description": "Systematic approach to debugging - gather evidence before proposing fixes",
246
+ "promptTriggers": {
247
+ "keywords": [
248
+ "debug",
249
+ "fix bug",
250
+ "not working",
251
+ "broken",
252
+ "error",
253
+ "failing"
254
+ ],
255
+ "intentPatterns": [
256
+ "(fix|debug|solve).*?(bug|error|issue|problem)",
257
+ "(why|what).*?(not working|broken|failing|error)",
258
+ "(investigate|diagnose).*?(issue|problem|error)"
259
+ ]
260
+ }
261
+ },
262
+
263
+ "superpowers:test-driven-development": {
264
+ "type": "guardrail",
265
+ "enforcement": "suggest",
266
+ "priority": "medium",
267
+ "description": "Write tests before implementation code",
268
+ "promptTriggers": {
269
+ "keywords": [
270
+ "tdd",
271
+ "test driven",
272
+ "write tests first",
273
+ "test first"
274
+ ],
275
+ "intentPatterns": [
276
+ "(implement|build|create).*?with.*?test",
277
+ "test.*?driven"
278
+ ]
279
+ },
280
+ "toolGuards": [
281
+ {
282
+ "tool": "Write",
283
+ "patterns": ["src/.*(?<!\\.spec|\\.test)\\.(ts|tsx|js|jsx)$"]
284
+ }
285
+ ]
286
+ },
287
+
288
+ "ship": {
289
+ "type": "guardrail",
290
+ "enforcement": "suggest",
291
+ "priority": "high",
292
+ "description": "Automated commit/push workflow with quality checks",
293
+ "promptTriggers": {
294
+ "keywords": [
295
+ "ship",
296
+ "commit and push",
297
+ "push changes",
298
+ "create pr",
299
+ "pull request"
300
+ ],
301
+ "intentPatterns": [
302
+ "(commit|push).*?(changes|code)",
303
+ "(create|open).*?(pr|pull request)",
304
+ "ship.*?(it|this|code|changes)"
305
+ ]
306
+ },
307
+ "toolGuards": [
308
+ {
309
+ "tool": "Bash",
310
+ "patterns": ["git commit", "git push"]
311
+ }
312
+ ]
313
+ }
314
+ },
315
+ "notes": {
316
+ "version_history": {
317
+ "1.0": "Initial version with promptTriggers only",
318
+ "1.1": "Added notes and documentation",
319
+ "1.2": "Added toolGuards for PreToolUse hook"
320
+ },
321
+ "enforcement_types": {
322
+ "suggest": "Skill suggestion appears but doesn't block execution",
323
+ "block": "Requires skill to be used before proceeding (NOT IMPLEMENTED)",
324
+ "warn": "Shows warning but allows proceeding (NOT IMPLEMENTED)"
325
+ },
326
+ "priority_levels": {
327
+ "critical": "Highest - Always trigger, should be used",
328
+ "high": "Important - Strongly recommended",
329
+ "medium": "Moderate - Good to use if relevant",
330
+ "low": "Optional - Nice to have"
331
+ },
332
+ "trigger_types": {
333
+ "promptTriggers": "Activated via UserPromptSubmit hook based on user prompt",
334
+ "toolGuards": "Activated via PreToolUse hook before specific tool executions"
183
335
  }
336
+ }
184
337
  }
@@ -27,3 +27,6 @@ APP_URL=http://localhost:3000
27
27
  # Optional
28
28
  CORS_ORIGINS=*
29
29
  LOG_LEVEL=info
30
+
31
+ # npm (publishing)
32
+ NPM_TOKEN=your-npm-token
@@ -5,7 +5,7 @@ Production-ready multi-tenant SaaS boilerplate with Hono.js backend and React fr
5
5
  ## Tech Stack
6
6
 
7
7
  - **Runtime**: Cloudflare Workers (D1 database, KV sessions, R2 storage)
8
- - **Backend**: Hono.js 4.6 + Drizzle ORM + Zod validation
8
+ - **Backend**: Hono.js 4.6 + SQL (D1) + Zod validation
9
9
  - **Frontend**: React 19 + TanStack Router + Tailwind CSS 4.0
10
10
  - **Testing**: Vitest (unit/integration) + Playwright (E2E)
11
11
  - **Auth**: Google OAuth 2.0 with session-based cookies
@@ -33,7 +33,7 @@ Production-ready multi-tenant SaaS boilerplate with Hono.js backend and React fr
33
33
  │ │ │ └── health/ # Health check
34
34
  │ │ ├── services/ # Business logic layer
35
35
  │ │ ├── middleware/ # Auth, CORS, logging, rate-limit
36
- │ │ ├── db/schema/ # Drizzle table definitions
36
+ │ │ ├── db/records.ts # DB record types for SQL mapping
37
37
  │ │ ├── lib/ # Utilities (oauth, session, tokens)
38
38
  │ │ └── auth/ # Roles, permissions, guards
39
39
  │ │
@@ -213,6 +213,6 @@ Defined in `config/wrangler.json`:
213
213
 
214
214
  ### Database Changes
215
215
 
216
- 1. Modify schema in `src/server/db/schema/`
217
- 2. Run `pnpm drizzle-kit generate` to create migration
218
- 3. Apply with `pnpm db:migrate:local`
216
+ 1. Update `schema.sql`
217
+ 2. Apply with `pnpm db:schema:local`
218
+ 3. (Optional) Seed with `pnpm db:seed:local`