@codyswann/lisa 1.0.0 → 1.0.5

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 (280) hide show
  1. package/README.md +244 -36
  2. package/all/copy-overwrite/.claude/README.md +1 -3
  3. package/all/copy-overwrite/.claude/REFERENCE.md +519 -0
  4. package/all/copy-overwrite/.claude/agents/skill-evaluator.md +7 -7
  5. package/all/copy-overwrite/.claude/agents/test-coverage-agent.md +17 -0
  6. package/all/copy-overwrite/.claude/commands/git/commit.md +9 -5
  7. package/all/copy-overwrite/.claude/commands/git/submit-pr.md +1 -1
  8. package/all/copy-overwrite/.claude/commands/lisa/review-implementation.md +209 -0
  9. package/all/copy-overwrite/.claude/commands/project/add-test-coverage.md +58 -0
  10. package/all/copy-overwrite/.claude/commands/project/archive.md +1 -1
  11. package/all/copy-overwrite/.claude/commands/project/complete-task.md +53 -1
  12. package/all/copy-overwrite/.claude/commands/project/debrief.md +12 -23
  13. package/all/copy-overwrite/.claude/commands/project/execute.md +33 -77
  14. package/all/copy-overwrite/.claude/commands/project/fix-linter-error.md +87 -0
  15. package/all/copy-overwrite/.claude/commands/project/implement.md +24 -28
  16. package/all/copy-overwrite/.claude/commands/project/lower-code-complexity.md +30 -55
  17. package/all/copy-overwrite/.claude/commands/project/plan.md +87 -242
  18. package/all/copy-overwrite/.claude/commands/project/reduce-max-lines-per-function.md +76 -0
  19. package/all/copy-overwrite/.claude/commands/project/reduce-max-lines.md +75 -0
  20. package/all/copy-overwrite/.claude/commands/project/research.md +86 -188
  21. package/all/copy-overwrite/.claude/commands/project/review.md +19 -38
  22. package/all/copy-overwrite/.claude/commands/project/setup.md +1 -1
  23. package/all/copy-overwrite/.claude/commands/project/verify.md +62 -25
  24. package/all/copy-overwrite/.claude/commands/pull-request/review.md +25 -7
  25. package/all/copy-overwrite/.claude/commands/tasks/load.md +63 -0
  26. package/all/copy-overwrite/.claude/commands/tasks/sync.md +84 -0
  27. package/all/copy-overwrite/.claude/hooks/README.md +75 -0
  28. package/all/copy-overwrite/.claude/hooks/check-tired-boss.sh +61 -0
  29. package/all/copy-overwrite/.claude/hooks/debug-hook.sh +47 -0
  30. package/all/copy-overwrite/.claude/hooks/notify-ntfy.sh +2 -0
  31. package/all/copy-overwrite/.claude/hooks/sync-tasks.sh +95 -0
  32. package/all/copy-overwrite/.claude/{skills/coding-philosophy/SKILL.md → rules/coding-philosophy.md} +93 -70
  33. package/all/copy-overwrite/.claude/settings.json +35 -14
  34. package/all/copy-overwrite/.claude/skills/prompt-complexity-scorer/SKILL.md +41 -9
  35. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/init_skill.py +2 -0
  36. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/package_skill.py +2 -0
  37. package/all/copy-overwrite/.claude/skills/skill-creator/scripts/quick_validate.py +2 -0
  38. package/all/copy-overwrite/.safety-net.json +25 -0
  39. package/all/copy-overwrite/CLAUDE.md +8 -30
  40. package/all/copy-overwrite/HUMAN.md +517 -17
  41. package/all/create-only/.claude/rules/PROJECT_RULES.md +9 -0
  42. package/all/create-only/scripts/setup-deploy-key.sh +190 -0
  43. package/all/deletions.json +5 -0
  44. package/cdk/copy-overwrite/.github/workflows/ci.yml +142 -0
  45. package/cdk/copy-overwrite/.github/workflows/deploy.yml +59 -0
  46. package/cdk/copy-overwrite/eslint.cdk.ts +175 -0
  47. package/cdk/copy-overwrite/eslint.config.ts +51 -0
  48. package/cdk/copy-overwrite/eslint.slow.config.ts +80 -0
  49. package/cdk/copy-overwrite/knip.json +53 -0
  50. package/cdk/copy-overwrite/tsconfig.eslint.json +11 -0
  51. package/cdk/merge/package.json +17 -1
  52. package/dist/cli/index.d.ts +3 -2
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +83 -64
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/prompts.d.ts +17 -3
  57. package/dist/cli/prompts.d.ts.map +1 -1
  58. package/dist/cli/prompts.js +52 -16
  59. package/dist/cli/prompts.js.map +1 -1
  60. package/dist/core/config.d.ts +13 -4
  61. package/dist/core/config.d.ts.map +1 -1
  62. package/dist/core/config.js +17 -9
  63. package/dist/core/config.js.map +1 -1
  64. package/dist/core/git-service.d.ts +40 -0
  65. package/dist/core/git-service.d.ts.map +1 -0
  66. package/dist/core/git-service.js +52 -0
  67. package/dist/core/git-service.js.map +1 -0
  68. package/dist/core/index.d.ts +3 -3
  69. package/dist/core/index.js +3 -3
  70. package/dist/core/lisa.d.ts +124 -7
  71. package/dist/core/lisa.d.ts.map +1 -1
  72. package/dist/core/lisa.js +423 -221
  73. package/dist/core/lisa.js.map +1 -1
  74. package/dist/core/manifest.d.ts +5 -1
  75. package/dist/core/manifest.d.ts.map +1 -1
  76. package/dist/core/manifest.js +22 -16
  77. package/dist/core/manifest.js.map +1 -1
  78. package/dist/detection/detector.interface.d.ts +1 -1
  79. package/dist/detection/detectors/cdk.d.ts +6 -1
  80. package/dist/detection/detectors/cdk.d.ts.map +1 -1
  81. package/dist/detection/detectors/cdk.js +16 -8
  82. package/dist/detection/detectors/cdk.js.map +1 -1
  83. package/dist/detection/detectors/expo.d.ts +6 -1
  84. package/dist/detection/detectors/expo.d.ts.map +1 -1
  85. package/dist/detection/detectors/expo.js +13 -8
  86. package/dist/detection/detectors/expo.js.map +1 -1
  87. package/dist/detection/detectors/nestjs.d.ts +7 -2
  88. package/dist/detection/detectors/nestjs.d.ts.map +1 -1
  89. package/dist/detection/detectors/nestjs.js +17 -9
  90. package/dist/detection/detectors/nestjs.js.map +1 -1
  91. package/dist/detection/detectors/npm-package.d.ts +6 -1
  92. package/dist/detection/detectors/npm-package.d.ts.map +1 -1
  93. package/dist/detection/detectors/npm-package.js +9 -4
  94. package/dist/detection/detectors/npm-package.js.map +1 -1
  95. package/dist/detection/detectors/typescript.d.ts +6 -1
  96. package/dist/detection/detectors/typescript.d.ts.map +1 -1
  97. package/dist/detection/detectors/typescript.js +12 -7
  98. package/dist/detection/detectors/typescript.js.map +1 -1
  99. package/dist/detection/index.d.ts +13 -3
  100. package/dist/detection/index.d.ts.map +1 -1
  101. package/dist/detection/index.js +17 -7
  102. package/dist/detection/index.js.map +1 -1
  103. package/dist/errors/index.d.ts +66 -2
  104. package/dist/errors/index.d.ts.map +1 -1
  105. package/dist/errors/index.js +89 -17
  106. package/dist/errors/index.js.map +1 -1
  107. package/dist/index.js +3 -3
  108. package/dist/index.js.map +1 -1
  109. package/dist/logging/console-logger.d.ts +21 -1
  110. package/dist/logging/console-logger.d.ts.map +1 -1
  111. package/dist/logging/console-logger.js +26 -6
  112. package/dist/logging/console-logger.js.map +1 -1
  113. package/dist/logging/index.d.ts +3 -3
  114. package/dist/logging/index.js +2 -2
  115. package/dist/logging/logger.interface.d.ts +1 -1
  116. package/dist/logging/silent-logger.d.ts +21 -1
  117. package/dist/logging/silent-logger.d.ts.map +1 -1
  118. package/dist/logging/silent-logger.js +20 -0
  119. package/dist/logging/silent-logger.js.map +1 -1
  120. package/dist/strategies/copy-contents.d.ts +47 -6
  121. package/dist/strategies/copy-contents.d.ts.map +1 -1
  122. package/dist/strategies/copy-contents.js +99 -49
  123. package/dist/strategies/copy-contents.js.map +1 -1
  124. package/dist/strategies/copy-overwrite.d.ts +10 -2
  125. package/dist/strategies/copy-overwrite.d.ts.map +1 -1
  126. package/dist/strategies/copy-overwrite.js +17 -9
  127. package/dist/strategies/copy-overwrite.js.map +1 -1
  128. package/dist/strategies/create-only.d.ts +10 -2
  129. package/dist/strategies/create-only.d.ts.map +1 -1
  130. package/dist/strategies/create-only.js +14 -6
  131. package/dist/strategies/create-only.js.map +1 -1
  132. package/dist/strategies/index.d.ts +17 -7
  133. package/dist/strategies/index.d.ts.map +1 -1
  134. package/dist/strategies/index.js +19 -9
  135. package/dist/strategies/index.js.map +1 -1
  136. package/dist/strategies/merge.d.ts +10 -2
  137. package/dist/strategies/merge.d.ts.map +1 -1
  138. package/dist/strategies/merge.js +21 -21
  139. package/dist/strategies/merge.js.map +1 -1
  140. package/dist/strategies/strategy.interface.d.ts +1 -1
  141. package/dist/strategies/strategy.interface.d.ts.map +1 -1
  142. package/dist/transaction/backup.d.ts +15 -1
  143. package/dist/transaction/backup.d.ts.map +1 -1
  144. package/dist/transaction/backup.js +47 -12
  145. package/dist/transaction/backup.js.map +1 -1
  146. package/dist/transaction/index.d.ts +3 -3
  147. package/dist/transaction/index.js +2 -2
  148. package/dist/transaction/transaction.d.ts +25 -2
  149. package/dist/transaction/transaction.d.ts.map +1 -1
  150. package/dist/transaction/transaction.js +25 -2
  151. package/dist/transaction/transaction.js.map +1 -1
  152. package/dist/utils/file-operations.d.ts +21 -0
  153. package/dist/utils/file-operations.d.ts.map +1 -1
  154. package/dist/utils/file-operations.js +48 -12
  155. package/dist/utils/file-operations.js.map +1 -1
  156. package/dist/utils/index.d.ts +3 -3
  157. package/dist/utils/index.js +3 -3
  158. package/dist/utils/json-utils.d.ts +12 -0
  159. package/dist/utils/json-utils.d.ts.map +1 -1
  160. package/dist/utils/json-utils.js +17 -5
  161. package/dist/utils/json-utils.js.map +1 -1
  162. package/dist/utils/path-utils.d.ts +11 -0
  163. package/dist/utils/path-utils.d.ts.map +1 -1
  164. package/dist/utils/path-utils.js +12 -1
  165. package/dist/utils/path-utils.js.map +1 -1
  166. package/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +5 -0
  167. package/eslint-plugin-code-organization/index.js +5 -0
  168. package/eslint-plugin-code-organization/rules/enforce-statement-order.js +5 -0
  169. package/expo/copy-overwrite/.claude/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +2 -0
  170. package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/create_component.py +2 -0
  171. package/expo/copy-overwrite/.claude/skills/container-view-pattern/scripts/validate_component.py +2 -0
  172. package/expo/copy-overwrite/.claude/skills/cross-platform-compatibility/scripts/validate_cross_platform.py +2 -0
  173. package/expo/copy-overwrite/.claude/skills/directory-structure/scripts/validate_structure.py +2 -0
  174. package/expo/copy-overwrite/.claude/skills/expo-router-best-practices/scripts/generate-route.py +2 -0
  175. package/expo/copy-overwrite/.claude/skills/gluestack-nativewind/scripts/validate_styling.py +2 -41
  176. package/{typescript → expo}/copy-overwrite/.github/workflows/build.yml +3 -0
  177. package/expo/copy-overwrite/.github/workflows/ci.yml +36 -0
  178. package/{typescript → expo}/copy-overwrite/.github/workflows/deploy.yml +22 -26
  179. package/{typescript → expo}/copy-overwrite/.github/workflows/lighthouse.yml +4 -1
  180. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/plugin-index.test.js +5 -0
  181. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js +5 -0
  182. package/expo/copy-overwrite/eslint-plugin-component-structure/__tests__/single-component-per-file.test.js +5 -0
  183. package/expo/copy-overwrite/eslint-plugin-component-structure/index.js +5 -0
  184. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/enforce-component-structure.js +5 -0
  185. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/no-return-in-view.js +6 -1
  186. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/require-memo-in-view.js +5 -0
  187. package/expo/copy-overwrite/eslint-plugin-component-structure/rules/single-component-per-file.js +5 -0
  188. package/expo/copy-overwrite/eslint-plugin-ui-standards/README.md +0 -68
  189. package/expo/copy-overwrite/eslint-plugin-ui-standards/index.js +5 -3
  190. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-classname-outside-ui.js +5 -0
  191. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-direct-rn-imports.js +5 -0
  192. package/expo/copy-overwrite/eslint.config.ts +53 -0
  193. package/expo/copy-overwrite/eslint.expo.ts +330 -0
  194. package/expo/copy-overwrite/eslint.slow.config.ts +86 -0
  195. package/expo/copy-overwrite/knip.json +132 -0
  196. package/expo/copy-overwrite/lighthouserc.js +27 -0
  197. package/expo/copy-overwrite/tsconfig.eslint.json +25 -0
  198. package/expo/create-only/lighthouserc-config.json +6 -1
  199. package/expo/merge/package.json +16 -3
  200. package/nestjs/copy-overwrite/.claude/skills/nestjs-rules/SKILL.md +1 -1
  201. package/{typescript → nestjs}/copy-overwrite/.github/k6/README.md +2 -2
  202. package/{typescript → nestjs}/copy-overwrite/.github/k6/examples/customer-deploy-integration.yml +3 -0
  203. package/{typescript → nestjs}/copy-overwrite/.github/k6/examples/data-driven-test.js +5 -0
  204. package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/load.js +6 -2
  205. package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/smoke.js +5 -0
  206. package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/soak.js +5 -0
  207. package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/spike.js +5 -0
  208. package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/stress.js +5 -0
  209. package/{typescript → nestjs}/copy-overwrite/.github/k6/scripts/api-test.js +5 -0
  210. package/{typescript → nestjs}/copy-overwrite/.github/k6/scripts/default-test.js +5 -0
  211. package/nestjs/copy-overwrite/.github/workflows/ci.yml +29 -0
  212. package/nestjs/copy-overwrite/.github/workflows/deploy.yml +291 -0
  213. package/{typescript → nestjs}/copy-overwrite/.github/workflows/load-test.yml +3 -0
  214. package/nestjs/copy-overwrite/eslint.config.ts +53 -0
  215. package/nestjs/copy-overwrite/eslint.nestjs.ts +178 -0
  216. package/nestjs/merge/package.json +11 -3
  217. package/package.json +34 -40
  218. package/typescript/copy-contents/.husky/pre-commit +1 -1
  219. package/typescript/copy-contents/.husky/pre-push +99 -118
  220. package/typescript/copy-overwrite/.claude/hooks/format-on-edit.sh +2 -0
  221. package/typescript/copy-overwrite/.claude/hooks/install_pkgs.sh +3 -11
  222. package/typescript/copy-overwrite/.claude/hooks/lint-on-edit.sh +2 -0
  223. package/typescript/copy-overwrite/.claude/hooks/sg-scan-on-edit.sh +68 -0
  224. package/typescript/copy-overwrite/.claude/settings.json +79 -0
  225. package/typescript/copy-overwrite/.claude/skills/jsdoc-best-practices/SKILL.md +44 -0
  226. package/typescript/copy-overwrite/.github/README.md +49 -1
  227. package/typescript/copy-overwrite/.github/dependabot.yml +3 -0
  228. package/typescript/copy-overwrite/.github/workflows/ci.yml +7 -29
  229. package/typescript/copy-overwrite/.github/workflows/claude.yml +3 -0
  230. package/typescript/copy-overwrite/.github/workflows/create-github-issue-on-failure.yml +6 -4
  231. package/typescript/copy-overwrite/.github/workflows/create-issue-on-failure.yml +176 -0
  232. package/typescript/copy-overwrite/.github/workflows/create-jira-issue-on-failure.yml +3 -1
  233. package/typescript/copy-overwrite/.github/workflows/create-sentry-issue-on-failure.yml +3 -1
  234. package/typescript/copy-overwrite/.github/workflows/lint-slow.yml +40 -0
  235. package/typescript/copy-overwrite/.github/workflows/quality.yml +151 -38
  236. package/typescript/copy-overwrite/.github/workflows/release.yml +3 -0
  237. package/typescript/copy-overwrite/.gitleaksignore +3 -0
  238. package/typescript/copy-overwrite/.lintstagedrc.json +6 -0
  239. package/typescript/copy-overwrite/.prettierignore +2 -1
  240. package/typescript/copy-overwrite/.yamllint +2 -0
  241. package/typescript/copy-overwrite/ast-grep/rule-tests/.gitkeep +3 -0
  242. package/typescript/copy-overwrite/ast-grep/rules/.gitkeep +3 -0
  243. package/typescript/copy-overwrite/ast-grep/utils/.gitkeep +3 -0
  244. package/typescript/copy-overwrite/{commitlint.config.js → commitlint.config.cjs} +5 -0
  245. package/typescript/copy-overwrite/eslint-plugin-code-organization/__tests__/enforce-statement-order.test.js +5 -0
  246. package/typescript/copy-overwrite/eslint-plugin-code-organization/index.js +5 -0
  247. package/typescript/copy-overwrite/eslint-plugin-code-organization/rules/enforce-statement-order.js +5 -0
  248. package/typescript/copy-overwrite/eslint.base.ts +430 -0
  249. package/typescript/copy-overwrite/eslint.config.ts +52 -0
  250. package/typescript/copy-overwrite/eslint.ignore.config.json +19 -2
  251. package/typescript/copy-overwrite/eslint.slow.config.ts +69 -0
  252. package/typescript/copy-overwrite/eslint.typescript.ts +142 -0
  253. package/typescript/copy-overwrite/knip.json +64 -0
  254. package/typescript/copy-overwrite/sgconfig.yml +11 -0
  255. package/typescript/copy-overwrite/tsconfig.eslint.json +9 -0
  256. package/typescript/create-only/eslint.config.local.ts +24 -0
  257. package/typescript/{copy-overwrite/eslint.thresholds.config.json → create-only/eslint.thresholds.json} +1 -1
  258. package/typescript/github-rulesets/base.json +2 -75
  259. package/typescript/merge/.claude/settings.json +160 -0
  260. package/typescript/merge/package.json +35 -34
  261. package/all/copy-overwrite/.claude/commands/rules/format-md.md +0 -72
  262. package/all/copy-overwrite/.claude/skills/coding-philosophy/references/function-structure.md +0 -416
  263. package/all/copy-overwrite/.claude/skills/coding-philosophy/references/immutable-patterns.md +0 -316
  264. package/expo/copy-overwrite/eslint-plugin-ui-standards/rules/no-inline-styles.js +0 -73
  265. package/expo/copy-overwrite/eslint.config.mjs +0 -560
  266. package/lisa.sh +0 -35
  267. package/typescript/copy-overwrite/eslint.config.mjs +0 -390
  268. /package/{all/create-only/PROJECT_RULES.md → cdk/copy-overwrite/.github/workflows/.keep} +0 -0
  269. /package/{typescript → nestjs}/copy-overwrite/.github/k6/BROWSER_TESTING_NOTE.md +0 -0
  270. /package/{typescript → nestjs}/copy-overwrite/.github/k6/INTEGRATION_GUIDE.md +0 -0
  271. /package/{typescript → nestjs}/copy-overwrite/.github/k6/SCENARIO_SELECTION_GUIDE.md +0 -0
  272. /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/load.json +0 -0
  273. /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/smoke.json +0 -0
  274. /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/soak.json +0 -0
  275. /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/spike.json +0 -0
  276. /package/{typescript → nestjs}/copy-overwrite/.github/k6/scenarios/stress.json +0 -0
  277. /package/{typescript → nestjs}/copy-overwrite/.github/k6/thresholds/normal.json +0 -0
  278. /package/{typescript → nestjs}/copy-overwrite/.github/k6/thresholds/relaxed.json +0 -0
  279. /package/{typescript → nestjs}/copy-overwrite/.github/k6/thresholds/strict.json +0 -0
  280. /package/{typescript → nestjs}/copy-overwrite/.github/workflows/k6-load-test-README.md +0 -0
