proagents 1.0.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 (444) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +170 -0
  3. package/bin/proagents.js +90 -0
  4. package/lib/commands/feature.js +125 -0
  5. package/lib/commands/fix.js +60 -0
  6. package/lib/commands/help.js +76 -0
  7. package/lib/commands/init.js +64 -0
  8. package/lib/commands/status.js +91 -0
  9. package/lib/index.js +28 -0
  10. package/package.json +52 -0
  11. package/proagents/.learning/global/common-patterns.json +77 -0
  12. package/proagents/.learning/global/user-preferences.json +76 -0
  13. package/proagents/.learning/projects/example-project/corrections.json +99 -0
  14. package/proagents/.learning/projects/example-project/feedback.json +109 -0
  15. package/proagents/.learning/projects/example-project/metrics.json +101 -0
  16. package/proagents/.learning/projects/example-project/patterns.json +102 -0
  17. package/proagents/.learning/schemas/README.md +48 -0
  18. package/proagents/.learning/schemas/corrections-schema.json +100 -0
  19. package/proagents/.learning/schemas/feedback-schema.json +144 -0
  20. package/proagents/.learning/schemas/metrics-schema.json +96 -0
  21. package/proagents/.learning/schemas/patterns-schema.json +82 -0
  22. package/proagents/.learning/schemas/project-patterns-schema.json +125 -0
  23. package/proagents/.learning/schemas/user-preferences-schema.json +136 -0
  24. package/proagents/GETTING-STARTED-STORY.md +708 -0
  25. package/proagents/README.md +99 -0
  26. package/proagents/WORKFLOW.md +1234 -0
  27. package/proagents/active-features/.gitkeep +0 -0
  28. package/proagents/active-features/README.md +176 -0
  29. package/proagents/active-features/_index.json +74 -0
  30. package/proagents/active-features/feature-user-auth/dependencies.json +81 -0
  31. package/proagents/active-features/feature-user-auth/files-modified.json +126 -0
  32. package/proagents/active-features/feature-user-auth/status.json +122 -0
  33. package/proagents/active-features/schemas/dependencies-schema.json +119 -0
  34. package/proagents/active-features/schemas/feature-schema.json +132 -0
  35. package/proagents/active-features/schemas/files-schema.json +100 -0
  36. package/proagents/active-features/schemas/index-schema.json +95 -0
  37. package/proagents/adr/README.md +302 -0
  38. package/proagents/adr/examples/api-versioning.md +297 -0
  39. package/proagents/adr/examples/database-choice.md +264 -0
  40. package/proagents/adr/template.md +273 -0
  41. package/proagents/ai-models/README.md +141 -0
  42. package/proagents/ai-models/cost-management.md +362 -0
  43. package/proagents/ai-models/fallbacks.md +342 -0
  44. package/proagents/ai-models/model-config.md +318 -0
  45. package/proagents/ai-models/task-routing.md +503 -0
  46. package/proagents/ai-training/README.md +155 -0
  47. package/proagents/ai-training/continuous-learning.md +413 -0
  48. package/proagents/ai-training/domain-knowledge.md +378 -0
  49. package/proagents/ai-training/pattern-learning.md +455 -0
  50. package/proagents/ai-training/training-data.md +337 -0
  51. package/proagents/ai-training/user-preferences.md +346 -0
  52. package/proagents/api-versioning/README.md +257 -0
  53. package/proagents/api-versioning/changelog-template.md +225 -0
  54. package/proagents/api-versioning/deprecation-workflow.md +470 -0
  55. package/proagents/api-versioning/versioning-strategy.md +291 -0
  56. package/proagents/approval-workflows/README.md +146 -0
  57. package/proagents/approval-workflows/approval-config.md +332 -0
  58. package/proagents/approval-workflows/approval-stages.md +503 -0
  59. package/proagents/approval-workflows/emergency-bypass.md +351 -0
  60. package/proagents/approval-workflows/examples.md +859 -0
  61. package/proagents/approval-workflows/notifications.md +320 -0
  62. package/proagents/automation/README.md +38 -0
  63. package/proagents/automation/ai-behavior-rules.md +339 -0
  64. package/proagents/automation/ai-prompt-injection.md +331 -0
  65. package/proagents/automation/auto-decisions.md +535 -0
  66. package/proagents/automation/decision-defaults.yaml +317 -0
  67. package/proagents/cache/README.md +110 -0
  68. package/proagents/cache/analysis-metadata.json +76 -0
  69. package/proagents/cache/conventions.json +125 -0
  70. package/proagents/cache/dependencies.json +85 -0
  71. package/proagents/cache/features.json +115 -0
  72. package/proagents/cache/patterns.json +105 -0
  73. package/proagents/cache/schemas/conventions-schema.json +138 -0
  74. package/proagents/cache/schemas/dependencies-schema.json +95 -0
  75. package/proagents/cache/schemas/features-schema.json +104 -0
  76. package/proagents/cache/schemas/metadata-schema.json +83 -0
  77. package/proagents/cache/schemas/patterns-schema.json +136 -0
  78. package/proagents/cache/schemas/structure-schema.json +72 -0
  79. package/proagents/cache/structure.json +109 -0
  80. package/proagents/changelog/2024/01/2024-01-10-api-url-config.md +41 -0
  81. package/proagents/changelog/2024/01/2024-01-12-login-bug-fix.md +69 -0
  82. package/proagents/changelog/2024/01/2024-01-15-user-auth-feature.md +99 -0
  83. package/proagents/changelog/CHANGELOG.md +82 -0
  84. package/proagents/changelog/README.md +327 -0
  85. package/proagents/changelog/entry-template.md +283 -0
  86. package/proagents/checklists/README.md +261 -0
  87. package/proagents/checklists/code-quality.md +137 -0
  88. package/proagents/checklists/code-review.md +148 -0
  89. package/proagents/checklists/pr-checklist.md +78 -0
  90. package/proagents/checklists/pre-deployment.md +132 -0
  91. package/proagents/checklists/pre-implementation.md +80 -0
  92. package/proagents/checklists/testing.md +120 -0
  93. package/proagents/cicd/README.md +338 -0
  94. package/proagents/cicd/azure-devops.md +267 -0
  95. package/proagents/cicd/github-actions.md +375 -0
  96. package/proagents/cicd/gitlab-ci.md +278 -0
  97. package/proagents/cicd/jenkins.md +317 -0
  98. package/proagents/cli/README.md +392 -0
  99. package/proagents/cli/commands-reference.md +893 -0
  100. package/proagents/cli/ide-integration.md +584 -0
  101. package/proagents/cli/shortcuts.md +394 -0
  102. package/proagents/cli/slash-commands.md +507 -0
  103. package/proagents/collaboration/README.md +143 -0
  104. package/proagents/collaboration/roles.md +248 -0
  105. package/proagents/collaboration/sessions.md +390 -0
  106. package/proagents/collaboration/sync.md +358 -0
  107. package/proagents/compliance/README.md +206 -0
  108. package/proagents/compliance/access-control.md +310 -0
  109. package/proagents/compliance/audit-logging.md +444 -0
  110. package/proagents/compliance/compliance-frameworks.md +429 -0
  111. package/proagents/compliance/reports.md +491 -0
  112. package/proagents/compliance/retention-policies.md +454 -0
  113. package/proagents/config/README.md +181 -0
  114. package/proagents/config/integrations/README.md +68 -0
  115. package/proagents/config/integrations/github.yaml +211 -0
  116. package/proagents/config/integrations/jira.yaml +144 -0
  117. package/proagents/config/integrations/linear.yaml +157 -0
  118. package/proagents/config/integrations/notion.yaml +203 -0
  119. package/proagents/config/integrations/slack.yaml +230 -0
  120. package/proagents/config/rules/README.md +73 -0
  121. package/proagents/config/rules/custom-rules.template.yaml +188 -0
  122. package/proagents/config/rules/validation-rules.template.yaml +177 -0
  123. package/proagents/config/standards/README.md +58 -0
  124. package/proagents/config/standards/architecture-rules.template.md +124 -0
  125. package/proagents/config/standards/coding-standards.template.md +107 -0
  126. package/proagents/config/standards/naming-conventions.template.md +114 -0
  127. package/proagents/config/standards/testing-standards.template.md +213 -0
  128. package/proagents/config/templates/README.md +74 -0
  129. package/proagents/config/templates/api-route.template.ts +142 -0
  130. package/proagents/config/templates/component.template.tsx +55 -0
  131. package/proagents/config/templates/hook.template.ts +93 -0
  132. package/proagents/config/templates/test.template.ts +171 -0
  133. package/proagents/config-versioning/README.md +120 -0
  134. package/proagents/config-versioning/changelog.md +300 -0
  135. package/proagents/config-versioning/rollback.md +283 -0
  136. package/proagents/config-versioning/versioning.md +330 -0
  137. package/proagents/contract-testing/README.md +223 -0
  138. package/proagents/contract-testing/contract-testing.md +614 -0
  139. package/proagents/contract-testing/pact-integration.md +507 -0
  140. package/proagents/contract-testing/schema-validation.md +565 -0
  141. package/proagents/cost/README.md +48 -0
  142. package/proagents/cost/cost-template.md +283 -0
  143. package/proagents/cost/estimation-framework.md +287 -0
  144. package/proagents/database/README.md +72 -0
  145. package/proagents/database/examples/001-create-users.sql +129 -0
  146. package/proagents/database/examples/002-add-preferences.sql +94 -0
  147. package/proagents/database/examples/003-add-index.sql +105 -0
  148. package/proagents/database/examples/004-rename-column.sql +122 -0
  149. package/proagents/database/examples/005-add-foreign-key.sql +142 -0
  150. package/proagents/database/examples/006-data-migration.sql +196 -0
  151. package/proagents/database/examples/007-drop-column.sql +163 -0
  152. package/proagents/database/examples/README.md +89 -0
  153. package/proagents/database/migration-workflow.md +478 -0
  154. package/proagents/database/rollback-scripts.md +487 -0
  155. package/proagents/database/safety-checks.md +447 -0
  156. package/proagents/dependency-management/README.md +140 -0
  157. package/proagents/dependency-management/automation.md +363 -0
  158. package/proagents/dependency-management/compatibility.md +319 -0
  159. package/proagents/dependency-management/security-scanning.md +413 -0
  160. package/proagents/dependency-management/update-policies.md +374 -0
  161. package/proagents/disaster-recovery/README.md +247 -0
  162. package/proagents/disaster-recovery/automation.md +366 -0
  163. package/proagents/disaster-recovery/backup-recovery.md +571 -0
  164. package/proagents/disaster-recovery/incident-response.md +565 -0
  165. package/proagents/disaster-recovery/rollback-procedures.md +499 -0
  166. package/proagents/disaster-recovery/runbooks.md +603 -0
  167. package/proagents/disaster-recovery/scenarios.md +892 -0
  168. package/proagents/disaster-recovery/testing.md +438 -0
  169. package/proagents/environments/README.md +244 -0
  170. package/proagents/environments/configuration.md +437 -0
  171. package/proagents/environments/promotion.md +434 -0
  172. package/proagents/environments/setup.md +420 -0
  173. package/proagents/examples/README.md +55 -0
  174. package/proagents/examples/backend-nodejs/README.md +188 -0
  175. package/proagents/examples/backend-nodejs/complete-conversation.md +601 -0
  176. package/proagents/examples/backend-nodejs/proagents.config.yaml +415 -0
  177. package/proagents/examples/backend-nodejs/workflow-example.md +909 -0
  178. package/proagents/examples/fullstack-nextjs/README.md +155 -0
  179. package/proagents/examples/fullstack-nextjs/complete-conversation.md +604 -0
  180. package/proagents/examples/fullstack-nextjs/proagents.config.yaml +287 -0
  181. package/proagents/examples/fullstack-nextjs/workflow-example.md +553 -0
  182. package/proagents/examples/mobile-react-native/README.md +171 -0
  183. package/proagents/examples/mobile-react-native/complete-conversation.md +825 -0
  184. package/proagents/examples/mobile-react-native/proagents.config.yaml +330 -0
  185. package/proagents/examples/mobile-react-native/workflow-example.md +723 -0
  186. package/proagents/examples/web-frontend-react/README.md +125 -0
  187. package/proagents/examples/web-frontend-react/complete-conversation.md +556 -0
  188. package/proagents/examples/web-frontend-react/proagents.config.yaml +183 -0
  189. package/proagents/examples/web-frontend-react/workflow-example.md +603 -0
  190. package/proagents/existing-projects/README.md +65 -0
  191. package/proagents/existing-projects/challenges.md +861 -0
  192. package/proagents/existing-projects/coexistence-mode.md +483 -0
  193. package/proagents/existing-projects/compatibility-assessment.md +541 -0
  194. package/proagents/existing-projects/gradual-adoption.md +515 -0
  195. package/proagents/existing-projects/migration-strategies.md +788 -0
  196. package/proagents/existing-projects/pattern-reconciliation.md +489 -0
  197. package/proagents/existing-projects/team-onboarding.md +617 -0
  198. package/proagents/existing-projects/technical-debt-handling.md +644 -0
  199. package/proagents/feature-flags/README.md +263 -0
  200. package/proagents/feature-flags/ab-testing.md +413 -0
  201. package/proagents/feature-flags/configuration.md +420 -0
  202. package/proagents/feature-flags/kill-switches.md +444 -0
  203. package/proagents/feature-flags/rollout-strategies.md +392 -0
  204. package/proagents/getting-started/README.md +60 -0
  205. package/proagents/getting-started/ai-training-setup.md +380 -0
  206. package/proagents/getting-started/ide-setup.md +195 -0
  207. package/proagents/getting-started/mcp-setup.md +239 -0
  208. package/proagents/getting-started/pm-integration.md +336 -0
  209. package/proagents/getting-started/prompt-engineering.md +478 -0
  210. package/proagents/getting-started/team-onboarding.md +236 -0
  211. package/proagents/git/README.md +68 -0
  212. package/proagents/git/branch-strategy.md +164 -0
  213. package/proagents/git/commit-conventions.md +241 -0
  214. package/proagents/git/pr-workflow.md +286 -0
  215. package/proagents/git/rollback-procedures.md +416 -0
  216. package/proagents/i18n/README.md +133 -0
  217. package/proagents/i18n/extraction.md +433 -0
  218. package/proagents/i18n/tms-integration.md +332 -0
  219. package/proagents/i18n/translation-workflow.md +413 -0
  220. package/proagents/i18n/validation.md +355 -0
  221. package/proagents/ide-integration/README.md +124 -0
  222. package/proagents/ide-integration/cline-config.md +429 -0
  223. package/proagents/ide-integration/continue-config.md +380 -0
  224. package/proagents/ide-integration/cursor-rules.md +280 -0
  225. package/proagents/ide-integration/github-copilot.md +384 -0
  226. package/proagents/ide-integration/windsurf-rules.md +314 -0
  227. package/proagents/integrations/README.md +97 -0
  228. package/proagents/integrations/pm/README.md +344 -0
  229. package/proagents/learning/README.md +136 -0
  230. package/proagents/learning/adaptation.md +305 -0
  231. package/proagents/learning/data-collection.md +283 -0
  232. package/proagents/learning/implementation-guide.md +865 -0
  233. package/proagents/learning/reports.md +306 -0
  234. package/proagents/logging/README.md +276 -0
  235. package/proagents/logging/aggregation.md +475 -0
  236. package/proagents/logging/log-levels.md +376 -0
  237. package/proagents/logging/sensitive-data.md +423 -0
  238. package/proagents/logging/structured-logging.md +406 -0
  239. package/proagents/mcp/README.md +133 -0
  240. package/proagents/mcp/context-providers.md +442 -0
  241. package/proagents/mcp/server-config.md +306 -0
  242. package/proagents/mcp/tools-definition.md +513 -0
  243. package/proagents/metrics/README.md +174 -0
  244. package/proagents/metrics/code-quality-kpis.md +461 -0
  245. package/proagents/metrics/deployment-metrics.md +517 -0
  246. package/proagents/metrics/developer-productivity.md +368 -0
  247. package/proagents/metrics/learning-effectiveness.md +478 -0
  248. package/proagents/migrations/README.md +77 -0
  249. package/proagents/migrations/from-claude-projects.md +312 -0
  250. package/proagents/migrations/from-cursor-rules.md +345 -0
  251. package/proagents/migrations/from-custom-workflows.md +410 -0
  252. package/proagents/monitoring/README.md +308 -0
  253. package/proagents/monitoring/alerting.md +449 -0
  254. package/proagents/monitoring/dashboards.md +454 -0
  255. package/proagents/monitoring/health-checks.md +436 -0
  256. package/proagents/monitoring/metrics.md +434 -0
  257. package/proagents/multi-project/README.md +170 -0
  258. package/proagents/multi-project/coordinated-deploy.md +510 -0
  259. package/proagents/multi-project/cross-project-deps.md +395 -0
  260. package/proagents/multi-project/unified-changelog.md +477 -0
  261. package/proagents/multi-project/walkthroughs/monorepo-setup.md +787 -0
  262. package/proagents/multi-project/workspace-config.md +408 -0
  263. package/proagents/notifications/README.md +151 -0
  264. package/proagents/notifications/channels.md +457 -0
  265. package/proagents/notifications/preferences.md +415 -0
  266. package/proagents/notifications/routing.md +449 -0
  267. package/proagents/notifications/scheduling.md +425 -0
  268. package/proagents/notifications/templates.md +446 -0
  269. package/proagents/offline-mode/README.md +145 -0
  270. package/proagents/offline-mode/caching.md +344 -0
  271. package/proagents/offline-mode/offline-operations.md +312 -0
  272. package/proagents/offline-mode/queue-specifications.md +679 -0
  273. package/proagents/offline-mode/sync.md +475 -0
  274. package/proagents/parallel-features/README.md +85 -0
  275. package/proagents/parallel-features/conflict-detection.md +226 -0
  276. package/proagents/parallel-features/dependency-management.md +392 -0
  277. package/proagents/parallel-features/merge-coordination.md +506 -0
  278. package/proagents/parallel-features/tracking-system.md +416 -0
  279. package/proagents/patterns/README.md +305 -0
  280. package/proagents/patterns/api-errors.md +453 -0
  281. package/proagents/patterns/async-errors.md +521 -0
  282. package/proagents/patterns/error-types.md +437 -0
  283. package/proagents/patterns/ui-errors.md +595 -0
  284. package/proagents/performance/README.md +59 -0
  285. package/proagents/performance/bundle-analysis.md +375 -0
  286. package/proagents/performance/load-testing.md +563 -0
  287. package/proagents/performance/runtime-metrics.md +489 -0
  288. package/proagents/performance/web-vitals.md +425 -0
  289. package/proagents/plugins/README.md +139 -0
  290. package/proagents/plugins/creating-plugins.md +504 -0
  291. package/proagents/plugins/plugin-api.md +467 -0
  292. package/proagents/plugins/plugin-registry.md +276 -0
  293. package/proagents/pm-integration/README.md +151 -0
  294. package/proagents/pm-integration/asana.md +346 -0
  295. package/proagents/pm-integration/github-issues.md +308 -0
  296. package/proagents/pm-integration/gitlab-issues.md +482 -0
  297. package/proagents/pm-integration/jira.md +364 -0
  298. package/proagents/pm-integration/linear.md +409 -0
  299. package/proagents/pm-integration/notion.md +275 -0
  300. package/proagents/pm-integration/sync-config.md +533 -0
  301. package/proagents/pm-integration/trello.md +159 -0
  302. package/proagents/proagents.config.yaml +213 -0
  303. package/proagents/prompts/00-init-wizard.md +426 -0
  304. package/proagents/prompts/00-init.md +219 -0
  305. package/proagents/prompts/01-analysis.md +244 -0
  306. package/proagents/prompts/02-requirements.md +399 -0
  307. package/proagents/prompts/03-ui-design.md +493 -0
  308. package/proagents/prompts/04-planning.md +505 -0
  309. package/proagents/prompts/05-implementation.md +518 -0
  310. package/proagents/prompts/06-testing.md +620 -0
  311. package/proagents/prompts/06.5-code-review.md +512 -0
  312. package/proagents/prompts/07-documentation.md +673 -0
  313. package/proagents/prompts/08-deployment.md +539 -0
  314. package/proagents/prompts/09-rollback.md +554 -0
  315. package/proagents/prompts/README.md +51 -0
  316. package/proagents/prompts/accessibility/README.md +146 -0
  317. package/proagents/prompts/accessibility/aria.md +276 -0
  318. package/proagents/prompts/accessibility/audit.md +233 -0
  319. package/proagents/prompts/accessibility/keyboard.md +392 -0
  320. package/proagents/prompts/accessibility/wcag.md +189 -0
  321. package/proagents/prompts/debugging/README.md +51 -0
  322. package/proagents/prompts/debugging/error-analysis.md +385 -0
  323. package/proagents/prompts/debugging/performance-debug.md +381 -0
  324. package/proagents/prompts/debugging/systematic.md +270 -0
  325. package/proagents/prompts/performance/README.md +47 -0
  326. package/proagents/prompts/performance/analyze.md +265 -0
  327. package/proagents/prompts/performance/optimize.md +347 -0
  328. package/proagents/prompts/refactoring/README.md +51 -0
  329. package/proagents/prompts/refactoring/architecture.md +531 -0
  330. package/proagents/prompts/refactoring/code-smells.md +174 -0
  331. package/proagents/prompts/refactoring/patterns.md +516 -0
  332. package/proagents/prompts/security-audit/README.md +197 -0
  333. package/proagents/prompts/security-audit/code-review.md +260 -0
  334. package/proagents/prompts/security-audit/vulnerability-scan.md +288 -0
  335. package/proagents/reporting/README.md +158 -0
  336. package/proagents/reporting/dashboards.md +366 -0
  337. package/proagents/reporting/exports.md +524 -0
  338. package/proagents/reporting/quality-metrics.md +385 -0
  339. package/proagents/reporting/templates/README.md +56 -0
  340. package/proagents/reporting/templates/dashboard-config.json +187 -0
  341. package/proagents/reporting/templates/metrics-queries.md +427 -0
  342. package/proagents/reporting/templates/react-dashboard.tsx +544 -0
  343. package/proagents/reporting/templates/widgets.md +451 -0
  344. package/proagents/reporting/velocity-metrics.md +340 -0
  345. package/proagents/reverse-engineering/README.md +151 -0
  346. package/proagents/reverse-engineering/architecture-extraction.md +325 -0
  347. package/proagents/reverse-engineering/code-analysis.md +377 -0
  348. package/proagents/reverse-engineering/dependency-mapping.md +567 -0
  349. package/proagents/reverse-engineering/diagram-generation.md +586 -0
  350. package/proagents/reverse-engineering/documentation-generation.md +468 -0
  351. package/proagents/reverse-engineering/pattern-detection.md +569 -0
  352. package/proagents/reverse-engineering/quality-assessment.md +733 -0
  353. package/proagents/rules/README.md +179 -0
  354. package/proagents/rules/custom-rules-template.yaml +286 -0
  355. package/proagents/rules/custom-rules.md +754 -0
  356. package/proagents/rules/validation-rules-template.yaml +517 -0
  357. package/proagents/runbooks/README.md +219 -0
  358. package/proagents/runbooks/dependency-vulnerability.md +505 -0
  359. package/proagents/runbooks/incident-response.md +451 -0
  360. package/proagents/runbooks/performance-degradation.md +584 -0
  361. package/proagents/runbooks/production-debugging.md +489 -0
  362. package/proagents/scaffolding/README.md +64 -0
  363. package/proagents/scaffolding/nextjs/README.md +578 -0
  364. package/proagents/scaffolding/nextjs/templates/api-route.ts.template +185 -0
  365. package/proagents/scaffolding/nextjs/templates/page.tsx.template +109 -0
  366. package/proagents/scaffolding/nextjs/templates/server-action.ts.template +204 -0
  367. package/proagents/scaffolding/nodejs/README.md +558 -0
  368. package/proagents/scaffolding/nodejs/templates/controller.ts.template +167 -0
  369. package/proagents/scaffolding/nodejs/templates/repository.ts.template +155 -0
  370. package/proagents/scaffolding/nodejs/templates/service.ts.template +207 -0
  371. package/proagents/scaffolding/project-types.md +401 -0
  372. package/proagents/scaffolding/react/README.md +399 -0
  373. package/proagents/scaffolding/react/templates/component.tsx.template +88 -0
  374. package/proagents/scaffolding/react/templates/hook.ts.template +127 -0
  375. package/proagents/scaffolding/react/templates/service.ts.template +155 -0
  376. package/proagents/scaffolding/react/templates/test.tsx.template +149 -0
  377. package/proagents/scaffolding/react-native/README.md +476 -0
  378. package/proagents/scaffolding/react-native/templates/hook.ts.template +226 -0
  379. package/proagents/scaffolding/react-native/templates/screen.tsx.template +247 -0
  380. package/proagents/secrets/README.md +278 -0
  381. package/proagents/secrets/access-control.md +443 -0
  382. package/proagents/secrets/rotation.md +403 -0
  383. package/proagents/secrets/scanning.md +487 -0
  384. package/proagents/secrets/storage.md +394 -0
  385. package/proagents/security/README.md +71 -0
  386. package/proagents/security/owasp-checklist.md +390 -0
  387. package/proagents/security/sast-guide.md +473 -0
  388. package/proagents/security/security-report-template.md +343 -0
  389. package/proagents/security/vulnerability-scanning.md +329 -0
  390. package/proagents/slash-commands.json +161 -0
  391. package/proagents/standards/README.md +120 -0
  392. package/proagents/standards/architecture-patterns.md +728 -0
  393. package/proagents/standards/architecture-rules-template.md +489 -0
  394. package/proagents/standards/coding-standards-template.md +489 -0
  395. package/proagents/standards/examples/README.md +61 -0
  396. package/proagents/standards/examples/nodejs-api.md +560 -0
  397. package/proagents/standards/examples/react-nextjs.md +428 -0
  398. package/proagents/standards/naming-conventions-template.md +526 -0
  399. package/proagents/standards/override-system.md +717 -0
  400. package/proagents/standards/testing-standards-template.md +220 -0
  401. package/proagents/team/README.md +256 -0
  402. package/proagents/team/code-ownership.md +306 -0
  403. package/proagents/team/communication-templates.md +441 -0
  404. package/proagents/team/handoff-protocol.md +380 -0
  405. package/proagents/team/ide-setup/README.md +103 -0
  406. package/proagents/team/ide-setup/cursor.md +276 -0
  407. package/proagents/team/ide-setup/jetbrains.md +330 -0
  408. package/proagents/team/ide-setup/neovim.md +640 -0
  409. package/proagents/team/ide-setup/vscode.md +348 -0
  410. package/proagents/team/onboarding.md +278 -0
  411. package/proagents/templates/README.md +57 -0
  412. package/proagents/templates/code-review-report.md +255 -0
  413. package/proagents/templates/codebase-analysis-report.md +315 -0
  414. package/proagents/templates/deployment-checklist.md +277 -0
  415. package/proagents/templates/feature-requirements.md +142 -0
  416. package/proagents/templates/feature-status.md +231 -0
  417. package/proagents/templates/implementation-plan.md +373 -0
  418. package/proagents/templates/rollback-plan.md +331 -0
  419. package/proagents/templates/test-plan.md +336 -0
  420. package/proagents/templates/ui-specification.md +431 -0
  421. package/proagents/testing-standards/README.md +229 -0
  422. package/proagents/testing-standards/coverage-requirements.md +198 -0
  423. package/proagents/testing-standards/mocking-guidelines.md +478 -0
  424. package/proagents/testing-standards/test-naming.md +485 -0
  425. package/proagents/testing-standards/test-patterns.md +488 -0
  426. package/proagents/troubleshooting/README.md +730 -0
  427. package/proagents/troubleshooting/ai-issues.md +601 -0
  428. package/proagents/troubleshooting/workflow-issues.md +571 -0
  429. package/proagents/ui-integration/README.md +77 -0
  430. package/proagents/ui-integration/figma-guide.md +217 -0
  431. package/proagents/ui-integration/manual-export-guide.md +358 -0
  432. package/proagents/ui-integration/sketch-interpretation.md +471 -0
  433. package/proagents/webhooks/README.md +126 -0
  434. package/proagents/webhooks/endpoints.md +298 -0
  435. package/proagents/webhooks/events.md +316 -0
  436. package/proagents/webhooks/payloads.md +325 -0
  437. package/proagents/webhooks/reliability.md +363 -0
  438. package/proagents/webhooks/security.md +380 -0
  439. package/proagents/workflow-modes/README.md +136 -0
  440. package/proagents/workflow-modes/deferred-tracking.md +405 -0
  441. package/proagents/workflow-modes/entry-modes.md +397 -0
  442. package/proagents/workflow-modes/guardrails.md +405 -0
  443. package/proagents/workflow-modes/mode-detection.md +358 -0
  444. package/proagents/workflow-modes/mode-switching.md +372 -0
