ctxora 6.2.2 → 6.4.0

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 (835) hide show
  1. package/.claude-plugin/plugin.json +11 -0
  2. package/README.md +104 -16
  3. package/README.vi.md +96 -7
  4. package/THIRD_PARTY_NOTICES.md +12 -0
  5. package/agents/ctxora-context-engineer.md +6 -0
  6. package/agents/ctxora-maintainer.md +6 -0
  7. package/agents/ctxora-reviewer.md +6 -0
  8. package/bin/ctxora.mjs +1 -1
  9. package/commands/context.md +15 -0
  10. package/commands/guide.md +8 -0
  11. package/commands/handoff.md +8 -0
  12. package/commands/health.md +14 -0
  13. package/commands/learn.md +8 -0
  14. package/commands/plan.md +15 -0
  15. package/commands/review.md +8 -0
  16. package/commands/route.md +6 -0
  17. package/docs/COMMAND-SKILL-MAP.md +25 -0
  18. package/docs/third-party/ECC-LICENSE +21 -0
  19. package/package.json +14 -1
  20. package/pyproject.toml +6 -1
  21. package/schemas/README.md +3 -0
  22. package/schemas/mcp-v2/context_stats.request.schema.json +10 -0
  23. package/schemas/mcp-v2/context_stats.response.schema.json +5 -0
  24. package/schemas/mcp-v2/delete_conversation_handoff.request.schema.json +17 -0
  25. package/schemas/mcp-v2/delete_conversation_handoff.response.schema.json +5 -0
  26. package/schemas/mcp-v2/ecc_search.request.schema.json +16 -0
  27. package/schemas/mcp-v2/ecc_search.response.schema.json +5 -0
  28. package/schemas/mcp-v2/ecc_status.request.schema.json +6 -0
  29. package/schemas/mcp-v2/ecc_status.response.schema.json +5 -0
  30. package/schemas/mcp-v2/error.response.schema.json +40 -0
  31. package/schemas/mcp-v2/handoff_conversation.request.schema.json +29 -0
  32. package/schemas/mcp-v2/handoff_conversation.response.schema.json +5 -0
  33. package/schemas/mcp-v2/invalidate_context.request.schema.json +17 -0
  34. package/schemas/mcp-v2/invalidate_context.response.schema.json +5 -0
  35. package/schemas/mcp-v2/list_conversation_handoffs.request.schema.json +16 -0
  36. package/schemas/mcp-v2/list_conversation_handoffs.response.schema.json +8 -0
  37. package/schemas/mcp-v2/memory_delete.request.schema.json +20 -0
  38. package/schemas/mcp-v2/memory_delete.response.schema.json +5 -0
  39. package/schemas/mcp-v2/memory_list.request.schema.json +19 -0
  40. package/schemas/mcp-v2/memory_list.response.schema.json +7 -0
  41. package/schemas/mcp-v2/memory_save.request.schema.json +42 -0
  42. package/schemas/mcp-v2/memory_save.response.schema.json +5 -0
  43. package/schemas/mcp-v2/memory_search.request.schema.json +26 -0
  44. package/schemas/mcp-v2/memory_search.response.schema.json +8 -0
  45. package/schemas/mcp-v2/plan_context.request.schema.json +24 -0
  46. package/schemas/mcp-v2/plan_context.response.schema.json +5 -0
  47. package/schemas/mcp-v2/prepare_context.request.schema.json +42 -0
  48. package/schemas/mcp-v2/prepare_context.response.schema.json +72 -0
  49. package/schemas/mcp-v2/purge_expired_handoffs.request.schema.json +6 -0
  50. package/schemas/mcp-v2/purge_expired_handoffs.response.schema.json +5 -0
  51. package/schemas/mcp-v2/refresh_workspace.request.schema.json +19 -0
  52. package/schemas/mcp-v2/refresh_workspace.response.schema.json +5 -0
  53. package/schemas/mcp-v2/register_workspace.request.schema.json +23 -0
  54. package/schemas/mcp-v2/register_workspace.response.schema.json +5 -0
  55. package/schemas/mcp-v2/restore_conversation_handoff.request.schema.json +17 -0
  56. package/schemas/mcp-v2/restore_conversation_handoff.response.schema.json +5 -0
  57. package/schemas/mcp-v2/retrieve_context.request.schema.json +26 -0
  58. package/schemas/mcp-v2/retrieve_context.response.schema.json +5 -0
  59. package/schemas/mcp-v2/route_skills.request.schema.json +29 -0
  60. package/schemas/mcp-v2/route_skills.response.schema.json +5 -0
  61. package/schemas/mcp-v2/skill_feedback.request.schema.json +33 -0
  62. package/schemas/mcp-v2/skill_feedback.response.schema.json +5 -0
  63. package/schemas/mcp-v2/skill_learning_status.request.schema.json +16 -0
  64. package/schemas/mcp-v2/skill_learning_status.response.schema.json +5 -0
  65. package/skills/ctxora-context-health/SKILL.md +29 -0
  66. package/skills/ctxora-continuous-learning/SKILL.md +26 -0
  67. package/skills/ctxora-navigation/SKILL.md +20 -0
  68. package/skills/ctxora-repository-context/SKILL.md +33 -0
  69. package/skills/ctxora-setup/SKILL.md +26 -0
  70. package/skills/ctxora-workflow-profiles/SKILL.md +30 -0
  71. package/src/harness_context/api/v2/contracts.py +9 -0
  72. package/src/harness_context/application/container.py +2 -0
  73. package/src/harness_context/application/context_service.py +11 -2
  74. package/src/harness_context/application/protocols.py +5 -0
  75. package/src/harness_context/bootstrap.py +4 -1
  76. package/src/harness_context/cli/app.py +130 -0
  77. package/src/harness_context/mcp/capabilities.py +1 -0
  78. package/src/harness_context/mcp/tool_handlers/__init__.py +5 -1
  79. package/src/harness_context/mcp/tool_handlers/skills.py +29 -0
  80. package/src/harness_context/mcp/tools.py +2 -0
  81. package/src/harness_context/skills/__init__.py +4 -0
  82. package/src/harness_context/skills/catalog.py +267 -0
  83. package/src/harness_context/skills/ecc/accessibility/LICENSE.ecc +21 -0
  84. package/src/harness_context/skills/ecc/accessibility/SKILL.md +147 -0
  85. package/src/harness_context/skills/ecc/agent-architecture-audit/LICENSE.ecc +21 -0
  86. package/src/harness_context/skills/ecc/agent-architecture-audit/SKILL.md +257 -0
  87. package/src/harness_context/skills/ecc/agent-eval/LICENSE.ecc +21 -0
  88. package/src/harness_context/skills/ecc/agent-eval/SKILL.md +147 -0
  89. package/src/harness_context/skills/ecc/agent-harness-construction/LICENSE.ecc +21 -0
  90. package/src/harness_context/skills/ecc/agent-harness-construction/SKILL.md +74 -0
  91. package/src/harness_context/skills/ecc/agent-introspection-debugging/LICENSE.ecc +21 -0
  92. package/src/harness_context/skills/ecc/agent-introspection-debugging/SKILL.md +154 -0
  93. package/src/harness_context/skills/ecc/agent-payment-x402/LICENSE.ecc +21 -0
  94. package/src/harness_context/skills/ecc/agent-payment-x402/SKILL.md +225 -0
  95. package/src/harness_context/skills/ecc/agent-self-evaluation/LICENSE.ecc +21 -0
  96. package/src/harness_context/skills/ecc/agent-self-evaluation/SKILL.md +182 -0
  97. package/src/harness_context/skills/ecc/agent-self-evaluation/examples/high-score-example.md +87 -0
  98. package/src/harness_context/skills/ecc/agent-self-evaluation/examples/low-score-example.md +86 -0
  99. package/src/harness_context/skills/ecc/agent-self-evaluation/references/evaluation-criteria.md +71 -0
  100. package/src/harness_context/skills/ecc/agent-self-evaluation/references/hook-integration.md +64 -0
  101. package/src/harness_context/skills/ecc/agent-self-evaluation/scripts/evaluate.py +408 -0
  102. package/src/harness_context/skills/ecc/agent-self-evaluation/templates/evaluation-report.md +86 -0
  103. package/src/harness_context/skills/ecc/agent-sort/LICENSE.ecc +21 -0
  104. package/src/harness_context/skills/ecc/agent-sort/SKILL.md +216 -0
  105. package/src/harness_context/skills/ecc/agentic-engineering/LICENSE.ecc +21 -0
  106. package/src/harness_context/skills/ecc/agentic-engineering/SKILL.md +64 -0
  107. package/src/harness_context/skills/ecc/agentic-os/LICENSE.ecc +21 -0
  108. package/src/harness_context/skills/ecc/agentic-os/SKILL.md +388 -0
  109. package/src/harness_context/skills/ecc/ai-first-engineering/LICENSE.ecc +21 -0
  110. package/src/harness_context/skills/ecc/ai-first-engineering/SKILL.md +52 -0
  111. package/src/harness_context/skills/ecc/ai-regression-testing/LICENSE.ecc +21 -0
  112. package/src/harness_context/skills/ecc/ai-regression-testing/SKILL.md +386 -0
  113. package/src/harness_context/skills/ecc/android-clean-architecture/LICENSE.ecc +21 -0
  114. package/src/harness_context/skills/ecc/android-clean-architecture/SKILL.md +340 -0
  115. package/src/harness_context/skills/ecc/angular-developer/LICENSE.ecc +21 -0
  116. package/src/harness_context/skills/ecc/angular-developer/SKILL.md +155 -0
  117. package/src/harness_context/skills/ecc/angular-developer/references/angular-animations.md +160 -0
  118. package/src/harness_context/skills/ecc/angular-developer/references/angular-aria.md +410 -0
  119. package/src/harness_context/skills/ecc/angular-developer/references/cli.md +86 -0
  120. package/src/harness_context/skills/ecc/angular-developer/references/component-harnesses.md +59 -0
  121. package/src/harness_context/skills/ecc/angular-developer/references/component-styling.md +91 -0
  122. package/src/harness_context/skills/ecc/angular-developer/references/components.md +117 -0
  123. package/src/harness_context/skills/ecc/angular-developer/references/creating-services.md +97 -0
  124. package/src/harness_context/skills/ecc/angular-developer/references/data-resolvers.md +69 -0
  125. package/src/harness_context/skills/ecc/angular-developer/references/define-routes.md +67 -0
  126. package/src/harness_context/skills/ecc/angular-developer/references/defining-providers.md +72 -0
  127. package/src/harness_context/skills/ecc/angular-developer/references/di-fundamentals.md +120 -0
  128. package/src/harness_context/skills/ecc/angular-developer/references/e2e-testing.md +56 -0
  129. package/src/harness_context/skills/ecc/angular-developer/references/effects.md +83 -0
  130. package/src/harness_context/skills/ecc/angular-developer/references/hierarchical-injectors.md +43 -0
  131. package/src/harness_context/skills/ecc/angular-developer/references/host-elements.md +80 -0
  132. package/src/harness_context/skills/ecc/angular-developer/references/injection-context.md +63 -0
  133. package/src/harness_context/skills/ecc/angular-developer/references/inputs.md +101 -0
  134. package/src/harness_context/skills/ecc/angular-developer/references/linked-signal.md +59 -0
  135. package/src/harness_context/skills/ecc/angular-developer/references/loading-strategies.md +61 -0
  136. package/src/harness_context/skills/ecc/angular-developer/references/mcp.md +108 -0
  137. package/src/harness_context/skills/ecc/angular-developer/references/navigate-to-routes.md +69 -0
  138. package/src/harness_context/skills/ecc/angular-developer/references/outputs.md +86 -0
  139. package/src/harness_context/skills/ecc/angular-developer/references/reactive-forms.md +122 -0
  140. package/src/harness_context/skills/ecc/angular-developer/references/rendering-strategies.md +44 -0
  141. package/src/harness_context/skills/ecc/angular-developer/references/resource.md +77 -0
  142. package/src/harness_context/skills/ecc/angular-developer/references/route-animations.md +56 -0
  143. package/src/harness_context/skills/ecc/angular-developer/references/route-guards.md +52 -0
  144. package/src/harness_context/skills/ecc/angular-developer/references/router-lifecycle.md +45 -0
  145. package/src/harness_context/skills/ecc/angular-developer/references/router-testing.md +87 -0
  146. package/src/harness_context/skills/ecc/angular-developer/references/show-routes-with-outlets.md +68 -0
  147. package/src/harness_context/skills/ecc/angular-developer/references/signal-forms.md +795 -0
  148. package/src/harness_context/skills/ecc/angular-developer/references/signals-overview.md +94 -0
  149. package/src/harness_context/skills/ecc/angular-developer/references/tailwind-css.md +69 -0
  150. package/src/harness_context/skills/ecc/angular-developer/references/template-driven-forms.md +114 -0
  151. package/src/harness_context/skills/ecc/angular-developer/references/testing-fundamentals.md +65 -0
  152. package/src/harness_context/skills/ecc/api-connector-builder/LICENSE.ecc +21 -0
  153. package/src/harness_context/skills/ecc/api-connector-builder/SKILL.md +121 -0
  154. package/src/harness_context/skills/ecc/api-design/LICENSE.ecc +21 -0
  155. package/src/harness_context/skills/ecc/api-design/SKILL.md +524 -0
  156. package/src/harness_context/skills/ecc/architecture-decision-records/LICENSE.ecc +21 -0
  157. package/src/harness_context/skills/ecc/architecture-decision-records/SKILL.md +180 -0
  158. package/src/harness_context/skills/ecc/article-writing/LICENSE.ecc +21 -0
  159. package/src/harness_context/skills/ecc/article-writing/SKILL.md +80 -0
  160. package/src/harness_context/skills/ecc/automation-audit-ops/LICENSE.ecc +21 -0
  161. package/src/harness_context/skills/ecc/automation-audit-ops/SKILL.md +143 -0
  162. package/src/harness_context/skills/ecc/autonomous-agent-harness/LICENSE.ecc +21 -0
  163. package/src/harness_context/skills/ecc/autonomous-agent-harness/SKILL.md +274 -0
  164. package/src/harness_context/skills/ecc/autonomous-loops/LICENSE.ecc +21 -0
  165. package/src/harness_context/skills/ecc/autonomous-loops/SKILL.md +611 -0
  166. package/src/harness_context/skills/ecc/backend-patterns/LICENSE.ecc +21 -0
  167. package/src/harness_context/skills/ecc/backend-patterns/SKILL.md +562 -0
  168. package/src/harness_context/skills/ecc/benchmark/LICENSE.ecc +21 -0
  169. package/src/harness_context/skills/ecc/benchmark/SKILL.md +95 -0
  170. package/src/harness_context/skills/ecc/benchmark-methodology/LICENSE.ecc +21 -0
  171. package/src/harness_context/skills/ecc/benchmark-methodology/SKILL.md +191 -0
  172. package/src/harness_context/skills/ecc/benchmark-optimization-loop/LICENSE.ecc +21 -0
  173. package/src/harness_context/skills/ecc/benchmark-optimization-loop/SKILL.md +71 -0
  174. package/src/harness_context/skills/ecc/blender-motion-state-inspection/LICENSE.ecc +21 -0
  175. package/src/harness_context/skills/ecc/blender-motion-state-inspection/SKILL.md +165 -0
  176. package/src/harness_context/skills/ecc/blueprint/LICENSE.ecc +21 -0
  177. package/src/harness_context/skills/ecc/blueprint/SKILL.md +106 -0
  178. package/src/harness_context/skills/ecc/brand-discovery/LICENSE.ecc +21 -0
  179. package/src/harness_context/skills/ecc/brand-discovery/SKILL.md +145 -0
  180. package/src/harness_context/skills/ecc/brand-discovery/references/10_purpose-why.md +40 -0
  181. package/src/harness_context/skills/ecc/brand-discovery/references/20_positioning.md +44 -0
  182. package/src/harness_context/skills/ecc/brand-discovery/references/30_audience-niche.md +52 -0
  183. package/src/harness_context/skills/ecc/brand-discovery/references/40_personality-archetype.md +57 -0
  184. package/src/harness_context/skills/ecc/brand-discovery/references/50_voice-tone.md +59 -0
  185. package/src/harness_context/skills/ecc/brand-discovery/references/60_narrative-story.md +50 -0
  186. package/src/harness_context/skills/ecc/brand-discovery/references/70_founder-tension.md +49 -0
  187. package/src/harness_context/skills/ecc/brand-discovery/references/90_SYNTHESIS.md +133 -0
  188. package/src/harness_context/skills/ecc/brand-voice/LICENSE.ecc +21 -0
  189. package/src/harness_context/skills/ecc/brand-voice/SKILL.md +98 -0
  190. package/src/harness_context/skills/ecc/brand-voice/references/voice-profile-schema.md +55 -0
  191. package/src/harness_context/skills/ecc/browser-qa/LICENSE.ecc +21 -0
  192. package/src/harness_context/skills/ecc/browser-qa/SKILL.md +105 -0
  193. package/src/harness_context/skills/ecc/bun-runtime/LICENSE.ecc +21 -0
  194. package/src/harness_context/skills/ecc/bun-runtime/SKILL.md +85 -0
  195. package/src/harness_context/skills/ecc/canary-watch/LICENSE.ecc +21 -0
  196. package/src/harness_context/skills/ecc/canary-watch/SKILL.md +108 -0
  197. package/src/harness_context/skills/ecc/carrier-relationship-management/LICENSE.ecc +21 -0
  198. package/src/harness_context/skills/ecc/carrier-relationship-management/SKILL.md +212 -0
  199. package/src/harness_context/skills/ecc/cisco-ios-patterns/LICENSE.ecc +21 -0
  200. package/src/harness_context/skills/ecc/cisco-ios-patterns/SKILL.md +164 -0
  201. package/src/harness_context/skills/ecc/ck/LICENSE.ecc +21 -0
  202. package/src/harness_context/skills/ecc/ck/SKILL.md +148 -0
  203. package/src/harness_context/skills/ecc/ck/commands/forget.mjs +44 -0
  204. package/src/harness_context/skills/ecc/ck/commands/info.mjs +24 -0
  205. package/src/harness_context/skills/ecc/ck/commands/init.mjs +143 -0
  206. package/src/harness_context/skills/ecc/ck/commands/list.mjs +40 -0
  207. package/src/harness_context/skills/ecc/ck/commands/migrate.mjs +202 -0
  208. package/src/harness_context/skills/ecc/ck/commands/resume.mjs +36 -0
  209. package/src/harness_context/skills/ecc/ck/commands/save.mjs +210 -0
  210. package/src/harness_context/skills/ecc/ck/commands/shared.mjs +387 -0
  211. package/src/harness_context/skills/ecc/ck/hooks/session-start.mjs +224 -0
  212. package/src/harness_context/skills/ecc/claude-devfleet/LICENSE.ecc +21 -0
  213. package/src/harness_context/skills/ecc/claude-devfleet/SKILL.md +112 -0
  214. package/src/harness_context/skills/ecc/click-path-audit/LICENSE.ecc +21 -0
  215. package/src/harness_context/skills/ecc/click-path-audit/SKILL.md +245 -0
  216. package/src/harness_context/skills/ecc/clickhouse-io/LICENSE.ecc +21 -0
  217. package/src/harness_context/skills/ecc/clickhouse-io/SKILL.md +445 -0
  218. package/src/harness_context/skills/ecc/code-tour/LICENSE.ecc +21 -0
  219. package/src/harness_context/skills/ecc/code-tour/SKILL.md +254 -0
  220. package/src/harness_context/skills/ecc/codebase-onboarding/LICENSE.ecc +21 -0
  221. package/src/harness_context/skills/ecc/codebase-onboarding/SKILL.md +234 -0
  222. package/src/harness_context/skills/ecc/codehealth-mcp/LICENSE.ecc +21 -0
  223. package/src/harness_context/skills/ecc/codehealth-mcp/SKILL.md +167 -0
  224. package/src/harness_context/skills/ecc/coding-standards/LICENSE.ecc +21 -0
  225. package/src/harness_context/skills/ecc/coding-standards/SKILL.md +551 -0
  226. package/src/harness_context/skills/ecc/competitive-platform-analysis/LICENSE.ecc +21 -0
  227. package/src/harness_context/skills/ecc/competitive-platform-analysis/SKILL.md +214 -0
  228. package/src/harness_context/skills/ecc/competitive-report-structure/LICENSE.ecc +21 -0
  229. package/src/harness_context/skills/ecc/competitive-report-structure/SKILL.md +162 -0
  230. package/src/harness_context/skills/ecc/compose-multiplatform-patterns/LICENSE.ecc +21 -0
  231. package/src/harness_context/skills/ecc/compose-multiplatform-patterns/SKILL.md +300 -0
  232. package/src/harness_context/skills/ecc/config-gc/LICENSE.ecc +21 -0
  233. package/src/harness_context/skills/ecc/config-gc/SKILL.md +120 -0
  234. package/src/harness_context/skills/ecc/configure-ecc/LICENSE.ecc +21 -0
  235. package/src/harness_context/skills/ecc/configure-ecc/SKILL.md +206 -0
  236. package/src/harness_context/skills/ecc/connections-optimizer/LICENSE.ecc +21 -0
  237. package/src/harness_context/skills/ecc/connections-optimizer/SKILL.md +190 -0
  238. package/src/harness_context/skills/ecc/content-engine/LICENSE.ecc +21 -0
  239. package/src/harness_context/skills/ecc/content-engine/SKILL.md +132 -0
  240. package/src/harness_context/skills/ecc/content-hash-cache-pattern/LICENSE.ecc +21 -0
  241. package/src/harness_context/skills/ecc/content-hash-cache-pattern/SKILL.md +162 -0
  242. package/src/harness_context/skills/ecc/context-budget/LICENSE.ecc +21 -0
  243. package/src/harness_context/skills/ecc/context-budget/SKILL.md +136 -0
  244. package/src/harness_context/skills/ecc/continuous-agent-loop/LICENSE.ecc +21 -0
  245. package/src/harness_context/skills/ecc/continuous-agent-loop/SKILL.md +46 -0
  246. package/src/harness_context/skills/ecc/continuous-learning/LICENSE.ecc +21 -0
  247. package/src/harness_context/skills/ecc/continuous-learning/SKILL.md +132 -0
  248. package/src/harness_context/skills/ecc/continuous-learning/config.json +18 -0
  249. package/src/harness_context/skills/ecc/continuous-learning/evaluate-session.sh +69 -0
  250. package/src/harness_context/skills/ecc/continuous-learning-v2/LICENSE.ecc +21 -0
  251. package/src/harness_context/skills/ecc/continuous-learning-v2/SKILL.md +377 -0
  252. package/src/harness_context/skills/ecc/continuous-learning-v2/agents/observer-loop.sh +372 -0
  253. package/src/harness_context/skills/ecc/continuous-learning-v2/agents/observer.md +189 -0
  254. package/src/harness_context/skills/ecc/continuous-learning-v2/agents/session-guardian.sh +150 -0
  255. package/src/harness_context/skills/ecc/continuous-learning-v2/agents/start-observer.sh +252 -0
  256. package/src/harness_context/skills/ecc/continuous-learning-v2/config.json +8 -0
  257. package/src/harness_context/skills/ecc/continuous-learning-v2/hooks/observe.sh +675 -0
  258. package/src/harness_context/skills/ecc/continuous-learning-v2/scripts/detect-project.sh +334 -0
  259. package/src/harness_context/skills/ecc/continuous-learning-v2/scripts/instinct-cli.py +2290 -0
  260. package/src/harness_context/skills/ecc/continuous-learning-v2/scripts/lib/homunculus-dir.sh +31 -0
  261. package/src/harness_context/skills/ecc/continuous-learning-v2/scripts/migrate-homunculus.sh +68 -0
  262. package/src/harness_context/skills/ecc/continuous-learning-v2/scripts/test_parse_instinct.py +1420 -0
  263. package/src/harness_context/skills/ecc/contract-first/LICENSE.ecc +21 -0
  264. package/src/harness_context/skills/ecc/contract-first/SKILL.md +287 -0
  265. package/src/harness_context/skills/ecc/cost-aware-llm-pipeline/LICENSE.ecc +21 -0
  266. package/src/harness_context/skills/ecc/cost-aware-llm-pipeline/SKILL.md +188 -0
  267. package/src/harness_context/skills/ecc/cost-tracking/LICENSE.ecc +21 -0
  268. package/src/harness_context/skills/ecc/cost-tracking/SKILL.md +97 -0
  269. package/src/harness_context/skills/ecc/council/LICENSE.ecc +21 -0
  270. package/src/harness_context/skills/ecc/council/SKILL.md +204 -0
  271. package/src/harness_context/skills/ecc/council-multi-model/LICENSE.ecc +21 -0
  272. package/src/harness_context/skills/ecc/council-multi-model/SKILL.md +167 -0
  273. package/src/harness_context/skills/ecc/council-multi-model/scripts/review-with-codex.js +305 -0
  274. package/src/harness_context/skills/ecc/cpp-coding-standards/LICENSE.ecc +21 -0
  275. package/src/harness_context/skills/ecc/cpp-coding-standards/SKILL.md +724 -0
  276. package/src/harness_context/skills/ecc/cpp-testing/LICENSE.ecc +21 -0
  277. package/src/harness_context/skills/ecc/cpp-testing/SKILL.md +325 -0
  278. package/src/harness_context/skills/ecc/crosspost/LICENSE.ecc +21 -0
  279. package/src/harness_context/skills/ecc/crosspost/SKILL.md +123 -0
  280. package/src/harness_context/skills/ecc/csharp-testing/LICENSE.ecc +21 -0
  281. package/src/harness_context/skills/ecc/csharp-testing/SKILL.md +322 -0
  282. package/src/harness_context/skills/ecc/customer-billing-ops/LICENSE.ecc +21 -0
  283. package/src/harness_context/skills/ecc/customer-billing-ops/SKILL.md +141 -0
  284. package/src/harness_context/skills/ecc/customs-trade-compliance/LICENSE.ecc +21 -0
  285. package/src/harness_context/skills/ecc/customs-trade-compliance/SKILL.md +263 -0
  286. package/src/harness_context/skills/ecc/dart-flutter-patterns/LICENSE.ecc +21 -0
  287. package/src/harness_context/skills/ecc/dart-flutter-patterns/SKILL.md +564 -0
  288. package/src/harness_context/skills/ecc/dashboard-builder/LICENSE.ecc +21 -0
  289. package/src/harness_context/skills/ecc/dashboard-builder/SKILL.md +109 -0
  290. package/src/harness_context/skills/ecc/data-scraper-agent/LICENSE.ecc +21 -0
  291. package/src/harness_context/skills/ecc/data-scraper-agent/SKILL.md +776 -0
  292. package/src/harness_context/skills/ecc/data-throughput-accelerator/LICENSE.ecc +21 -0
  293. package/src/harness_context/skills/ecc/data-throughput-accelerator/SKILL.md +74 -0
  294. package/src/harness_context/skills/ecc/database-migrations/LICENSE.ecc +21 -0
  295. package/src/harness_context/skills/ecc/database-migrations/SKILL.md +430 -0
  296. package/src/harness_context/skills/ecc/deep-research/LICENSE.ecc +21 -0
  297. package/src/harness_context/skills/ecc/deep-research/SKILL.md +170 -0
  298. package/src/harness_context/skills/ecc/defi-amm-security/LICENSE.ecc +21 -0
  299. package/src/harness_context/skills/ecc/defi-amm-security/SKILL.md +167 -0
  300. package/src/harness_context/skills/ecc/delivery-gate/LICENSE.ecc +21 -0
  301. package/src/harness_context/skills/ecc/delivery-gate/SKILL.md +126 -0
  302. package/src/harness_context/skills/ecc/delivery-gate/hooks/quality-gate.py +220 -0
  303. package/src/harness_context/skills/ecc/deployment-patterns/LICENSE.ecc +21 -0
  304. package/src/harness_context/skills/ecc/deployment-patterns/SKILL.md +428 -0
  305. package/src/harness_context/skills/ecc/design-system/LICENSE.ecc +21 -0
  306. package/src/harness_context/skills/ecc/design-system/SKILL.md +83 -0
  307. package/src/harness_context/skills/ecc/dev-team/LICENSE.ecc +21 -0
  308. package/src/harness_context/skills/ecc/dev-team/SKILL.md +203 -0
  309. package/src/harness_context/skills/ecc/django-celery/LICENSE.ecc +21 -0
  310. package/src/harness_context/skills/ecc/django-celery/SKILL.md +458 -0
  311. package/src/harness_context/skills/ecc/django-patterns/LICENSE.ecc +21 -0
  312. package/src/harness_context/skills/ecc/django-patterns/SKILL.md +735 -0
  313. package/src/harness_context/skills/ecc/django-security/LICENSE.ecc +21 -0
  314. package/src/harness_context/skills/ecc/django-security/SKILL.md +644 -0
  315. package/src/harness_context/skills/ecc/django-tdd/LICENSE.ecc +21 -0
  316. package/src/harness_context/skills/ecc/django-tdd/SKILL.md +730 -0
  317. package/src/harness_context/skills/ecc/django-verification/LICENSE.ecc +21 -0
  318. package/src/harness_context/skills/ecc/django-verification/SKILL.md +470 -0
  319. package/src/harness_context/skills/ecc/dmux-workflows/LICENSE.ecc +21 -0
  320. package/src/harness_context/skills/ecc/dmux-workflows/SKILL.md +192 -0
  321. package/src/harness_context/skills/ecc/docker-patterns/LICENSE.ecc +21 -0
  322. package/src/harness_context/skills/ecc/docker-patterns/SKILL.md +520 -0
  323. package/src/harness_context/skills/ecc/documentation-lookup/LICENSE.ecc +21 -0
  324. package/src/harness_context/skills/ecc/documentation-lookup/SKILL.md +91 -0
  325. package/src/harness_context/skills/ecc/dotnet-patterns/LICENSE.ecc +21 -0
  326. package/src/harness_context/skills/ecc/dotnet-patterns/SKILL.md +322 -0
  327. package/src/harness_context/skills/ecc/dynamic-workflow-mode/LICENSE.ecc +21 -0
  328. package/src/harness_context/skills/ecc/dynamic-workflow-mode/SKILL.md +124 -0
  329. package/src/harness_context/skills/ecc/e2e-testing/LICENSE.ecc +21 -0
  330. package/src/harness_context/skills/ecc/e2e-testing/SKILL.md +327 -0
  331. package/src/harness_context/skills/ecc/ecc-guide/LICENSE.ecc +21 -0
  332. package/src/harness_context/skills/ecc/ecc-guide/SKILL.md +190 -0
  333. package/src/harness_context/skills/ecc/ecc-recipes/LICENSE.ecc +21 -0
  334. package/src/harness_context/skills/ecc/ecc-recipes/SKILL.md +150 -0
  335. package/src/harness_context/skills/ecc/ecc-tools-cost-audit/LICENSE.ecc +21 -0
  336. package/src/harness_context/skills/ecc/ecc-tools-cost-audit/SKILL.md +161 -0
  337. package/src/harness_context/skills/ecc/email-ops/LICENSE.ecc +21 -0
  338. package/src/harness_context/skills/ecc/email-ops/SKILL.md +133 -0
  339. package/src/harness_context/skills/ecc/energy-procurement/LICENSE.ecc +21 -0
  340. package/src/harness_context/skills/ecc/energy-procurement/SKILL.md +228 -0
  341. package/src/harness_context/skills/ecc/enterprise-agent-ops/LICENSE.ecc +21 -0
  342. package/src/harness_context/skills/ecc/enterprise-agent-ops/SKILL.md +51 -0
  343. package/src/harness_context/skills/ecc/error-handling/LICENSE.ecc +21 -0
  344. package/src/harness_context/skills/ecc/error-handling/SKILL.md +377 -0
  345. package/src/harness_context/skills/ecc/eval-harness/LICENSE.ecc +21 -0
  346. package/src/harness_context/skills/ecc/eval-harness/SKILL.md +271 -0
  347. package/src/harness_context/skills/ecc/evm-token-decimals/LICENSE.ecc +21 -0
  348. package/src/harness_context/skills/ecc/evm-token-decimals/SKILL.md +131 -0
  349. package/src/harness_context/skills/ecc/exa-search/LICENSE.ecc +21 -0
  350. package/src/harness_context/skills/ecc/exa-search/SKILL.md +117 -0
  351. package/src/harness_context/skills/ecc/fal-ai-media/LICENSE.ecc +21 -0
  352. package/src/harness_context/skills/ecc/fal-ai-media/SKILL.md +289 -0
  353. package/src/harness_context/skills/ecc/fastapi-patterns/LICENSE.ecc +21 -0
  354. package/src/harness_context/skills/ecc/fastapi-patterns/SKILL.md +514 -0
  355. package/src/harness_context/skills/ecc/finance-billing-ops/LICENSE.ecc +21 -0
  356. package/src/harness_context/skills/ecc/finance-billing-ops/SKILL.md +128 -0
  357. package/src/harness_context/skills/ecc/flox-environments/LICENSE.ecc +21 -0
  358. package/src/harness_context/skills/ecc/flox-environments/SKILL.md +497 -0
  359. package/src/harness_context/skills/ecc/flutter-dart-code-review/LICENSE.ecc +21 -0
  360. package/src/harness_context/skills/ecc/flutter-dart-code-review/SKILL.md +436 -0
  361. package/src/harness_context/skills/ecc/foundation-models-on-device/LICENSE.ecc +21 -0
  362. package/src/harness_context/skills/ecc/foundation-models-on-device/SKILL.md +243 -0
  363. package/src/harness_context/skills/ecc/frontend-a11y/LICENSE.ecc +21 -0
  364. package/src/harness_context/skills/ecc/frontend-a11y/SKILL.md +446 -0
  365. package/src/harness_context/skills/ecc/frontend-design-direction/LICENSE.ecc +21 -0
  366. package/src/harness_context/skills/ecc/frontend-design-direction/SKILL.md +93 -0
  367. package/src/harness_context/skills/ecc/frontend-patterns/LICENSE.ecc +21 -0
  368. package/src/harness_context/skills/ecc/frontend-patterns/SKILL.md +657 -0
  369. package/src/harness_context/skills/ecc/frontend-slides/LICENSE.ecc +21 -0
  370. package/src/harness_context/skills/ecc/frontend-slides/SKILL.md +185 -0
  371. package/src/harness_context/skills/ecc/frontend-slides/STYLE_PRESETS.md +330 -0
  372. package/src/harness_context/skills/ecc/frontend-slides/animation-patterns.md +122 -0
  373. package/src/harness_context/skills/ecc/frontend-slides/html-template.md +419 -0
  374. package/src/harness_context/skills/ecc/frontend-slides/scripts/export-pdf.sh +418 -0
  375. package/src/harness_context/skills/ecc/frontend-slides/scripts/extract-pptx.py +96 -0
  376. package/src/harness_context/skills/ecc/frontend-slides/viewport-base.css +153 -0
  377. package/src/harness_context/skills/ecc/fsharp-testing/LICENSE.ecc +21 -0
  378. package/src/harness_context/skills/ecc/fsharp-testing/SKILL.md +281 -0
  379. package/src/harness_context/skills/ecc/gan-style-harness/LICENSE.ecc +21 -0
  380. package/src/harness_context/skills/ecc/gan-style-harness/SKILL.md +279 -0
  381. package/src/harness_context/skills/ecc/gateguard/LICENSE.ecc +21 -0
  382. package/src/harness_context/skills/ecc/gateguard/SKILL.md +182 -0
  383. package/src/harness_context/skills/ecc/generating-python-installer/LICENSE.ecc +21 -0
  384. package/src/harness_context/skills/ecc/generating-python-installer/SKILL.md +820 -0
  385. package/src/harness_context/skills/ecc/git-workflow/LICENSE.ecc +21 -0
  386. package/src/harness_context/skills/ecc/git-workflow/SKILL.md +716 -0
  387. package/src/harness_context/skills/ecc/github-ops/LICENSE.ecc +21 -0
  388. package/src/harness_context/skills/ecc/github-ops/SKILL.md +162 -0
  389. package/src/harness_context/skills/ecc/github-ops/references/ecc-release-checklist.md +211 -0
  390. package/src/harness_context/skills/ecc/golang-patterns/LICENSE.ecc +21 -0
  391. package/src/harness_context/skills/ecc/golang-patterns/SKILL.md +676 -0
  392. package/src/harness_context/skills/ecc/golang-testing/LICENSE.ecc +21 -0
  393. package/src/harness_context/skills/ecc/golang-testing/SKILL.md +721 -0
  394. package/src/harness_context/skills/ecc/google-workspace-ops/LICENSE.ecc +21 -0
  395. package/src/harness_context/skills/ecc/google-workspace-ops/SKILL.md +96 -0
  396. package/src/harness_context/skills/ecc/growth-log/LICENSE.ecc +21 -0
  397. package/src/harness_context/skills/ecc/growth-log/SKILL.md +128 -0
  398. package/src/harness_context/skills/ecc/healthcare-cdss-patterns/LICENSE.ecc +21 -0
  399. package/src/harness_context/skills/ecc/healthcare-cdss-patterns/SKILL.md +246 -0
  400. package/src/harness_context/skills/ecc/healthcare-emr-patterns/LICENSE.ecc +21 -0
  401. package/src/harness_context/skills/ecc/healthcare-emr-patterns/SKILL.md +160 -0
  402. package/src/harness_context/skills/ecc/healthcare-eval-harness/LICENSE.ecc +21 -0
  403. package/src/harness_context/skills/ecc/healthcare-eval-harness/SKILL.md +208 -0
  404. package/src/harness_context/skills/ecc/healthcare-phi-compliance/LICENSE.ecc +21 -0
  405. package/src/harness_context/skills/ecc/healthcare-phi-compliance/SKILL.md +146 -0
  406. package/src/harness_context/skills/ecc/hermes-imports/LICENSE.ecc +21 -0
  407. package/src/harness_context/skills/ecc/hermes-imports/SKILL.md +89 -0
  408. package/src/harness_context/skills/ecc/hexagonal-architecture/LICENSE.ecc +21 -0
  409. package/src/harness_context/skills/ecc/hexagonal-architecture/SKILL.md +277 -0
  410. package/src/harness_context/skills/ecc/hipaa-compliance/LICENSE.ecc +21 -0
  411. package/src/harness_context/skills/ecc/hipaa-compliance/SKILL.md +79 -0
  412. package/src/harness_context/skills/ecc/homelab-network-readiness/LICENSE.ecc +21 -0
  413. package/src/harness_context/skills/ecc/homelab-network-readiness/SKILL.md +170 -0
  414. package/src/harness_context/skills/ecc/homelab-network-setup/LICENSE.ecc +21 -0
  415. package/src/harness_context/skills/ecc/homelab-network-setup/SKILL.md +130 -0
  416. package/src/harness_context/skills/ecc/homelab-pihole-dns/LICENSE.ecc +21 -0
  417. package/src/harness_context/skills/ecc/homelab-pihole-dns/SKILL.md +275 -0
  418. package/src/harness_context/skills/ecc/homelab-vlan-segmentation/LICENSE.ecc +21 -0
  419. package/src/harness_context/skills/ecc/homelab-vlan-segmentation/SKILL.md +312 -0
  420. package/src/harness_context/skills/ecc/homelab-wireguard-vpn/LICENSE.ecc +21 -0
  421. package/src/harness_context/skills/ecc/homelab-wireguard-vpn/SKILL.md +306 -0
  422. package/src/harness_context/skills/ecc/hookify-rules/LICENSE.ecc +21 -0
  423. package/src/harness_context/skills/ecc/hookify-rules/SKILL.md +128 -0
  424. package/src/harness_context/skills/ecc/inherit-legacy-style/LICENSE.ecc +21 -0
  425. package/src/harness_context/skills/ecc/inherit-legacy-style/SKILL.md +157 -0
  426. package/src/harness_context/skills/ecc/intent-driven-development/LICENSE.ecc +21 -0
  427. package/src/harness_context/skills/ecc/intent-driven-development/SKILL.md +360 -0
  428. package/src/harness_context/skills/ecc/inventory-demand-planning/LICENSE.ecc +21 -0
  429. package/src/harness_context/skills/ecc/inventory-demand-planning/SKILL.md +247 -0
  430. package/src/harness_context/skills/ecc/investor-materials/LICENSE.ecc +21 -0
  431. package/src/harness_context/skills/ecc/investor-materials/SKILL.md +97 -0
  432. package/src/harness_context/skills/ecc/investor-outreach/LICENSE.ecc +21 -0
  433. package/src/harness_context/skills/ecc/investor-outreach/SKILL.md +92 -0
  434. package/src/harness_context/skills/ecc/ios-icon-gen/LICENSE.ecc +21 -0
  435. package/src/harness_context/skills/ecc/ios-icon-gen/SKILL.md +158 -0
  436. package/src/harness_context/skills/ecc/ios-icon-gen/scripts/generate_icons.swift +258 -0
  437. package/src/harness_context/skills/ecc/ios-icon-gen/scripts/iconify_gen.sh +235 -0
  438. package/src/harness_context/skills/ecc/iterative-retrieval/LICENSE.ecc +21 -0
  439. package/src/harness_context/skills/ecc/iterative-retrieval/SKILL.md +212 -0
  440. package/src/harness_context/skills/ecc/ito-baskets/LICENSE.ecc +21 -0
  441. package/src/harness_context/skills/ecc/ito-baskets/SKILL.md +263 -0
  442. package/src/harness_context/skills/ecc/ito-baskets/agents/openai.yaml +4 -0
  443. package/src/harness_context/skills/ecc/ito-baskets/scripts/ito-baskets.js +195 -0
  444. package/src/harness_context/skills/ecc/ito-compute/LICENSE.ecc +21 -0
  445. package/src/harness_context/skills/ecc/ito-compute/SKILL.md +165 -0
  446. package/src/harness_context/skills/ecc/ito-compute/agents/openai.yaml +4 -0
  447. package/src/harness_context/skills/ecc/ito-inference/LICENSE.ecc +21 -0
  448. package/src/harness_context/skills/ecc/ito-inference/SKILL.md +119 -0
  449. package/src/harness_context/skills/ecc/ito-training/LICENSE.ecc +21 -0
  450. package/src/harness_context/skills/ecc/ito-training/SKILL.md +123 -0
  451. package/src/harness_context/skills/ecc/java-coding-standards/LICENSE.ecc +21 -0
  452. package/src/harness_context/skills/ecc/java-coding-standards/SKILL.md +384 -0
  453. package/src/harness_context/skills/ecc/jira-integration/LICENSE.ecc +21 -0
  454. package/src/harness_context/skills/ecc/jira-integration/SKILL.md +312 -0
  455. package/src/harness_context/skills/ecc/jpa-patterns/LICENSE.ecc +21 -0
  456. package/src/harness_context/skills/ecc/jpa-patterns/SKILL.md +152 -0
  457. package/src/harness_context/skills/ecc/knowledge-ops/LICENSE.ecc +21 -0
  458. package/src/harness_context/skills/ecc/knowledge-ops/SKILL.md +155 -0
  459. package/src/harness_context/skills/ecc/kotlin-coroutines-flows/LICENSE.ecc +21 -0
  460. package/src/harness_context/skills/ecc/kotlin-coroutines-flows/SKILL.md +285 -0
  461. package/src/harness_context/skills/ecc/kotlin-exposed-patterns/LICENSE.ecc +21 -0
  462. package/src/harness_context/skills/ecc/kotlin-exposed-patterns/SKILL.md +720 -0
  463. package/src/harness_context/skills/ecc/kotlin-ktor-patterns/LICENSE.ecc +21 -0
  464. package/src/harness_context/skills/ecc/kotlin-ktor-patterns/SKILL.md +690 -0
  465. package/src/harness_context/skills/ecc/kotlin-patterns/LICENSE.ecc +21 -0
  466. package/src/harness_context/skills/ecc/kotlin-patterns/SKILL.md +712 -0
  467. package/src/harness_context/skills/ecc/kotlin-testing/LICENSE.ecc +21 -0
  468. package/src/harness_context/skills/ecc/kotlin-testing/SKILL.md +825 -0
  469. package/src/harness_context/skills/ecc/kubernetes-patterns/LICENSE.ecc +21 -0
  470. package/src/harness_context/skills/ecc/kubernetes-patterns/SKILL.md +756 -0
  471. package/src/harness_context/skills/ecc/laravel-patterns/LICENSE.ecc +21 -0
  472. package/src/harness_context/skills/ecc/laravel-patterns/SKILL.md +416 -0
  473. package/src/harness_context/skills/ecc/laravel-plugin-discovery/LICENSE.ecc +21 -0
  474. package/src/harness_context/skills/ecc/laravel-plugin-discovery/SKILL.md +230 -0
  475. package/src/harness_context/skills/ecc/laravel-security/LICENSE.ecc +21 -0
  476. package/src/harness_context/skills/ecc/laravel-security/SKILL.md +948 -0
  477. package/src/harness_context/skills/ecc/laravel-tdd/LICENSE.ecc +21 -0
  478. package/src/harness_context/skills/ecc/laravel-tdd/SKILL.md +675 -0
  479. package/src/harness_context/skills/ecc/laravel-verification/LICENSE.ecc +21 -0
  480. package/src/harness_context/skills/ecc/laravel-verification/SKILL.md +180 -0
  481. package/src/harness_context/skills/ecc/latency-critical-systems/LICENSE.ecc +21 -0
  482. package/src/harness_context/skills/ecc/latency-critical-systems/SKILL.md +75 -0
  483. package/src/harness_context/skills/ecc/lead-intelligence/LICENSE.ecc +21 -0
  484. package/src/harness_context/skills/ecc/lead-intelligence/SKILL.md +333 -0
  485. package/src/harness_context/skills/ecc/lead-intelligence/agents/enrichment-agent.md +85 -0
  486. package/src/harness_context/skills/ecc/lead-intelligence/agents/mutual-mapper.md +75 -0
  487. package/src/harness_context/skills/ecc/lead-intelligence/agents/outreach-drafter.md +98 -0
  488. package/src/harness_context/skills/ecc/lead-intelligence/agents/signal-scorer.md +60 -0
  489. package/src/harness_context/skills/ecc/liquid-glass-design/LICENSE.ecc +21 -0
  490. package/src/harness_context/skills/ecc/liquid-glass-design/SKILL.md +279 -0
  491. package/src/harness_context/skills/ecc/living-docs-governance/LICENSE.ecc +21 -0
  492. package/src/harness_context/skills/ecc/living-docs-governance/SKILL.md +137 -0
  493. package/src/harness_context/skills/ecc/llm-trading-agent-security/LICENSE.ecc +21 -0
  494. package/src/harness_context/skills/ecc/llm-trading-agent-security/SKILL.md +147 -0
  495. package/src/harness_context/skills/ecc/logistics-exception-management/LICENSE.ecc +21 -0
  496. package/src/harness_context/skills/ecc/logistics-exception-management/SKILL.md +222 -0
  497. package/src/harness_context/skills/ecc/loop-design-check/LICENSE.ecc +21 -0
  498. package/src/harness_context/skills/ecc/loop-design-check/SKILL.md +143 -0
  499. package/src/harness_context/skills/ecc/mailtrap-email-integration/LICENSE.ecc +21 -0
  500. package/src/harness_context/skills/ecc/mailtrap-email-integration/SKILL.md +77 -0
  501. package/src/harness_context/skills/ecc/make-interfaces-feel-better/LICENSE.ecc +21 -0
  502. package/src/harness_context/skills/ecc/make-interfaces-feel-better/SKILL.md +152 -0
  503. package/src/harness_context/skills/ecc/manim-video/LICENSE.ecc +21 -0
  504. package/src/harness_context/skills/ecc/manim-video/SKILL.md +90 -0
  505. package/src/harness_context/skills/ecc/manim-video/assets/network_graph_scene.py +52 -0
  506. package/src/harness_context/skills/ecc/market-research/LICENSE.ecc +21 -0
  507. package/src/harness_context/skills/ecc/market-research/SKILL.md +87 -0
  508. package/src/harness_context/skills/ecc/marketing-campaign/LICENSE.ecc +21 -0
  509. package/src/harness_context/skills/ecc/marketing-campaign/SKILL.md +114 -0
  510. package/src/harness_context/skills/ecc/mcp-server-patterns/LICENSE.ecc +21 -0
  511. package/src/harness_context/skills/ecc/mcp-server-patterns/SKILL.md +70 -0
  512. package/src/harness_context/skills/ecc/messages-ops/LICENSE.ecc +21 -0
  513. package/src/harness_context/skills/ecc/messages-ops/SKILL.md +105 -0
  514. package/src/harness_context/skills/ecc/ml-adoption-playbook/LICENSE.ecc +21 -0
  515. package/src/harness_context/skills/ecc/ml-adoption-playbook/SKILL.md +57 -0
  516. package/src/harness_context/skills/ecc/mle-workflow/LICENSE.ecc +21 -0
  517. package/src/harness_context/skills/ecc/mle-workflow/SKILL.md +348 -0
  518. package/src/harness_context/skills/ecc/motion-advanced/LICENSE.ecc +21 -0
  519. package/src/harness_context/skills/ecc/motion-advanced/SKILL.md +597 -0
  520. package/src/harness_context/skills/ecc/motion-foundations/LICENSE.ecc +21 -0
  521. package/src/harness_context/skills/ecc/motion-foundations/SKILL.md +300 -0
  522. package/src/harness_context/skills/ecc/motion-patterns/LICENSE.ecc +21 -0
  523. package/src/harness_context/skills/ecc/motion-patterns/SKILL.md +435 -0
  524. package/src/harness_context/skills/ecc/motion-ui/LICENSE.ecc +21 -0
  525. package/src/harness_context/skills/ecc/motion-ui/SKILL.md +576 -0
  526. package/src/harness_context/skills/ecc/mysql-patterns/LICENSE.ecc +21 -0
  527. package/src/harness_context/skills/ecc/mysql-patterns/SKILL.md +413 -0
  528. package/src/harness_context/skills/ecc/nanoclaw-repl/LICENSE.ecc +21 -0
  529. package/src/harness_context/skills/ecc/nanoclaw-repl/SKILL.md +34 -0
  530. package/src/harness_context/skills/ecc/nasiko-control-plane/LICENSE.ecc +21 -0
  531. package/src/harness_context/skills/ecc/nasiko-control-plane/SKILL.md +49 -0
  532. package/src/harness_context/skills/ecc/nasiko-control-plane/agents/openai.yaml +4 -0
  533. package/src/harness_context/skills/ecc/nestjs-patterns/LICENSE.ecc +21 -0
  534. package/src/harness_context/skills/ecc/nestjs-patterns/SKILL.md +231 -0
  535. package/src/harness_context/skills/ecc/netmiko-ssh-automation/LICENSE.ecc +21 -0
  536. package/src/harness_context/skills/ecc/netmiko-ssh-automation/SKILL.md +174 -0
  537. package/src/harness_context/skills/ecc/network-bgp-diagnostics/LICENSE.ecc +21 -0
  538. package/src/harness_context/skills/ecc/network-bgp-diagnostics/SKILL.md +168 -0
  539. package/src/harness_context/skills/ecc/network-config-validation/LICENSE.ecc +21 -0
  540. package/src/harness_context/skills/ecc/network-config-validation/SKILL.md +211 -0
  541. package/src/harness_context/skills/ecc/network-interface-health/LICENSE.ecc +21 -0
  542. package/src/harness_context/skills/ecc/network-interface-health/SKILL.md +153 -0
  543. package/src/harness_context/skills/ecc/nextjs-turbopack/LICENSE.ecc +21 -0
  544. package/src/harness_context/skills/ecc/nextjs-turbopack/SKILL.md +58 -0
  545. package/src/harness_context/skills/ecc/nodejs-keccak256/LICENSE.ecc +21 -0
  546. package/src/harness_context/skills/ecc/nodejs-keccak256/SKILL.md +103 -0
  547. package/src/harness_context/skills/ecc/nutrient-document-processing/LICENSE.ecc +21 -0
  548. package/src/harness_context/skills/ecc/nutrient-document-processing/SKILL.md +168 -0
  549. package/src/harness_context/skills/ecc/nuxt4-patterns/LICENSE.ecc +21 -0
  550. package/src/harness_context/skills/ecc/nuxt4-patterns/SKILL.md +101 -0
  551. package/src/harness_context/skills/ecc/openclaw-persona-forge/LICENSE.ecc +21 -0
  552. package/src/harness_context/skills/ecc/openclaw-persona-forge/SKILL.md +289 -0
  553. package/src/harness_context/skills/ecc/openclaw-persona-forge/gacha.py +224 -0
  554. package/src/harness_context/skills/ecc/openclaw-persona-forge/gacha.sh +5 -0
  555. package/src/harness_context/skills/ecc/openclaw-persona-forge/references/avatar-style.md +124 -0
  556. package/src/harness_context/skills/ecc/openclaw-persona-forge/references/boundary-rules.md +53 -0
  557. package/src/harness_context/skills/ecc/openclaw-persona-forge/references/error-handling.md +53 -0
  558. package/src/harness_context/skills/ecc/openclaw-persona-forge/references/identity-tension.md +48 -0
  559. package/src/harness_context/skills/ecc/openclaw-persona-forge/references/naming-system.md +39 -0
  560. package/src/harness_context/skills/ecc/openclaw-persona-forge/references/output-template.md +166 -0
  561. package/src/harness_context/skills/ecc/opensource-pipeline/LICENSE.ecc +21 -0
  562. package/src/harness_context/skills/ecc/opensource-pipeline/SKILL.md +256 -0
  563. package/src/harness_context/skills/ecc/orch-add-feature/LICENSE.ecc +21 -0
  564. package/src/harness_context/skills/ecc/orch-add-feature/SKILL.md +45 -0
  565. package/src/harness_context/skills/ecc/orch-build-mvp/LICENSE.ecc +21 -0
  566. package/src/harness_context/skills/ecc/orch-build-mvp/SKILL.md +49 -0
  567. package/src/harness_context/skills/ecc/orch-change-feature/LICENSE.ecc +21 -0
  568. package/src/harness_context/skills/ecc/orch-change-feature/SKILL.md +43 -0
  569. package/src/harness_context/skills/ecc/orch-fix-defect/LICENSE.ecc +21 -0
  570. package/src/harness_context/skills/ecc/orch-fix-defect/SKILL.md +43 -0
  571. package/src/harness_context/skills/ecc/orch-pipeline/LICENSE.ecc +21 -0
  572. package/src/harness_context/skills/ecc/orch-pipeline/SKILL.md +121 -0
  573. package/src/harness_context/skills/ecc/orch-refine-code/LICENSE.ecc +21 -0
  574. package/src/harness_context/skills/ecc/orch-refine-code/SKILL.md +44 -0
  575. package/src/harness_context/skills/ecc/parallel-execution-optimizer/LICENSE.ecc +21 -0
  576. package/src/harness_context/skills/ecc/parallel-execution-optimizer/SKILL.md +74 -0
  577. package/src/harness_context/skills/ecc/perl-patterns/LICENSE.ecc +21 -0
  578. package/src/harness_context/skills/ecc/perl-patterns/SKILL.md +505 -0
  579. package/src/harness_context/skills/ecc/perl-security/LICENSE.ecc +21 -0
  580. package/src/harness_context/skills/ecc/perl-security/SKILL.md +504 -0
  581. package/src/harness_context/skills/ecc/perl-testing/LICENSE.ecc +21 -0
  582. package/src/harness_context/skills/ecc/perl-testing/SKILL.md +476 -0
  583. package/src/harness_context/skills/ecc/plan-canvas/LICENSE.ecc +21 -0
  584. package/src/harness_context/skills/ecc/plan-canvas/SKILL.md +196 -0
  585. package/src/harness_context/skills/ecc/plan-orchestrate/LICENSE.ecc +21 -0
  586. package/src/harness_context/skills/ecc/plan-orchestrate/SKILL.md +263 -0
  587. package/src/harness_context/skills/ecc/plankton-code-quality/LICENSE.ecc +21 -0
  588. package/src/harness_context/skills/ecc/plankton-code-quality/SKILL.md +237 -0
  589. package/src/harness_context/skills/ecc/postgres-patterns/LICENSE.ecc +21 -0
  590. package/src/harness_context/skills/ecc/postgres-patterns/SKILL.md +148 -0
  591. package/src/harness_context/skills/ecc/prediction-market-oracle-research/LICENSE.ecc +21 -0
  592. package/src/harness_context/skills/ecc/prediction-market-oracle-research/SKILL.md +64 -0
  593. package/src/harness_context/skills/ecc/prediction-market-risk-review/LICENSE.ecc +21 -0
  594. package/src/harness_context/skills/ecc/prediction-market-risk-review/SKILL.md +61 -0
  595. package/src/harness_context/skills/ecc/prisma-patterns/LICENSE.ecc +21 -0
  596. package/src/harness_context/skills/ecc/prisma-patterns/SKILL.md +401 -0
  597. package/src/harness_context/skills/ecc/product-capability/LICENSE.ecc +21 -0
  598. package/src/harness_context/skills/ecc/product-capability/SKILL.md +142 -0
  599. package/src/harness_context/skills/ecc/product-lens/LICENSE.ecc +21 -0
  600. package/src/harness_context/skills/ecc/product-lens/SKILL.md +93 -0
  601. package/src/harness_context/skills/ecc/production-audit/LICENSE.ecc +21 -0
  602. package/src/harness_context/skills/ecc/production-audit/SKILL.md +207 -0
  603. package/src/harness_context/skills/ecc/production-scheduling/LICENSE.ecc +21 -0
  604. package/src/harness_context/skills/ecc/production-scheduling/SKILL.md +238 -0
  605. package/src/harness_context/skills/ecc/project-flow-ops/LICENSE.ecc +21 -0
  606. package/src/harness_context/skills/ecc/project-flow-ops/SKILL.md +112 -0
  607. package/src/harness_context/skills/ecc/prompt-optimizer/LICENSE.ecc +21 -0
  608. package/src/harness_context/skills/ecc/prompt-optimizer/SKILL.md +398 -0
  609. package/src/harness_context/skills/ecc/python-patterns/LICENSE.ecc +21 -0
  610. package/src/harness_context/skills/ecc/python-patterns/SKILL.md +751 -0
  611. package/src/harness_context/skills/ecc/python-testing/LICENSE.ecc +21 -0
  612. package/src/harness_context/skills/ecc/python-testing/SKILL.md +817 -0
  613. package/src/harness_context/skills/ecc/pytorch-patterns/LICENSE.ecc +21 -0
  614. package/src/harness_context/skills/ecc/pytorch-patterns/SKILL.md +397 -0
  615. package/src/harness_context/skills/ecc/quality-nonconformance/LICENSE.ecc +21 -0
  616. package/src/harness_context/skills/ecc/quality-nonconformance/SKILL.md +260 -0
  617. package/src/harness_context/skills/ecc/quarkus-patterns/LICENSE.ecc +21 -0
  618. package/src/harness_context/skills/ecc/quarkus-patterns/SKILL.md +723 -0
  619. package/src/harness_context/skills/ecc/quarkus-security/LICENSE.ecc +21 -0
  620. package/src/harness_context/skills/ecc/quarkus-security/SKILL.md +468 -0
  621. package/src/harness_context/skills/ecc/quarkus-tdd/LICENSE.ecc +21 -0
  622. package/src/harness_context/skills/ecc/quarkus-tdd/SKILL.md +812 -0
  623. package/src/harness_context/skills/ecc/quarkus-verification/LICENSE.ecc +21 -0
  624. package/src/harness_context/skills/ecc/quarkus-verification/SKILL.md +481 -0
  625. package/src/harness_context/skills/ecc/ralphinho-rfc-pipeline/LICENSE.ecc +21 -0
  626. package/src/harness_context/skills/ecc/ralphinho-rfc-pipeline/SKILL.md +68 -0
  627. package/src/harness_context/skills/ecc/react-native-patterns/LICENSE.ecc +21 -0
  628. package/src/harness_context/skills/ecc/react-native-patterns/SKILL.md +326 -0
  629. package/src/harness_context/skills/ecc/react-patterns/LICENSE.ecc +21 -0
  630. package/src/harness_context/skills/ecc/react-patterns/SKILL.md +342 -0
  631. package/src/harness_context/skills/ecc/react-performance/LICENSE.ecc +21 -0
  632. package/src/harness_context/skills/ecc/react-performance/SKILL.md +575 -0
  633. package/src/harness_context/skills/ecc/react-testing/LICENSE.ecc +21 -0
  634. package/src/harness_context/skills/ecc/react-testing/SKILL.md +424 -0
  635. package/src/harness_context/skills/ecc/recsys-pipeline-architect/LICENSE.ecc +21 -0
  636. package/src/harness_context/skills/ecc/recsys-pipeline-architect/SKILL.md +115 -0
  637. package/src/harness_context/skills/ecc/recursive-decision-ledger/LICENSE.ecc +21 -0
  638. package/src/harness_context/skills/ecc/recursive-decision-ledger/SKILL.md +81 -0
  639. package/src/harness_context/skills/ecc/redis-patterns/LICENSE.ecc +21 -0
  640. package/src/harness_context/skills/ecc/redis-patterns/SKILL.md +404 -0
  641. package/src/harness_context/skills/ecc/regex-vs-llm-structured-text/LICENSE.ecc +21 -0
  642. package/src/harness_context/skills/ecc/regex-vs-llm-structured-text/SKILL.md +221 -0
  643. package/src/harness_context/skills/ecc/remotion-video-creation/LICENSE.ecc +21 -0
  644. package/src/harness_context/skills/ecc/remotion-video-creation/SKILL.md +43 -0
  645. package/src/harness_context/skills/ecc/remotion-video-creation/rules/3d.md +86 -0
  646. package/src/harness_context/skills/ecc/remotion-video-creation/rules/animations.md +29 -0
  647. package/src/harness_context/skills/ecc/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
  648. package/src/harness_context/skills/ecc/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
  649. package/src/harness_context/skills/ecc/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
  650. package/src/harness_context/skills/ecc/remotion-video-creation/rules/assets.md +78 -0
  651. package/src/harness_context/skills/ecc/remotion-video-creation/rules/audio.md +172 -0
  652. package/src/harness_context/skills/ecc/remotion-video-creation/rules/calculate-metadata.md +104 -0
  653. package/src/harness_context/skills/ecc/remotion-video-creation/rules/can-decode.md +75 -0
  654. package/src/harness_context/skills/ecc/remotion-video-creation/rules/charts.md +58 -0
  655. package/src/harness_context/skills/ecc/remotion-video-creation/rules/compositions.md +146 -0
  656. package/src/harness_context/skills/ecc/remotion-video-creation/rules/display-captions.md +126 -0
  657. package/src/harness_context/skills/ecc/remotion-video-creation/rules/extract-frames.md +229 -0
  658. package/src/harness_context/skills/ecc/remotion-video-creation/rules/fonts.md +152 -0
  659. package/src/harness_context/skills/ecc/remotion-video-creation/rules/get-audio-duration.md +58 -0
  660. package/src/harness_context/skills/ecc/remotion-video-creation/rules/get-video-dimensions.md +68 -0
  661. package/src/harness_context/skills/ecc/remotion-video-creation/rules/get-video-duration.md +58 -0
  662. package/src/harness_context/skills/ecc/remotion-video-creation/rules/gifs.md +138 -0
  663. package/src/harness_context/skills/ecc/remotion-video-creation/rules/images.md +130 -0
  664. package/src/harness_context/skills/ecc/remotion-video-creation/rules/import-srt-captions.md +67 -0
  665. package/src/harness_context/skills/ecc/remotion-video-creation/rules/lottie.md +67 -0
  666. package/src/harness_context/skills/ecc/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
  667. package/src/harness_context/skills/ecc/remotion-video-creation/rules/measuring-text.md +143 -0
  668. package/src/harness_context/skills/ecc/remotion-video-creation/rules/sequencing.md +106 -0
  669. package/src/harness_context/skills/ecc/remotion-video-creation/rules/tailwind.md +11 -0
  670. package/src/harness_context/skills/ecc/remotion-video-creation/rules/text-animations.md +20 -0
  671. package/src/harness_context/skills/ecc/remotion-video-creation/rules/timing.md +179 -0
  672. package/src/harness_context/skills/ecc/remotion-video-creation/rules/transcribe-captions.md +19 -0
  673. package/src/harness_context/skills/ecc/remotion-video-creation/rules/transitions.md +122 -0
  674. package/src/harness_context/skills/ecc/remotion-video-creation/rules/trimming.md +52 -0
  675. package/src/harness_context/skills/ecc/remotion-video-creation/rules/videos.md +171 -0
  676. package/src/harness_context/skills/ecc/repo-scan/LICENSE.ecc +21 -0
  677. package/src/harness_context/skills/ecc/repo-scan/SKILL.md +170 -0
  678. package/src/harness_context/skills/ecc/research-ops/LICENSE.ecc +21 -0
  679. package/src/harness_context/skills/ecc/research-ops/SKILL.md +113 -0
  680. package/src/harness_context/skills/ecc/returns-reverse-logistics/LICENSE.ecc +21 -0
  681. package/src/harness_context/skills/ecc/returns-reverse-logistics/SKILL.md +240 -0
  682. package/src/harness_context/skills/ecc/rules-distill/LICENSE.ecc +21 -0
  683. package/src/harness_context/skills/ecc/rules-distill/SKILL.md +265 -0
  684. package/src/harness_context/skills/ecc/rules-distill/scripts/scan-rules.sh +58 -0
  685. package/src/harness_context/skills/ecc/rules-distill/scripts/scan-skills.sh +129 -0
  686. package/src/harness_context/skills/ecc/rust-patterns/LICENSE.ecc +21 -0
  687. package/src/harness_context/skills/ecc/rust-patterns/SKILL.md +500 -0
  688. package/src/harness_context/skills/ecc/rust-testing/LICENSE.ecc +21 -0
  689. package/src/harness_context/skills/ecc/rust-testing/SKILL.md +501 -0
  690. package/src/harness_context/skills/ecc/safety-guard/LICENSE.ecc +21 -0
  691. package/src/harness_context/skills/ecc/safety-guard/SKILL.md +76 -0
  692. package/src/harness_context/skills/ecc/santa-method/LICENSE.ecc +21 -0
  693. package/src/harness_context/skills/ecc/santa-method/SKILL.md +307 -0
  694. package/src/harness_context/skills/ecc/scientific-db-pubmed-database/LICENSE.ecc +21 -0
  695. package/src/harness_context/skills/ecc/scientific-db-pubmed-database/SKILL.md +176 -0
  696. package/src/harness_context/skills/ecc/scientific-db-uspto-database/LICENSE.ecc +21 -0
  697. package/src/harness_context/skills/ecc/scientific-db-uspto-database/SKILL.md +178 -0
  698. package/src/harness_context/skills/ecc/scientific-pkg-gget/LICENSE.ecc +21 -0
  699. package/src/harness_context/skills/ecc/scientific-pkg-gget/SKILL.md +167 -0
  700. package/src/harness_context/skills/ecc/scientific-thinking-literature-review/LICENSE.ecc +21 -0
  701. package/src/harness_context/skills/ecc/scientific-thinking-literature-review/SKILL.md +193 -0
  702. package/src/harness_context/skills/ecc/scientific-thinking-scholar-evaluation/LICENSE.ecc +21 -0
  703. package/src/harness_context/skills/ecc/scientific-thinking-scholar-evaluation/SKILL.md +161 -0
  704. package/src/harness_context/skills/ecc/search-first/LICENSE.ecc +21 -0
  705. package/src/harness_context/skills/ecc/search-first/SKILL.md +183 -0
  706. package/src/harness_context/skills/ecc/security-bounty-hunter/LICENSE.ecc +21 -0
  707. package/src/harness_context/skills/ecc/security-bounty-hunter/SKILL.md +100 -0
  708. package/src/harness_context/skills/ecc/security-review/LICENSE.ecc +21 -0
  709. package/src/harness_context/skills/ecc/security-review/SKILL.md +504 -0
  710. package/src/harness_context/skills/ecc/security-review/cloud-infrastructure-security.md +361 -0
  711. package/src/harness_context/skills/ecc/security-scan/LICENSE.ecc +21 -0
  712. package/src/harness_context/skills/ecc/security-scan/SKILL.md +166 -0
  713. package/src/harness_context/skills/ecc/seo/LICENSE.ecc +21 -0
  714. package/src/harness_context/skills/ecc/seo/SKILL.md +155 -0
  715. package/src/harness_context/skills/ecc/skill-comply/LICENSE.ecc +21 -0
  716. package/src/harness_context/skills/ecc/skill-comply/SKILL.md +59 -0
  717. package/src/harness_context/skills/ecc/skill-comply/fixtures/compliant_trace.jsonl +5 -0
  718. package/src/harness_context/skills/ecc/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
  719. package/src/harness_context/skills/ecc/skill-comply/fixtures/tdd_spec.yaml +44 -0
  720. package/src/harness_context/skills/ecc/skill-comply/prompts/classifier.md +24 -0
  721. package/src/harness_context/skills/ecc/skill-comply/prompts/scenario_generator.md +62 -0
  722. package/src/harness_context/skills/ecc/skill-comply/prompts/spec_generator.md +42 -0
  723. package/src/harness_context/skills/ecc/skill-comply/pyproject.toml +16 -0
  724. package/src/harness_context/skills/ecc/skill-comply/scripts/__init__.py +0 -0
  725. package/src/harness_context/skills/ecc/skill-comply/scripts/classifier.py +85 -0
  726. package/src/harness_context/skills/ecc/skill-comply/scripts/grader.py +124 -0
  727. package/src/harness_context/skills/ecc/skill-comply/scripts/parser.py +107 -0
  728. package/src/harness_context/skills/ecc/skill-comply/scripts/report.py +170 -0
  729. package/src/harness_context/skills/ecc/skill-comply/scripts/run.py +127 -0
  730. package/src/harness_context/skills/ecc/skill-comply/scripts/runner.py +245 -0
  731. package/src/harness_context/skills/ecc/skill-comply/scripts/scenario_generator.py +70 -0
  732. package/src/harness_context/skills/ecc/skill-comply/scripts/spec_generator.py +72 -0
  733. package/src/harness_context/skills/ecc/skill-comply/scripts/utils.py +13 -0
  734. package/src/harness_context/skills/ecc/skill-comply/tests/test_grader.py +197 -0
  735. package/src/harness_context/skills/ecc/skill-comply/tests/test_parser.py +90 -0
  736. package/src/harness_context/skills/ecc/skill-comply/tests/test_runner.py +316 -0
  737. package/src/harness_context/skills/ecc/skill-scout/LICENSE.ecc +21 -0
  738. package/src/harness_context/skills/ecc/skill-scout/SKILL.md +141 -0
  739. package/src/harness_context/skills/ecc/skill-stocktake/LICENSE.ecc +21 -0
  740. package/src/harness_context/skills/ecc/skill-stocktake/SKILL.md +195 -0
  741. package/src/harness_context/skills/ecc/skill-stocktake/scripts/quick-diff.sh +118 -0
  742. package/src/harness_context/skills/ecc/skill-stocktake/scripts/save-results.sh +56 -0
  743. package/src/harness_context/skills/ecc/skill-stocktake/scripts/scan.sh +211 -0
  744. package/src/harness_context/skills/ecc/social-graph-ranker/LICENSE.ecc +21 -0
  745. package/src/harness_context/skills/ecc/social-graph-ranker/SKILL.md +155 -0
  746. package/src/harness_context/skills/ecc/social-publisher/LICENSE.ecc +21 -0
  747. package/src/harness_context/skills/ecc/social-publisher/SKILL.md +139 -0
  748. package/src/harness_context/skills/ecc/springboot-patterns/LICENSE.ecc +21 -0
  749. package/src/harness_context/skills/ecc/springboot-patterns/SKILL.md +315 -0
  750. package/src/harness_context/skills/ecc/springboot-security/LICENSE.ecc +21 -0
  751. package/src/harness_context/skills/ecc/springboot-security/SKILL.md +273 -0
  752. package/src/harness_context/skills/ecc/springboot-tdd/LICENSE.ecc +21 -0
  753. package/src/harness_context/skills/ecc/springboot-tdd/SKILL.md +159 -0
  754. package/src/harness_context/skills/ecc/springboot-verification/LICENSE.ecc +21 -0
  755. package/src/harness_context/skills/ecc/springboot-verification/SKILL.md +232 -0
  756. package/src/harness_context/skills/ecc/strategic-compact/LICENSE.ecc +21 -0
  757. package/src/harness_context/skills/ecc/strategic-compact/SKILL.md +156 -0
  758. package/src/harness_context/skills/ecc/swift-actor-persistence/LICENSE.ecc +21 -0
  759. package/src/harness_context/skills/ecc/swift-actor-persistence/SKILL.md +144 -0
  760. package/src/harness_context/skills/ecc/swift-concurrency-6-2/LICENSE.ecc +21 -0
  761. package/src/harness_context/skills/ecc/swift-concurrency-6-2/SKILL.md +216 -0
  762. package/src/harness_context/skills/ecc/swift-protocol-di-testing/LICENSE.ecc +21 -0
  763. package/src/harness_context/skills/ecc/swift-protocol-di-testing/SKILL.md +191 -0
  764. package/src/harness_context/skills/ecc/swiftui-patterns/LICENSE.ecc +21 -0
  765. package/src/harness_context/skills/ecc/swiftui-patterns/SKILL.md +259 -0
  766. package/src/harness_context/skills/ecc/taste/LICENSE.ecc +21 -0
  767. package/src/harness_context/skills/ecc/taste/SKILL.md +264 -0
  768. package/src/harness_context/skills/ecc/taste/references/genre-taxonomy.md +87 -0
  769. package/src/harness_context/skills/ecc/tasteforge-video/LICENSE.ecc +21 -0
  770. package/src/harness_context/skills/ecc/tasteforge-video/SKILL.md +192 -0
  771. package/src/harness_context/skills/ecc/tdd-workflow/LICENSE.ecc +21 -0
  772. package/src/harness_context/skills/ecc/tdd-workflow/SKILL.md +583 -0
  773. package/src/harness_context/skills/ecc/team-agent-orchestration/LICENSE.ecc +21 -0
  774. package/src/harness_context/skills/ecc/team-agent-orchestration/SKILL.md +111 -0
  775. package/src/harness_context/skills/ecc/team-builder/LICENSE.ecc +21 -0
  776. package/src/harness_context/skills/ecc/team-builder/SKILL.md +169 -0
  777. package/src/harness_context/skills/ecc/terminal-opener/LICENSE.ecc +21 -0
  778. package/src/harness_context/skills/ecc/terminal-opener/SKILL.md +55 -0
  779. package/src/harness_context/skills/ecc/terminal-opener/agents/openai.yaml +4 -0
  780. package/src/harness_context/skills/ecc/terminal-opener/scripts/open-terminal.js +396 -0
  781. package/src/harness_context/skills/ecc/terminal-ops/LICENSE.ecc +21 -0
  782. package/src/harness_context/skills/ecc/terminal-ops/SKILL.md +110 -0
  783. package/src/harness_context/skills/ecc/tinystruct-patterns/LICENSE.ecc +21 -0
  784. package/src/harness_context/skills/ecc/tinystruct-patterns/SKILL.md +279 -0
  785. package/src/harness_context/skills/ecc/tinystruct-patterns/references/architecture.md +90 -0
  786. package/src/harness_context/skills/ecc/tinystruct-patterns/references/data-handling.md +60 -0
  787. package/src/harness_context/skills/ecc/tinystruct-patterns/references/database.md +99 -0
  788. package/src/harness_context/skills/ecc/tinystruct-patterns/references/routing.md +64 -0
  789. package/src/harness_context/skills/ecc/tinystruct-patterns/references/system-usage.md +97 -0
  790. package/src/harness_context/skills/ecc/tinystruct-patterns/references/testing.md +72 -0
  791. package/src/harness_context/skills/ecc/token-budget-advisor/LICENSE.ecc +21 -0
  792. package/src/harness_context/skills/ecc/token-budget-advisor/SKILL.md +134 -0
  793. package/src/harness_context/skills/ecc/ui-demo/LICENSE.ecc +21 -0
  794. package/src/harness_context/skills/ecc/ui-demo/SKILL.md +466 -0
  795. package/src/harness_context/skills/ecc/ui-to-vue/LICENSE.ecc +21 -0
  796. package/src/harness_context/skills/ecc/ui-to-vue/SKILL.md +135 -0
  797. package/src/harness_context/skills/ecc/uncloud/LICENSE.ecc +21 -0
  798. package/src/harness_context/skills/ecc/uncloud/SKILL.md +344 -0
  799. package/src/harness_context/skills/ecc/unified-memory/LICENSE.ecc +21 -0
  800. package/src/harness_context/skills/ecc/unified-memory/SKILL.md +170 -0
  801. package/src/harness_context/skills/ecc/unified-notifications-ops/LICENSE.ecc +21 -0
  802. package/src/harness_context/skills/ecc/unified-notifications-ops/SKILL.md +188 -0
  803. package/src/harness_context/skills/ecc/verification-loop/LICENSE.ecc +21 -0
  804. package/src/harness_context/skills/ecc/verification-loop/SKILL.md +129 -0
  805. package/src/harness_context/skills/ecc/video-editing/LICENSE.ecc +21 -0
  806. package/src/harness_context/skills/ecc/video-editing/SKILL.md +311 -0
  807. package/src/harness_context/skills/ecc/videodb/LICENSE.ecc +21 -0
  808. package/src/harness_context/skills/ecc/videodb/SKILL.md +375 -0
  809. package/src/harness_context/skills/ecc/videodb/reference/api-reference.md +550 -0
  810. package/src/harness_context/skills/ecc/videodb/reference/capture-reference.md +407 -0
  811. package/src/harness_context/skills/ecc/videodb/reference/capture.md +101 -0
  812. package/src/harness_context/skills/ecc/videodb/reference/editor.md +443 -0
  813. package/src/harness_context/skills/ecc/videodb/reference/generative.md +331 -0
  814. package/src/harness_context/skills/ecc/videodb/reference/rtstream-reference.md +564 -0
  815. package/src/harness_context/skills/ecc/videodb/reference/rtstream.md +65 -0
  816. package/src/harness_context/skills/ecc/videodb/reference/search.md +230 -0
  817. package/src/harness_context/skills/ecc/videodb/reference/streaming.md +406 -0
  818. package/src/harness_context/skills/ecc/videodb/reference/use-cases.md +118 -0
  819. package/src/harness_context/skills/ecc/videodb/scripts/ws_listener.py +282 -0
  820. package/src/harness_context/skills/ecc/visa-doc-translate/LICENSE.ecc +21 -0
  821. package/src/harness_context/skills/ecc/visa-doc-translate/README.md +86 -0
  822. package/src/harness_context/skills/ecc/visa-doc-translate/SKILL.md +117 -0
  823. package/src/harness_context/skills/ecc/vite-patterns/LICENSE.ecc +21 -0
  824. package/src/harness_context/skills/ecc/vite-patterns/SKILL.md +450 -0
  825. package/src/harness_context/skills/ecc/vue-patterns/LICENSE.ecc +21 -0
  826. package/src/harness_context/skills/ecc/vue-patterns/SKILL.md +471 -0
  827. package/src/harness_context/skills/ecc/windows-desktop-e2e/LICENSE.ecc +21 -0
  828. package/src/harness_context/skills/ecc/windows-desktop-e2e/SKILL.md +888 -0
  829. package/src/harness_context/skills/ecc/workspace-surface-audit/LICENSE.ecc +21 -0
  830. package/src/harness_context/skills/ecc/workspace-surface-audit/SKILL.md +126 -0
  831. package/src/harness_context/skills/ecc/x-api/LICENSE.ecc +21 -0
  832. package/src/harness_context/skills/ecc/x-api/SKILL.md +244 -0
  833. package/src/harness_context/skills/ecc_catalog.json +2233 -0
  834. package/src/harness_context/skills/router.py +400 -0
  835. package/src/harness_context/workspace/roots.py +1 -1