@@ -92,5 +92,5 @@ fi
92
92
 
93
93
  # Run lint-staged for incremental lint and format checks
94
94
  echo "🚀 Running lint-staged..."
95
- $EXECUTOR lint-staged --config package.json
95
+ $EXECUTOR lint-staged --config .lintstagedrc.json
96
96
  # END: AI GUARDRAILS
@@ -1,4 +1,11 @@
1
- # BEGIN: AI GUARDRAILS
1
+ # BEGIN: AI GUARDRAILS
2
+
3
+ # Skip pre-push checks in Claude Code remote environment
4
+ # These checks run in CI/CD anyway, and remote environments have limited resources
5
+ if [ "$CLAUDE_CODE_REMOTE" = "true" ]; then
6
+ echo "ℹ️ Skipping pre-push checks (running in Claude Code remote environment)"
7
+ exit 0
8
+ fi
2
9
 
3
10
  # Detect package manager (check if tool is available before using it)
4
11
  # Priority: bun > yarn > npm (bun first since package.json engines prefer it)
@@ -65,61 +72,33 @@ elif [ "$PACKAGE_MANAGER" = "npm" ]; then
65
72
  echo "✅ No high or critical vulnerabilities found in production dependencies"
66
73
 
67
74
  elif [ "$PACKAGE_MANAGER" = "bun" ]; then