@@ -0,0 +1,198 @@
1
+ # Coverage Requirements
2
+
3
+ Define and enforce test coverage thresholds.
4
+
5
+ ---
6
+
7
+ ## Coverage Metrics
8
+
9
+ ### Types of Coverage
10
+
11
+ | Metric | Description | Target |
12
+ |--------|-------------|--------|
13
+ | **Statements** | Lines of code executed | 80% |
14
+ | **Branches** | Decision paths taken | 75% |
15
+ | **Functions** | Functions called | 80% |
16
+ | **Lines** | Source lines covered | 80% |
17
+
18
+ ---
19
+
20
+ ## Configuration
21
+
22
+ ### Global Settings
23
+
24
+ ```yaml
25
+ # proagents.config.yaml
26
+ testing:
27
+ coverage:
28
+ enabled: true
29
+
30
+ # Global thresholds
31
+ thresholds:
32
+ statements: 80
33
+ branches: 75
34
+ functions: 80
35
+ lines: 80
36
+
37
+ # Fail build if below
38
+ fail_under: true
39
+
40
+ # Coverage tool
41
+ tool: "istanbul" # istanbul, c8, nyc
42
+ ```
43
+
44
+ ### Per-Directory Thresholds
45
+
46
+ ```yaml
47
+ testing:
48
+ coverage:
49
+ by_directory:
50
+ # Critical code needs higher coverage
51
+ "src/core/":
52
+ statements: 90
53
+ branches: 85
54
+
55
+ # UI can have lower thresholds
56
+ "src/components/":
57
+ statements: 70
58
+ branches: 65
59
+
60
+ # Utils should be well tested
61
+ "src/utils/":
62
+ statements: 95
63
+ functions: 100
64
+ ```
65
+
66
+ ### Exclude From Coverage
67
+
68
+ ```yaml
69
+ testing:
70
+ coverage:
71
+ exclude:
72
+ - "**/*.test.ts"
73
+ - "**/*.spec.ts"
74
+ - "**/test/**"
75
+ - "**/mocks/**"
76
+ - "**/*.d.ts"
77
+ - "**/index.ts" # Re-export files
78
+ ```
79
+
80
+ ---
81
+
82
+ ## Coverage by Feature Type
83
+
84
+ ### New Features
85
+
86
+ | Phase | Requirement |
87
+ |-------|-------------|
88
+ | Implementation | 80% coverage for new code |
89
+ | PR Merge | No decrease in overall coverage |
90
+ | Release | Meet all thresholds |
91
+
92
+ ### Bug Fixes
93
+
94
+ | Requirement |
95
+ |-------------|
96
+ | Add test that reproduces the bug |
97
+ | Test must fail before fix |
98
+ | Test must pass after fix |
99
+
100
+ ### Refactoring
101
+
102
+ | Requirement |
103
+ |-------------|
104
+ | No decrease in coverage |
105
+ | All existing tests pass |
106
+ | Add tests for uncovered edge cases found |
107
+
108
+ ---
109
+
110
+ ## Coverage Reports
111
+
112
+ ### Generate Report
113
+
114
+ ```bash
115
+ # HTML report
116
+ proagents test --coverage --report html
117
+
118
+ # JSON for CI
119
+ proagents test --coverage --report json
120
+
121
+ # Summary only
122
+ proagents test --coverage --report summary
123
+ ```
124
+
125
+ ### Report Output
126
+
127
+ ```
128
+ ┌─────────────────────────────────────────────────────────────┐
129
+ │ Coverage Summary │
130
+ ├─────────────────────────────────────────────────────────────┤
131
+ │ │
132
+ │ Overall: 83.5% │
133
+ │ [████████████████░░░░] 83.5% │
134
+ │ │
135
+ │ By Type: │
136
+ │ ├── Statements: 85.2% ✅ │
137
+ │ ├── Branches: 78.5% ✅ │
138
+ │ ├── Functions: 88.1% ✅ │
139
+ │ └── Lines: 84.8% ✅ │
140
+ │ │
141
+ │ By Directory: │
142
+ │ ├── src/core/ 92.1% ✅ (target: 90%) │
143
+ │ ├── src/services/ 81.3% ✅ (target: 80%) │
144
+ │ ├── src/utils/ 94.5% ✅ (target: 85%) │
145
+ │ └── src/ui/ 71.2% ✅ (target: 70%) │
146
+ │ │
147
+ │ Uncovered Files: │
148
+ │ ├── src/services/legacy.ts (45%) │
149
+ │ └── src/utils/deprecated.ts (30%) │
150
+ │ │
151
+ └─────────────────────────────────────────────────────────────┘
152
+ ```
153
+
154
+ ---
155
+
156
+ ## CI Integration
157
+
158
+ ### GitHub Actions
159
+
160
+ ```yaml
161
+ - name: Run tests with coverage
162
+ run: proagents test --coverage --ci
163
+
164
+ - name: Check coverage thresholds
165
+ run: proagents test coverage-check
166
+
167
+ - name: Upload coverage report
168
+ uses: codecov/codecov-action@v3
169
+ with:
170
+ files: ./coverage/lcov.info
171
+ ```
172
+
173
+ ### Coverage Gates
174
+
175
+ ```yaml
176
+ testing:
177
+ coverage:
178
+ ci:
179
+ # Block PR if coverage drops
180
+ block_on_decrease: true
181
+
182
+ # Minimum for new code
183
+ new_code_minimum: 80
184
+
185
+ # Allow small decreases
186
+ allowed_decrease: 1 # percent
187
+ ```
188
+
189
+ ---
190
+
191
+ ## Best Practices
192
+
193
+ 1. **Set Realistic Targets**: Start achievable, increase over time
194
+ 2. **Focus on Critical Code**: Higher coverage for core logic
195
+ 3. **Don't Chase 100%**: Diminishing returns after ~90%
196
+ 4. **Track Trends**: Coverage should improve over time
197
+ 5. **Review Uncovered Code**: Understand why it's not covered
198
+ 6. **Quality Over Quantity**: Good tests > high numbers
@@ -0,0 +1,478 @@
1
+ # Mocking Guidelines
2
+
3
+ Best practices for creating and using mocks in tests.
4
+
5
+ ---
6
+
7
+ ## When to Mock
8
+
9
+ | Mock | Don't Mock |
10
+ |------|------------|
11
+ | External APIs | Pure functions |
12
+ | Databases (unit tests) | Simple utilities |
13
+ | File system | Data transformations |
14
+ | Time/Date | Domain logic |
15
+ | Random values | Value objects |
16
+ | Third-party services | Internal collaborators (usually) |
17
+
18
+ ---
19
+
20
+ ## Mock Types
21
+
22
+ ### Mocks
23
+
24
+ Full replacement with behavior verification.
25
+
26
+ ```typescript
27
+ // Mock with Jest
28
+ const userRepository = {
29
+ findById: jest.fn(),
30
+ save: jest.fn(),
31
+ delete: jest.fn(),
32
+ };
33
+
34
+ // Set return value
35
+ userRepository.findById.mockResolvedValue({ id: '1', name: 'Test' });
36
+
37
+ // Verify calls
38
+ expect(userRepository.findById).toHaveBeenCalledWith('1');
39
+ expect(userRepository.save).toHaveBeenCalledTimes(1);
40
+ ```
41
+
42
+ ### Stubs
43
+
44
+ Predefined responses without verification.
45
+
46
+ ```typescript
47
+ // Stub - just returns values
48
+ const configStub = {
49
+ get: (key: string) => {
50
+ const config = {
51
+ 'api.url': 'https://api.test.com',
52
+ 'api.timeout': 5000,
53
+ };
54
+ return config[key];
55
+ },
56
+ };
57
+ ```
58
+
59
+ ### Spies
60
+
61
+ Wraps real implementation with tracking.
62
+
63
+ ```typescript
64
+ // Spy on real method
65
+ const spy = jest.spyOn(logger, 'error');
66
+
67
+ await processOrder(invalidOrder);
68
+
69
+ expect(spy).toHaveBeenCalledWith('Order processing failed', expect.any(Error));
70
+
71
+ spy.mockRestore(); // Restore original
72
+ ```
73
+
74
+ ### Fakes
75
+
76
+ Working implementation for testing.
77
+
78
+ ```typescript
79
+ // Fake in-memory repository
80
+ class FakeUserRepository implements UserRepository {
81
+ private users: Map<string, User> = new Map();
82
+
83
+ async findById(id: string): Promise<User | null> {
84
+ return this.users.get(id) || null;
85
+ }
86
+
87
+ async save(user: User): Promise<User> {
88
+ this.users.set(user.id, user);
89
+ return user;
90
+ }
91
+
92
+ async delete(id: string): Promise<void> {
93
+ this.users.delete(id);
94
+ }
95
+
96
+ // Test helper
97
+ clear(): void {
98
+ this.users.clear();
99
+ }
100
+ }
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Jest Mocking
106
+
107
+ ### Module Mocks
108
+
109
+ ```typescript
110
+ // Mock entire module
111
+ jest.mock('./emailService');
112
+
113
+ // Access mock
114
+ import { sendEmail } from './emailService';
115
+ const mockSendEmail = sendEmail as jest.MockedFunction<typeof sendEmail>;
116
+
117
+ // Configure
118
+ mockSendEmail.mockResolvedValue({ success: true });
119
+
120
+ // Auto-mock with implementation
121
+ jest.mock('./userRepository', () => ({
122
+ findById: jest.fn().mockResolvedValue({ id: '1', name: 'Test' }),
123
+ save: jest.fn().mockImplementation((user) => Promise.resolve(user)),
124
+ }));
125
+ ```
126
+
127
+ ### Partial Mocks
128
+
129
+ ```typescript
130
+ // Mock only specific exports
131
+ jest.mock('./utils', () => ({
132
+ ...jest.requireActual('./utils'),
133
+ fetchData: jest.fn(),
134
+ }));
135
+ ```
136
+
137
+ ### Class Mocks
138
+
139
+ ```typescript
140
+ // Mock class
141
+ jest.mock('./UserService');
142
+
143
+ // Get mock constructor
144
+ const MockUserService = UserService as jest.MockedClass<typeof UserService>;
145
+
146
+ // Configure instance methods
147
+ MockUserService.prototype.getUser.mockResolvedValue(testUser);
148
+
149
+ // Verify instantiation
150
+ expect(MockUserService).toHaveBeenCalledWith(mockRepository);
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Dependency Injection
156
+
157
+ ### Constructor Injection
158
+
159
+ ```typescript
160
+ // Service with injected dependencies
161
+ class OrderService {
162
+ constructor(
163
+ private readonly orderRepository: OrderRepository,
164
+ private readonly paymentService: PaymentService,
165
+ private readonly emailService: EmailService
166
+ ) {}
167
+
168
+ async placeOrder(order: Order): Promise<Order> {
169
+ const saved = await this.orderRepository.save(order);
170
+ await this.paymentService.charge(order.total);
171
+ await this.emailService.sendConfirmation(order);
172
+ return saved;
173
+ }
174
+ }
175
+
176
+ // Test with mocks
177
+ describe('OrderService', () => {
178
+ let service: OrderService;
179
+ let mockOrderRepo: jest.Mocked<OrderRepository>;
180
+ let mockPaymentService: jest.Mocked<PaymentService>;
181
+ let mockEmailService: jest.Mocked<EmailService>;
182
+
183
+ beforeEach(() => {
184
+ mockOrderRepo = {
185
+ save: jest.fn(),
186
+ findById: jest.fn(),
187
+ };
188
+ mockPaymentService = {
189
+ charge: jest.fn(),
190
+ };
191
+ mockEmailService = {
192
+ sendConfirmation: jest.fn(),
193
+ };
194
+
195
+ service = new OrderService(mockOrderRepo, mockPaymentService, mockEmailService);
196
+ });
197
+
198
+ it('should save order and process payment', async () => {
199
+ const order = createOrder();
200
+ mockOrderRepo.save.mockResolvedValue(order);
201
+ mockPaymentService.charge.mockResolvedValue({ success: true });
202
+
203
+ await service.placeOrder(order);
204
+
205
+ expect(mockOrderRepo.save).toHaveBeenCalledWith(order);
206
+ expect(mockPaymentService.charge).toHaveBeenCalledWith(order.total);
207
+ });
208
+ });
209
+ ```
210
+
211
+ ---
212
+
213
+ ## HTTP Mocking
214
+
215
+ ### MSW (Mock Service Worker)
216
+
217
+ ```typescript
218
+ // mocks/handlers.ts
219
+ import { rest } from 'msw';
220
+
221
+ export const handlers = [
222
+ rest.get('/api/users/:id', (req, res, ctx) => {
223
+ const { id } = req.params;
224
+ return res(
225
+ ctx.json({
226
+ id,
227
+ name: 'Test User',
228
+ email: 'test@example.com',
229
+ })
230
+ );
231
+ }),
232
+
233
+ rest.post('/api/orders', async (req, res, ctx) => {
234
+ const body = await req.json();
235
+ return res(
236
+ ctx.status(201),
237
+ ctx.json({
238
+ id: 'order-123',
239
+ ...body,
240
+ })
241
+ );
242
+ }),
243
+
244
+ // Error response
245
+ rest.get('/api/error', (req, res, ctx) => {
246
+ return res(
247
+ ctx.status(500),
248
+ ctx.json({ error: 'Internal server error' })
249
+ );
250
+ }),
251
+ ];
252
+
253
+ // Setup in tests
254
+ import { setupServer } from 'msw/node';
255
+ import { handlers } from './mocks/handlers';
256
+
257
+ const server = setupServer(...handlers);
258
+
259
+ beforeAll(() => server.listen());
260
+ afterEach(() => server.resetHandlers());
261
+ afterAll(() => server.close());
262
+
263
+ // Override for specific test
264
+ it('should handle API error', async () => {
265
+ server.use(
266
+ rest.get('/api/users/:id', (req, res, ctx) => {
267
+ return res(ctx.status(404));
268
+ })
269
+ );
270
+
271
+ await expect(userService.getUser('1')).rejects.toThrow('Not found');
272
+ });
273
+ ```
274
+
275
+ ### Nock
276
+
277
+ ```typescript
278
+ import nock from 'nock';
279
+
280
+ describe('API Client', () => {
281
+ afterEach(() => {
282
+ nock.cleanAll();
283
+ });
284
+
285
+ it('should fetch user', async () => {
286
+ nock('https://api.example.com')
287
+ .get('/users/1')
288
+ .reply(200, { id: '1', name: 'Test User' });
289
+
290
+ const user = await apiClient.getUser('1');
291
+
292
+ expect(user.name).toBe('Test User');
293
+ });
294
+
295
+ it('should retry on failure', async () => {
296
+ nock('https://api.example.com')
297
+ .get('/users/1')
298
+ .reply(500)
299
+ .get('/users/1')
300
+ .reply(200, { id: '1', name: 'Test User' });
301
+
302
+ const user = await apiClient.getUser('1');
303
+
304
+ expect(user.name).toBe('Test User');
305
+ });
306
+ });
307
+ ```
308
+
309
+ ---
310
+
311
+ ## Database Mocking
312
+
313
+ ### Repository Mocks
314
+
315
+ ```typescript
316
+ // Create typed mock repository
317
+ function createMockUserRepository(): jest.Mocked<UserRepository> {
318
+ return {
319
+ findById: jest.fn(),
320
+ findByEmail: jest.fn(),
321
+ save: jest.fn(),
322
+ delete: jest.fn(),
323
+ findAll: jest.fn(),
324
+ };
325
+ }
326
+
327
+ // Usage
328
+ const mockRepo = createMockUserRepository();
329
+ mockRepo.findById.mockResolvedValue(testUser);
330
+ ```
331
+
332
+ ### Test Containers
333
+
334
+ ```typescript
335
+ // Use real database in containers
336
+ import { PostgreSqlContainer } from 'testcontainers';
337
+
338
+ describe('UserRepository (Integration)', () => {
339
+ let container: PostgreSqlContainer;
340
+ let db: Database;
341
+
342
+ beforeAll(async () => {
343
+ container = await new PostgreSqlContainer().start();
344
+ db = await createConnection(container.getConnectionUri());
345
+ await db.migrate();
346
+ }, 60000);
347
+
348
+ afterAll(async () => {
349
+ await db.close();
350
+ await container.stop();
351
+ });
352
+
353
+ it('should save and retrieve user', async () => {
354
+ const repo = new UserRepository(db);
355
+ const user = await repo.save(createUser());
356
+ const found = await repo.findById(user.id);
357
+ expect(found).toEqual(user);
358
+ });
359
+ });
360
+ ```
361
+
362
+ ---
363
+
364
+ ## Time Mocking
365
+
366
+ ### Jest Fake Timers
367
+
368
+ ```typescript
369
+ describe('Scheduler', () => {
370
+ beforeEach(() => {
371
+ jest.useFakeTimers();
372
+ jest.setSystemTime(new Date('2024-01-15T10:00:00Z'));
373
+ });
374
+
375
+ afterEach(() => {
376
+ jest.useRealTimers();
377
+ });
378
+
379
+ it('should schedule job for tomorrow', () => {
380
+ const job = scheduler.scheduleForTomorrow(callback);
381
+
382
+ expect(job.scheduledTime).toEqual(new Date('2024-01-16T10:00:00Z'));
383
+ });
384
+
385
+ it('should execute after delay', () => {
386
+ const callback = jest.fn();
387
+ scheduler.scheduleIn(5000, callback);
388
+
389
+ jest.advanceTimersByTime(4999);
390
+ expect(callback).not.toHaveBeenCalled();
391
+
392
+ jest.advanceTimersByTime(1);
393
+ expect(callback).toHaveBeenCalled();
394
+ });
395
+ });
396
+ ```
397
+
398
+ ---
399
+
400
+ ## Anti-Patterns
401
+
402
+ ### Over-Mocking
403
+
404
+ ```typescript
405
+ // ❌ Bad: Mocking too much
406
+ it('should calculate total', () => {
407
+ const mockMultiply = jest.fn().mockReturnValue(100);
408
+ const mockAdd = jest.fn().mockReturnValue(110);
409
+
410
+ // Testing implementation, not behavior
411
+ expect(calculateTotal([{ price: 10, qty: 10 }], 0.1)).toBe(110);
412
+ });
413
+
414
+ // ✅ Good: Test behavior, not implementation
415
+ it('should calculate total with tax', () => {
416
+ const items = [{ price: 10, quantity: 10 }];
417
+ expect(calculateTotal(items, 0.1)).toBe(110);
418
+ });
419
+ ```
420
+
421
+ ### Mock Verification Overkill
422
+
423
+ ```typescript
424
+ // ❌ Bad: Over-verifying
425
+ it('should save user', async () => {
426
+ await userService.create(userData);
427
+
428
+ expect(mockRepo.save).toHaveBeenCalled();
429
+ expect(mockRepo.save).toHaveBeenCalledTimes(1);
430
+ expect(mockRepo.save).toHaveBeenCalledWith(expect.objectContaining(userData));
431
+ expect(mockRepo.save.mock.calls[0][0].id).toBeDefined();
432
+ // etc...
433
+ });
434
+
435
+ // ✅ Good: Verify what matters
436
+ it('should save user with generated id', async () => {
437
+ const user = await userService.create(userData);
438
+
439
+ expect(user.id).toBeDefined();
440
+ expect(mockRepo.save).toHaveBeenCalledWith(
441
+ expect.objectContaining({ ...userData, id: expect.any(String) })
442
+ );
443
+ });
444
+ ```
445
+
446
+ ---
447
+
448
+ ## Configuration
449
+
450
+ ```yaml
451
+ # proagents.config.yaml
452
+ testing:
453
+ mocking:
454
+ # HTTP mocking
455
+ http:
456
+ tool: "msw" # or "nock"
457
+ handlers_dir: "__mocks__/handlers"
458
+
459
+ # Database mocking
460
+ database:
461
+ strategy: "repository_mock" # or "test_container", "in_memory"
462
+
463
+ # Time mocking
464
+ time:
465
+ default_date: "2024-01-15T10:00:00Z"
466
+ ```
467
+
468
+ ---
469
+
470
+ ## Best Practices
471
+
472
+ 1. **Mock at Boundaries**: Mock external systems, not internal code
473
+ 2. **Prefer Fakes**: Use fakes over mocks when behavior matters
474
+ 3. **Verify Behavior**: Check what matters, not implementation details
475
+ 4. **Reset State**: Clean up mocks between tests
476
+ 5. **Type Safety**: Use typed mocks to catch errors
477
+ 6. **Don't Mock What You Don't Own**: Wrap third-party code first
478
+ 7. **Keep Mocks Simple**: Complex mocks indicate design issues