@heytherevibin/skillforge 0.2.1

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 (402) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CODE_OF_CONDUCT.md +34 -0
  3. package/CONTRIBUTING.md +38 -0
  4. package/LICENSE +21 -0
  5. package/README.md +337 -0
  6. package/RELEASING.md +93 -0
  7. package/SECURITY.md +31 -0
  8. package/STRATEGY.md +26 -0
  9. package/bin/cli.js +547 -0
  10. package/lib/packs.js +184 -0
  11. package/package.json +38 -0
  12. package/python/app/__init__.py +0 -0
  13. package/python/app/__pycache__/__init__.cpython-312.pyc +0 -0
  14. package/python/app/__pycache__/auth.cpython-312.pyc +0 -0
  15. package/python/app/__pycache__/main.cpython-312.pyc +0 -0
  16. package/python/app/auth.py +63 -0
  17. package/python/app/cli.py +78 -0
  18. package/python/app/db_paths.py +26 -0
  19. package/python/app/events_cli.py +175 -0
  20. package/python/app/main.py +647 -0
  21. package/python/app/materialize.py +138 -0
  22. package/python/app/mcp_server.py +610 -0
  23. package/python/app/route_cli.py +117 -0
  24. package/python/requirements-dev.txt +1 -0
  25. package/python/requirements.txt +7 -0
  26. package/python/tests/test_db_paths.py +41 -0
  27. package/skills/accessibility/SKILL.md +145 -0
  28. package/skills/agent-architecture-audit/SKILL.md +256 -0
  29. package/skills/agent-eval/SKILL.md +144 -0
  30. package/skills/agent-harness-construction/SKILL.md +72 -0
  31. package/skills/agent-introspection-debugging/SKILL.md +152 -0
  32. package/skills/agent-payment-x402/SKILL.md +224 -0
  33. package/skills/agent-sort/SKILL.md +214 -0
  34. package/skills/agentic-engineering/SKILL.md +62 -0
  35. package/skills/agentic-os/SKILL.md +386 -0
  36. package/skills/ai-first-engineering/SKILL.md +50 -0
  37. package/skills/ai-regression-testing/SKILL.md +384 -0
  38. package/skills/android-clean-architecture/SKILL.md +338 -0
  39. package/skills/angular-developer/SKILL.md +153 -0
  40. package/skills/angular-developer/references/angular-animations.md +160 -0
  41. package/skills/angular-developer/references/angular-aria.md +410 -0
  42. package/skills/angular-developer/references/cli.md +86 -0
  43. package/skills/angular-developer/references/component-harnesses.md +59 -0
  44. package/skills/angular-developer/references/component-styling.md +91 -0
  45. package/skills/angular-developer/references/components.md +117 -0
  46. package/skills/angular-developer/references/creating-services.md +97 -0
  47. package/skills/angular-developer/references/data-resolvers.md +69 -0
  48. package/skills/angular-developer/references/define-routes.md +67 -0
  49. package/skills/angular-developer/references/defining-providers.md +72 -0
  50. package/skills/angular-developer/references/di-fundamentals.md +120 -0
  51. package/skills/angular-developer/references/e2e-testing.md +56 -0
  52. package/skills/angular-developer/references/effects.md +83 -0
  53. package/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  54. package/skills/angular-developer/references/host-elements.md +80 -0
  55. package/skills/angular-developer/references/injection-context.md +63 -0
  56. package/skills/angular-developer/references/inputs.md +101 -0
  57. package/skills/angular-developer/references/linked-signal.md +59 -0
  58. package/skills/angular-developer/references/loading-strategies.md +61 -0
  59. package/skills/angular-developer/references/mcp.md +108 -0
  60. package/skills/angular-developer/references/navigate-to-routes.md +69 -0
  61. package/skills/angular-developer/references/outputs.md +86 -0
  62. package/skills/angular-developer/references/reactive-forms.md +122 -0
  63. package/skills/angular-developer/references/rendering-strategies.md +44 -0
  64. package/skills/angular-developer/references/resource.md +77 -0
  65. package/skills/angular-developer/references/route-animations.md +56 -0
  66. package/skills/angular-developer/references/route-guards.md +52 -0
  67. package/skills/angular-developer/references/router-lifecycle.md +45 -0
  68. package/skills/angular-developer/references/router-testing.md +87 -0
  69. package/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  70. package/skills/angular-developer/references/signal-forms.md +795 -0
  71. package/skills/angular-developer/references/signals-overview.md +94 -0
  72. package/skills/angular-developer/references/tailwind-css.md +69 -0
  73. package/skills/angular-developer/references/template-driven-forms.md +114 -0
  74. package/skills/angular-developer/references/testing-fundamentals.md +65 -0
  75. package/skills/api-connector-builder/SKILL.md +120 -0
  76. package/skills/api-design/SKILL.md +522 -0
  77. package/skills/architecture-decision-records/SKILL.md +178 -0
  78. package/skills/article-writing/SKILL.md +78 -0
  79. package/skills/automation-audit-ops/SKILL.md +141 -0
  80. package/skills/autonomous-agent-harness/SKILL.md +272 -0
  81. package/skills/autonomous-loops/SKILL.md +609 -0
  82. package/skills/backend-patterns/SKILL.md +560 -0
  83. package/skills/benchmark/SKILL.md +92 -0
  84. package/skills/blueprint/SKILL.md +104 -0
  85. package/skills/browser-qa/SKILL.md +86 -0
  86. package/skills/bun-runtime/SKILL.md +83 -0
  87. package/skills/canary-watch/SKILL.md +98 -0
  88. package/skills/carrier-relationship-management/SKILL.md +211 -0
  89. package/skills/cisco-ios-patterns/SKILL.md +163 -0
  90. package/skills/ck/SKILL.md +147 -0
  91. package/skills/ck/commands/forget.mjs +44 -0
  92. package/skills/ck/commands/info.mjs +24 -0
  93. package/skills/ck/commands/init.mjs +143 -0
  94. package/skills/ck/commands/list.mjs +40 -0
  95. package/skills/ck/commands/migrate.mjs +202 -0
  96. package/skills/ck/commands/resume.mjs +36 -0
  97. package/skills/ck/commands/save.mjs +210 -0
  98. package/skills/ck/commands/shared.mjs +387 -0
  99. package/skills/ck/hooks/session-start.mjs +224 -0
  100. package/skills/claude-devfleet/SKILL.md +103 -0
  101. package/skills/click-path-audit/SKILL.md +244 -0
  102. package/skills/clickhouse-io/SKILL.md +438 -0
  103. package/skills/code-tour/SKILL.md +235 -0
  104. package/skills/codebase-onboarding/SKILL.md +232 -0
  105. package/skills/coding-standards/SKILL.md +548 -0
  106. package/skills/compose-multiplatform-patterns/SKILL.md +298 -0
  107. package/skills/connections-optimizer/SKILL.md +188 -0
  108. package/skills/content-engine/SKILL.md +126 -0
  109. package/skills/content-hash-cache-pattern/SKILL.md +160 -0
  110. package/skills/context-budget/SKILL.md +134 -0
  111. package/skills/continuous-agent-loop/SKILL.md +44 -0
  112. package/skills/continuous-learning/SKILL.md +129 -0
  113. package/skills/continuous-learning/config.json +18 -0
  114. package/skills/continuous-learning/evaluate-session.sh +69 -0
  115. package/skills/continuous-learning-v2/SKILL.md +358 -0
  116. package/skills/continuous-learning-v2/agents/observer-loop.sh +322 -0
  117. package/skills/continuous-learning-v2/agents/observer.md +198 -0
  118. package/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
  119. package/skills/continuous-learning-v2/agents/start-observer.sh +248 -0
  120. package/skills/continuous-learning-v2/config.json +8 -0
  121. package/skills/continuous-learning-v2/hooks/observe.sh +476 -0
  122. package/skills/continuous-learning-v2/scripts/detect-project.sh +288 -0
  123. package/skills/continuous-learning-v2/scripts/instinct-cli.py +1519 -0
  124. package/skills/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
  125. package/skills/continuous-learning-v2/scripts/migrate-homunculus.sh +62 -0
  126. package/skills/continuous-learning-v2/scripts/test_parse_instinct.py +1018 -0
  127. package/skills/cost-aware-llm-pipeline/SKILL.md +182 -0
  128. package/skills/cost-tracking/SKILL.md +147 -0
  129. package/skills/council/SKILL.md +202 -0
  130. package/skills/cpp-coding-standards/SKILL.md +722 -0
  131. package/skills/cpp-testing/SKILL.md +323 -0
  132. package/skills/crosspost/SKILL.md +110 -0
  133. package/skills/csharp-testing/SKILL.md +320 -0
  134. package/skills/customer-billing-ops/SKILL.md +139 -0
  135. package/skills/customs-trade-compliance/SKILL.md +262 -0
  136. package/skills/dart-flutter-patterns/SKILL.md +562 -0
  137. package/skills/dashboard-builder/SKILL.md +108 -0
  138. package/skills/data-scraper-agent/SKILL.md +764 -0
  139. package/skills/database-migrations/SKILL.md +428 -0
  140. package/skills/deep-research/SKILL.md +158 -0
  141. package/skills/defi-amm-security/SKILL.md +166 -0
  142. package/skills/deployment-patterns/SKILL.md +426 -0
  143. package/skills/design-system/SKILL.md +81 -0
  144. package/skills/django-celery/SKILL.md +456 -0
  145. package/skills/django-patterns/SKILL.md +733 -0
  146. package/skills/django-security/SKILL.md +592 -0
  147. package/skills/django-tdd/SKILL.md +728 -0
  148. package/skills/django-verification/SKILL.md +468 -0
  149. package/skills/dmux-workflows/SKILL.md +190 -0
  150. package/skills/docker-patterns/SKILL.md +363 -0
  151. package/skills/documentation-lookup/SKILL.md +89 -0
  152. package/skills/dotnet-patterns/SKILL.md +320 -0
  153. package/skills/e2e-testing/SKILL.md +325 -0
  154. package/skills/email-ops/SKILL.md +120 -0
  155. package/skills/energy-procurement/SKILL.md +227 -0
  156. package/skills/enterprise-agent-ops/SKILL.md +49 -0
  157. package/skills/error-handling/SKILL.md +375 -0
  158. package/skills/eval-harness/SKILL.md +269 -0
  159. package/skills/evm-token-decimals/SKILL.md +130 -0
  160. package/skills/exa-search/SKILL.md +106 -0
  161. package/skills/fal-ai-media/SKILL.md +287 -0
  162. package/skills/fastapi-patterns/SKILL.md +327 -0
  163. package/skills/finance-billing-ops/SKILL.md +126 -0
  164. package/skills/flox-environments/SKILL.md +496 -0
  165. package/skills/flutter-dart-code-review/SKILL.md +434 -0
  166. package/skills/foundation-models-on-device/SKILL.md +243 -0
  167. package/skills/frontend-design-direction/SKILL.md +92 -0
  168. package/skills/frontend-patterns/SKILL.md +641 -0
  169. package/skills/frontend-slides/SKILL.md +183 -0
  170. package/skills/frontend-slides/STYLE_PRESETS.md +330 -0
  171. package/skills/frontend-slides/animation-patterns.md +122 -0
  172. package/skills/frontend-slides/html-template.md +419 -0
  173. package/skills/frontend-slides/scripts/export-pdf.sh +418 -0
  174. package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
  175. package/skills/frontend-slides/viewport-base.css +153 -0
  176. package/skills/fsharp-testing/SKILL.md +279 -0
  177. package/skills/gan-style-harness/SKILL.md +278 -0
  178. package/skills/gateguard/SKILL.md +125 -0
  179. package/skills/git-workflow/SKILL.md +714 -0
  180. package/skills/github-ops/SKILL.md +143 -0
  181. package/skills/golang-patterns/SKILL.md +673 -0
  182. package/skills/golang-testing/SKILL.md +719 -0
  183. package/skills/google-workspace-ops/SKILL.md +94 -0
  184. package/skills/healthcare-cdss-patterns/SKILL.md +245 -0
  185. package/skills/healthcare-emr-patterns/SKILL.md +159 -0
  186. package/skills/healthcare-eval-harness/SKILL.md +207 -0
  187. package/skills/healthcare-phi-compliance/SKILL.md +145 -0
  188. package/skills/hermes-imports/SKILL.md +87 -0
  189. package/skills/hexagonal-architecture/SKILL.md +275 -0
  190. package/skills/hipaa-compliance/SKILL.md +78 -0
  191. package/skills/homelab-network-readiness/SKILL.md +169 -0
  192. package/skills/homelab-network-setup/SKILL.md +129 -0
  193. package/skills/homelab-pihole-dns/SKILL.md +274 -0
  194. package/skills/homelab-vlan-segmentation/SKILL.md +311 -0
  195. package/skills/homelab-wireguard-vpn/SKILL.md +305 -0
  196. package/skills/hookify-rules/SKILL.md +128 -0
  197. package/skills/inventory-demand-planning/SKILL.md +246 -0
  198. package/skills/investor-materials/SKILL.md +95 -0
  199. package/skills/investor-outreach/SKILL.md +90 -0
  200. package/skills/ios-icon-gen/SKILL.md +157 -0
  201. package/skills/ios-icon-gen/scripts/generate_icons.swift +258 -0
  202. package/skills/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  203. package/skills/iterative-retrieval/SKILL.md +209 -0
  204. package/skills/java-coding-standards/SKILL.md +382 -0
  205. package/skills/jira-integration/SKILL.md +292 -0
  206. package/skills/jpa-patterns/SKILL.md +150 -0
  207. package/skills/knowledge-ops/SKILL.md +153 -0
  208. package/skills/kotlin-coroutines-flows/SKILL.md +283 -0
  209. package/skills/kotlin-exposed-patterns/SKILL.md +718 -0
  210. package/skills/kotlin-ktor-patterns/SKILL.md +688 -0
  211. package/skills/kotlin-patterns/SKILL.md +710 -0
  212. package/skills/kotlin-testing/SKILL.md +823 -0
  213. package/skills/laravel-patterns/SKILL.md +414 -0
  214. package/skills/laravel-plugin-discovery/SKILL.md +228 -0
  215. package/skills/laravel-security/SKILL.md +284 -0
  216. package/skills/laravel-tdd/SKILL.md +282 -0
  217. package/skills/laravel-verification/SKILL.md +178 -0
  218. package/skills/lead-intelligence/SKILL.md +320 -0
  219. package/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
  220. package/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
  221. package/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
  222. package/skills/lead-intelligence/agents/signal-scorer.md +60 -0
  223. package/skills/liquid-glass-design/SKILL.md +279 -0
  224. package/skills/llm-trading-agent-security/SKILL.md +146 -0
  225. package/skills/logistics-exception-management/SKILL.md +221 -0
  226. package/skills/make-interfaces-feel-better/SKILL.md +151 -0
  227. package/skills/manim-video/SKILL.md +88 -0
  228. package/skills/manim-video/assets/network_graph_scene.py +52 -0
  229. package/skills/market-research/SKILL.md +74 -0
  230. package/skills/mcp-server-patterns/SKILL.md +68 -0
  231. package/skills/messages-ops/SKILL.md +103 -0
  232. package/skills/mle-workflow/SKILL.md +345 -0
  233. package/skills/motion-advanced/SKILL.md +596 -0
  234. package/skills/motion-foundations/SKILL.md +299 -0
  235. package/skills/motion-patterns/SKILL.md +435 -0
  236. package/skills/motion-ui/SKILL.md +574 -0
  237. package/skills/mysql-patterns/SKILL.md +411 -0
  238. package/skills/nanoclaw-repl/SKILL.md +32 -0
  239. package/skills/nestjs-patterns/SKILL.md +229 -0
  240. package/skills/netmiko-ssh-automation/SKILL.md +173 -0
  241. package/skills/network-bgp-diagnostics/SKILL.md +167 -0
  242. package/skills/network-config-validation/SKILL.md +210 -0
  243. package/skills/network-interface-health/SKILL.md +152 -0
  244. package/skills/nextjs-turbopack/SKILL.md +43 -0
  245. package/skills/nodejs-keccak256/SKILL.md +102 -0
  246. package/skills/nutrient-document-processing/SKILL.md +166 -0
  247. package/skills/nuxt4-patterns/SKILL.md +99 -0
  248. package/skills/openclaw-persona-forge/SKILL.md +288 -0
  249. package/skills/openclaw-persona-forge/gacha.py +224 -0
  250. package/skills/openclaw-persona-forge/gacha.sh +5 -0
  251. package/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
  252. package/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
  253. package/skills/openclaw-persona-forge/references/error-handling.md +53 -0
  254. package/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
  255. package/skills/openclaw-persona-forge/references/naming-system.md +39 -0
  256. package/skills/openclaw-persona-forge/references/output-template.md +166 -0
  257. package/skills/opensource-pipeline/SKILL.md +254 -0
  258. package/skills/perl-patterns/SKILL.md +503 -0
  259. package/skills/perl-security/SKILL.md +502 -0
  260. package/skills/perl-testing/SKILL.md +474 -0
  261. package/skills/plan-orchestrate/SKILL.md +253 -0
  262. package/skills/plankton-code-quality/SKILL.md +236 -0
  263. package/skills/postgres-patterns/SKILL.md +146 -0
  264. package/skills/product-capability/SKILL.md +140 -0
  265. package/skills/product-lens/SKILL.md +91 -0
  266. package/skills/production-audit/SKILL.md +206 -0
  267. package/skills/production-scheduling/SKILL.md +237 -0
  268. package/skills/project-flow-ops/SKILL.md +110 -0
  269. package/skills/prompt-optimizer/SKILL.md +398 -0
  270. package/skills/python-patterns/SKILL.md +749 -0
  271. package/skills/python-testing/SKILL.md +815 -0
  272. package/skills/pytorch-patterns/SKILL.md +395 -0
  273. package/skills/quality-nonconformance/SKILL.md +259 -0
  274. package/skills/quarkus-patterns/SKILL.md +721 -0
  275. package/skills/quarkus-security/SKILL.md +466 -0
  276. package/skills/quarkus-tdd/SKILL.md +810 -0
  277. package/skills/quarkus-verification/SKILL.md +478 -0
  278. package/skills/ralphinho-rfc-pipeline/SKILL.md +66 -0
  279. package/skills/redis-patterns/SKILL.md +402 -0
  280. package/skills/regex-vs-llm-structured-text/SKILL.md +219 -0
  281. package/skills/remotion-video-creation/SKILL.md +43 -0
  282. package/skills/remotion-video-creation/rules/3d.md +86 -0
  283. package/skills/remotion-video-creation/rules/animations.md +29 -0
  284. package/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
  285. package/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
  286. package/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
  287. package/skills/remotion-video-creation/rules/assets.md +78 -0
  288. package/skills/remotion-video-creation/rules/audio.md +172 -0
  289. package/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
  290. package/skills/remotion-video-creation/rules/can-decode.md +75 -0
  291. package/skills/remotion-video-creation/rules/charts.md +58 -0
  292. package/skills/remotion-video-creation/rules/compositions.md +146 -0
  293. package/skills/remotion-video-creation/rules/display-captions.md +126 -0
  294. package/skills/remotion-video-creation/rules/extract-frames.md +229 -0
  295. package/skills/remotion-video-creation/rules/fonts.md +152 -0
  296. package/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
  297. package/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
  298. package/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
  299. package/skills/remotion-video-creation/rules/gifs.md +138 -0
  300. package/skills/remotion-video-creation/rules/images.md +130 -0
  301. package/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
  302. package/skills/remotion-video-creation/rules/lottie.md +67 -0
  303. package/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
  304. package/skills/remotion-video-creation/rules/measuring-text.md +143 -0
  305. package/skills/remotion-video-creation/rules/sequencing.md +106 -0
  306. package/skills/remotion-video-creation/rules/tailwind.md +11 -0
  307. package/skills/remotion-video-creation/rules/text-animations.md +20 -0
  308. package/skills/remotion-video-creation/rules/timing.md +179 -0
  309. package/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
  310. package/skills/remotion-video-creation/rules/transitions.md +122 -0
  311. package/skills/remotion-video-creation/rules/trimming.md +52 -0
  312. package/skills/remotion-video-creation/rules/videos.md +171 -0
  313. package/skills/repo-scan/SKILL.md +78 -0
  314. package/skills/research-ops/SKILL.md +111 -0
  315. package/skills/returns-reverse-logistics/SKILL.md +239 -0
  316. package/skills/rules-distill/SKILL.md +263 -0
  317. package/skills/rules-distill/scripts/scan-rules.sh +58 -0
  318. package/skills/rules-distill/scripts/scan-skills.sh +129 -0
  319. package/skills/rust-patterns/SKILL.md +498 -0
  320. package/skills/rust-testing/SKILL.md +499 -0
  321. package/skills/safety-guard/SKILL.md +74 -0
  322. package/skills/santa-method/SKILL.md +306 -0
  323. package/skills/scientific-db-pubmed-database/SKILL.md +175 -0
  324. package/skills/scientific-db-uspto-database/SKILL.md +177 -0
  325. package/skills/scientific-pkg-gget/SKILL.md +166 -0
  326. package/skills/scientific-thinking-literature-review/SKILL.md +192 -0
  327. package/skills/scientific-thinking-scholar-evaluation/SKILL.md +160 -0
  328. package/skills/search-first/SKILL.md +181 -0
  329. package/skills/security-bounty-hunter/SKILL.md +99 -0
  330. package/skills/security-review/SKILL.md +502 -0
  331. package/skills/security-review/cloud-infrastructure-security.md +361 -0
  332. package/skills/seo/SKILL.md +153 -0
  333. package/skills/skill-comply/SKILL.md +57 -0
  334. package/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
  335. package/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
  336. package/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
  337. package/skills/skill-comply/prompts/classifier.md +24 -0
  338. package/skills/skill-comply/prompts/scenario_generator.md +62 -0
  339. package/skills/skill-comply/prompts/spec_generator.md +42 -0
  340. package/skills/skill-comply/pyproject.toml +15 -0
  341. package/skills/skill-comply/scripts/__init__.py +0 -0
  342. package/skills/skill-comply/scripts/classifier.py +85 -0
  343. package/skills/skill-comply/scripts/grader.py +124 -0
  344. package/skills/skill-comply/scripts/parser.py +107 -0
  345. package/skills/skill-comply/scripts/report.py +170 -0
  346. package/skills/skill-comply/scripts/run.py +127 -0
  347. package/skills/skill-comply/scripts/runner.py +186 -0
  348. package/skills/skill-comply/scripts/scenario_generator.py +70 -0
  349. package/skills/skill-comply/scripts/spec_generator.py +72 -0
  350. package/skills/skill-comply/scripts/utils.py +13 -0
  351. package/skills/skill-comply/tests/test_grader.py +197 -0
  352. package/skills/skill-comply/tests/test_parser.py +90 -0
  353. package/skills/skill-comply/tests/test_runner.py +172 -0
  354. package/skills/skill-scout/SKILL.md +139 -0
  355. package/skills/skill-stocktake/SKILL.md +193 -0
  356. package/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
  357. package/skills/skill-stocktake/scripts/save-results.sh +56 -0
  358. package/skills/skill-stocktake/scripts/scan.sh +170 -0
  359. package/skills/social-graph-ranker/SKILL.md +153 -0
  360. package/skills/springboot-patterns/SKILL.md +313 -0
  361. package/skills/springboot-security/SKILL.md +271 -0
  362. package/skills/springboot-tdd/SKILL.md +157 -0
  363. package/skills/springboot-verification/SKILL.md +230 -0
  364. package/skills/strategic-compact/SKILL.md +129 -0
  365. package/skills/strategic-compact/suggest-compact.sh +54 -0
  366. package/skills/swift-actor-persistence/SKILL.md +142 -0
  367. package/skills/swift-concurrency-6-2/SKILL.md +216 -0
  368. package/skills/swift-protocol-di-testing/SKILL.md +189 -0
  369. package/skills/swiftui-patterns/SKILL.md +259 -0
  370. package/skills/tdd-workflow/SKILL.md +462 -0
  371. package/skills/team-builder/SKILL.md +166 -0
  372. package/skills/terminal-ops/SKILL.md +108 -0
  373. package/skills/tinystruct-patterns/SKILL.md +130 -0
  374. package/skills/tinystruct-patterns/references/architecture.md +77 -0
  375. package/skills/tinystruct-patterns/references/data-handling.md +35 -0
  376. package/skills/tinystruct-patterns/references/routing.md +57 -0
  377. package/skills/tinystruct-patterns/references/system-usage.md +74 -0
  378. package/skills/tinystruct-patterns/references/testing.md +59 -0
  379. package/skills/token-budget-advisor/SKILL.md +133 -0
  380. package/skills/ui-demo/SKILL.md +464 -0
  381. package/skills/ui-to-vue/SKILL.md +134 -0
  382. package/skills/unified-notifications-ops/SKILL.md +186 -0
  383. package/skills/verification-loop/SKILL.md +125 -0
  384. package/skills/video-editing/SKILL.md +309 -0
  385. package/skills/videodb/SKILL.md +373 -0
  386. package/skills/videodb/reference/api-reference.md +550 -0
  387. package/skills/videodb/reference/capture-reference.md +407 -0
  388. package/skills/videodb/reference/capture.md +101 -0
  389. package/skills/videodb/reference/editor.md +443 -0
  390. package/skills/videodb/reference/generative.md +331 -0
  391. package/skills/videodb/reference/rtstream-reference.md +564 -0
  392. package/skills/videodb/reference/rtstream.md +65 -0
  393. package/skills/videodb/reference/search.md +230 -0
  394. package/skills/videodb/reference/streaming.md +406 -0
  395. package/skills/videodb/reference/use-cases.md +118 -0
  396. package/skills/videodb/scripts/ws_listener.py +282 -0
  397. package/skills/visa-doc-translate/README.md +86 -0
  398. package/skills/visa-doc-translate/SKILL.md +117 -0
  399. package/skills/vite-patterns/SKILL.md +448 -0
  400. package/skills/windows-desktop-e2e/SKILL.md +787 -0
  401. package/skills/workspace-surface-audit/SKILL.md +124 -0
  402. package/skills/x-api/SKILL.md +233 -0