68
- # Bun's 'bun pm scan' requires a configured scanner in bunfig.toml
69
- # Fall back to npm audit which works with package.json
70
- echo " (using npm audit fallback for bun projects)"
75
+ # Excluding GHSA-5j98-mcp5-4vw2 (CVE-2025-64756): glob CLI command injection
76
+ # This vulnerability only affects the glob CLI (--cmd flag), not library usage
77
+ # We only use glob as a library through Babel and other tools - never invoke CLI
78
+
79
+ # Excluding GHSA-8qq5-rm4j-mr97: node-tar path sanitization vulnerability
80
+ # Nested dependency in @expo/cli - bun resolves to patched version but audit still flags it
81
+ # Risk: Low - only affects tar extraction with malicious filenames, not our use case
82
+ if ! bun audit --audit-level=high --ignore GHSA-5j98-mcp5-4vw2 --ignore GHSA-8qq5-rm4j-mr97; then
83
+ echo "⚠️ Security audit failed. Please fix high/critical vulnerabilities before pushing."
84
+ exit 1
85
+ fi
86
+ echo "✅ No high or critical vulnerabilities found in production dependencies"
87
+ fi
71
88
 
72
- # Check if jq is installed (required for filtering vulnerabilities)
73
- if ! command -v jq >/dev/null 2>&1; then
74
- echo ""
75
- echo "⚠️ WARNING: jq is not installed - required for vulnerability filtering"
76
- echo ""
77
- echo "To install jq:"
78
- echo " macOS: brew install jq"
79
- echo " Windows: choco install jq # or scoop install jq"
80
- echo " Linux: apt-get install jq"
81
- echo ""
82
- echo "Continuing without security audit..."
89
+ # Run dead code detection (knip) - only if script exists
90
+ if jq -e '.scripts.knip' package.json >/dev/null 2>&1; then
91
+ echo "🗑️ Running dead code detection (knip)..."
92
+ $RUNNER knip
93
+ if [ $? -ne 0 ]; then
94
+ echo " Dead code detected. Please remove unused exports/dependencies before pushing."
83
95
  echo ""
