synapse-hub 2.2.3 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/.agents/agents/failure-analyst.md +11 -0
  2. package/.agents/agents/live-explorer.md +28 -0
  3. package/.agents/agents/orchestrator.md +20 -4
  4. package/.agents/agents/pom-crafter.md +12 -0
  5. package/.agents/agents/quality-gatekeeper.md +19 -4
  6. package/.agents/agents/test-runner.md +11 -0
  7. package/.agents/rules/communication-style.md +40 -0
  8. package/.agents/rules/context-engineering.md +23 -0
  9. package/.agents/rules/git-push-protocol.md +11 -17
  10. package/.agents/rules/graphify.md +14 -14
  11. package/.agents/rules/lessons-learned.md +3 -3
  12. package/.agents/rules/mandatory-playwright-live.md +29 -29
  13. package/.agents/rules/mobile_appium_rules.md +132 -0
  14. package/.agents/rules/performance_testing_rules.md +74 -0
  15. package/.agents/rules/skill-precedence.md +1 -1
  16. package/.agents/rules/systematic-debugging.md +6 -6
  17. package/.agents/skills/agent-orchestration-multi-agent-optimize/SKILL.md +64 -215
  18. package/.agents/skills/agent-orchestration-multi-agent-optimize/examples/swarm_workload_config.json +12 -0
  19. package/.agents/skills/antigravity-test-sentinel/SKILL.md +3 -3
  20. package/.agents/skills/antigravity-test-sentinel/examples/dod_gate_policy.json +11 -0
  21. package/.agents/skills/api-network-mocking-interception/SKILL.md +1 -1
  22. package/.agents/skills/api-network-mocking-interception/examples/network_route_stub.json +9 -0
  23. package/.agents/skills/api-spec-to-e2e-matrix/SKILL.md +9 -9
  24. package/.agents/skills/api-spec-to-e2e-matrix/examples/sample_openapi.json +19 -0
  25. package/.agents/skills/architecture-decision-records/SKILL.md +35 -412
  26. package/.agents/skills/architecture-decision-records/examples/0001-record-architecture-decisions.md +12 -0
  27. package/.agents/skills/auth-session-and-cookie-manager/SKILL.md +4 -1
  28. package/.agents/skills/auth-session-and-cookie-manager/examples/storage_state_sample.json +11 -0
  29. package/.agents/skills/backend-load-and-stress-patterns/SKILL.md +80 -186
  30. package/.agents/skills/backend-load-and-stress-patterns/examples/k6_load_test_sample.js +13 -0
  31. package/.agents/skills/bats-testing-patterns/SKILL.md +1 -1
  32. package/.agents/skills/bats-testing-patterns/examples/cli_runner_test.bats +6 -0
  33. package/.agents/skills/bats-testing-patterns/resources/implementation-playbook.md +614 -614
  34. package/.agents/skills/clean-pom-crafter/SKILL.md +21 -3
  35. package/.agents/skills/clean-pom-crafter/examples/standard_test_case.groovy +28 -28
  36. package/.agents/skills/clean-pom-crafter/references/pom_patterns.groovy +138 -138
  37. package/.agents/skills/code-refactoring-refactor-clean/SKILL.md +2 -2
  38. package/.agents/skills/code-refactoring-refactor-clean/examples/refactored_page_sample.groovy +9 -0
  39. package/.agents/skills/code-refactoring-refactor-clean/resources/implementation-playbook.md +9 -7
  40. package/.agents/skills/db-state-verifier-and-seeder/SKILL.md +5 -5
  41. package/.agents/skills/db-state-verifier-and-seeder/examples/db_fixture_seed.json +12 -0
  42. package/.agents/skills/e2e-testing-patterns/SKILL.md +1 -1
  43. package/.agents/skills/e2e-testing-patterns/examples/playwright_sharded_config.ts +12 -0
  44. package/.agents/skills/e2e-testing-patterns/resources/implementation-playbook.md +522 -522
  45. package/.agents/skills/failure-autopsy-and-healing/SKILL.md +17 -3
  46. package/.agents/skills/failure-autopsy-and-healing/examples/sample_junit_failure.xml +8 -0
  47. package/.agents/skills/failure-autopsy-and-healing/references/healing_matrix.md +64 -64
  48. package/.agents/skills/failure-autopsy-and-healing/references/qa_investigation_protocol.md +56 -56
  49. package/.agents/skills/failure-autopsy-and-healing/scripts/triage_failures.sh +98 -98
  50. package/.agents/skills/file-and-report-validator/SKILL.md +1 -1
  51. package/.agents/skills/file-and-report-validator/examples/sample_export_schema.json +14 -0
  52. package/.agents/skills/flaky-test-sentinel-and-quarantine/SKILL.md +3 -3
  53. package/.agents/skills/flaky-test-sentinel-and-quarantine/examples/quarantine_registry.json +11 -0
  54. package/.agents/skills/gherkin-to-suite/SKILL.md +103 -0
  55. package/.agents/skills/gherkin-to-suite/examples/checkout.feature +39 -0
  56. package/.agents/skills/gherkin-to-suite/examples/suite_report_sample.json +334 -0
  57. package/.agents/skills/github-actions-templates/SKILL.md +47 -304
  58. package/.agents/skills/github-actions-templates/examples/matrix_test_pipeline.yml +8 -0
  59. package/.agents/skills/graphify-impact-analyzer/SKILL.md +6 -6
  60. package/.agents/skills/graphify-impact-analyzer/examples/dependency_blast_radius.json +8 -0
  61. package/.agents/skills/katalon-cli-runner/SKILL.md +2 -2
  62. package/.agents/skills/katalon-cli-runner/examples/headless_kre_exec.sh +3 -0
  63. package/.agents/skills/katalon-cli-runner/references/groovy-patterns.md +209 -209
  64. package/.agents/skills/katalon-cli-runner/references/katalon-api.md +155 -155
  65. package/.agents/skills/katalon-cli-runner/references/runner_commands.md +67 -67
  66. package/.agents/skills/lam-script-generator/SKILL.md +42 -1
  67. package/.agents/skills/lam-script-generator/examples/user_story_sample.md +8 -0
  68. package/.agents/skills/lean-code-ladder/SKILL.md +83 -0
  69. package/.agents/skills/lean-code-ladder/examples/ladder_walkthrough.md +37 -0
  70. package/.agents/skills/meta-prompt-crafter/SKILL.md +107 -0
  71. package/.agents/skills/meta-prompt-crafter/examples/qa_prompt_template.md +35 -0
  72. package/.agents/skills/persistent-planning-files/SKILL.md +108 -0
  73. package/.agents/skills/persistent-planning-files/examples/task_plan_example.md +56 -0
  74. package/.agents/skills/playwright-live-interaction/SKILL.md +49 -1
  75. package/.agents/skills/playwright-live-interaction/examples/live_probe_script.js +5 -0
  76. package/.agents/skills/playwright-live-interaction/references/advanced_superpowers.md +160 -160
  77. package/.agents/skills/playwright-live-interaction/references/compact_accessibility_snapshots.md +75 -75
  78. package/.agents/skills/playwright-live-interaction/references/recipes.md +388 -388
  79. package/.agents/skills/playwright-live-interaction/references/swarm_orchestration.md +134 -134
  80. package/.agents/skills/playwright-webapp-testing/SKILL.md +93 -0
  81. package/.agents/skills/playwright-webapp-testing/examples/server_lifecycle_playwright.py +63 -0
  82. package/.agents/skills/rbt-manual-testing/SKILL.md +150 -0
  83. package/.agents/skills/rbt-manual-testing/examples/checkout_rbt_manual_suite.md +25 -0
  84. package/.agents/skills/security-dast-sentinel/SKILL.md +57 -135
  85. package/.agents/skills/security-dast-sentinel/examples/dast_scan_config.json +10 -0
  86. package/.agents/skills/self-healing-locator/SKILL.md +24 -10
  87. package/.agents/skills/self-healing-locator/examples/aom_diff_sample.json +16 -0
  88. package/.agents/skills/skillspector-security-guard/SKILL.md +32 -90
  89. package/.agents/skills/skillspector-security-guard/examples/safe_mcp_config.json +12 -0
  90. package/.agents/skills/surgical-coding-principles/SKILL.md +89 -0
  91. package/.agents/skills/surgical-coding-principles/examples/surgical_vs_scope_creep.md +46 -0
  92. package/.agents/skills/synthetic-test-data-generator/SKILL.md +3 -3
  93. package/.agents/skills/synthetic-test-data-generator/examples/idempotent_data_recipe.json +9 -0
  94. package/.agents/skills/systematic-debugging/SKILL.md +100 -0
  95. package/.agents/skills/systematic-debugging/examples/four_phase_case.md +44 -0
  96. package/.agents/skills/test-driven-development/SKILL.md +114 -0
  97. package/.agents/skills/test-driven-development/examples/red_green_refactor_qa.md +78 -0
  98. package/.agents/skills/token-and-context-optimizer/SKILL.md +1 -1
  99. package/.agents/skills/token-and-context-optimizer/examples/distilled_log_sample.txt +3 -0
  100. package/.agents/skills/verification-before-completion/SKILL.md +100 -0
  101. package/.agents/skills/verification-before-completion/examples/evidence_log_example.md +46 -0
  102. package/.agents/skills/visual-regression-sentinel/SKILL.md +21 -1
  103. package/.agents/skills/visual-regression-sentinel/examples/visual_mask_rules.json +9 -0
  104. package/.agents/skills/wcag-audit-patterns/SKILL.md +3 -3
  105. package/.agents/skills/wcag-audit-patterns/examples/wcag_compliance_checklist.json +10 -0
  106. package/.agents/skills/wcag-audit-patterns/resources/implementation-playbook.md +541 -541
  107. package/.agents/skills/web-vitals-and-performance-profiler/SKILL.md +1 -1
  108. package/.agents/skills/web-vitals-and-performance-profiler/examples/cwv_budget_policy.json +6 -0
  109. package/.agents/templates/completion_report.md +57 -57
  110. package/.agents/workflows/analyze_requirement_document.md +18 -0
  111. package/.agents/workflows/export_testcases_excel.md +32 -0
  112. package/.agents/workflows/generate_combinatorial_test_data.md +28 -0
  113. package/.agents/workflows/generate_cross_module_test_plan.md +37 -0
  114. package/.agents/workflows/generate_manual_testcases_rbt.md +56 -0
  115. package/.agents/workflows/generate_requirements_from_website.md +25 -0
  116. package/.agents/workflows/generate_testcases_from_requirements.md +21 -0
  117. package/.agents/workflows/graphify.md +10 -10
  118. package/.agents/workflows/verify.md +2 -2
  119. package/.cursor/rules/language.mdc +7 -7
  120. package/.cursor/rules/synapse-qa.mdc +23 -0
  121. package/.cursorrules +7 -0
  122. package/.pre-commit-hooks.yaml +14 -0
  123. package/.windsurfrules +7 -0
  124. package/AGENTS.md +54 -15
  125. package/CLAUDE.md +35 -12
  126. package/LICENSE +30 -0
  127. package/NOTICE +180 -0
  128. package/README.en.md +325 -0
  129. package/README.md +247 -512
  130. package/action.yml +51 -0
  131. package/benchmarks/qa_eval/README.md +71 -0
  132. package/benchmarks/qa_eval/build_dataset.py +677 -0
  133. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-06_api_contract_drift.json +22 -0
  134. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-07_api_contract_drift.json +22 -0
  135. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-08_api_contract_drift.json +22 -0
  136. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-09_api_contract_drift.json +22 -0
  137. package/benchmarks/qa_eval/dataset/api_contract_drift/qa-challenge-10_api_contract_drift.json +22 -0
  138. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-21_fake_pass_tautology.json +21 -0
  139. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-22_fake_pass_tautology.json +21 -0
  140. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-23_fake_pass_tautology.json +21 -0
  141. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-24_fake_pass_tautology.json +21 -0
  142. package/benchmarks/qa_eval/dataset/fake_pass_tautology/qa-challenge-25_fake_pass_tautology.json +21 -0
  143. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-01_locator_drift.json +23 -0
  144. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-02_locator_drift.json +23 -0
  145. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-03_locator_drift.json +23 -0
  146. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-04_locator_drift.json +23 -0
  147. package/benchmarks/qa_eval/dataset/locator_drift/qa-challenge-05_locator_drift.json +23 -0
  148. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-16_stale_and_mutation.json +22 -0
  149. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-17_stale_and_mutation.json +22 -0
  150. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-18_stale_and_mutation.json +22 -0
  151. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-19_stale_and_mutation.json +22 -0
  152. package/benchmarks/qa_eval/dataset/stale_and_mutation/qa-challenge-20_stale_and_mutation.json +23 -0
  153. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-11_timing_and_race.json +22 -0
  154. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-12_timing_and_race.json +22 -0
  155. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-13_timing_and_race.json +22 -0
  156. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-14_timing_and_race.json +22 -0
  157. package/benchmarks/qa_eval/dataset/timing_and_race/qa-challenge-15_timing_and_race.json +22 -0
  158. package/benchmarks/qa_eval/eval_runner.py +418 -0
  159. package/benchmarks/qa_eval/reports/AB_METHODOLOGY_REPORT.md +83 -0
  160. package/benchmarks/qa_eval/reports/BENCHMARK_REPORT.md +69 -0
  161. package/benchmarks/qa_eval/reports/eval_results.json +105 -0
  162. package/bin/agent-qa.js +10 -3
  163. package/docs/ARCHITECTURE.md +107 -0
  164. package/docs/CI_CD_INTEGRATION.md +94 -0
  165. package/docs/CLI_REFERENCE.md +157 -0
  166. package/docs/CONTRIBUTING.md +91 -0
  167. package/docs/PLUGIN_DEVELOPMENT_GUIDE.md +126 -0
  168. package/docs/TOKEN_QUOTA_PLAYBOOK.md +41 -0
  169. package/docs/adopted-ecosystem-tools.md +87 -0
  170. package/docs/schemas/synapse.config.schema.json +64 -0
  171. package/examples/cypress-ecommerce-suite/README.md +45 -0
  172. package/examples/cypress-ecommerce-suite/cypress/e2e/checkout.cy.js +17 -0
  173. package/examples/cypress-ecommerce-suite/cypress/pages/BasePage.js +29 -0
  174. package/examples/cypress-ecommerce-suite/cypress/pages/CartPage.js +51 -0
  175. package/examples/cypress-ecommerce-suite/cypress.config.js +13 -0
  176. package/examples/cypress-ecommerce-suite/package.json +13 -0
  177. package/examples/katalon-suite/Keywords/pages/BasePage.groovy +19 -0
  178. package/examples/katalon-suite/Keywords/pages/DashboardPage.groovy +29 -0
  179. package/examples/katalon-suite/Keywords/pages/LoginPage.groovy +45 -0
  180. package/examples/katalon-suite/Profiles/default.glbl +12 -0
  181. package/examples/katalon-suite/README.md +18 -0
  182. package/examples/katalon-suite/Scripts/Auth/TC_LoginSuccess/Script1234567890.groovy +12 -0
  183. package/examples/katalon-suite/Scripts/Dashboard/TC_ViewSummary/Script1234567891.groovy +15 -0
  184. package/examples/katalon-suite/katalon_suite.prj +21 -0
  185. package/examples/playwright-crm-suite/README.md +40 -0
  186. package/examples/playwright-crm-suite/package.json +14 -0
  187. package/examples/playwright-crm-suite/pages/BasePage.ts +37 -0
  188. package/examples/playwright-crm-suite/pages/CustomerPage.ts +57 -0
  189. package/examples/playwright-crm-suite/pages/LoginPage.ts +32 -0
  190. package/examples/playwright-crm-suite/playwright.config.ts +27 -0
  191. package/examples/playwright-crm-suite/tests/auth.spec.ts +22 -0
  192. package/examples/playwright-crm-suite/tests/customers.spec.ts +33 -0
  193. package/examples/plugins/sample-custom-plugin/README.md +14 -0
  194. package/examples/plugins/sample-custom-plugin/plugin.json +16 -0
  195. package/examples/plugins/sample-custom-plugin/skills/custom-security-headers-audit/SKILL.md +29 -0
  196. package/examples/plugins/sample-custom-plugin/skills/custom-security-headers-audit/examples/audit_fixture.json +8 -0
  197. package/examples/plugins/sample-custom-plugin/tools/custom_security_headers.py +125 -0
  198. package/examples/practices/README.md +22 -0
  199. package/examples/practices/requirements/crm/requirements_contracts.md +292 -0
  200. package/examples/practices/requirements/crm/requirements_customers.md +462 -0
  201. package/examples/practices/requirements/crm/requirements_login.md +202 -0
  202. package/examples/practices/requirements/crm/requirements_projects.md +396 -0
  203. package/examples/practices/requirements/crm/requirements_tasks.md +343 -0
  204. package/examples/practices/requirements/ecommerce/requirements_category_brand.txt +402 -0
  205. package/examples/practices/requirements/jira/KAN-5/KAN-1/2026-04-03_04-28-27.png +0 -0
  206. package/examples/practices/requirements/jira/KAN-5/KAN-1/KAN-1_requirement.md +52 -0
  207. package/examples/practices/requirements/jira/KAN-5/KAN-4/2026-04-03_04-28-19.png +0 -0
  208. package/examples/practices/requirements/jira/KAN-5/KAN-4/2026-04-03_04-28-57.png +0 -0
  209. package/examples/practices/requirements/jira/KAN-5/KAN-4/KAN-4_requirement.md +119 -0
  210. package/examples/practices/requirements/jira/KAN-5/KAN-5_overview.md +9 -0
  211. package/examples/practices/requirements/jira/KAN-5/KAN-6/2026-04-03_05-58-08.png +0 -0
  212. package/examples/practices/requirements/jira/KAN-5/KAN-6/2026-04-03_05-58-23.png +0 -0
  213. package/examples/practices/requirements/jira/KAN-5/KAN-6/KAN-6_requirement.md +32 -0
  214. package/examples/practices/testcases/api/book_management_api_test_cases.md +144 -0
  215. package/examples/practices/testcases/api/user_management_api_test_cases.md +139 -0
  216. package/examples/practices/testcases/crm/test_cases_crm_login.md +148 -0
  217. package/examples/practices/testcases/crm/test_cases_customers.md +156 -0
  218. package/examples/pytest-api-suite/README.md +45 -0
  219. package/examples/pytest-api-suite/conftest.py +31 -0
  220. package/examples/pytest-api-suite/pages/user_api_client.py +36 -0
  221. package/examples/pytest-api-suite/requirements.txt +2 -0
  222. package/examples/pytest-api-suite/tests/test_user_api.py +44 -0
  223. package/examples/selenium-suite/README.md +18 -0
  224. package/examples/selenium-suite/pages/base_page.py +27 -0
  225. package/examples/selenium-suite/pages/login_page.py +29 -0
  226. package/examples/selenium-suite/pages/order_page.py +25 -0
  227. package/examples/selenium-suite/pytest.ini +6 -0
  228. package/examples/selenium-suite/requirements.txt +2 -0
  229. package/examples/selenium-suite/tests/test_login.py +10 -0
  230. package/examples/selenium-suite/tests/test_order.py +10 -0
  231. package/package.json +22 -7
  232. package/scripts/generate_skill_examples.py +244 -0
  233. package/scripts/install.ps1 +112 -0
  234. package/scripts/install_global_plugin.ps1 +94 -0
  235. package/scripts/install_global_plugin.sh +49 -0
  236. package/scripts/lint_skills.ps1 +57 -0
  237. package/scripts/package_dist.py +323 -0
  238. package/scripts/setup.sh +59 -0
  239. package/scripts/update_hub.ps1 +19 -0
  240. package/scripts/update_hub.sh +15 -0
  241. package/skills_manifest.json +209 -6
  242. package/synapse.config.json +30 -0
  243. package/templates/PROJECT_AI_GUIDE_TEMPLATE.md +7 -7
  244. package/templates/PROJECT_STATE_TEMPLATE.md +1 -1
  245. package/templates/ai_bridges/CLAUDE.md +33 -16
  246. package/templates/ai_bridges/copilot-instructions.md +14 -21
  247. package/templates/ai_bridges/cursor_synapse_qa.mdc +17 -20
  248. package/templates/ai_bridges/windsurfrules +21 -21
  249. package/templates/ci/github-actions-synapse.yml +71 -4
  250. package/templates/welcome.html.tmpl +1674 -0
  251. package/tools/.infer_baseline.json +1102 -0
  252. package/tools/TOOLS_RUNBOOK.md +92 -130
  253. package/tools/__init__.py +26 -0
  254. package/tools/agent_canary.py +501 -501
  255. package/tools/analyze_project.py +31 -17
  256. package/tools/api_fuzzer.py +278 -6
  257. package/tools/author_integrity.py +6 -6
  258. package/tools/auto_heal.py +1 -1
  259. package/tools/browser_helpers.js +105 -7
  260. package/tools/bug_reporter.py +31 -1
  261. package/tools/bump_version.py +23 -3
  262. package/tools/cache_resolver.py +248 -14
  263. package/tools/check_env.py +55 -14
  264. package/tools/check_version_sync.py +153 -0
  265. package/tools/ci_healing_hook.py +1 -1
  266. package/tools/cli.py +263 -13
  267. package/tools/count_tokens.py +1257 -0
  268. package/tools/dashboard_generator.py +2638 -0
  269. package/tools/db_sandbox.py +198 -20
  270. package/tools/e2e_flow_prober.ps1 +12 -64
  271. package/tools/e2e_flow_prober.py +99 -0
  272. package/tools/e2e_flow_prober.sh +4 -0
  273. package/tools/export_postman_collection.py +29 -7
  274. package/tools/flaky_detector.py +4 -3
  275. package/tools/generate_allure_report.ps1 +12 -29
  276. package/tools/generate_allure_report.py +77 -0
  277. package/tools/generate_allure_report.sh +4 -0
  278. package/tools/generate_jmx_plan.py +299 -68
  279. package/tools/generate_test_reports.ps1 +12 -134
  280. package/tools/generate_test_reports.py +133 -0
  281. package/tools/generate_test_reports.sh +4 -0
  282. package/tools/gherkin_suite.py +758 -0
  283. package/tools/git_pre_commit_guard.py +12 -6
  284. package/tools/goldfish_review.py +366 -0
  285. package/tools/heal_pr_automator.py +1 -1
  286. package/tools/heuristic_locator_matcher.py +170 -21
  287. package/tools/infer_linter.py +612 -70
  288. package/tools/jtl_analyzer.py +1 -1
  289. package/tools/lint_ai_docs.py +64 -0
  290. package/tools/matrix_sharder.py +1 -1
  291. package/tools/mcp_excel_server.ps1 +12 -250
  292. package/tools/mcp_excel_server.py +249 -0
  293. package/tools/mcp_excel_server.sh +4 -0
  294. package/tools/mcp_server.py +368 -144
  295. package/tools/md_to_xlsx.py +307 -0
  296. package/tools/micro_mutator.py +300 -69
  297. package/tools/omni_transpiler.py +2 -2
  298. package/tools/output_formatter.py +128 -0
  299. package/tools/pinpoint_failure.py +88 -88
  300. package/tools/project_state.py +2 -2
  301. package/tools/repo_map.py +1 -1
  302. package/tools/safety_firewall.py +197 -33
  303. package/tools/setup_project.py +294 -30
  304. package/tools/skillspector.py +8 -8
  305. package/tools/spec_drift_sentinel.py +439 -0
  306. package/tools/sync_agent_rules.py +248 -0
  307. package/tools/telemetry_correlator.py +45 -0
  308. package/tools/test_impact.py +51 -12
  309. package/tools/tms_sync_bridge.py +21 -5
  310. package/tools/universal_ir.py +3 -0
  311. package/tools/update_sentinel.py +87 -15
  312. package/tools/verify_all.ps1 +13 -0
  313. package/tools/verify_all.py +463 -79
  314. package/tools/visual_diff_canvas.py +1 -0
  315. package/tools/visual_som_helper.py +1 -1
  316. package/tools/watch_mode.py +305 -0
  317. package/tools/welcome_page.py +291 -0
