@synapta/skills 0.1.0 → 0.1.2

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 (353) hide show
  1. package/dist/index.js +11 -4
  2. package/package.json +3 -4
  3. package/skills/ATTRIBUTION.md +80 -0
  4. package/skills/accessibility-audit/SKILL.md +325 -0
  5. package/skills/accessibility-audit/reference/wcag-checklist.md +103 -0
  6. package/skills/apns-notifier/SKILL.md +86 -0
  7. package/skills/approval-policy-enforcer/SKILL.md +66 -0
  8. package/skills/apps-sdk-builder/LICENSE.txt +201 -0
  9. package/skills/apps-sdk-builder/SKILL.md +328 -0
  10. package/skills/apps-sdk-builder/agents/openai.yaml +13 -0
  11. package/skills/apps-sdk-builder/references/app-archetypes.md +132 -0
  12. package/skills/apps-sdk-builder/references/apps-sdk-docs-workflow.md +135 -0
  13. package/skills/apps-sdk-builder/references/interactive-state-sync-patterns.md +113 -0
  14. package/skills/apps-sdk-builder/references/repo-contract-and-validation.md +93 -0
  15. package/skills/apps-sdk-builder/references/search-fetch-standard.md +67 -0
  16. package/skills/apps-sdk-builder/references/upstream-example-workflow.md +79 -0
  17. package/skills/apps-sdk-builder/references/window-openai-patterns.md +79 -0
  18. package/skills/apps-sdk-builder/scripts/scaffold_node_ext_apps.mjs +606 -0
  19. package/skills/architecture-selector/SKILL.md +64 -0
  20. package/skills/backlog-planner/SKILL.md +68 -0
  21. package/skills/carplay-entitlement-checker/SKILL.md +82 -0
  22. package/skills/concept-discovery/SKILL.md +517 -0
  23. package/skills/concept-discovery/assets/sample-analysis.json +81 -0
  24. package/skills/concept-discovery/expected_outputs/sample-enum-dictionary.md +25 -0
  25. package/skills/concept-discovery/expected_outputs/sample-page-user-list.md +83 -0
  26. package/skills/concept-discovery/expected_outputs/sample-prd-readme.md +43 -0
  27. package/skills/concept-discovery/references/framework-patterns.md +228 -0
  28. package/skills/concept-discovery/references/prd-quality-checklist.md +65 -0
  29. package/skills/concept-discovery/scripts/codebase_analyzer.py +732 -0
  30. package/skills/concept-discovery/scripts/prd_scaffolder.py +435 -0
  31. package/skills/dast-zap/SKILL.md +453 -0
  32. package/skills/dast-zap/assets/.gitkeep +9 -0
  33. package/skills/dast-zap/assets/github_action.yml +207 -0
  34. package/skills/dast-zap/assets/gitlab_ci.yml +226 -0
  35. package/skills/dast-zap/assets/zap_automation.yaml +196 -0
  36. package/skills/dast-zap/assets/zap_context.xml +192 -0
  37. package/skills/dast-zap/references/EXAMPLE.md +40 -0
  38. package/skills/dast-zap/references/api_testing_guide.md +475 -0
  39. package/skills/dast-zap/references/authentication_guide.md +431 -0
  40. package/skills/dast-zap/references/false_positive_handling.md +427 -0
  41. package/skills/dast-zap/references/owasp_mapping.md +255 -0
  42. package/skills/dep-sbom-scan/SKILL.md +466 -0
  43. package/skills/deploy-cloudflare/SKILL.md +930 -0
  44. package/skills/deploy-docker/SKILL.md +55 -0
  45. package/skills/deploy-fly/SKILL.md +228 -0
  46. package/skills/deploy-k8s/SKILL.md +108 -0
  47. package/skills/deploy-k8s/assets/logo.png +0 -0
  48. package/skills/deploy-k8s/docs/README.md +29 -0
  49. package/skills/deploy-k8s/docs/SUMMARY.md +56 -0
  50. package/skills/deploy-k8s/docs/advanced/token-efficiency.md +61 -0
  51. package/skills/deploy-k8s/docs/architecture/multi-tenancy.md +96 -0
  52. package/skills/deploy-k8s/docs/architecture/storage-and-state.md +102 -0
  53. package/skills/deploy-k8s/docs/architecture/workload-patterns.md +87 -0
  54. package/skills/deploy-k8s/docs/book.json +16 -0
  55. package/skills/deploy-k8s/docs/community/changelog.md +34 -0
  56. package/skills/deploy-k8s/docs/community/contributing.md +67 -0
  57. package/skills/deploy-k8s/docs/core-concepts/failure-modes.md +153 -0
  58. package/skills/deploy-k8s/docs/core-concepts/philosophy.md +83 -0
  59. package/skills/deploy-k8s/docs/core-concepts/workflow.md +124 -0
  60. package/skills/deploy-k8s/docs/examples/bad-patterns.md +47 -0
  61. package/skills/deploy-k8s/docs/examples/do-dont-checklist.md +37 -0
  62. package/skills/deploy-k8s/docs/examples/good-patterns.md +49 -0
  63. package/skills/deploy-k8s/docs/failure-modes/api-drift.md +104 -0
  64. package/skills/deploy-k8s/docs/failure-modes/fragile-rollouts.md +99 -0
  65. package/skills/deploy-k8s/docs/failure-modes/insecure-workload-defaults.md +80 -0
  66. package/skills/deploy-k8s/docs/failure-modes/network-exposure.md +98 -0
  67. package/skills/deploy-k8s/docs/failure-modes/privilege-sprawl.md +91 -0
  68. package/skills/deploy-k8s/docs/failure-modes/resource-starvation.md +85 -0
  69. package/skills/deploy-k8s/docs/getting-started/installation.md +152 -0
  70. package/skills/deploy-k8s/docs/getting-started/quick-start.md +115 -0
  71. package/skills/deploy-k8s/docs/guides/helm-patterns.md +71 -0
  72. package/skills/deploy-k8s/docs/guides/kustomize-patterns.md +65 -0
  73. package/skills/deploy-k8s/docs/guides/observability.md +67 -0
  74. package/skills/deploy-k8s/docs/guides/security-hardening.md +59 -0
  75. package/skills/deploy-k8s/docs/guides/validation-and-policy.md +66 -0
  76. package/skills/deploy-k8s/docs/integrations/mcp-integration.md +52 -0
  77. package/skills/deploy-k8s/docs/package-lock.json +2892 -0
  78. package/skills/deploy-k8s/docs/package.json +13 -0
  79. package/skills/deploy-k8s/references/api-drift.md +298 -0
  80. package/skills/deploy-k8s/references/conditional/aks-patterns.md +70 -0
  81. package/skills/deploy-k8s/references/conditional/eks-patterns.md +79 -0
  82. package/skills/deploy-k8s/references/conditional/gitops-controllers.md +71 -0
  83. package/skills/deploy-k8s/references/conditional/gke-patterns.md +74 -0
  84. package/skills/deploy-k8s/references/conditional/observability-stacks.md +80 -0
  85. package/skills/deploy-k8s/references/conditional/openshift-patterns.md +67 -0
  86. package/skills/deploy-k8s/references/daemonset-operator-patterns.md +155 -0
  87. package/skills/deploy-k8s/references/deployment-patterns.md +146 -0
  88. package/skills/deploy-k8s/references/do-dont-patterns.md +87 -0
  89. package/skills/deploy-k8s/references/examples-bad.md +282 -0
  90. package/skills/deploy-k8s/references/examples-good.md +440 -0
  91. package/skills/deploy-k8s/references/fragile-rollouts.md +303 -0
  92. package/skills/deploy-k8s/references/helm-patterns.md +203 -0
  93. package/skills/deploy-k8s/references/insecure-workload-defaults.md +300 -0
  94. package/skills/deploy-k8s/references/job-patterns.md +120 -0
  95. package/skills/deploy-k8s/references/kustomize-patterns.md +239 -0
  96. package/skills/deploy-k8s/references/multi-tenancy.md +343 -0
  97. package/skills/deploy-k8s/references/network-exposure.md +481 -0
  98. package/skills/deploy-k8s/references/observability.md +302 -0
  99. package/skills/deploy-k8s/references/privilege-sprawl.md +273 -0
  100. package/skills/deploy-k8s/references/resource-starvation.md +374 -0
  101. package/skills/deploy-k8s/references/security-hardening.md +209 -0
  102. package/skills/deploy-k8s/references/stateful-patterns.md +130 -0
  103. package/skills/deploy-k8s/references/storage-and-state.md +330 -0
  104. package/skills/deploy-k8s/references/validation-and-policy.md +242 -0
  105. package/skills/deploy-railway/SKILL.md +235 -0
  106. package/skills/deploy-railway/references/analyze-db-mongo.md +84 -0
  107. package/skills/deploy-railway/references/analyze-db-mysql.md +254 -0
  108. package/skills/deploy-railway/references/analyze-db-postgres.md +479 -0
  109. package/skills/deploy-railway/references/analyze-db-redis.md +208 -0
  110. package/skills/deploy-railway/references/analyze-db.md +344 -0
  111. package/skills/deploy-railway/references/configure.md +309 -0
  112. package/skills/deploy-railway/references/deploy.md +195 -0
  113. package/skills/deploy-railway/references/operate.md +214 -0
  114. package/skills/deploy-railway/references/request.md +248 -0
  115. package/skills/deploy-railway/references/setup.md +312 -0
  116. package/skills/deploy-railway/scripts/analyze-mongo.py +1549 -0
  117. package/skills/deploy-railway/scripts/analyze-mysql.py +1195 -0
  118. package/skills/deploy-railway/scripts/analyze-postgres.py +3058 -0
  119. package/skills/deploy-railway/scripts/analyze-redis.py +1090 -0
  120. package/skills/deploy-railway/scripts/dal.py +671 -0
  121. package/skills/deploy-railway/scripts/enable-pg-stats.py +170 -0
  122. package/skills/deploy-railway/scripts/pg-extensions.py +370 -0
  123. package/skills/deploy-railway/scripts/railway-api.sh +52 -0
  124. package/skills/deploy-ssh/SKILL.md +91 -0
  125. package/skills/deploy-vercel/SKILL.md +304 -0
  126. package/skills/deploy-vercel/resources/deploy-codex.sh +301 -0
  127. package/skills/deploy-vercel/resources/deploy.sh +301 -0
  128. package/skills/docs-runbooks/SKILL.md +399 -0
  129. package/skills/drive-status-renderer/SKILL.md +62 -0
  130. package/skills/iac-scan/SKILL.md +680 -0
  131. package/skills/iac-scan/assets/.gitkeep +9 -0
  132. package/skills/iac-scan/assets/checkov_config.yaml +94 -0
  133. package/skills/iac-scan/assets/github_actions.yml +199 -0
  134. package/skills/iac-scan/assets/gitlab_ci.yml +218 -0
  135. package/skills/iac-scan/assets/pre_commit_config.yaml +92 -0
  136. package/skills/iac-scan/references/EXAMPLE.md +40 -0
  137. package/skills/iac-scan/references/compliance_mapping.md +237 -0
  138. package/skills/iac-scan/references/custom_policies.md +460 -0
  139. package/skills/iac-scan/references/suppression_guide.md +431 -0
  140. package/skills/incident-briefing/SKILL.md +66 -0
  141. package/skills/incident-triage/SKILL.md +481 -0
  142. package/{LICENSE → skills/mcp-builder/LICENSE.txt} +15 -14
  143. package/skills/mcp-builder/SKILL.md +244 -0
  144. package/skills/mcp-builder/reference/evaluation.md +602 -0
  145. package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  146. package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  147. package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  148. package/skills/mcp-builder/scripts/connections.py +151 -0
  149. package/skills/mcp-builder/scripts/evaluation.py +373 -0
  150. package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  151. package/skills/mcp-builder/scripts/requirements.txt +2 -0
  152. package/skills/mobile-pairing/SKILL.md +52 -0
  153. package/skills/ops-sre/SKILL.md +297 -0
  154. package/skills/playwright-qa/LICENSE.txt +201 -0
  155. package/skills/playwright-qa/NOTICE.txt +14 -0
  156. package/skills/playwright-qa/SKILL.md +156 -0
  157. package/skills/playwright-qa/agents/openai.yaml +6 -0
  158. package/skills/playwright-qa/assets/playwright-small.svg +3 -0
  159. package/skills/playwright-qa/assets/playwright.png +0 -0
  160. package/skills/playwright-qa/references/cli.md +116 -0
  161. package/skills/playwright-qa/references/workflows.md +95 -0
  162. package/skills/playwright-qa/scripts/playwright_cli.sh +25 -0
  163. package/skills/release-publish/SKILL.md +85 -0
  164. package/skills/repo-bootstrap/SKILL.md +92 -0
  165. package/skills/repo-bootstrap/assets/example-workflows/validate-agents.yml +89 -0
  166. package/skills/repo-bootstrap/assets/root-thin.md +141 -0
  167. package/skills/repo-bootstrap/assets/root-verbose.md +149 -0
  168. package/skills/repo-bootstrap/assets/scoped/backend-go.md +107 -0
  169. package/skills/repo-bootstrap/assets/scoped/backend-php.md +94 -0
  170. package/skills/repo-bootstrap/assets/scoped/backend-python.md +84 -0
  171. package/skills/repo-bootstrap/assets/scoped/backend-typescript.md +89 -0
  172. package/skills/repo-bootstrap/assets/scoped/claude-code-skill.md +101 -0
  173. package/skills/repo-bootstrap/assets/scoped/cli.md +83 -0
  174. package/skills/repo-bootstrap/assets/scoped/concourse.md +196 -0
  175. package/skills/repo-bootstrap/assets/scoped/ddev.md +68 -0
  176. package/skills/repo-bootstrap/assets/scoped/docker.md +160 -0
  177. package/skills/repo-bootstrap/assets/scoped/documentation.md +98 -0
  178. package/skills/repo-bootstrap/assets/scoped/examples.md +96 -0
  179. package/skills/repo-bootstrap/assets/scoped/frontend-typescript.md +88 -0
  180. package/skills/repo-bootstrap/assets/scoped/github-actions.md +174 -0
  181. package/skills/repo-bootstrap/assets/scoped/gitlab-ci.md +174 -0
  182. package/skills/repo-bootstrap/assets/scoped/oro-bundle.md +209 -0
  183. package/skills/repo-bootstrap/assets/scoped/oro-project.md +170 -0
  184. package/skills/repo-bootstrap/assets/scoped/python-modern.md +170 -0
  185. package/skills/repo-bootstrap/assets/scoped/resources.md +96 -0
  186. package/skills/repo-bootstrap/assets/scoped/skill-repo.md +139 -0
  187. package/skills/repo-bootstrap/assets/scoped/symfony.md +168 -0
  188. package/skills/repo-bootstrap/assets/scoped/testing.md +87 -0
  189. package/skills/repo-bootstrap/assets/scoped/typo3-docs.md +103 -0
  190. package/skills/repo-bootstrap/assets/scoped/typo3-extension.md +133 -0
  191. package/skills/repo-bootstrap/assets/scoped/typo3-project.md +137 -0
  192. package/skills/repo-bootstrap/assets/scoped/typo3-testing.md +80 -0
  193. package/skills/repo-bootstrap/checkpoints.yaml +279 -0
  194. package/skills/repo-bootstrap/evals/evals.json +385 -0
  195. package/skills/repo-bootstrap/references/ai-contribution-guidelines.md +63 -0
  196. package/skills/repo-bootstrap/references/ai-tool-compatibility.md +223 -0
  197. package/skills/repo-bootstrap/references/directory-coverage.md +82 -0
  198. package/skills/repo-bootstrap/references/examples/coding-agent-cli/AGENTS.md +70 -0
  199. package/skills/repo-bootstrap/references/examples/coding-agent-cli/go.mod +3 -0
  200. package/skills/repo-bootstrap/references/examples/coding-agent-cli/scripts-AGENTS.md +389 -0
  201. package/skills/repo-bootstrap/references/examples/express-api-ts/.env.example +13 -0
  202. package/skills/repo-bootstrap/references/examples/express-api-ts/AGENTS.md +91 -0
  203. package/skills/repo-bootstrap/references/examples/express-api-ts/package.json +33 -0
  204. package/skills/repo-bootstrap/references/examples/express-api-ts/pnpm-lock.yaml +3 -0
  205. package/skills/repo-bootstrap/references/examples/express-api-ts/src/AGENTS.md +91 -0
  206. package/skills/repo-bootstrap/references/examples/express-api-ts/src/config.ts +28 -0
  207. package/skills/repo-bootstrap/references/examples/express-api-ts/src/controllers/userController.ts +74 -0
  208. package/skills/repo-bootstrap/references/examples/express-api-ts/src/index.ts +26 -0
  209. package/skills/repo-bootstrap/references/examples/express-api-ts/src/middleware/errorHandler.ts +45 -0
  210. package/skills/repo-bootstrap/references/examples/express-api-ts/src/middleware/requestLogger.ts +18 -0
  211. package/skills/repo-bootstrap/references/examples/express-api-ts/src/routes/health.ts +18 -0
  212. package/skills/repo-bootstrap/references/examples/express-api-ts/src/routes/users.ts +13 -0
  213. package/skills/repo-bootstrap/references/examples/express-api-ts/src/utils/errors.ts +40 -0
  214. package/skills/repo-bootstrap/references/examples/express-api-ts/src/utils/logger.ts +14 -0
  215. package/skills/repo-bootstrap/references/examples/express-api-ts/tsconfig.json +24 -0
  216. package/skills/repo-bootstrap/references/examples/fastapi-app/.env.example +19 -0
  217. package/skills/repo-bootstrap/references/examples/fastapi-app/AGENTS.md +92 -0
  218. package/skills/repo-bootstrap/references/examples/fastapi-app/pyproject.toml +88 -0
  219. package/skills/repo-bootstrap/references/examples/fastapi-app/src/AGENTS.md +85 -0
  220. package/skills/repo-bootstrap/references/examples/fastapi-app/src/__init__.py +3 -0
  221. package/skills/repo-bootstrap/references/examples/fastapi-app/src/config.py +49 -0
  222. package/skills/repo-bootstrap/references/examples/fastapi-app/src/main.py +66 -0
  223. package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/__init__.py +13 -0
  224. package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/item.py +43 -0
  225. package/skills/repo-bootstrap/references/examples/fastapi-app/src/models/user.py +40 -0
  226. package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/__init__.py +5 -0
  227. package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/health.py +20 -0
  228. package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/items.py +61 -0
  229. package/skills/repo-bootstrap/references/examples/fastapi-app/src/routes/users.py +55 -0
  230. package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/__init__.py +6 -0
  231. package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/item_service.py +77 -0
  232. package/skills/repo-bootstrap/references/examples/fastapi-app/src/services/user_service.py +69 -0
  233. package/skills/repo-bootstrap/references/examples/fastapi-app/uv.lock +4 -0
  234. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/.scopes +3 -0
  235. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/AGENTS.md +86 -0
  236. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/admin/package.json +20 -0
  237. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/admin/src/App.tsx +5 -0
  238. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/cmd/api/main.go +7 -0
  239. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/go.mod +2 -0
  240. package/skills/repo-bootstrap/references/examples/go-api-with-react-admin/main.go +7 -0
  241. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/.scopes +3 -0
  242. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/AGENTS.md +89 -0
  243. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/go.mod +2 -0
  244. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/AGENTS.md +90 -0
  245. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/package.json +17 -0
  246. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/App.tsx +1 -0
  247. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Button.tsx +1 -0
  248. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Footer.tsx +1 -0
  249. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Header.tsx +1 -0
  250. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/internal/web/src/Sidebar.tsx +1 -0
  251. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/main.go +7 -0
  252. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/package-lock.json +0 -0
  253. package/skills/repo-bootstrap/references/examples/go-with-internal-web-tsx/package.json +12 -0
  254. package/skills/repo-bootstrap/references/examples/ldap-selfservice/AGENTS.md +70 -0
  255. package/skills/repo-bootstrap/references/examples/ldap-selfservice/go.mod +3 -0
  256. package/skills/repo-bootstrap/references/examples/ldap-selfservice/internal-AGENTS.md +371 -0
  257. package/skills/repo-bootstrap/references/examples/ldap-selfservice/internal-web-AGENTS.md +448 -0
  258. package/skills/repo-bootstrap/references/examples/php-with-frontend/.scopes +3 -0
  259. package/skills/repo-bootstrap/references/examples/php-with-frontend/AGENTS.md +91 -0
  260. package/skills/repo-bootstrap/references/examples/php-with-frontend/composer.json +8 -0
  261. package/skills/repo-bootstrap/references/examples/php-with-frontend/package.json +15 -0
  262. package/skills/repo-bootstrap/references/examples/php-with-frontend/pnpm-lock.yaml +0 -0
  263. package/skills/repo-bootstrap/references/examples/php-with-frontend/src/Controller.php +3 -0
  264. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/AGENTS.md +92 -0
  265. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/package.json +26 -0
  266. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/App.tsx +3 -0
  267. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Button.tsx +10 -0
  268. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Footer.tsx +9 -0
  269. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/Header.tsx +9 -0
  270. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/src/main.tsx +3 -0
  271. package/skills/repo-bootstrap/references/examples/php-with-frontend/web/tsconfig.json +13 -0
  272. package/skills/repo-bootstrap/references/examples/pnpm-workspace/AGENTS.md +75 -0
  273. package/skills/repo-bootstrap/references/examples/pnpm-workspace/package.json +7 -0
  274. package/skills/repo-bootstrap/references/examples/pnpm-workspace/packages/web/package.json +11 -0
  275. package/skills/repo-bootstrap/references/examples/pnpm-workspace/packages/web/src/index.ts +11 -0
  276. package/skills/repo-bootstrap/references/examples/pnpm-workspace/pnpm-lock.yaml +42 -0
  277. package/skills/repo-bootstrap/references/examples/pnpm-workspace/pnpm-workspace.yaml +2 -0
  278. package/skills/repo-bootstrap/references/examples/simple-ldap-go/AGENTS.md +70 -0
  279. package/skills/repo-bootstrap/references/examples/simple-ldap-go/examples-AGENTS.md +45 -0
  280. package/skills/repo-bootstrap/references/examples/simple-ldap-go/go.mod +3 -0
  281. package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/AGENTS.md +70 -0
  282. package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/Classes-AGENTS.md +392 -0
  283. package/skills/repo-bootstrap/references/examples/t3x-rte-ckeditor-image/composer.json +8 -0
  284. package/skills/repo-bootstrap/references/feedback-memory-schema.md +135 -0
  285. package/skills/repo-bootstrap/references/git-hooks-setup.md +79 -0
  286. package/skills/repo-bootstrap/references/output-structure.md +124 -0
  287. package/skills/repo-bootstrap/references/scripts-guide.md +175 -0
  288. package/skills/repo-bootstrap/references/verification-guide.md +137 -0
  289. package/skills/repo-bootstrap/scripts/analyze-git-history.sh +315 -0
  290. package/skills/repo-bootstrap/scripts/check-freshness.sh +230 -0
  291. package/skills/repo-bootstrap/scripts/detect-golden-samples.sh +161 -0
  292. package/skills/repo-bootstrap/scripts/detect-heuristics.sh +93 -0
  293. package/skills/repo-bootstrap/scripts/detect-project.sh +486 -0
  294. package/skills/repo-bootstrap/scripts/detect-scopes.sh +330 -0
  295. package/skills/repo-bootstrap/scripts/detect-utilities.sh +133 -0
  296. package/skills/repo-bootstrap/scripts/extract-adrs.sh +194 -0
  297. package/skills/repo-bootstrap/scripts/extract-agent-configs.sh +331 -0
  298. package/skills/repo-bootstrap/scripts/extract-architecture-rules.sh +522 -0
  299. package/skills/repo-bootstrap/scripts/extract-ci-commands.sh +385 -0
  300. package/skills/repo-bootstrap/scripts/extract-ci-rules.sh +384 -0
  301. package/skills/repo-bootstrap/scripts/extract-commands.sh +358 -0
  302. package/skills/repo-bootstrap/scripts/extract-documentation.sh +308 -0
  303. package/skills/repo-bootstrap/scripts/extract-github-rulesets.sh +96 -0
  304. package/skills/repo-bootstrap/scripts/extract-github-settings.sh +88 -0
  305. package/skills/repo-bootstrap/scripts/extract-ide-settings.sh +228 -0
  306. package/skills/repo-bootstrap/scripts/extract-platform-files.sh +290 -0
  307. package/skills/repo-bootstrap/scripts/extract-quality-configs.sh +442 -0
  308. package/skills/repo-bootstrap/scripts/generate-agents.sh +2424 -0
  309. package/skills/repo-bootstrap/scripts/generate-file-map.sh +153 -0
  310. package/skills/repo-bootstrap/scripts/lib/config-root.sh +211 -0
  311. package/skills/repo-bootstrap/scripts/lib/summary.sh +244 -0
  312. package/skills/repo-bootstrap/scripts/lib/template.sh +397 -0
  313. package/skills/repo-bootstrap/scripts/validate-structure.sh +324 -0
  314. package/skills/repo-bootstrap/scripts/verify-commands.sh +615 -0
  315. package/skills/repo-bootstrap/scripts/verify-content.sh +302 -0
  316. package/skills/schema-api-contracts/SKILL.md +56 -0
  317. package/skills/secret-hygiene/SKILL.md +511 -0
  318. package/skills/secret-hygiene/assets/.gitkeep +9 -0
  319. package/skills/secret-hygiene/assets/config-balanced.toml +81 -0
  320. package/skills/secret-hygiene/assets/config-custom.toml +178 -0
  321. package/skills/secret-hygiene/assets/config-strict.toml +48 -0
  322. package/skills/secret-hygiene/assets/github-action.yml +181 -0
  323. package/skills/secret-hygiene/assets/gitlab-ci.yml +257 -0
  324. package/skills/secret-hygiene/assets/precommit-config.yaml +70 -0
  325. package/skills/secret-hygiene/references/EXAMPLE.md +40 -0
  326. package/skills/secret-hygiene/references/compliance_mapping.md +538 -0
  327. package/skills/secret-hygiene/references/detection_rules.md +276 -0
  328. package/skills/secret-hygiene/references/false_positives.md +598 -0
  329. package/skills/secret-hygiene/references/remediation_guide.md +530 -0
  330. package/skills/stack-selector/SKILL.md +56 -0
  331. package/skills/telegram-control/SKILL.md +110 -0
  332. package/skills/telegram-control/references/architecture.md +184 -0
  333. package/skills/telegram-control/references/convex.md +173 -0
  334. package/skills/telegram-control/references/error_handling.md +212 -0
  335. package/skills/telegram-control/references/initial_setup.md +165 -0
  336. package/skills/telegram-control/references/telegram_api.md +156 -0
  337. package/skills/telegram-control/scripts/cancel_message.ts +53 -0
  338. package/skills/telegram-control/scripts/list_scheduled.ts +103 -0
  339. package/skills/telegram-control/scripts/logger.ts +121 -0
  340. package/skills/telegram-control/scripts/proxy-util.ts +11 -0
  341. package/skills/telegram-control/scripts/schedule_message.ts +216 -0
  342. package/skills/telegram-control/scripts/send_message.ts +115 -0
  343. package/skills/telegram-control/scripts/setup.ts +185 -0
  344. package/skills/telegram-control/scripts/types.ts +75 -0
  345. package/skills/telegram-control/scripts/view_history.ts +74 -0
  346. package/skills/test-strategy/SKILL.md +352 -0
  347. package/skills/threat-model/SKILL.md +303 -0
  348. package/skills/threat-model/examples/example-output.md +196 -0
  349. package/skills/threat-model/template.md +96 -0
  350. package/skills/ts-lint/SKILL.md +80 -0
  351. package/skills/ui-flow/SKILL.md +668 -0
  352. package/skills/voice-command-router/SKILL.md +51 -0
  353. package/skills/widget-live-activity-sync/SKILL.md +66 -0