84
- else
85
- # npm audit requires a lockfile - generate temporary one if needed
86
- TEMP_LOCKFILE=false
87
- if [ ! -f "package-lock.json" ]; then
88
- echo " Generating temporary package-lock.json for audit..."
89
- npm i --package-lock-only --ignore-scripts --legacy-peer-deps --silent 2>/dev/null
90
- TEMP_LOCKFILE=true
91
- fi
92
-
93
- # Excluding GHSA-8qq5-rm4j-mr97: node-tar path sanitization vulnerability
94
- # This is a nested dependency in @expo/cli that bun resolves to the patched version (7.5.3)
95
- # npm audit generates its own lockfile and doesn't respect bun's resolutions
96
- # Risk: None - bun.lock shows tar@7.5.3 is used, not the vulnerable version
97
- VULN_COUNT=$(npm audit --omit=dev --json 2>/dev/null | jq '
98
- .vulnerabilities | to_entries | map(select(
99
- .value.severity == "high" or .value.severity == "critical"
100
- )) | map(select(
101
- .value.via | all(. | if type == "object" then (.url == "https://github.com/advisories/GHSA-8qq5-rm4j-mr97" | not) else true end)
102
- )) | length
103
- ')
104
- if [ "$VULN_COUNT" -gt 0 ] 2>/dev/null; then
105
- AUDIT_EXIT=1
106
- else
107
- AUDIT_EXIT=0
108
- fi
109
-
110
- # Clean up temporary lockfile
111
- if [ "$TEMP_LOCKFILE" = "true" ]; then
112
- rm -f package-lock.json
113
- fi
114
-
115
- if [ $AUDIT_EXIT -ne 0 ]; then
116
- # Re-run to show the actual vulnerabilities (excluding the known one)
117
- echo "⚠️ Security audit found high/critical vulnerabilities:"
118
- npm audit --omit=dev 2>/dev/null | grep -v "GHSA-8qq5-rm4j-mr97" || true
119
- exit 1
120
- fi
121
- echo "✅ No high or critical vulnerabilities found in production dependencies (excluding known false positives)"
96
+ echo "To auto-fix some issues, run: $RUNNER knip:fix"
97
+ exit 1
122
98
  fi
99
+ echo "✅ No dead code detected"
100
+ else
101
+ echo "ℹ️ Skipping dead code detection (knip not configured)"
123
102
  fi
124
103
 
125
104
  # Run unit tests with coverage
@@ -139,72 +118,74 @@ if [ $? -ne 0 ]; then
139
118
  fi
140
119
 
141
120
  # Run Lighthouse CI performance audit (only if installed)
121
+ # Disable Lighthouse beause it takes too long to run on push. Just let it run in ci/cd
142
122
  # Check if lighthouse:check script exists in package.json
143
- if ! grep -q '"lighthouse:check"' package.json 2>/dev/null; then
144
- echo ""
145
- echo "ℹ️ Skipping Lighthouse CI audit (not configured for this project)"
146
- echo ""
147
- else
148
- # Check if Chrome is available (required for Lighthouse)
149
- CHROME_AVAILABLE=false
150
- if command -v google-chrome >/dev/null 2>&1 || \
151
- command -v google-chrome-stable >/dev/null 2>&1 || \
152
- command -v chromium >/dev/null 2>&1 || \
153
- command -v chromium-browser >/dev/null 2>&1 || \
154
- [ -x "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" ]; then
155
- CHROME_AVAILABLE=true
156
- fi
157
-
158
- if [ "$CHROME_AVAILABLE" = "false" ]; then
159
- echo ""
160
- echo "⚠️ WARNING: Chrome/Chromium not found - skipping Lighthouse CI audit"
161
- echo ""
162
- echo "To enable Lighthouse performance audits, install Chrome:"
163
- echo " macOS: brew install --cask google-chrome"
164
- echo " Linux: apt-get install chromium-browser # or google-chrome-stable"
165
- echo " Windows: choco install googlechrome"
166
- echo ""
167
- echo "Continuing without Lighthouse audit..."
168
- echo ""
169
- else
170
- echo "🔦 Building web export for Lighthouse..."
171
- $RUNNER export:web
172
- if [ $? -ne 0 ]; then
173
- echo "❌ Web export failed. Please fix build errors before pushing."
174
- exit 1
175
- fi
176
-
177
- echo "🔦 Running Lighthouse CI performance audit..."
178
- LIGHTHOUSE_OUTPUT=$($RUNNER lighthouse:check 2>&1)
179
- LIGHTHOUSE_EXIT=$?
180
- echo "$LIGHTHOUSE_OUTPUT"
181
-
182
- # Extract report URL from output
183
- REPORT_URL=$(echo "$LIGHTHOUSE_OUTPUT" | grep -o 'https://storage.googleapis.com/[^ ]*\.html' | head -1)
184
-
185
- if [ $LIGHTHOUSE_EXIT -ne 0 ]; then
186
- echo ""
187
- echo "❌ Lighthouse CI performance audit failed!"
188
- echo ""
189
- echo "Your changes caused performance regressions that exceed the allowed thresholds."
190
- echo ""
191
- if [ -n "$REPORT_URL" ]; then
192
- echo "📊 View full report: $REPORT_URL"
193
- echo ""
194
- fi
195
- echo "Common fixes:"
196
- echo " Bundle size too large → Remove unused dependencies, add code splitting"
197
- echo " • LCP/FCP too slowOptimize images, reduce render-blocking resources"
198
- echo " • CLS too highAdd explicit dimensions to images/containers"
199
- echo " • Too much unused JS Implement lazy loading for non-critical code"
200
- echo ""
201
- echo "See lighthouserc.js for threshold details."
202
- echo ""
203
- exit 1
204
- fi
205
- echo "✅ Lighthouse CI performance audit passed"
206
- fi
207
- fi
123
+ # if ! grep -q '"lighthouse:check"' package.json 2>/dev/null; then
124
+ # echo ""
125
+ # echo "ℹ️ Skipping Lighthouse CI audit (not configured for this project)"
126
+ # echo ""
127
+ # else
128
+ # # Check if Chrome is available (required for Lighthouse)
129
+ # CHROME_AVAILABLE=false
130
+ # if command -v google-chrome >/dev/null 2>&1 || \
131
+ # command -v google-chrome-stable >/dev/null 2>&1 || \
132
+ # command -v chromium >/dev/null 2>&1 || \
133
+ # command -v chromium-browser >/dev/null 2>&1 || \
134
+ # [ -x "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" ]; then
135
+ # CHROME_AVAILABLE=true
136
+ # fi
137
+
138
+
139
+ # if [ "$CHROME_AVAILABLE" = "false" ]; then
140
+ # echo ""
141
+ # echo "⚠️ WARNING: Chrome/Chromium not found - skipping Lighthouse CI audit"
142
+ # echo ""
143
+ # echo "To enable Lighthouse performance audits, install Chrome:"
144
+ # echo " macOS: brew install --cask google-chrome"
145
+ # echo " Linux: apt-get install chromium-browser # or google-chrome-stable"
146
+ # echo " Windows: choco install googlechrome"
147
+ # echo ""
148
+ # echo "Continuing without Lighthouse audit..."
149
+ # echo ""
150
+ # else
151
+ # echo "🔦 Building web export for Lighthouse..."
152
+ # $RUNNER export:web
153
+ # if [ $? -ne 0 ]; then
154
+ # echo "❌ Web export failed. Please fix build errors before pushing."
155
+ # exit 1
156
+ # fi
157
+
158
+ # echo "🔦 Running Lighthouse CI performance audit..."
159
+ # LIGHTHOUSE_OUTPUT=$($RUNNER lighthouse:check 2>&1)
160
+ # LIGHTHOUSE_EXIT=$?
161
+ # echo "$LIGHTHOUSE_OUTPUT"
162
+
163
+ # # Extract report URL from output
164
+ # REPORT_URL=$(echo "$LIGHTHOUSE_OUTPUT" | grep -o 'https://storage.googleapis.com/[^ ]*\.html' | head -1)
165
+
166
+ # if [ $LIGHTHOUSE_EXIT -ne 0 ]; then
167
+ # echo ""
168
+ # echo "❌ Lighthouse CI performance audit failed!"
169
+ # echo ""
170
+ # echo "Your changes caused performance regressions that exceed the allowed thresholds."
171
+ # echo ""
172
+ # if [ -n "$REPORT_URL" ]; then
173
+ # echo "📊 View full report: $REPORT_URL"
174
+ # echo ""
175
+ # fi
176
+ # echo "Common fixes:"
177
+ # echo " • Bundle size too largeRemove unused dependencies, add code splitting"
178
+ # echo " • LCP/FCP too slowOptimize images, reduce render-blocking resources"
179
+ # echo " • CLS too highAdd explicit dimensions to images/containers"
180
+ # echo " • Too much unused JS → Implement lazy loading for non-critical code"
181
+ # echo ""
182
+ # echo "See lighthouserc.js for threshold details."
183
+ # echo ""
184
+ # exit 1
185
+ # fi
186
+ # echo "✅ Lighthouse CI performance audit passed"
187
+ # fi
188
+ # fi
208
189
 
209
190
  exit 0
210
191
 
@@ -1,4 +1,6 @@
1
1
  #!/bin/bash
2
+ # This file is managed by Lisa.
3
+ # Do not edit directly — changes will be overwritten on the next `lisa` run.
2
4
 
3
5
  # Hook script to format files with Prettier after Claude edits them
4
6
  # This script receives JSON input via stdin with tool information
@@ -1,4 +1,6 @@
1
1
  #!/bin/bash
2
+ # This file is managed by Lisa.
3
+ # Do not edit directly — changes will be overwritten on the next `lisa` run.
2
4
 
3
5
  # Only run package installation in remote (Claude Code web) environment
4
6
  # node_modules are gitignored, so they need to be installed remotely
@@ -34,16 +36,7 @@ npx playwright install chromium
34
36
  # Use sort to ensure deterministic selection of the latest version
35
37
  CHROME_PATH=$(find ~/.cache/ms-playwright -name "chrome" -type f 2>/dev/null | grep "chrome-linux" | sort | tail -n 1)
36
38
  if [ -n "$CHROME_PATH" ]; then
37
- # Write to .claude/env.local for project-specific env (preferred)
38
- ENV_LOCAL="$CLAUDE_PROJECT_DIR/.claude/env.local"
39
- if [ -f "$ENV_LOCAL" ]; then
40
- # Remove old CHROME_PATH entries and add new one
41
- grep -v "^export CHROME_PATH=" "$ENV_LOCAL" > "$ENV_LOCAL.tmp" 2>/dev/null || true
42
- mv "$ENV_LOCAL.tmp" "$ENV_LOCAL"
43
- fi
44
- echo "export CHROME_PATH=\"$CHROME_PATH\"" >> "$ENV_LOCAL"
45
-
46
- # Also append to ~/.bashrc for shell sessions (idempotent)
39
+ # Append to ~/.bashrc for shell sessions (idempotent)
47
40
  if ! grep -q "export CHROME_PATH=" ~/.bashrc 2>/dev/null; then
48
41
  echo "export CHROME_PATH=\"$CHROME_PATH\"" >> ~/.bashrc
49
42
  else
@@ -53,7 +46,6 @@ if [ -n "$CHROME_PATH" ]; then
53
46
 
54
47
  export CHROME_PATH="$CHROME_PATH"
55
48
  echo "Chromium installed at: $CHROME_PATH"
56
- echo "CHROME_PATH exported to: $ENV_LOCAL and ~/.bashrc"
57
49
  fi
58
50
 
59
51
  exit 0
@@ -1,4 +1,6 @@
1
1
  #!/bin/bash
2
+ # This file is managed by Lisa.
3
+ # Do not edit directly — changes will be overwritten on the next `lisa` run.
2
4
 
3
5
  # Hook script to lint and auto-fix files with ESLint after Claude edits them
4
6
  # This script receives JSON input via stdin with tool information
@@ -0,0 +1,68 @@
1
+ #!/bin/bash
2
+ # This file is managed by Lisa.
3
+ # Do not edit directly — changes will be overwritten on the next `lisa` run.
4
+
5
+ # Hook script to run ast-grep scan after Claude edits files
6
+ # This script receives JSON input via stdin with tool information
7
+ # Reference: https://docs.claude.com/en/docs/claude-code/hooks
8
+ # Note: This hook is BLOCKING - it returns non-zero exit codes so Claude must fix issues
9
+
10
+ # Extract file path from JSON input
11
+ FILE_PATH=$(cat | grep -o '"file_path":"[^"]*"' | head -1 | cut -d'"' -f4)
12
+
13
+ if [ -z "$FILE_PATH" ] || [ ! -f "$FILE_PATH" ]; then
14
+ exit 0
15
+ fi
16
+
17
+ # Check if file type is supported (TypeScript, JavaScript)
18
+ case "${FILE_PATH##*.}" in
19
+ ts|tsx|js|jsx|mjs|cjs) ;;
20
+ *) exit 0 ;;
21
+ esac
22
+
23
+ # Validate project directory
24
+ if [ -z "${CLAUDE_PROJECT_DIR:-}" ]; then
25
+ exit 0
26
+ fi
27
+
28
+ # Check if file is in a source directory
29
+ RELATIVE_PATH="${FILE_PATH#$CLAUDE_PROJECT_DIR/}"
30
+ case "$RELATIVE_PATH" in
31
+ src/*|apps/*|libs/*|test/*|tests/*|features/*|components/*|hooks/*|screens/*|app/*|constants/*|utils/*|providers/*|stores/*) ;;
32
+ *) exit 0 ;;
33
+ esac
34
+
35
+ cd "$CLAUDE_PROJECT_DIR" || exit 0
36
+
37
+ # Verify ast-grep configuration exists
38
+ if [ ! -f "sgconfig.yml" ]; then
39
+ exit 0
40
+ fi
41
+
42
+ # Verify rules are defined
43
+ RULE_COUNT=$(find ast-grep/rules -name "*.yml" -o -name "*.yaml" 2>/dev/null | grep -v ".gitkeep" | wc -l | tr -d ' ')
44
+ if [ "$RULE_COUNT" -eq 0 ]; then
45
+ exit 0
46
+ fi
47
+
48
+ # Detect package manager
49
+ if [ -f "bun.lockb" ] || [ -f "bun.lock" ]; then
50
+ PKG_MANAGER="bun"
51
+ elif [ -f "pnpm-lock.yaml" ]; then
52
+ PKG_MANAGER="pnpm"
53
+ elif [ -f "yarn.lock" ]; then
54
+ PKG_MANAGER="yarn"
55
+ else
56
+ PKG_MANAGER="npm"
57
+ fi
58
+
59
+ # Run ast-grep scan
60
+ echo "Running ast-grep scan on: $FILE_PATH"
61
+ if OUTPUT=$($PKG_MANAGER run sg:scan "$FILE_PATH" 2>&1); then
62
+ echo "ast-grep: No issues found in $(basename "$FILE_PATH")"
63
+ exit 0
64
+ else
65
+ echo "ast-grep found issues in: $FILE_PATH" >&2
66
+ echo "$OUTPUT" >&2
67
+ exit 1
68
+ fi
@@ -0,0 +1,79 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "matcher": "startup",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/install_pkgs.sh",
10
+ "timeout": 480
11
+ }
12
+ ]
13
+ }
14
+ ],
15
+ "PostToolUse": [
16
+ {
17
+ "matcher": "Write|Edit",
18
+ "hooks": [
19
+ {
20
+ "type": "command",
21
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/format-on-edit.sh",
22
+ "timeout": 10
23
+ },
24
+ {
25
+ "type": "command",
26
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/sg-scan-on-edit.sh",
27
+ "timeout": 30
28
+ }
29
+ ]
30
+ },
31
+ {
32
+ "matcher": "TaskCreate|TaskUpdate",
33
+ "hooks": [
34
+ {
35
+ "type": "command",
36
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/sync-tasks.sh",
37
+ "timeout": 10
38
+ }
39
+ ]
40
+ }
41
+ ],
42
+ "Notification": [
43
+ {
44
+ "matcher": "permission_prompt|idle_prompt",
45
+ "hooks": [
46
+ {
47
+ "type": "command",
48
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/notify-ntfy.sh",
49
+ "timeout": 5
50
+ }
51
+ ]
52
+ }
53
+ ],
54
+ "Stop": [
55
+ {
56
+ "matcher": "",
57
+ "hooks": [
58
+ {
59
+ "type": "command",
60
+ "command": "$CLAUDE_PROJECT_DIR/.claude/hooks/notify-ntfy.sh",
61
+ "timeout": 5
62
+ }
63
+ ]
64
+ }
65
+ ]
66
+ },
67
+ "env": {
68
+ "BASH_DEFAULT_TIMEOUT_MS": "1800000",
69
+ "BASH_MAX_TIMEOUT_MS": "7200000"
70
+ },
71
+ "includeCoAuthoredBy": true,
72
+ "enabledPlugins": {
73
+ "typescript-lsp@claude-plugins-official": true,
74
+ "safety-net@cc-marketplace": true,
75
+ "code-simplifier@claude-plugins-official": true,
76
+ "code-review@claude-plugins-official": true,
77
+ "playwright@claude-plugins-official": true
78
+ }
79
+ }
@@ -312,6 +312,50 @@ const activeUsers = users.filter(u => u.active);
312
312
  const activeUsers = users.filter(u => u.active);
313
313
  ```
314
314
 
315
+ ## Escaping @ Symbols in JSDoc
316
+
317
+ When documenting code that contains TypeScript/NestJS decorators (like `@Injectable()`, `@Processor('queue-name')`), JSDoc will interpret the `@` as a tag marker. This causes lint errors because JSDoc sees `@Processor('qpr-v2')` as a single unknown tag name (including the parentheses and arguments).
318
+
319
+ **The problem:** Adding decorator names to `definedTags` doesn't help because JSDoc parses the entire string `@Processor('qpr-v2')` as the tag name, not just `@Processor`.
320
+
321
+ ### Solution 1: Backticks in Prose
322
+
323
+ When mentioning decorators in description text, wrap them in backticks:
324
+
325
+ ```typescript
326
+ /**
327
+ * Queue processor for QPR calculations
328
+ * @description Handles jobs from the `@Processor('qpr-v2')` queue
329
+ * @remarks Uses `@Injectable()` scope for request isolation
330
+ */
331
+ ```
332
+
333
+ ### Solution 2: Escape in @example Blocks
334
+
335
+ In `@example` blocks, use fenced code blocks and escape `@` as `\@`:
336
+
337
+ ```typescript
338
+ /**
339
+ * Creates a queue processor
340
+ * @example
341
+ * ```typescript
342
+ * \@Processor('my-queue')
343
+ * export class MyProcessor {
344
+ * \@Process()
345
+ * async handle(job: Job) { ... }
346
+ * }
347
+ * ```
348
+ */
349
+ ```
350
+
351
+ ### Quick Reference for Escaping
352
+
353
+ | Context | Approach | Example |
354
+ |---------|----------|---------|
355
+ | Prose/description | Wrap in backticks | `` `@Injectable()` `` |
356
+ | @example block | Escape with backslash | `\@Processor('name')` |
357
+ | Code comments | No escaping needed | `// Uses @Injectable` |
358
+
315
359
  ## Quick Reference