@@ -0,0 +1,271 @@
1
+ ---
2
+ name: springboot-security
3
+ description: Spring Security best practices for authn/authz, validation, CSRF, secrets, headers, rate limiting, and dependency security in Java Spring Boot services.
4
+ ---
5
+
6
+ # Spring Boot Security Review
7
+
8
+ Use when adding auth, handling input, creating endpoints, or dealing with secrets.
9
+
10
+ ## When to Activate
11
+
12
+ - Adding authentication (JWT, OAuth2, session-based)
13
+ - Implementing authorization (@PreAuthorize, role-based access)
14
+ - Validating user input (Bean Validation, custom validators)
15
+ - Configuring CORS, CSRF, or security headers
16
+ - Managing secrets (Vault, environment variables)
17
+ - Adding rate limiting or brute-force protection
18
+ - Scanning dependencies for CVEs
19
+
20
+ ## Authentication
21
+
22
+ - Prefer stateless JWT or opaque tokens with revocation list
23
+ - Use `httpOnly`, `Secure`, `SameSite=Strict` cookies for sessions
24
+ - Validate tokens with `OncePerRequestFilter` or resource server
25
+
26
+ ```java
27
+ @Component
28
+ public class JwtAuthFilter extends OncePerRequestFilter {
29
+ private final JwtService jwtService;
30
+
31
+ public JwtAuthFilter(JwtService jwtService) {
32
+ this.jwtService = jwtService;
33
+ }
34
+
35
+ @Override
36
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
37
+ FilterChain chain) throws ServletException, IOException {
38
+ String header = request.getHeader(HttpHeaders.AUTHORIZATION);
39
+ if (header != null && header.startsWith("Bearer ")) {
40
+ String token = header.substring(7);
41
+ Authentication auth = jwtService.authenticate(token);
42
+ SecurityContextHolder.getContext().setAuthentication(auth);
43
+ }
44
+ chain.doFilter(request, response);
45
+ }
46
+ }
47
+ ```
48
+
49
+ ## Authorization
50
+
51
+ - Enable method security: `@EnableMethodSecurity`
52
+ - Use `@PreAuthorize("hasRole('ADMIN')")` or `@PreAuthorize("@authz.canEdit(#id)")`
53
+ - Deny by default; expose only required scopes
54
+
55
+ ```java
56
+ @RestController
57
+ @RequestMapping("/api/admin")
58
+ public class AdminController {
59
+
60
+ @PreAuthorize("hasRole('ADMIN')")
61
+ @GetMapping("/users")
62
+ public List<UserDto> listUsers() {
63
+ return userService.findAll();
64
+ }
65
+
66
+ @PreAuthorize("@authz.isOwner(#id, authentication)")
67
+ @DeleteMapping("/users/{id}")
68
+ public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
69
+ userService.delete(id);
70
+ return ResponseEntity.noContent().build();
71
+ }
72
+ }
73
+ ```
74
+
75
+ ## Input Validation
76
+
77
+ - Use Bean Validation with `@Valid` on controllers
78
+ - Apply constraints on DTOs: `@NotBlank`, `@Email`, `@Size`, custom validators
79
+ - Sanitize any HTML with a whitelist before rendering
80
+
81
+ ```java
82
+ // BAD: No validation
83
+ @PostMapping("/users")
84
+ public User createUser(@RequestBody UserDto dto) {
85
+ return userService.create(dto);
86
+ }
87
+
88
+ // GOOD: Validated DTO
89
+ public record CreateUserDto(
90
+ @NotBlank @Size(max = 100) String name,
91
+ @NotBlank @Email String email,
92
+ @NotNull @Min(0) @Max(150) Integer age
93
+ ) {}
94
+
95
+ @PostMapping("/users")
96
+ public ResponseEntity<UserDto> createUser(@Valid @RequestBody CreateUserDto dto) {
97
+ return ResponseEntity.status(HttpStatus.CREATED)
98
+ .body(userService.create(dto));
99
+ }
100
+ ```
101
+
102
+ ## SQL Injection Prevention
103
+
104
+ - Use Spring Data repositories or parameterized queries
105
+ - For native queries, use `:param` bindings; never concatenate strings
106
+
107
+ ```java
108
+ // BAD: String concatenation in native query
109
+ @Query(value = "SELECT * FROM users WHERE name = '" + name + "'", nativeQuery = true)
110
+
111
+ // GOOD: Parameterized native query
112
+ @Query(value = "SELECT * FROM users WHERE name = :name", nativeQuery = true)
113
+ List<User> findByName(@Param("name") String name);
114
+
115
+ // GOOD: Spring Data derived query (auto-parameterized)
116
+ List<User> findByEmailAndActiveTrue(String email);
117
+ ```
118
+
119
+ ## Password Encoding
120
+
121
+ - Always hash passwords with BCrypt or Argon2 — never store plaintext
122
+ - Use `PasswordEncoder` bean, not manual hashing
123
+
124
+ ```java
125
+ @Bean
126
+ public PasswordEncoder passwordEncoder() {
127
+ return new BCryptPasswordEncoder(12); // cost factor 12
128
+ }
129
+
130
+ // In service
131
+ public User register(CreateUserDto dto) {
132
+ String hashedPassword = passwordEncoder.encode(dto.password());
133
+ return userRepository.save(new User(dto.email(), hashedPassword));
134
+ }
135
+ ```
136
+
137
+ ## CSRF Protection
138
+
139
+ - For browser session apps, keep CSRF enabled; include token in forms/headers
140
+ - For pure APIs with Bearer tokens, disable CSRF and rely on stateless auth
141
+
142
+ ```java
143
+ http
144
+ .csrf(csrf -> csrf.disable())
145
+ .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
146
+ ```
147
+
148
+ ## Secrets Management
149
+
150
+ - No secrets in source; load from env or vault
151
+ - Keep `application.yml` free of credentials; use placeholders
152
+ - Rotate tokens and DB credentials regularly
153
+
154
+ ```yaml
155
+ # BAD: Hardcoded in application.yml
156
+ spring:
157
+ datasource:
158
+ password: mySecretPassword123
159
+
160
+ # GOOD: Environment variable placeholder
161
+ spring:
162
+ datasource:
163
+ password: ${DB_PASSWORD}
164
+
165
+ # GOOD: Spring Cloud Vault integration
166
+ spring:
167
+ cloud:
168
+ vault:
169
+ uri: https://vault.example.com
170
+ token: ${VAULT_TOKEN}
171
+ ```
172
+
173
+ ## Security Headers
174
+
175
+ ```java
176
+ http
177
+ .headers(headers -> headers
178
+ .contentSecurityPolicy(csp -> csp
179
+ .policyDirectives("default-src 'self'"))
180
+ .frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin)
181
+ .xssProtection(Customizer.withDefaults())
182
+ .referrerPolicy(rp -> rp.policy(ReferrerPolicyHeaderWriter.ReferrerPolicy.NO_REFERRER)));
183
+ ```
184
+
185
+ ## CORS Configuration
186
+
187
+ - Configure CORS at the security filter level, not per-controller
188
+ - Restrict allowed origins — never use `*` in production
189
+
190
+ ```java
191
+ @Bean
192
+ public CorsConfigurationSource corsConfigurationSource() {
193
+ CorsConfiguration config = new CorsConfiguration();
194
+ config.setAllowedOrigins(List.of("https://app.example.com"));
195
+ config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE"));
196
+ config.setAllowedHeaders(List.of("Authorization", "Content-Type"));
197
+ config.setAllowCredentials(true);
198
+ config.setMaxAge(3600L);
199
+
200
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
201
+ source.registerCorsConfiguration("/api/**", config);
202
+ return source;
203
+ }
204
+
205
+ // In SecurityFilterChain:
206
+ http.cors(cors -> cors.configurationSource(corsConfigurationSource()));
207
+ ```
208
+
209
+ ## Rate Limiting
210
+
211
+ - Apply Bucket4j or gateway-level limits on expensive endpoints
212
+ - Log and alert on bursts; return 429 with retry hints
213
+
214
+ ```java
215
+ // Using Bucket4j for per-endpoint rate limiting
216
+ @Component
217
+ public class RateLimitFilter extends OncePerRequestFilter {
218
+ private final Map<String, Bucket> buckets = new ConcurrentHashMap<>();
219
+
220
+ private Bucket createBucket() {
221
+ return Bucket.builder()
222
+ .addLimit(Bandwidth.classic(100, Refill.intervally(100, Duration.ofMinutes(1))))
223
+ .build();
224
+ }
225
+
226
+ @Override
227
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
228
+ FilterChain chain) throws ServletException, IOException {
229
+ String clientIp = request.getRemoteAddr();
230
+ Bucket bucket = buckets.computeIfAbsent(clientIp, k -> createBucket());
231
+
232
+ if (bucket.tryConsume(1)) {
233
+ chain.doFilter(request, response);
234
+ } else {
235
+ response.setStatus(HttpStatus.TOO_MANY_REQUESTS.value());
236
+ response.getWriter().write("{\"error\": \"Rate limit exceeded\"}");
237
+ }
238
+ }
239
+ }
240
+ ```
241
+
242
+ ## Dependency Security
243
+
244
+ - Run OWASP Dependency Check / Snyk in CI
245
+ - Keep Spring Boot and Spring Security on supported versions
246
+ - Fail builds on known CVEs
247
+
248
+ ## Logging and PII
249
+
250
+ - Never log secrets, tokens, passwords, or full PAN data
251
+ - Redact sensitive fields; use structured JSON logging
252
+
253
+ ## File Uploads
254
+
255
+ - Validate size, content type, and extension
256
+ - Store outside web root; scan if required
257
+
258
+ ## Checklist Before Release
259
+
260
+ - [ ] Auth tokens validated and expired correctly
261
+ - [ ] Authorization guards on every sensitive path
262
+ - [ ] All inputs validated and sanitized
263
+ - [ ] No string-concatenated SQL
264
+ - [ ] CSRF posture correct for app type
265
+ - [ ] Secrets externalized; none committed
266
+ - [ ] Security headers configured
267
+ - [ ] Rate limiting on APIs
268
+ - [ ] Dependencies scanned and up to date
269
+ - [ ] Logs free of sensitive data
270
+
271
+ **Remember**: Deny by default, validate inputs, least privilege, and secure-by-configuration first.
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: springboot-tdd
3
+ description: Test-driven development for Spring Boot using JUnit 5, Mockito, MockMvc, Testcontainers, and JaCoCo. Use when adding features, fixing bugs, or refactoring.
4
+ ---
5
+
6
+ # Spring Boot TDD Workflow
7
+
8
+ TDD guidance for Spring Boot services with 80%+ coverage (unit + integration).
9
+
10
+ ## When to Use
11
+
12
+ - New features or endpoints
13
+ - Bug fixes or refactors
14
+ - Adding data access logic or security rules
15
+
16
+ ## Workflow
17
+
18
+ 1) Write tests first (they should fail)
19
+ 2) Implement minimal code to pass
20
+ 3) Refactor with tests green
21
+ 4) Enforce coverage (JaCoCo)
22
+
23
+ ## Unit Tests (JUnit 5 + Mockito)
24
+
25
+ ```java
26
+ @ExtendWith(MockitoExtension.class)
27
+ class MarketServiceTest {
28
+ @Mock MarketRepository repo;
29
+ @InjectMocks MarketService service;
30
+
31
+ @Test
32
+ void createsMarket() {
33
+ CreateMarketRequest req = new CreateMarketRequest("name", "desc", Instant.now(), List.of("cat"));
34
+ when(repo.save(any())).thenAnswer(inv -> inv.getArgument(0));
35
+
36
+ Market result = service.create(req);
37
+
38
+ assertThat(result.name()).isEqualTo("name");
39
+ verify(repo).save(any());
40
+ }
41
+ }
42
+ ```
43
+
44
+ Patterns:
45
+ - Arrange-Act-Assert
46
+ - Avoid partial mocks; prefer explicit stubbing
47
+ - Use `@ParameterizedTest` for variants
48
+
49
+ ## Web Layer Tests (MockMvc)
50
+
51
+ ```java
52
+ @WebMvcTest(MarketController.class)
53
+ class MarketControllerTest {
54
+ @Autowired MockMvc mockMvc;
55
+ @MockBean MarketService marketService;
56
+
57
+ @Test
58
+ void returnsMarkets() throws Exception {
59
+ when(marketService.list(any())).thenReturn(Page.empty());
60
+
61
+ mockMvc.perform(get("/api/markets"))
62
+ .andExpect(status().isOk())
63
+ .andExpect(jsonPath("$.content").isArray());
64
+ }
65
+ }
66
+ ```
67
+
68
+ ## Integration Tests (SpringBootTest)
69
+
70
+ ```java
71
+ @SpringBootTest
72
+ @AutoConfigureMockMvc
73
+ @ActiveProfiles("test")
74
+ class MarketIntegrationTest {
75
+ @Autowired MockMvc mockMvc;
76
+
77
+ @Test
78
+ void createsMarket() throws Exception {
79
+ mockMvc.perform(post("/api/markets")
80
+ .contentType(MediaType.APPLICATION_JSON)
81
+ .content("""
82
+ {"name":"Test","description":"Desc","endDate":"2030-01-01T00:00:00Z","categories":["general"]}
83
+ """))
84
+ .andExpect(status().isCreated());
85
+ }
86
+ }
87
+ ```
88
+
89
+ ## Persistence Tests (DataJpaTest)
90
+
91
+ ```java
92
+ @DataJpaTest
93
+ @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
94
+ @Import(TestContainersConfig.class)
95
+ class MarketRepositoryTest {
96
+ @Autowired MarketRepository repo;
97
+
98
+ @Test
99
+ void savesAndFinds() {
100
+ MarketEntity entity = new MarketEntity();
101
+ entity.setName("Test");
102
+ repo.save(entity);
103
+
104
+ Optional<MarketEntity> found = repo.findByName("Test");
105
+ assertThat(found).isPresent();
106
+ }
107
+ }
108
+ ```
109
+
110
+ ## Testcontainers
111
+
112
+ - Use reusable containers for Postgres/Redis to mirror production
113
+ - Wire via `@DynamicPropertySource` to inject JDBC URLs into Spring context
114
+
115
+ ## Coverage (JaCoCo)
116
+
117
+ Maven snippet:
118
+ ```xml
119
+ <plugin>
120
+ <groupId>org.jacoco</groupId>
121
+ <artifactId>jacoco-maven-plugin</artifactId>
122
+ <version>0.8.14</version>
123
+ <executions>
124
+ <execution>
125
+ <goals><goal>prepare-agent</goal></goals>
126
+ </execution>
127
+ <execution>
128
+ <id>report</id>
129
+ <phase>verify</phase>
130
+ <goals><goal>report</goal></goals>
131
+ </execution>
132
+ </executions>
133
+ </plugin>
134
+ ```
135
+
136
+ ## Assertions
137
+
138
+ - Prefer AssertJ (`assertThat`) for readability
139
+ - For JSON responses, use `jsonPath`
140
+ - For exceptions: `assertThatThrownBy(...)`
141
+
142
+ ## Test Data Builders
143
+
144
+ ```java
145
+ class MarketBuilder {
146
+ private String name = "Test";
147
+ MarketBuilder withName(String name) { this.name = name; return this; }
148
+ Market build() { return new Market(null, name, MarketStatus.ACTIVE); }
149
+ }
150
+ ```
151
+
152
+ ## CI Commands
153
+
154
+ - Maven: `mvn -T 4 test` or `mvn verify`
155
+ - Gradle: `./gradlew test jacocoTestReport`
156
+
157
+ **Remember**: Keep tests fast, isolated, and deterministic. Test behavior, not implementation details.
@@ -0,0 +1,230 @@
1
+ ---
2
+ name: springboot-verification
3
+ description: "Verification loop for Spring Boot projects: build, static analysis, tests with coverage, security scans, and diff review before release or PR."
4
+ ---
5
+
6
+ # Spring Boot Verification Loop
7
+
8
+ Run before PRs, after major changes, and pre-deploy.
9
+
10
+ ## When to Activate
11
+
12
+ - Before opening a pull request for a Spring Boot service
13
+ - After major refactoring or dependency upgrades
14
+ - Pre-deployment verification for staging or production
15
+ - Running full build → lint → test → security scan pipeline
16
+ - Validating test coverage meets thresholds
17
+
18
+ ## Phase 1: Build
19
+
20
+ ```bash
21
+ mvn -T 4 clean verify -DskipTests
22
+ # or
23
+ ./gradlew clean assemble -x test
24
+ ```
25
+
26
+ If build fails, stop and fix.
27
+
28
+ ## Phase 2: Static Analysis
29
+
30
+ Maven (common plugins):
31
+ ```bash
32
+ mvn -T 4 spotbugs:check pmd:check checkstyle:check
33
+ ```
34
+
35
+ Gradle (if configured):
36
+ ```bash
37
+ ./gradlew checkstyleMain pmdMain spotbugsMain
38
+ ```
39
+
40
+ ## Phase 3: Tests + Coverage
41
+
42
+ ```bash
43
+ mvn -T 4 test
44
+ mvn jacoco:report # verify 80%+ coverage
45
+ # or
46
+ ./gradlew test jacocoTestReport
47
+ ```
48
+
49
+ Report:
50
+ - Total tests, passed/failed
51
+ - Coverage % (lines/branches)
52
+
53
+ ### Unit Tests
54
+
55
+ Test service logic in isolation with mocked dependencies:
56
+
57
+ ```java
58
+ @ExtendWith(MockitoExtension.class)
59
+ class UserServiceTest {
60
+
61
+ @Mock private UserRepository userRepository;
62
+ @InjectMocks private UserService userService;
63
+
64
+ @Test
65
+ void createUser_validInput_returnsUser() {
66
+ var dto = new CreateUserDto("Alice", "alice@example.com");
67
+ var expected = new User(1L, "Alice", "alice@example.com");
68
+ when(userRepository.save(any(User.class))).thenReturn(expected);
69
+
70
+ var result = userService.create(dto);
71
+
72
+ assertThat(result.name()).isEqualTo("Alice");
73
+ verify(userRepository).save(any(User.class));
74
+ }
75
+
76
+ @Test
77
+ void createUser_duplicateEmail_throwsException() {
78
+ var dto = new CreateUserDto("Alice", "existing@example.com");
79
+ when(userRepository.existsByEmail(dto.email())).thenReturn(true);
80
+
81
+ assertThatThrownBy(() -> userService.create(dto))
82
+ .isInstanceOf(DuplicateEmailException.class);
83
+ }
84
+ }
85
+ ```
86
+
87
+ ### Integration Tests with Testcontainers
88
+
89
+ Test against a real database instead of H2:
90
+
91
+ ```java
92
+ @SpringBootTest
93
+ @Testcontainers
94
+ class UserRepositoryIntegrationTest {
95
+
96
+ @Container
97
+ static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine")
98
+ .withDatabaseName("testdb");
99
+
100
+ @DynamicPropertySource
101
+ static void configureProperties(DynamicPropertyRegistry registry) {
102
+ registry.add("spring.datasource.url", postgres::getJdbcUrl);
103
+ registry.add("spring.datasource.username", postgres::getUsername);
104
+ registry.add("spring.datasource.password", postgres::getPassword);
105
+ }
106
+
107
+ @Autowired private UserRepository userRepository;
108
+
109
+ @Test
110
+ void findByEmail_existingUser_returnsUser() {
111
+ userRepository.save(new User("Alice", "alice@example.com"));
112
+
113
+ var found = userRepository.findByEmail("alice@example.com");
114
+
115
+ assertThat(found).isPresent();
116
+ assertThat(found.get().getName()).isEqualTo("Alice");
117
+ }
118
+ }
119
+ ```
120
+
121
+ ### API Tests with MockMvc
122
+
123
+ Test controller layer with full Spring context:
124
+
125
+ ```java
126
+ @WebMvcTest(UserController.class)
127
+ class UserControllerTest {
128
+
129
+ @Autowired private MockMvc mockMvc;
130
+ @MockBean private UserService userService;
131
+
132
+ @Test
133
+ void createUser_validInput_returns201() throws Exception {
134
+ var user = new UserDto(1L, "Alice", "alice@example.com");
135
+ when(userService.create(any())).thenReturn(user);
136
+
137
+ mockMvc.perform(post("/api/users")
138
+ .contentType(MediaType.APPLICATION_JSON)
139
+ .content("""
140
+ {"name": "Alice", "email": "alice@example.com"}
141
+ """))
142
+ .andExpect(status().isCreated())
143
+ .andExpect(jsonPath("$.name").value("Alice"));
144
+ }
145
+
146
+ @Test
147
+ void createUser_invalidEmail_returns400() throws Exception {
148
+ mockMvc.perform(post("/api/users")
149
+ .contentType(MediaType.APPLICATION_JSON)
150
+ .content("""
151
+ {"name": "Alice", "email": "not-an-email"}
152
+ """))
153
+ .andExpect(status().isBadRequest());
154
+ }
155
+ }
156
+ ```
157
+
158
+ ## Phase 4: Security Scan
159
+
160
+ ```bash
161
+ # Dependency CVEs
162
+ mvn org.owasp:dependency-check-maven:check
163
+ # or
164
+ ./gradlew dependencyCheckAnalyze
165
+
166
+ # Secrets in source
167
+ grep -rn "password\s*=\s*\"" src/ --include="*.java" --include="*.yml" --include="*.properties"
168
+ grep -rn "sk-\|api_key\|secret" src/ --include="*.java" --include="*.yml"
169
+
170
+ # Secrets (git history)
171
+ git secrets --scan # if configured
172
+ ```
173
+
174
+ ### Common Security Findings
175
+
176
+ ```
177
+ # Check for System.out.println (use logger instead)
178
+ grep -rn "System\.out\.print" src/main/ --include="*.java"
179
+
180
+ # Check for raw exception messages in responses
181
+ grep -rn "e\.getMessage()" src/main/ --include="*.java"
182
+
183
+ # Check for wildcard CORS
184
+ grep -rn "allowedOrigins.*\*" src/main/ --include="*.java"
185
+ ```
186
+
187
+ ## Phase 5: Lint/Format (optional gate)
188
+
189
+ ```bash
190
+ mvn spotless:apply # if using Spotless plugin
191
+ ./gradlew spotlessApply
192
+ ```
193
+
194
+ ## Phase 6: Diff Review
195
+
196
+ ```bash
197
+ git diff --stat
198
+ git diff
199
+ ```
200
+
201
+ Checklist:
202
+ - No debugging logs left (`System.out`, `log.debug` without guards)
203
+ - Meaningful errors and HTTP statuses
204
+ - Transactions and validation present where needed
205
+ - Config changes documented
206
+
207
+ ## Output Template
208
+
209
+ ```
210
+ VERIFICATION REPORT
211
+ ===================
212
+ Build: [PASS/FAIL]
213
+ Static: [PASS/FAIL] (spotbugs/pmd/checkstyle)
214
+ Tests: [PASS/FAIL] (X/Y passed, Z% coverage)
215
+ Security: [PASS/FAIL] (CVE findings: N)
216
+ Diff: [X files changed]
217
+
218
+ Overall: [READY / NOT READY]
219
+
220
+ Issues to Fix:
221
+ 1. ...
222
+ 2. ...
223
+ ```
224
+
225
+ ## Continuous Mode
226
+
227
+ - Re-run phases on significant changes or every 30–60 minutes in long sessions
228
+ - Keep a short loop: `mvn -T 4 test` + spotbugs for quick feedback
229
+
230
+ **Remember**: Fast feedback beats late surprises. Keep the gate strict—treat warnings as defects in production systems.