@@ -0,0 +1,273 @@
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. Use when reviewing Spring Security authn/authz, validation, CSRF, secrets, headers, or rate limiting.
4
+ metadata:
5
+ origin: ECC
6
+ ---
7
+
8
+ # Spring Boot Security Review
9
+
10
+ Use when adding auth, handling input, creating endpoints, or dealing with secrets.
11
+
12
+ ## When to Activate
13
+
14
+ - Adding authentication (JWT, OAuth2, session-based)
15
+ - Implementing authorization (@PreAuthorize, role-based access)
16
+ - Validating user input (Bean Validation, custom validators)
17
+ - Configuring CORS, CSRF, or security headers
18
+ - Managing secrets (Vault, environment variables)
19
+ - Adding rate limiting or brute-force protection
20
+ - Scanning dependencies for CVEs
21
+
22
+ ## Authentication
23
+
24
+ - Prefer stateless JWT or opaque tokens with revocation list
25
+ - Use `httpOnly`, `Secure`, `SameSite=Strict` cookies for sessions
26
+ - Validate tokens with `OncePerRequestFilter` or resource server
27
+
28
+ ```java
29
+ @Component
30
+ public class JwtAuthFilter extends OncePerRequestFilter {
31
+ private final JwtService jwtService;
32
+
33
+ public JwtAuthFilter(JwtService jwtService) {
34
+ this.jwtService = jwtService;
35
+ }
36
+
37
+ @Override
38
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
39
+ FilterChain chain) throws ServletException, IOException {
40
+ String header = request.getHeader(HttpHeaders.AUTHORIZATION);
41
+ if (header != null && header.startsWith("Bearer ")) {
42
+ String token = header.substring(7);
43
+ Authentication auth = jwtService.authenticate(token);
44
+ SecurityContextHolder.getContext().setAuthentication(auth);
45
+ }
46
+ chain.doFilter(request, response);
47
+ }
48
+ }
49
+ ```
50
+
51
+ ## Authorization
52
+
53
+ - Enable method security: `@EnableMethodSecurity`
54
+ - Use `@PreAuthorize("hasRole('ADMIN')")` or `@PreAuthorize("@authz.canEdit(#id)")`
55
+ - Deny by default; expose only required scopes
56
+
57
+ ```java
58
+ @RestController
59
+ @RequestMapping("/api/admin")
60
+ public class AdminController {
61
+
62
+ @PreAuthorize("hasRole('ADMIN')")
63
+ @GetMapping("/users")
64
+ public List<UserDto> listUsers() {
65
+ return userService.findAll();
66
+ }
67
+
68
+ @PreAuthorize("@authz.isOwner(#id, authentication)")
69
+ @DeleteMapping("/users/{id}")
70
+ public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
71
+ userService.delete(id);
72
+ return ResponseEntity.noContent().build();
73
+ }
74
+ }
75
+ ```
76
+
77
+ ## Input Validation
78
+
79
+ - Use Bean Validation with `@Valid` on controllers
80
+ - Apply constraints on DTOs: `@NotBlank`, `@Email`, `@Size`, custom validators
81
+ - Sanitize any HTML with a whitelist before rendering
82
+
83
+ ```java
84
+ // BAD: No validation
85
+ @PostMapping("/users")
86
+ public User createUser(@RequestBody UserDto dto) {
87
+ return userService.create(dto);
88
+ }
89
+
90
+ // GOOD: Validated DTO
91
+ public record CreateUserDto(
92
+ @NotBlank @Size(max = 100) String name,
93
+ @NotBlank @Email String email,
94
+ @NotNull @Min(0) @Max(150) Integer age
95
+ ) {}
96
+
97
+ @PostMapping("/users")
98
+ public ResponseEntity<UserDto> createUser(@Valid @RequestBody CreateUserDto dto) {
99
+ return ResponseEntity.status(HttpStatus.CREATED)
100
+ .body(userService.create(dto));
101
+ }
102
+ ```
103
+
104
+ ## SQL Injection Prevention
105
+
106
+ - Use Spring Data repositories or parameterized queries
107
+ - For native queries, use `:param` bindings; never concatenate strings
108
+
109
+ ```java
110
+ // BAD: String concatenation in native query
111
+ @Query(value = "SELECT * FROM users WHERE name = '" + name + "'", nativeQuery = true)
112
+
113
+ // GOOD: Parameterized native query
114
+ @Query(value = "SELECT * FROM users WHERE name = :name", nativeQuery = true)
115
+ List<User> findByName(@Param("name") String name);
116
+
117
+ // GOOD: Spring Data derived query (auto-parameterized)
118
+ List<User> findByEmailAndActiveTrue(String email);
119
+ ```
120
+
121
+ ## Password Encoding
122
+
123
+ - Always hash passwords with BCrypt or Argon2 — never store plaintext
124
+ - Use `PasswordEncoder` bean, not manual hashing
125
+
126
+ ```java
127
+ @Bean
128
+ public PasswordEncoder passwordEncoder() {
129
+ return new BCryptPasswordEncoder(12); // cost factor 12
130
+ }
131
+
132
+ // In service
133
+ public User register(CreateUserDto dto) {
134
+ String hashedPassword = passwordEncoder.encode(dto.password());
135
+ return userRepository.save(new User(dto.email(), hashedPassword));
136
+ }
137
+ ```
138
+
139
+ ## CSRF Protection
140
+
141
+ - For browser session apps, keep CSRF enabled; include token in forms/headers
142
+ - For pure APIs with Bearer tokens, disable CSRF and rely on stateless auth
143
+
144
+ ```java
145
+ http
146
+ .csrf(csrf -> csrf.disable())
147
+ .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
148
+ ```
149
+
150
+ ## Secrets Management
151
+
152
+ - No secrets in source; load from env or vault
153
+ - Keep `application.yml` free of credentials; use placeholders
154
+ - Rotate tokens and DB credentials regularly
155
+
156
+ ```yaml
157
+ # BAD: Hardcoded in application.yml
158
+ spring:
159
+ datasource:
160
+ password: mySecretPassword123
161
+
162
+ # GOOD: Environment variable placeholder
163
+ spring:
164
+ datasource:
165
+ password: ${DB_PASSWORD}
166
+
167
+ # GOOD: Spring Cloud Vault integration
168
+ spring:
169
+ cloud:
170
+ vault:
171
+ uri: https://vault.example.com
172
+ token: ${VAULT_TOKEN}
173
+ ```
174
+
175
+ ## Security Headers
176
+
177
+ ```java
178
+ http
179
+ .headers(headers -> headers
180
+ .contentSecurityPolicy(csp -> csp
181
+ .policyDirectives("default-src 'self'"))
182
+ .frameOptions(HeadersConfigurer.FrameOptionsConfig::sameOrigin)
183
+ .xssProtection(Customizer.withDefaults())
184
+ .referrerPolicy(rp -> rp.policy(ReferrerPolicyHeaderWriter.ReferrerPolicy.NO_REFERRER)));
185
+ ```
186
+
187
+ ## CORS Configuration
188
+
189
+ - Configure CORS at the security filter level, not per-controller
190
+ - Restrict allowed origins — never use `*` in production
191
+
192
+ ```java
193
+ @Bean
194
+ public CorsConfigurationSource corsConfigurationSource() {
195
+ CorsConfiguration config = new CorsConfiguration();
196
+ config.setAllowedOrigins(List.of("https://app.example.com"));
197
+ config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE"));
198
+ config.setAllowedHeaders(List.of("Authorization", "Content-Type"));
199
+ config.setAllowCredentials(true);
200
+ config.setMaxAge(3600L);
201
+
202
+ UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
203
+ source.registerCorsConfiguration("/api/**", config);
204
+ return source;
205
+ }
206
+
207
+ // In SecurityFilterChain:
208
+ http.cors(cors -> cors.configurationSource(corsConfigurationSource()));
209
+ ```
210
+
211
+ ## Rate Limiting
212
+
213
+ - Apply Bucket4j or gateway-level limits on expensive endpoints
214
+ - Log and alert on bursts; return 429 with retry hints
215
+
216
+ ```java
217
+ // Using Bucket4j for per-endpoint rate limiting
218
+ @Component
219
+ public class RateLimitFilter extends OncePerRequestFilter {
220
+ private final Map<String, Bucket> buckets = new ConcurrentHashMap<>();
221
+
222
+ private Bucket createBucket() {
223
+ return Bucket.builder()
224
+ .addLimit(Bandwidth.classic(100, Refill.intervally(100, Duration.ofMinutes(1))))
225
+ .build();
226
+ }
227
+
228
+ @Override
229
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
230
+ FilterChain chain) throws ServletException, IOException {
231
+ String clientIp = request.getRemoteAddr();
232
+ Bucket bucket = buckets.computeIfAbsent(clientIp, k -> createBucket());
233
+
234
+ if (bucket.tryConsume(1)) {
235
+ chain.doFilter(request, response);
236
+ } else {
237
+ response.setStatus(HttpStatus.TOO_MANY_REQUESTS.value());
238
+ response.getWriter().write("{\"error\": \"Rate limit exceeded\"}");
239
+ }
240
+ }
241
+ }
242
+ ```
243
+
244
+ ## Dependency Security
245
+
246
+ - Run OWASP Dependency Check / Snyk in CI
247
+ - Keep Spring Boot and Spring Security on supported versions
248
+ - Fail builds on known CVEs
249
+
250
+ ## Logging and PII
251
+
252
+ - Never log secrets, tokens, passwords, or full PAN data
253
+ - Redact sensitive fields; use structured JSON logging
254
+
255
+ ## File Uploads
256
+
257
+ - Validate size, content type, and extension
258
+ - Store outside web root; scan if required
259
+
260
+ ## Checklist Before Release
261
+
262
+ - [ ] Auth tokens validated and expired correctly
263
+ - [ ] Authorization guards on every sensitive path
264
+ - [ ] All inputs validated and sanitized
265
+ - [ ] No string-concatenated SQL
266
+ - [ ] CSRF posture correct for app type
267
+ - [ ] Secrets externalized; none committed
268
+ - [ ] Security headers configured
269
+ - [ ] Rate limiting on APIs
270
+ - [ ] Dependencies scanned and up to date
271
+ - [ ] Logs free of sensitive data
272
+
273
+ **Remember**: Deny by default, validate inputs, least privilege, and secure-by-configuration first.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Affaan Mustafa
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,159 @@
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
+ metadata:
5
+ origin: ECC
6
+ ---
7
+
8
+ # Spring Boot TDD Workflow
9
+
10
+ TDD guidance for Spring Boot services with 80%+ coverage (unit + integration).
11
+
12
+ ## When to Use
13
+
14
+ - New features or endpoints
15
+ - Bug fixes or refactors
16
+ - Adding data access logic or security rules
17
+
18
+ ## Workflow
19
+
20
+ 1) Write tests first (they should fail)
21
+ 2) Implement minimal code to pass
22
+ 3) Refactor with tests green
23
+ 4) Enforce coverage (JaCoCo)
24
+
25
+ ## Unit Tests (JUnit 5 + Mockito)
26
+
27
+ ```java
28
+ @ExtendWith(MockitoExtension.class)
29
+ class MarketServiceTest {
30
+ @Mock MarketRepository repo;
31
+ @InjectMocks MarketService service;
32
+
33
+ @Test
34
+ void createsMarket() {
35
+ CreateMarketRequest req = new CreateMarketRequest("name", "desc", Instant.now(), List.of("cat"));
36
+ when(repo.save(any())).thenAnswer(inv -> inv.getArgument(0));
37
+
38
+ Market result = service.create(req);
39
+
40
+ assertThat(result.name()).isEqualTo("name");
41
+ verify(repo).save(any());
42
+ }
43
+ }
44
+ ```
45
+
46
+ Patterns:
47
+ - Arrange-Act-Assert
48
+ - Avoid partial mocks; prefer explicit stubbing
49
+ - Use `@ParameterizedTest` for variants
50
+
51
+ ## Web Layer Tests (MockMvc)
52
+
53
+ ```java
54
+ @WebMvcTest(MarketController.class)
55
+ class MarketControllerTest {
56
+ @Autowired MockMvc mockMvc;
57
+ @MockBean MarketService marketService;
58
+
59
+ @Test
60
+ void returnsMarkets() throws Exception {
61
+ when(marketService.list(any())).thenReturn(Page.empty());
62
+
63
+ mockMvc.perform(get("/api/markets"))
64
+ .andExpect(status().isOk())
65
+ .andExpect(jsonPath("$.content").isArray());
66
+ }
67
+ }
68
+ ```
69
+
70
+ ## Integration Tests (SpringBootTest)
71
+
72
+ ```java
73
+ @SpringBootTest
74
+ @AutoConfigureMockMvc
75
+ @ActiveProfiles("test")
76
+ class MarketIntegrationTest {
77
+ @Autowired MockMvc mockMvc;
78
+
79
+ @Test
80
+ void createsMarket() throws Exception {
81
+ mockMvc.perform(post("/api/markets")
82
+ .contentType(MediaType.APPLICATION_JSON)
83
+ .content("""
84
+ {"name":"Test","description":"Desc","endDate":"2030-01-01T00:00:00Z","categories":["general"]}
85
+ """))
86
+ .andExpect(status().isCreated());
87
+ }
88
+ }
89
+ ```
90
+
91
+ ## Persistence Tests (DataJpaTest)
92
+
93
+ ```java
94
+ @DataJpaTest
95
+ @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
96
+ @Import(TestContainersConfig.class)
97
+ class MarketRepositoryTest {
98
+ @Autowired MarketRepository repo;
99
+
100
+ @Test
101
+ void savesAndFinds() {
102
+ MarketEntity entity = new MarketEntity();
103
+ entity.setName("Test");
104
+ repo.save(entity);
105
+
106
+ Optional<MarketEntity> found = repo.findByName("Test");
107
+ assertThat(found).isPresent();
108
+ }
109
+ }
110
+ ```
111
+
112
+ ## Testcontainers
113
+
114
+ - Use reusable containers for Postgres/Redis to mirror production
115
+ - Wire via `@DynamicPropertySource` to inject JDBC URLs into Spring context
116
+
117
+ ## Coverage (JaCoCo)
118
+
119
+ Maven snippet:
120
+ ```xml
121
+ <plugin>
122
+ <groupId>org.jacoco</groupId>
123
+ <artifactId>jacoco-maven-plugin</artifactId>
124
+ <version>0.8.14</version>
125
+ <executions>
126
+ <execution>
127
+ <goals><goal>prepare-agent</goal></goals>
128
+ </execution>
129
+ <execution>
130
+ <id>report</id>
131
+ <phase>verify</phase>
132
+ <goals><goal>report</goal></goals>
133
+ </execution>
134
+ </executions>
135
+ </plugin>
136
+ ```
137
+
138
+ ## Assertions
139
+
140
+ - Prefer AssertJ (`assertThat`) for readability
141
+ - For JSON responses, use `jsonPath`
142
+ - For exceptions: `assertThatThrownBy(...)`
143
+
144
+ ## Test Data Builders
145
+
146
+ ```java
147
+ class MarketBuilder {
148
+ private String name = "Test";
149
+ MarketBuilder withName(String name) { this.name = name; return this; }
150
+ Market build() { return new Market(null, name, MarketStatus.ACTIVE); }
151
+ }
152
+ ```
153
+
154
+ ## CI Commands
155
+
156
+ - Maven: `mvn -T 4 test` or `mvn verify`
157
+ - Gradle: `./gradlew test jacocoTestReport`
158
+
159
+ **Remember**: Keep tests fast, isolated, and deterministic. Test behavior, not implementation details.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Affaan Mustafa
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,232 @@
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
+ metadata:
5
+ origin: ECC
6
+ ---
7
+
8
+ # Spring Boot Verification Loop
9
+
10
+ Run before PRs, after major changes, and pre-deploy.
11
+
12
+ ## When to Activate
13
+
14
+ - Before opening a pull request for a Spring Boot service
15
+ - After major refactoring or dependency upgrades
16
+ - Pre-deployment verification for staging or production
17
+ - Running full build → lint → test → security scan pipeline
18
+ - Validating test coverage meets thresholds
19
+
20
+ ## Phase 1: Build
21
+
22
+ ```bash
23
+ mvn -T 4 clean verify -DskipTests
24
+ # or
25
+ ./gradlew clean assemble -x test
26
+ ```
27
+
28
+ If build fails, stop and fix.
29
+
30
+ ## Phase 2: Static Analysis
31
+
32
+ Maven (common plugins):
33
+ ```bash
34
+ mvn -T 4 spotbugs:check pmd:check checkstyle:check
35
+ ```
36
+
37
+ Gradle (if configured):
38
+ ```bash
39
+ ./gradlew checkstyleMain pmdMain spotbugsMain
40
+ ```
41
+
42
+ ## Phase 3: Tests + Coverage
43
+
44
+ ```bash
45
+ mvn -T 4 test
46
+ mvn jacoco:report # verify 80%+ coverage
47
+ # or
48
+ ./gradlew test jacocoTestReport
49
+ ```
50
+
51
+ Report:
52
+ - Total tests, passed/failed
53
+ - Coverage % (lines/branches)
54
+
55
+ ### Unit Tests
56
+
57
+ Test service logic in isolation with mocked dependencies:
58
+
59
+ ```java
60
+ @ExtendWith(MockitoExtension.class)
61
+ class UserServiceTest {
62
+
63
+ @Mock private UserRepository userRepository;
64
+ @InjectMocks private UserService userService;
65
+
66
+ @Test
67
+ void createUser_validInput_returnsUser() {
68
+ var dto = new CreateUserDto("Alice", "alice@example.com");
69
+ var expected = new User(1L, "Alice", "alice@example.com");
70
+ when(userRepository.save(any(User.class))).thenReturn(expected);
71
+
72
+ var result = userService.create(dto);
73
+
74
+ assertThat(result.name()).isEqualTo("Alice");
75
+ verify(userRepository).save(any(User.class));
76
+ }
77
+
78
+ @Test
79
+ void createUser_duplicateEmail_throwsException() {
80
+ var dto = new CreateUserDto("Alice", "existing@example.com");
81
+ when(userRepository.existsByEmail(dto.email())).thenReturn(true);
82
+
83
+ assertThatThrownBy(() -> userService.create(dto))
84
+ .isInstanceOf(DuplicateEmailException.class);
85
+ }
86
+ }
87
+ ```
88
+
89
+ ### Integration Tests with Testcontainers
90
+
91
+ Test against a real database instead of H2:
92
+
93
+ ```java
94
+ @SpringBootTest
95
+ @Testcontainers
96
+ class UserRepositoryIntegrationTest {
97
+
98
+ @Container
99
+ static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine")
100
+ .withDatabaseName("testdb");
101
+
102
+ @DynamicPropertySource
103
+ static void configureProperties(DynamicPropertyRegistry registry) {
104
+ registry.add("spring.datasource.url", postgres::getJdbcUrl);
105
+ registry.add("spring.datasource.username", postgres::getUsername);
106
+ registry.add("spring.datasource.password", postgres::getPassword);
107
+ }
108
+
109
+ @Autowired private UserRepository userRepository;
110
+
111
+ @Test
112
+ void findByEmail_existingUser_returnsUser() {
113
+ userRepository.save(new User("Alice", "alice@example.com"));
114
+
115
+ var found = userRepository.findByEmail("alice@example.com");
116
+
117
+ assertThat(found).isPresent();
118
+ assertThat(found.get().getName()).isEqualTo("Alice");
119
+ }
120
+ }
121
+ ```
122
+
123
+ ### API Tests with MockMvc
124
+
125
+ Test controller layer with full Spring context:
126
+
127
+ ```java
128
+ @WebMvcTest(UserController.class)
129
+ class UserControllerTest {
130
+
131
+ @Autowired private MockMvc mockMvc;
132
+ @MockBean private UserService userService;
133
+
134
+ @Test
135
+ void createUser_validInput_returns201() throws Exception {
136
+ var user = new UserDto(1L, "Alice", "alice@example.com");
137
+ when(userService.create(any())).thenReturn(user);
138
+
139
+ mockMvc.perform(post("/api/users")
140
+ .contentType(MediaType.APPLICATION_JSON)
141
+ .content("""
142
+ {"name": "Alice", "email": "alice@example.com"}
143
+ """))
144
+ .andExpect(status().isCreated())
145
+ .andExpect(jsonPath("$.name").value("Alice"));
146
+ }
147
+
148
+ @Test
149
+ void createUser_invalidEmail_returns400() throws Exception {
150
+ mockMvc.perform(post("/api/users")
151
+ .contentType(MediaType.APPLICATION_JSON)
152
+ .content("""
153
+ {"name": "Alice", "email": "not-an-email"}
154
+ """))
155
+ .andExpect(status().isBadRequest());
156
+ }
157
+ }
158
+ ```
159
+
160
+ ## Phase 4: Security Scan
161
+
162
+ ```bash
163
+ # Dependency CVEs
164
+ mvn org.owasp:dependency-check-maven:check
165
+ # or
166
+ ./gradlew dependencyCheckAnalyze
167
+
168
+ # Secrets in source
169
+ grep -rn "password\s*=\s*\"" src/ --include="*.java" --include="*.yml" --include="*.properties"
170
+ grep -rn "sk-\|api_key\|secret" src/ --include="*.java" --include="*.yml"
171
+
172
+ # Secrets (git history)
173
+ git secrets --scan # if configured
174
+ ```
175
+
176
+ ### Common Security Findings
177
+
178
+ ```
179
+ # Check for System.out.println (use logger instead)
180
+ grep -rn "System\.out\.print" src/main/ --include="*.java"
181
+
182
+ # Check for raw exception messages in responses
183
+ grep -rn "e\.getMessage()" src/main/ --include="*.java"
184
+
185
+ # Check for wildcard CORS
186
+ grep -rn "allowedOrigins.*\*" src/main/ --include="*.java"
187
+ ```
188
+
189
+ ## Phase 5: Lint/Format (optional gate)
190
+
191
+ ```bash
192
+ mvn spotless:apply # if using Spotless plugin
193
+ ./gradlew spotlessApply
194
+ ```
195
+
196
+ ## Phase 6: Diff Review
197
+
198
+ ```bash
199
+ git diff --stat
200
+ git diff
201
+ ```
202
+
203
+ Checklist:
204
+ - No debugging logs left (`System.out`, `log.debug` without guards)
205
+ - Meaningful errors and HTTP statuses
206
+ - Transactions and validation present where needed
207
+ - Config changes documented
208
+
209
+ ## Output Template
210
+
211
+ ```
212
+ VERIFICATION REPORT
213
+ ===================
214
+ Build: [PASS/FAIL]
215
+ Static: [PASS/FAIL] (spotbugs/pmd/checkstyle)
216
+ Tests: [PASS/FAIL] (X/Y passed, Z% coverage)
217
+ Security: [PASS/FAIL] (CVE findings: N)
218
+ Diff: [X files changed]
219
+
220
+ Overall: [READY / NOT READY]
221
+
222
+ Issues to Fix:
223
+ 1. ...
224
+ 2. ...
225
+ ```
226
+
227
+ ## Continuous Mode
228
+
229
+ - Re-run phases on significant changes or every 30–60 minutes in long sessions
230
+ - Keep a short loop: `mvn -T 4 test` + spotbugs for quick feedback
231
+
232
+ **Remember**: Fast feedback beats late surprises. Keep the gate strict—treat warnings as defects in production systems.