@@ -1,248 +1,142 @@
1
1
  ---
2
2
  name: backend-load-and-stress-patterns
3
- description: "Orchestrate k6 and Locust backend load, stress, and SLA endurance test suites."
3
+ description: "Orchestrate k6, Locust, and JMeter backend load, stress, and SLA endurance test suites. Use when designing load, stress, or spike test patterns for backend systems."
4
4
  ---
5
5
 
6
- # Backend Load & Stress Testing Patterns (k6 & Locust Orchestrator)
6
+ # Backend Load & Performance Testing Skill
7
7
 
8
- > **Purpose:** Master backend performance, throughput, and scalability engineering. Directs AI agents to model concurrent Virtual User (VU) traffic, execute stress/soak test profiles, and enforce automated SLA gates (P95/P99 latency, error rate < 0.1%) to detect bottlenecks before production release.
8
+ > **Target:** Model concurrent Virtual User (VU) and arrival-rate traffic, execute stress/soak test profiles, and enforce automated SLA gates (P95/P99 latency, error rate < 1.0%) to detect bottlenecks before production.
9
+ > **Mandatory Rule:** Adhere strictly to [.agents/rules/performance_testing_rules.md](file://.agents/rules/performance_testing_rules.md) for safety approvals, hard caps, and truth-anchor reporting.
9
10
 
10
11
  ---
11
12
 
12
- ## 1. Five Core Performance Test Archetypes
13
+ ## 1. Test Archetypes & SLA Targets
13
14
 
14
- ```mermaid
15
- flowchart LR
16
- A["<b>1. Smoke Test</b><br/>1-5 VUs / 1 min<br/>Sanity check"] --> B["<b>2. Load Test</b><br/>50-200 VUs / 15m<br/>Expected daily peak"]
17
- B --> C["<b>3. Stress Test</b><br/>500-2000+ VUs<br/>Find breaking point"]
18
- C --> D["<b>4. Spike Test</b><br/>Instant surge 10->1000<br/>Traffic shocks"]
19
- D --> E["<b>5. Soak / Endurance</b><br/>Stable load / 2-12 hrs<br/>Memory leaks & OOM"]
20
- ```
21
-
22
- | Test Archetype | Virtual Users (VUs) | Duration | Primary Objective | Failure Indicator |
15
+ | Archetype | VUs / Rate | Duration | Objective | SLA Assertion |
23
16
  | :--- | :--- | :--- | :--- | :--- |
24
- | **Smoke Test** | 1 - 5 VUs | 1 - 2 mins | Script syntax & endpoint health sanity | Any HTTP 5xx or unhandled exceptions |
25
- | **Load Test** | 50 - 200 VUs | 15 - 30 mins | Verify system SLA under standard peak traffic | P95 latency > 500ms or error rate > 0.1% |
26
- | **Stress Test** | 200 -> 2,000+ VUs | 30 - 60 mins | Identify maximum throughput and degradation cliff | DB connection pool exhaustion, 503/504 errors |
27
- | **Spike Test** | 10 -> 1,000 VUs in 10s | 5 - 10 mins | Test autoscaling latency and rate limiters | Gateway timeout (504), service unresponsiveness |
28
- | **Soak Test** | 50 - 100 VUs | 2 - 12 hours | Detect slow memory leaks, disk fill, thread locks | Degraded throughput over time, JVM OOM |
17
+ | **Smoke Test** | 1 - 5 VUs | 1 - 2 min | Health sanity check | Error rate = 0%, P95 < 300ms |
18
+ | **Average Load** | 50 - 200 VUs | 10 - 30 min | Standard peak capacity | Error rate < 0.5%, P95 < 500ms |
19
+ | **Stress Test** | 200 -> 2,000 VUs | 20 - 45 min | Find degradation cliff | Graceful 429/503 (no JVM OOM) |
20
+ | **Spike Test** | 10 -> 1,000 VUs | 5 - 10 min | Autoscaling & rate limiters | Gateway recovery < 30s |
21
+ | **Soak Test** | 50 - 100 VUs | 2 - 12 hr | Memory leaks & connection leaks | Stable heap & steady latency |
29
22
 
30
23
  ---
31
24
 
32
- ## 2. Automated SLA Threshold Assertions
25
+ ## 2. Tooling Unified Runbook
33
26
 
34
- Every performance test execution must assert measurable SLA criteria. If thresholds fail, the CI/CD pipeline returns a non-zero exit code.
35
-
36
- ```javascript
37
- // Enterprise SLA Gates (k6)
38
- export const options = {
39
- thresholds: {
40
- // 95% of requests must complete under 500ms
41
- http_req_duration: ['p(95)<500', 'p(99)<1000'],
42
- // Request failure rate must stay under 0.1%
43
- http_req_failed: ['rate<0.001'],
44
- // Functional checks must maintain > 99.9% success
45
- checks: ['rate>0.999'],
46
- },
47
- };
48
- ```
27
+ ### Option A: Apache JMeter (Headless CLI + JTL Analyzer)
28
+ ```bash
29
+ # 1. Generate XML test plan from OpenAPI / Postman
30
+ synapse generate-jmx --spec api.json -o load_plan.jmx --vus 50 --duration 180 --sla-p95 500
49
31
 
50
- ---
32
+ # 2. Run headless benchmark
33
+ jmeter -n -t load_plan.jmx -l results.jtl -e -o ./html_report
51
34
 
52
- ## 3. Production-Ready k6 Load Script (TypeScript / JavaScript)
35
+ # 3. Automated CI/CD Quality Gatekeeper
36
+ synapse analyze-jtl results.jtl --sla-p95 500 --max-error-rate 1.0
37
+ ```
53
38
 
39
+ ### Option B: k6 Production Load Testing (with Kill-Switch & Arrival Rate)
54
40
  ```javascript
55
41
  import http from 'k6/http';
56
42
  import { check, sleep } from 'k6';
57
- import { Counter, Rate, Trend } from 'k6/metrics';
58
-
59
- // Custom Enterprise Metrics
60
- const errorRate = new Rate('custom_error_rate');
61
- const searchLatency = new Trend('search_latency');
62
43
 
63
44
  export const options = {
45
+ discardResponseBodies: true,
64
46
  scenarios: {
65
- enterprise_workload: {
66
- executor: 'ramping-vus',
67
- startVUs: 0,
47
+ steady_load: {
48
+ executor: 'ramping-arrival-rate',
49
+ startRate: 10,
50
+ timeUnit: '1s',
51
+ preAllocatedVUs: 50,
52
+ maxVUs: 200,
68
53
  stages: [
69
- { duration: '2m', target: 50 }, // Ramp-up to 50 users
70
- { duration: '5m', target: 50 }, // Steady state peak
71
- { duration: '2m', target: 150 }, // Surge stress load
72
- { duration: '3m', target: 150 }, // Sustained stress
73
- { duration: '2m', target: 0 }, // Ramp-down to 0
54
+ { duration: '2m', target: 50 }, // Ramp-up
55
+ { duration: '10m', target: 50 }, // Steady state (SLA measured here)
56
+ { duration: '2m', target: 0 }, // Ramp-down
74
57
  ],
75
- gracefulRampDown: '30s',
76
58
  },
77
59
  },
78
60
  thresholds: {
79
- http_req_duration: ['p(95)<400', 'p(99)<800'],
80
- custom_error_rate: ['rate<0.005'], // < 0.5% errors under stress
61
+ // 1. Steady state SLA thresholds
62
+ 'http_req_failed{scenario:steady_load}': ['rate<0.01'],
63
+ 'http_req_duration{scenario:steady_load,expected_response:true}': ['p(95)<500', 'p(99)<1000'],
64
+ 'checks{scenario:steady_load}': ['rate>0.99'],
65
+ 'dropped_iterations{scenario:steady_load}': ['count==0'],
66
+ // 2. Kill-switch: abort test if system fails catastrophically
67
+ http_req_failed: [{ threshold: 'rate<0.10', abortOnFail: true, delayAbortEval: '30s' }],
81
68
  },
82
69
  };
83
70
 
84
- const BASE_URL = __ENV.TARGET_URL || 'https://api.staging.enterprise.local';
85
-
71
+ // 1. One-time setup: authenticate and obtain auth token
86
72
  export function setup() {
87
- // Pre-test Authentication & Seeding (Executed once)
88
- const authRes = http.post(`${BASE_URL}/api/v1/auth/login`, JSON.stringify({
89
- username: __ENV.PERF_USER || 'perf_agent_01',
90
- password: __ENV.PERF_PASSWORD || 'SecretVault#2026',
73
+ const loginRes = http.post(`${__ENV.BASE_URL}/api/v1/auth/login`, JSON.stringify({
74
+ username: __ENV.PERF_USER,
75
+ password: __ENV.PERF_PASSWORD,
91
76
  }), { headers: { 'Content-Type': 'application/json' } });
92
-
93
- check(authRes, { 'Auth 200 OK': (r) => r.status === 200 });
94
- const token = authRes.json('token');
95
- return { token };
77
+
78
+ return { token: loginRes.json('token') };
96
79
  }
97
80
 
81
+ // 2. Virtual User journey
98
82
  export default function (data) {
99
83
  const params = {
100
84
  headers: {
101
85
  'Authorization': `Bearer ${data.token}`,
102
86
  'Content-Type': 'application/json',
103
- 'X-Correlation-ID': `PERF-${__VU}-${__ITER}-${Date.now()}`,
104
87
  },
88
+ tags: { name: 'GET /api/v1/items' },
105
89
  };
106
90
 
107
- // 1. Transaction A: Fast Read API
108
- const resGet = http.get(`${BASE_URL}/api/v1/catalogs?limit=20`, params);
109
- const getOk = check(resGet, {
110
- 'Catalog GET 200': (r) => r.status === 200,
111
- 'Catalog Payload Valid': (r) => r.json('data.items') !== undefined,
91
+ const res = http.get(`${__ENV.BASE_URL}/api/v1/items?page=1&limit=20`, params);
92
+ check(res, {
93
+ 'status is 200': (r) => r.status === 200,
112
94
  });
113
- errorRate.add(!getOk);
114
- searchLatency.add(resGet.timings.duration);
115
95
 
116
- sleep(1);
117
-
118
- // 2. Transaction B: Dynamic Mutation API
119
- const payload = JSON.stringify({
120
- code: `AUTO_PERF_${__VU}_${__ITER}_${Date.now()}`,
121
- name: 'Dynamic Synthetic Benchmark Item',
122
- active: true,
123
- });
124
-
125
- const resPost = http.post(`${BASE_URL}/api/v1/catalogs`, payload, params);
126
- const postOk = check(resPost, {
127
- 'Catalog POST 201': (r) => r.status === 201 || r.status === 200,
128
- });
129
- errorRate.add(!postOk);
130
-
131
- sleep(2);
96
+ // Realistic think time between actions (uniform 1s to 3s)
97
+ sleep(Math.random() * 2 + 1);
132
98
  }
133
99
 
100
+ // 3. Ephemeral teardown cleanup
134
101
  export function teardown(data) {
135
- // Clean up benchmark markers if required
102
+ // Execute teardown API calls for created PERF_ entities
136
103
  }
137
104
  ```
138
105
 
139
106
  ---
140
107
 
141
- ## 4. Production-Ready Locust Load Script (Python)
142
-
143
- ```python
144
- import os
145
- import time
146
- from locust import HttpUser, task, between, events
147
-
148
- class EnterpriseBackendUser(HttpUser):
149
- wait_time = between(1.0, 2.5) # Realistic user think-time
150
-
151
- def on_start(self):
152
- """Initial authentication handshake per Virtual User."""
153
- res = self.client.post("/api/v1/auth/login", json={
154
- "username": os.getenv("PERF_USER", "perf_tester"),
155
- "password": os.getenv("PERF_PWD", "SecretPass2026")
156
- })
157
- if res.status_code == 200:
158
- token = res.json().get("token")
159
- self.client.headers.update({"Authorization": f"Bearer {token}"})
160
-
161
- @task(3)
162
- def query_search_index(self):
163
- """High-frequency read query."""
164
- with self.client.get("/api/v1/search?q=enterprise&page=1", catch_response=True) as response:
165
- if response.status_code != 200:
166
- response.failure(f"Search API failed with HTTP {response.status_code}")
167
- elif response.elapsed.total_seconds() > 0.5:
168
- response.failure(f"Search API SLA breached (>500ms): {response.elapsed.total_seconds():.3f}s")
169
-
170
- @task(1)
171
- def submit_order_transaction(self):
172
- """Mutation transaction with dynamic unique identifier."""
173
- order_id = f"ORDER_PERF_{time.time_ns()}"
174
- with self.client.post("/api/v1/orders", json={
175
- "orderCode": order_id,
176
- "items": [{"sku": "SKU-990", "quantity": 1}],
177
- "totalAmount": 150000
178
- }, catch_response=True) as response:
179
- if response.status_code not in (200, 201):
180
- response.failure(f"Order submission failed: {response.text}")
181
- ```
108
+ ## 3. Best Practices & Safety Invariants
182
109
 
183
- ---
110
+ - **Isolated Test Data:** Always use dynamic runtime identifiers (`PERF_AUTO_${Date.now()}`) to eliminate primary key collisions.
111
+ - **TearDown Hygiene:** Complement POST/creation load tests with automated teardown or ephemeral DB snapshots (`tools/db_sandbox.py`).
112
+ - **Telemetry Correlation:** Pair JTL/k6 metrics with server CPU/Memory traces via `tools/telemetry_correlator.py`.
113
+ - **Truth Anchor:** Never loosen thresholds to manufacture a false pass. A failing threshold indicates a system capacity limit to be investigated.
184
114
 
185
- ## 5. Execution Runbook & CI/CD Integration
115
+ ---
186
116
 
187
- ### Run k6 Headless with JSON Summary
188
- ```bash
189
- # Execute 100-user load test and export raw metrics
190
- k6 run --out json=reports/k6_metrics.json tests/load/k6_catalog_load.js
191
-
192
- # Assert exit code in CI/CD pipeline
193
- if [ $? -ne 0 ]; then
194
- echo "❌ Performance SLA threshold breached!"
195
- exit 1
196
- fi
197
- ```
117
+ ## 4. Code-as-Code Load Model (Locust)
198
118
 
199
- ### Run Locust Headless in CI/CD
200
- ```bash
201
- locust -f tests/load/locustfile.py --headless -u 100 -r 10 --run-time 5m \
202
- --host https://api.staging.enterprise.local \
203
- --html reports/locust_report.html \
204
- --exit-code-on-error 1
205
- ```
119
+ > *Borrowed and adapted from the Locust load-testing model (MIT license, locustio/locust).*
206
120
 
207
- ### Autonomous Apache JMeter 360° Pinnacle Suite (Full-Stack & Multi-Protocol)
208
- Hub provides complete enterprise lifecycle automation for Apache JMeter 5.x via `generate_jmx_plan.py`, `jtl_analyzer.py`, and `telemetry_correlator.py`:
121
+ When version-controlled, reviewable load tests matter more than XML tooling,
122
+ generate a runnable locustfile from the same API ingestion used for JMeter:
209
123
 
210
124
  ```bash
211
- # 1. Generate Full Enterprise Plan with Pareto Traffic Shaping (70/20/10) & Deep Correlation
212
- agent-qa generate-jmx --spec swagger.json -o perf_plan.jmx \
213
- --workload spike --vus 200 --duration 600 \
214
- --weighted-mix "70:Browse,20:Cart,10:Checkout" \
215
- --csv-data users.csv --deep-correlation --jsr223-hmac
216
-
217
- # 2. Multi-Protocol Load Plans (WebSocket, gRPC, Kafka, JDBC)
218
- agent-qa generate-jmx --ws-sample -o websocket_plan.jmx # Real-time WebSocket feed
219
- agent-qa generate-jmx --grpc-sample -o grpc_plan.jmx # Microservices Unary RPC
220
- agent-qa generate-jmx --kafka-sample -o kafka_plan.jmx # Event-driven message broker
221
- agent-qa generate-jmx --jdbc-sample -o jdbc_plan.jmx # Direct Database SQL pool
222
-
223
- # 3. Live APM Telemetry & PerfMon Hardware Agent
224
- agent-qa generate-jmx --spec swagger.json -o perf_plan.jmx \
225
- --influxdb-url http://influxdb:8086/write?db=jmeter \
226
- --perfmon-server 192.168.1.50:4444
227
-
228
- # 4. Distributed Cluster Execution (Master + 3 Slaves)
229
- docker-compose -f tools/templates/jmeter-distributed/docker-compose.yml up -d
230
- jmeter -n -t perf_plan.jmx -R slave1,slave2,slave3 -l results.jtl
231
-
232
- # 5. CI/CD SLA Quality Gate Enforcement (Exit code 0 on Pass, 1 on Breach)
233
- agent-qa analyze-jtl results.jtl --sla-p95 500 --max-error-rate 1.0 \
234
- --markdown pr_perf_report.md --json metrics.json
235
-
236
- # 6. Full-Stack APM & Server Infrastructure RCA Correlator
237
- agent-qa correlate-telemetry --jtl results.jtl --server-metrics server_metrics.csv \
238
- --markdown rca_report.md
125
+ synapse generate-jmx --spec swagger.json --emit-locust locustfile.py \
126
+ --weighted-mix "70,20,10" --think-time-min 500 --think-time-max 1500
127
+ locust -f locustfile.py --host=https://api.staging.enterprise.local
239
128
  ```
240
129
 
241
- ---
242
-
243
- ## 6. Performance Engineering Checklist
244
- - [ ] Authentication executed once per VU in `setup()` or `on_start()`, never in tight loops.
245
- - [ ] Synthetic transactions use dynamic unique codes to eliminate DB primary key collisions.
246
- - [ ] SLA thresholds include both latency (P95/P99) and availability (`error_rate < 0.1%`).
247
- - [ ] Soak tests executed against isolated staging environments with active APM/DB monitoring.
248
- - [ ] Teardown removes temporary benchmark data to prevent DB bloat.
130
+ The generated file follows the Locust shape — one `HttpUser` class, one
131
+ `@task(weight)` method per endpoint, `wait_time` from think-time — so QA
132
+ engineers can hand-tune scenarios in pure Python and commit them next to the
133
+ test suite.
134
+
135
+ 1. **Weights are the traffic mix** — the same `--weighted-mix` percentages that
136
+ drive JMeter `ThroughputController`s drive `@task` weights; keep both exports
137
+ in sync from one spec.
138
+ 2. **Prefer code-as-code for logic-heavy journeys** — conditional flows
139
+ (login → create → assert → delete) are Python, not XML; use the JMX export
140
+ for protocol breadth (JDBC/Kafka/gRPC/WS) and Locust for flow logic.
141
+ 3. **Same SLA gates** — run `agent-qa analyze-jtl` semantics on Locust stats:
142
+ fail CI when P95 breaches the SLA budget.
@@ -0,0 +1,13 @@
1
+ import http from 'k6/http';
2
+ import { check, sleep } from 'k6';
3
+
4
+ export const options = {
5
+ vus: 10,
6
+ duration: '30s',
7
+ };
8
+
9
+ export default function () {
10
+ const res = http.get('https://test.k6.io');
11
+ check(res, { 'status was 200': (r) => r.status == 200 });
12
+ sleep(1);
13
+ }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: bats-testing-patterns
3
- description: "Test bash/sh scripts, CLI tools, and CI/CD pipelines with Bats."
3
+ description: "Test bash/sh scripts, CLI tools, and CI/CD pipelines with Bats. Use when writing Bash automation tests with the BATS framework."
4
4
  ---
5
5
 
6
6
  # Bats Testing Patterns (Bash Automated Testing System)
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bats
2
+
3
+ @test 'verify CLI returns version' {
4
+ run python3 tools/cli.py --version
5
+ [ "$status" -eq 0 ]
6
+ }