316
360
 
317
361
  ### Required Structure for Services
@@ -280,6 +280,55 @@ sonar.organization=your-org
280
280
 
281
281
  ---
282
282
 
283
+ #### DEPLOY_KEY
284
+ **Purpose**: Push version bumps and releases to protected branches
285
+
286
+ GitHub Actions workflows cannot push directly to protected branches using the default `GITHUB_TOKEN`. A deploy key (SSH key) with write access bypasses branch protection rules for automated releases.
287
+
288
+ **How to set it up**:
289
+
290
+ 1. **Generate an SSH key pair locally**:
291
+ ```bash
292
+ # Generate a new SSH key (no passphrase for CI use)
293
+ ssh-keygen -t ed25519 -C "github-actions-deploy-key" -f deploy_key -N ""
294
+
295
+ # This creates two files:
296
+ # - deploy_key (private key - goes to GitHub Secrets)
297
+ # - deploy_key.pub (public key - goes to Deploy Keys)
298
+ ```
299
+
300
+ 2. **Add the public key to GitHub Deploy Keys**:
301
+ - Go to your repository **Settings** > **Deploy keys**
302
+ - Click **Add deploy key**
303
+ - Title: `GitHub Actions Deploy Key`
304
+ - Key: Paste contents of `deploy_key.pub`
305
+ - **Check "Allow write access"** (required for pushing)
306
+ - Click **Add key**
307
+
308
+ 3. **Add the private key as a repository secret**:
309
+ ```bash
310
+ # Using GitHub CLI
311
+ gh secret set DEPLOY_KEY < deploy_key
312
+
313
+ # Or manually:
314
+ # Go to Settings > Secrets and variables > Actions
315
+ # Click "New repository secret"
316
+ # Name: DEPLOY_KEY
317
+ # Value: Paste entire contents of deploy_key file (including BEGIN/END lines)
318
+ ```
319
+
320
+ 4. **Clean up local keys**:
321
+ ```bash
322
+ # Delete the local key files after setup
323
+ rm deploy_key deploy_key.pub
324
+ ```
325
+
326
+ **Required for**: Automated releases pushing to protected branches (main, staging, dev)
327
+
328
+ **Note**: If your branch protection rules require signed commits, you'll also need to set up GPG signing (see Release Signing Secrets below).
329
+
330
+ ---
331
+
283
332
  ### Release Signing Secrets (Optional)