@@ -0,0 +1,89 @@
1
+ <!-- FOR AI AGENTS - Human readability is a side effect, not a goal -->
2
+ <!-- Managed by agent: keep sections and order; edit content, not structure -->
3
+ <!-- Last updated: 2026-02-05 | Last verified: never -->
4
+
5
+ # AGENTS.md
6
+
7
+ **Precedence:** the **closest `AGENTS.md`** to the files you're changing wins. Root holds global defaults only.
8
+
9
+ ## Commands (unverified)
10
+ > Source: go.mod — CI-sourced commands are most reliable
11
+
12
+ <!-- AGENTS-GENERATED:START commands -->
13
+ | Task | Command | ~Time |
14
+ |------|---------|-------|
15
+ | Typecheck | go build -v ./... | ~15s |
16
+ | Format | gofmt -w . | ~5s |
17
+ | Test (single) | go test -v -race | ~2s |
18
+ | Test (all) | go test -v -race -short ./... | ~30s |
19
+ | Build | go build -v ./... | ~30s |
20
+ <!-- AGENTS-GENERATED:END commands -->
21
+
22
+ > If commands fail, verify against Makefile/package.json/composer.json or ask user to update.
23
+
24
+ ## Workflow
25
+ 1. **Before coding**: Read nearest `AGENTS.md` + check Golden Samples for the area you're touching
26
+ 2. **After each change**: Run the smallest relevant check (lint → typecheck → single test)
27
+ 3. **Before committing**: Run full test suite if changes affect >2 files or touch shared code
28
+
29
+ ## File Map
30
+ <!-- AGENTS-GENERATED:START filemap -->
31
+ ```
32
+ internal/ → internal packages (not exported)
33
+ ```
34
+ <!-- AGENTS-GENERATED:END filemap -->
35
+
36
+ ## Golden Samples (follow these patterns)
37
+ <!-- AGENTS-GENERATED:START golden-samples -->
38
+ | For | Reference | Key patterns |
39
+ |-----|-----------|--------------|
40
+ | Entrypoint | `main.go` | standard patterns |
41
+ <!-- AGENTS-GENERATED:END golden-samples -->
42
+
43
+ ## Heuristics (quick decisions)
44
+ <!-- AGENTS-GENERATED:START heuristics -->
45
+ | When | Do |
46
+ |------|-----|
47
+ | Adding package | Internal → `internal/`, Public → `pkg/` |
48
+ | Committing | Use Conventional Commits (feat:, fix:, docs:, etc.) |
49
+ | Merging PRs | Squash and merge |
50
+ | Adding dependency | Ask first - we minimize deps |
51
+ | Unsure about pattern | Check Golden Samples above |
52
+ <!-- AGENTS-GENERATED:END heuristics -->
53
+
54
+ ## Repository Settings
55
+ <!-- AGENTS-GENERATED:START repo-settings -->
56
+ - **Default branch:** `main`
57
+ - **Merge strategy:** squash, merge, rebase
58
+ <!-- AGENTS-GENERATED:END repo-settings -->
59
+
60
+ ## Boundaries
61
+
62
+ ### Always Do
63
+ - Run pre-commit checks before committing
64
+ - Add tests for new code paths
65
+ - Use conventional commit format: `type(scope): subject`
66
+ - Follow Go 1.22 conventions and idioms
67
+
68
+ ### Ask First
69
+ - Adding new dependencies
70
+ - Modifying CI/CD configuration
71
+ - Changing public API signatures
72
+ - Running full e2e test suites
73
+ - Repo-wide refactoring or rewrites
74
+
75
+ ### Never Do
76
+ - Commit secrets, credentials, or sensitive data
77
+ - Modify vendor/, node_modules/, or generated files
78
+ - Push directly to main/master branch
79
+ - Delete migration files or schema changes
80
+ - Commit go.sum without go.mod changes
81
+
82
+ ## Index of scoped AGENTS.md
83
+ <!-- AGENTS-GENERATED:START scope-index -->
84
+ - `./internal/web/AGENTS.md` — Frontend application (TypeScript/React/Vue)
85
+ <!-- AGENTS-GENERATED:END scope-index -->
86
+
87
+ ## When instructions conflict
88
+ The nearest `AGENTS.md` wins. Explicit user prompts override files.
89
+ - For Go-specific patterns, defer to language idioms and standard library conventions
@@ -0,0 +1,2 @@
1
+ module example.com/go-app
2
+ go 1.22
@@ -0,0 +1,90 @@
1
+ <!-- Managed by agent: keep sections and order; edit content, not structure. Last updated: 2026-02-04 -->
2
+
3
+ # AGENTS.md — web
4
+
5
+ <!-- AGENTS-GENERATED:START overview -->
6
+ ## Overview
7
+ Frontend application (TypeScript/React/Vue)
8
+ <!-- AGENTS-GENERATED:END overview -->
9
+
10
+ <!-- AGENTS-GENERATED:START filemap -->
11
+ ## Key Files
12
+ | File | Purpose |
13
+ |------|---------|
14
+ | `internal/web/src/Sidebar.tsx` | (add description) |
15
+ | `internal/web/src/App.tsx` | (add description) |
16
+ | `internal/web/src/Button.tsx` | (add description) |
17
+ | `internal/web/src/Header.tsx` | (add description) |
18
+ | `internal/web/src/Footer.tsx` | (add description) |
19
+ <!-- AGENTS-GENERATED:END filemap -->
20
+
21
+ <!-- AGENTS-GENERATED:START golden-samples -->
22
+ ## Golden Samples (follow these patterns)
23
+ | Pattern | Reference |
24
+ |---------|-----------|
25
+ | Standard implementation | `internal/web/src/Sidebar.tsx` |
26
+ <!-- AGENTS-GENERATED:END golden-samples -->
27
+
28
+ <!-- AGENTS-GENERATED:START setup -->
29
+ ## Setup & environment
30
+ - Framework: react
31
+ - Package manager: npm
32
+ - Environment variables: See .env.example
33
+ <!-- AGENTS-GENERATED:END setup -->
34
+
35
+ <!-- AGENTS-GENERATED:START commands -->
36
+ ## Build & tests
37
+ - Install: `npm install`
38
+ - Typecheck: `npx tsc --noEmit`
39
+ - Lint: `npx eslint .`
40
+ - Format: `npx prettier --write .`
41
+ - Test: `npm test`
42
+ - Build: `npm run build`
43
+ - Dev server: `npm run dev`
44
+ <!-- AGENTS-GENERATED:END commands -->
45
+
46
+ <!-- AGENTS-GENERATED:START code-style -->
47
+ ## Code style & conventions
48
+ - Follow tsconfig.json compiler options
49
+ - Use functional components with hooks
50
+ - Naming: `camelCase` for variables/functions, `PascalCase` for components
51
+ - File naming: `ComponentName.tsx`, `utilityName.ts`
52
+ - Imports: group and sort (external, internal, types)
53
+ - Avoid class components
54
+ <!-- AGENTS-GENERATED:END code-style -->
55
+
56
+ <!-- AGENTS-GENERATED:START security -->
57
+ ## Security & safety
58
+ - Sanitize user inputs before rendering
59
+ - Raw HTML rendering only with sanitized content (use DOMPurify)
60
+ - Validate environment variables at build time
61
+ - Never expose secrets in client-side code
62
+ - Use HTTPS for all API calls
63
+ - Implement CSP headers
64
+ - WCAG 2.2 AA accessibility compliance
65
+ <!-- AGENTS-GENERATED:END security -->
66
+
67
+ <!-- AGENTS-GENERATED:START checklist -->
68
+ ## PR/commit checklist
69
+ - [ ] Tests pass: `npm test`
70
+ - [ ] TypeScript compiles: `npx tsc --noEmit`
71
+ - [ ] Lint clean: `npx eslint .`
72
+ - [ ] Formatted: `npx prettier --write .`
73
+ - [ ] Accessibility: keyboard navigation works, ARIA labels present
74
+ - [ ] Responsive: tested on mobile, tablet, desktop
75
+ - [ ] Performance: no unnecessary re-renders
76
+ <!-- AGENTS-GENERATED:END checklist -->
77
+
78
+ <!-- AGENTS-GENERATED:START examples -->
79
+ ## Patterns to Follow
80
+ > **Prefer looking at real code in this repo over generic examples.**
81
+ > See **Golden Samples** section above for files that demonstrate correct patterns.
82
+ <!-- AGENTS-GENERATED:END examples -->
83
+
84
+ <!-- AGENTS-GENERATED:START help -->
85
+ ## When stuck
86
+ - Check React documentation: https://react.dev
87
+ - Review TypeScript handbook: https://www.typescriptlang.org/docs/
88
+ - Check root AGENTS.md for project-wide conventions
89
+ - Review existing components for patterns
90
+ <!-- AGENTS-GENERATED:END help -->
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "internal-web",
3
+ "private": true,
4
+ "scripts": {
5
+ "dev": "vite",
6
+ "build": "vite build",
7
+ "test": "vitest"
8
+ },
9
+ "dependencies": {
10
+ "react": "^18.2.0",
11
+ "react-dom": "^18.2.0"
12
+ },
13
+ "devDependencies": {
14
+ "vite": "^8.0.8",
15
+ "vitest": "^1.0.0"
16
+ }
17
+ }
@@ -0,0 +1 @@
1
+ export default function App() { return <div>App</div>; }
@@ -0,0 +1 @@
1
+ export default function Button() { return <div>Button</div>; }
@@ -0,0 +1 @@
1
+ export default function Footer() { return <div>Footer</div>; }
@@ -0,0 +1 @@
1
+ export default function Header() { return <div>Header</div>; }
@@ -0,0 +1 @@
1
+ export default function Sidebar() { return <div>Sidebar</div>; }
@@ -0,0 +1,7 @@
1
+ package main
2
+
3
+ import "fmt"
4
+
5
+ func main() {
6
+ fmt.Println("Hello from Go backend")
7
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "frontend",
3
+ "scripts": {
4
+ "build": "vite build",
5
+ "test": "vitest"
6
+ },
7
+ "devDependencies": {
8
+ "react": "^18.0.0",
9
+ "vite": "^8.0.8",
10
+ "vitest": "^1.0.0"
11
+ }
12
+ }
@@ -0,0 +1,70 @@
1
+ <!-- FOR AI AGENTS - Human readability is a side effect, not a goal -->
2
+ <!-- Managed by agent: keep sections and order; edit content, not structure -->
3
+ <!-- Last updated: 2026-02-05 | Last verified: never -->
4
+
5
+ # AGENTS.md
6
+
7
+ **Precedence:** the **closest `AGENTS.md`** to the files you're changing wins. Root holds global defaults only.
8
+
9
+ ## Commands (unverified)
10
+ > Source: go.mod — CI-sourced commands are most reliable
11
+
12
+ <!-- AGENTS-GENERATED:START commands -->
13
+ | Task | Command | ~Time |
14
+ |------|---------|-------|
15
+ | Typecheck | go build -v ./... | ~15s |
16
+ | Format | gofmt -w . | ~5s |
17
+ | Test (single) | go test -v -race | ~2s |
18
+ | Test (all) | go test -v -race -short ./... | ~30s |
19
+ | Build | go build -v ./... | ~30s |
20
+ <!-- AGENTS-GENERATED:END commands -->
21
+
22
+ > If commands fail, verify against Makefile/package.json/composer.json or ask user to update.
23
+
24
+ ## Workflow
25
+ 1. **Before coding**: Read nearest `AGENTS.md` + check Golden Samples for the area you're touching
26
+ 2. **After each change**: Run the smallest relevant check (lint → typecheck → single test)
27
+ 3. **Before committing**: Run full test suite if changes affect >2 files or touch shared code
28
+
29
+ ## Heuristics (quick decisions)
30
+ <!-- AGENTS-GENERATED:START heuristics -->
31
+ | When | Do |
32
+ |------|-----|
33
+ | Adding package | Internal → `internal/`, Public → `pkg/` |
34
+ | Committing | Use Conventional Commits (feat:, fix:, docs:, etc.) |
35
+ | Merging PRs | Squash and merge |
36
+ | Adding dependency | Ask first - we minimize deps |
37
+ | Unsure about pattern | Check Golden Samples above |
38
+ <!-- AGENTS-GENERATED:END heuristics -->
39
+
40
+ ## Repository Settings
41
+ <!-- AGENTS-GENERATED:START repo-settings -->
42
+ - **Default branch:** `main`
43
+ - **Merge strategy:** squash, merge, rebase
44
+ <!-- AGENTS-GENERATED:END repo-settings -->
45
+
46
+ ## Boundaries
47
+
48
+ ### Always Do
49
+ - Run pre-commit checks before committing
50
+ - Add tests for new code paths
51
+ - Use conventional commit format: `type(scope): subject`
52
+ - Follow Go 1.25 conventions and idioms
53
+
54
+ ### Ask First
55
+ - Adding new dependencies
56
+ - Modifying CI/CD configuration
57
+ - Changing public API signatures
58
+ - Running full e2e test suites
59
+ - Repo-wide refactoring or rewrites
60
+
61
+ ### Never Do
62
+ - Commit secrets, credentials, or sensitive data
63
+ - Modify vendor/, node_modules/, or generated files
64
+ - Push directly to main/master branch
65
+ - Delete migration files or schema changes
66
+ - Commit go.sum without go.mod changes
67
+
68
+ ## When instructions conflict
69
+ The nearest `AGENTS.md` wins. Explicit user prompts override files.
70
+ - For Go-specific patterns, defer to language idioms and standard library conventions
@@ -0,0 +1,3 @@
1
+ module example.com/ldap-selfservice
2
+
3
+ go 1.25
@@ -0,0 +1,371 @@
1
+ # Go Backend Services
2
+
3
+ <!-- Managed by agent: keep sections & order; edit content, not structure. Last updated: 2025-10-09 -->
4
+
5
+ **Scope**: Go backend packages in `internal/` directory
6
+
7
+ **See also**: [../AGENTS.md](../AGENTS.md) for global standards, [web/AGENTS.md](web/AGENTS.md) for frontend
8
+
9
+ ## Overview
10
+
11
+ Backend services for LDAP selfservice password change/reset functionality. Organized as internal Go packages:
12
+
13
+ - **email/**: SMTP email service for password reset tokens
14
+ - **options/**: Configuration management from environment variables
15
+ - **ratelimit/**: IP-based rate limiting (3 req/hour default)
16
+ - **resettoken/**: Cryptographic token generation and validation
17
+ - **rpc/**: JSON-RPC 2.0 API handlers (password change/reset)
18
+ - **validators/**: Password policy validation logic
19
+ - **web/**: HTTP server setup, static assets, routing (see [web/AGENTS.md](web/AGENTS.md))
20
+
21
+ ## Setup/Environment
22
+
23
+ **Required environment variables** (configure in `.env.local`):
24
+
25
+ ```bash
26
+ # LDAP connection
27
+ LDAP_URL=ldaps://ldap.example.com:636
28
+ LDAP_USER_BASE_DN=ou=users,dc=example,dc=com
29
+ LDAP_BIND_DN=cn=admin,dc=example,dc=com
30
+ LDAP_BIND_PASSWORD=secret
31
+
32
+ # Email for password reset
33
+ SMTP_HOST=smtp.example.com
34
+ SMTP_PORT=587
35
+ SMTP_USER=noreply@example.com
36
+ SMTP_PASSWORD=secret
37
+ SMTP_FROM=noreply@example.com
38
+ APP_BASE_URL=https://passwd.example.com
39
+
40
+ # Rate limiting (optional)
41
+ RATE_LIMIT_REQUESTS=3
42
+ RATE_LIMIT_WINDOW=1h
43
+
44
+ # Token expiry (optional)
45
+ TOKEN_EXPIRY_DURATION=1h
46
+ ```
47
+
48
+ **Go toolchain**: Requires Go 1.25+ (specified in `go.mod`)
49
+
50
+ **Key dependencies**:
51
+
52
+ - `github.com/gofiber/fiber/v2` - HTTP server
53
+ - `github.com/netresearch/simple-ldap-go` - LDAP client
54
+ - `github.com/testcontainers/testcontainers-go` - Integration testing
55
+ - `github.com/joho/godotenv` - Environment loading
56
+
57
+ ## Build & Tests
58
+
59
+ ```bash
60
+ # Development
61
+ go run . # Start server with hot-reload (via pnpm go:dev)
62
+ go build -v ./... # Compile all packages
63
+ go test -v ./... # Run all tests with verbose output
64
+
65
+ # Specific package testing
66
+ go test ./internal/validators/... # Test password validators
67
+ go test ./internal/ratelimit/... # Test rate limiter
68
+ go test ./internal/resettoken/... # Test token generation
69
+ go test -run TestSpecificFunction # Run specific test
70
+
71
+ # Integration tests (uses testcontainers)
72
+ go test -v ./internal/email/... # Requires Docker for MailHog container
73
+
74
+ # Coverage
75
+ go test -cover ./... # Coverage summary
76
+ go test -coverprofile=coverage.out ./... && go tool cover -html=coverage.out
77
+
78
+ # Build optimized binary
79
+ CGO_ENABLED=0 go build -ldflags="-w -s" -o ldap-passwd
80
+ ```
81
+
82
+ **CI validation** (from `.github/workflows/check.yml`):
83
+
84
+ ```bash
85
+ go mod download
86
+ go build -v ./...
87
+ go test -v ./...
88
+ ```
89
+
90
+ ## Code Style
91
+
92
+ **Go Standards**:
93
+
94
+ - Use `go fmt` (automatic via Prettier with go-template plugin)
95
+ - Follow [Effective Go](https://go.dev/doc/effective_go)
96
+ - Package-level documentation comments required
97
+ - Exported functions must have doc comments
98
+
99
+ **Project Conventions**:
100
+
101
+ - Internal packages only: No public API outside this project
102
+ - Error wrapping with context: `fmt.Errorf("context: %w", err)`
103
+ - Use structured logging (consider adding in future)
104
+ - Prefer explicit over implicit
105
+ - Use interfaces for testability (see `email/service.go`)
106
+
107
+ **Naming**:
108
+
109
+ - `internal/package/file.go` - implementation
110
+ - `internal/package/file_test.go` - tests
111
+ - Descriptive variable names (not `x`, `y`, `tmp`)
112
+ - No stuttering: `email.Service`, not `email.EmailService`
113
+
114
+ **Error Handling**:
115
+
116
+ ```go
117
+ // ✅ Good: wrap with context
118
+ if err != nil {
119
+ return fmt.Errorf("failed to connect LDAP at %s: %w", config.URL, err)
120
+ }
121
+
122
+ // ❌ Bad: lose context
123
+ if err != nil {
124
+ return err
125
+ }
126
+
127
+ // ❌ Worse: ignore
128
+ conn, _ := ldap.Dial(url)
129
+ ```
130
+
131
+ **Testing**:
132
+
133
+ - Table-driven tests preferred
134
+ - Use testcontainers for external dependencies (LDAP, SMTP)
135
+ - Test files colocated with code: `validators/validate_test.go`
136
+ - Descriptive test names: `TestPasswordValidation_RequiresMinimumLength`
137
+
138
+ ## Security
139
+
140
+ **LDAP Security**:
141
+
142
+ - Always use LDAPS in production (`ldaps://` URLs)
143
+ - Bind credentials in environment, never hardcoded
144
+ - Validate user input before LDAP queries (prevent injection)
145
+ - Use `simple-ldap-go` helpers to avoid raw LDAP filter construction
146
+
147
+ **Password Security**:
148
+
149
+ - Never log passwords (plain or hashed)
150
+ - No password storage - passwords go directly to LDAP
151
+ - Passwords only in memory during request lifetime
152
+ - HTTPS required for transport security
153
+
154
+ **Token Security**:
155
+
156
+ - Cryptographic random tokens (see `resettoken/token.go`)
157
+ - Configurable expiry (default 1h)
158
+ - Single-use tokens (invalidated after use)
159
+ - No token storage in logs or metrics
160
+
161
+ **Rate Limiting**:
162
+
163
+ - IP-based limits: 3 requests/hour default
164
+ - Configurable via `RATE_LIMIT_*` env vars
165
+ - In-memory store (consider Redis for multi-instance)
166
+ - Apply to both change and reset endpoints
167
+
168
+ **Input Validation**:
169
+
170
+ - Strict validation on all user inputs (see `validators/`)
171
+ - Reject malformed requests early
172
+ - Validate email format, username format, password policies
173
+ - No HTML/script injection vectors
174
+
175
+ ## PR/Commit Checklist
176
+
177
+ **Before committing Go code**:
178
+
179
+ - [ ] Run `go fmt ./...` (or `pnpm prettier --write .`)
180
+ - [ ] Run `go vet ./...` (static analysis)
181
+ - [ ] Run `go test ./...` (all tests pass)
182
+ - [ ] Run `go build` (compilation check)
183
+ - [ ] Update package doc comments if API changed
184
+ - [ ] Add/update tests for new functionality
185
+ - [ ] Check for sensitive data in logs
186
+ - [ ] Verify error messages provide useful context
187
+
188
+ **Testing requirements**:
189
+
190
+ - New features must have tests
191
+ - Bug fixes must have regression tests
192
+ - Aim for ≥80% coverage on changed packages
193
+ - Integration tests for external dependencies
194
+
195
+ **Documentation**:
196
+
197
+ - Update package doc comments (godoc)
198
+ - Update [docs/api-reference.md](../docs/api-reference.md) for RPC changes
199
+ - Update [docs/development-guide.md](../docs/development-guide.md) for new setup steps
200
+ - Update environment variable examples in `.env` and docs
201
+
202
+ ## Good vs Bad Examples
203
+
204
+ **✅ Good: Type-safe configuration**
205
+
206
+ ```go
207
+ type Config struct {
208
+ LDAPURL string `env:"LDAP_URL" validate:"required,url"`
209
+ BindDN string `env:"LDAP_BIND_DN" validate:"required"`
210
+ BindPassword string `env:"LDAP_BIND_PASSWORD" validate:"required"`
211
+ }
212
+
213
+ func LoadConfig() (*Config, error) {
214
+ var cfg Config
215
+ if err := env.Parse(&cfg); err != nil {
216
+ return nil, fmt.Errorf("parse config: %w", err)
217
+ }
218
+ return &cfg, nil
219
+ }
220
+ ```
221
+
222
+ **❌ Bad: Unsafe configuration**
223
+
224
+ ```go
225
+ func LoadConfig() *Config {
226
+ return &Config{
227
+ LDAPURL: os.Getenv("LDAP_URL"), // ❌ no validation, may be empty
228
+ }
229
+ }
230
+ ```
231
+
232
+ **✅ Good: Table-driven tests**
233
+
234
+ ```go
235
+ func TestPasswordValidation(t *testing.T) {
236
+ tests := []struct {
237
+ name string
238
+ password string
239
+ policy PasswordPolicy
240
+ wantErr bool
241
+ }{
242
+ {"valid password", "Test123!", PasswordPolicy{MinLength: 8}, false},
243
+ {"too short", "Ab1!", PasswordPolicy{MinLength: 8}, true},
244
+ {"no numbers", "TestTest", PasswordPolicy{RequireNumbers: true}, true},
245
+ }
246
+
247
+ for _, tt := range tests {
248
+ t.Run(tt.name, func(t *testing.T) {
249
+ err := ValidatePassword(tt.password, tt.policy)
250
+ if (err != nil) != tt.wantErr {
251
+ t.Errorf("got error %v, wantErr %v", err, tt.wantErr)
252
+ }
253
+ })
254
+ }
255
+ }
256
+ ```
257
+
258
+ **❌ Bad: Non-descriptive tests**
259
+
260
+ ```go
261
+ func TestPassword(t *testing.T) {
262
+ err := ValidatePassword("test") // ❌ what policy? what's expected?
263
+ if err == nil {
264
+ t.Fail()
265
+ }
266
+ }
267
+ ```
268
+
269
+ **✅ Good: Interface for testability**
270
+
271
+ ```go
272
+ type EmailService interface {
273
+ SendResetToken(ctx context.Context, to, token string) error
274
+ }
275
+
276
+ type SMTPService struct {
277
+ host string
278
+ port int
279
+ }
280
+
281
+ func (s *SMTPService) SendResetToken(ctx context.Context, to, token string) error {
282
+ // real implementation
283
+ }
284
+
285
+ // In tests, use mock implementation
286
+ type MockEmailService struct {
287
+ SendFunc func(ctx context.Context, to, token string) error
288
+ }
289
+ ```
290
+
291
+ **❌ Bad: Hard-to-test concrete dependency**
292
+
293
+ ```go
294
+ func ResetPassword(username string) error {
295
+ service := NewSMTPService() // ❌ hardcoded, can't mock
296
+ return service.SendEmail(...)
297
+ }
298
+ ```
299
+
300
+ ## When Stuck
301
+
302
+ **Go-specific issues**:
303
+
304
+ 1. **Module issues**: `go mod tidy` to clean dependencies
305
+ 2. **Import errors**: Check `go.mod` requires correct versions
306
+ 3. **Test failures**: `go test -v ./... -run FailingTest` for verbose output
307
+ 4. **LDAP connection**: Verify `LDAP_URL` format and network access
308
+ 5. **Email testing**: Ensure Docker running for testcontainers (MailHog)
309
+ 6. **Rate limit testing**: Tests may fail if system time incorrect
310
+
311
+ **Debugging**:
312
+
313
+ ```bash
314
+ # Verbose test output
315
+ go test -v ./internal/package/...
316
+
317
+ # Run specific test
318
+ go test -run TestName ./internal/package/
319
+
320
+ # Race detector (for concurrency issues)
321
+ go test -race ./...
322
+
323
+ # Build with debug info
324
+ go build -gcflags="all=-N -l"
325
+ ```
326
+
327
+ **Common pitfalls**:
328
+
329
+ - **Nil pointer dereference**: Check error returns before using values
330
+ - **Context cancellation**: Always respect `context.Context` in long operations
331
+ - **Resource leaks**: Defer `Close()` calls immediately after acquiring resources
332
+ - **Goroutine leaks**: Ensure all goroutines can exit
333
+ - **Time zones**: Use `time.UTC` for consistency
334
+
335
+ ## Package-Specific Notes
336
+
337
+ ### email/
338
+
339
+ - Uses testcontainers for integration tests
340
+ - MailHog container spins up automatically in tests
341
+ - Mock `EmailService` interface for unit tests in other packages
342
+
343
+ ### options/
344
+
345
+ - Configuration loaded from environment via `godotenv`
346
+ - Validation happens at startup (fail-fast)
347
+ - See `.env.local.example` for required variables
348
+
349
+ ### ratelimit/
350
+
351
+ - In-memory store (map with mutex)
352
+ - Consider Redis for multi-instance deployments
353
+ - Tests use fixed time.Now for deterministic results
354
+
355
+ ### resettoken/
356
+
357
+ - Crypto/rand for token generation (never math/rand)
358
+ - Base64 URL encoding (safe for URLs)
359
+ - Store tokens server-side with expiry
360
+
361
+ ### rpc/
362
+
363
+ - JSON-RPC 2.0 specification compliance
364
+ - Error codes defined in [docs/api-reference.md](../docs/api-reference.md)
365
+ - Request validation before processing
366
+
367
+ ### validators/
368
+
369
+ - Pure functions (no side effects)
370
+ - Configurable policies from environment
371
+ - Clear error messages for user feedback