284
333
 
285
334
  For GPG-signed releases:
@@ -289,7 +338,6 @@ For GPG-signed releases:
289
338
  | `RELEASE_SIGNING_KEY` | Base64-encoded GPG private key |
290
339
  | `SIGNING_KEY_ID` | GPG key ID |
291
340
  | `SIGNING_KEY_PASSPHRASE` | GPG key passphrase |
292
- | `DEPLOY_KEY` | SSH key for pushing to protected branches |
293
341
 
294
342
  To generate:
295
343
  ```bash
@@ -1,3 +1,6 @@
1
+ # This file is managed by Lisa.
2
+ # Do not edit directly — changes will be overwritten on the next `lisa` run.
3
+
1
4
  version: 2
2
5
  updates:
3
6
  # JavaScript/Node.js dependencies
@@ -1,3 +1,6 @@
1
+ # This file is managed by Lisa.
2
+ # Do not edit directly — changes will be overwritten on the next `lisa` run.
3
+
1
4
  name: 🔍 CI Quality Checks
2
5
 
3
6
  on:
@@ -7,43 +10,18 @@ on:
7
10
  jobs:
8
11
  quality:
9
12
  name: 🔍 Quality Checks
10
- timeout-minutes: 30
11
- # Reference to the quality checks workflow
12
13
  uses: ./.github/workflows/quality.yml
13
14
  with:
14
15
  node_version: '22.21.1'
15
16
  package_manager: 'bun'
16
- skip_jobs: 'test,test:integration,test:e2e'
17
+ skip_jobs: ''
17
18
  secrets: inherit
18
-
19
- # playwright:
20
- # name: 🎭 Playwright Tests
21
- # timeout-minutes: 30
22
- # needs: [quality]
23
- # uses: ./.github/workflows/playwright.yml
24
- # with:
25
- # pr_number: ${{ github.event.pull_request.number }}
26
- # branch_ref: ${{ github.head_ref }}
27
- # base_ref: ${{ github.base_ref }}
28
-
29
- lighthouse:
30
- name: 💡 Lighthouse CI
31
- timeout-minutes: 15
32
- needs: [quality]
33
- uses: ./.github/workflows/lighthouse.yml
34
- with:
35
- node_version: '22.21.1'
36
- package_manager: 'bun'
37
-
38
- create_sentry_issue_on_failure:
39
- name: 🚨 Create Sentry Issue on Failure
40
- timeout-minutes: 5
19
+ create_issue_on_failure:
20
+ name: 📌 Create Issue on Failure
41
21
  needs: [quality]
42
22
  if: ${{ always() && (needs.quality.result == 'failure' || needs.quality.result == 'failure') && !contains(github.event.head_commit.message, '[skip ci]') }}
43
- uses: ./.github/workflows/create-sentry-issue-on-failure.yml
23
+ uses: ./.github/workflows/create-issue-on-failure.yml
44
24
  with:
45
25
  workflow_name: 'CI Quality Checks'
46
26
  failed_job: ${{ needs.quality.result == 'failure' && 'quality' || 'playwright' }}
47
- SENTRY_ORG: ${{ vars.SENTRY_ORG }}
48
- SENTRY_PROJECT: ${{ vars.SENTRY_PROJECT }}
49
27
  secrets: inherit
@@ -1,3 +1,6 @@
1
+ # This file is managed by Lisa.
2
+ # Do not edit directly — changes will be overwritten on the next `lisa` run.
3
+
1
4
  name: Claude Code
2
5
 
3
6
  on:
@@ -1,3 +1,5 @@
1
+ # This file is managed by Lisa.
2
+ # Do not edit directly — changes will be overwritten on the next `lisa` run.
1
3
  # -----------------------------------------------------------------------------
2
4
  # GitHub Issue Creation Workflow
3
5
  # -----------------------------------------------------------------------------
@@ -35,7 +37,7 @@ on:
35
37
  node_version:
36
38
  description: 'Node.js version to use'
37
39
  required: false
38
- default: '20.x'
40
+ default: '22.21.1'
39
41
  type: string
40
42
  package_manager:
41
43
  description: 'Package manager to use (npm, yarn, or bun)'
@@ -49,8 +51,8 @@ on:
49
51
  type: string
50
52
  secrets:
51
53
  PAT:
52
- required: true
53
- description: 'Personal Access Token with repo scope'
54
+ required: false
55
+ description: 'Personal Access Token with repo scope (falls back to GITHUB_TOKEN)'
54
56
 
55
57
  # Concurrency is managed by the parent workflow that calls this one
56
58
  # This avoids deadlocks between parent and child workflows
@@ -73,7 +75,7 @@ jobs:
73
75
  - name: 🔖 Create Issue
74
76
  uses: actions/github-script@v7
75
77
  with:
76
- github-token: ${{ secrets.PAT }}
78
+ github-token: ${{ secrets.PAT || github.token }}
77
79
  script: |
78
80
  // Get repository and run information
79
81
  const { owner, repo } = context.repo;