pi-dev-team 0.2.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 (780) hide show
  1. package/LICENSE +21 -0
  2. package/PORTING.md +134 -0
  3. package/README.md +207 -0
  4. package/UPSTREAM.json +64 -0
  5. package/agents/Explore.md +15 -0
  6. package/agents/a11y-review.md +118 -0
  7. package/agents/adr-author.md +70 -0
  8. package/agents/ai-provenance-review.md +120 -0
  9. package/agents/angular-reactivity-review.md +95 -0
  10. package/agents/arch-review.md +135 -0
  11. package/agents/architect.md +78 -0
  12. package/agents/autoship-batch-proposer.md +69 -0
  13. package/agents/claude-setup-review.md +136 -0
  14. package/agents/codebase-recon.md +184 -0
  15. package/agents/component-architecture-review.md +119 -0
  16. package/agents/concurrency-review.md +109 -0
  17. package/agents/correctness-review.md +290 -0
  18. package/agents/data-flow-tracer.md +120 -0
  19. package/agents/doc-review.md +165 -0
  20. package/agents/domain-review.md +136 -0
  21. package/agents/general-purpose.md +10 -0
  22. package/agents/gherkin-quality-critic.md +113 -0
  23. package/agents/js-fp-review.md +114 -0
  24. package/agents/mutation-kill.md +684 -0
  25. package/agents/naming-review.md +142 -0
  26. package/agents/orchestrator.md +339 -0
  27. package/agents/performance-review.md +105 -0
  28. package/agents/plan-review-acceptance.md +115 -0
  29. package/agents/plan-review-design.md +90 -0
  30. package/agents/plan-review-parallelization.md +84 -0
  31. package/agents/plan-review-strategic.md +96 -0
  32. package/agents/plan-review-ux.md +110 -0
  33. package/agents/platform-engineer.md +64 -0
  34. package/agents/product-manager.md +68 -0
  35. package/agents/progress-guardian.md +79 -0
  36. package/agents/qa-engineer.md +289 -0
  37. package/agents/quality-reviewer.md +132 -0
  38. package/agents/react-reactivity-review.md +102 -0
  39. package/agents/refactor-opportunity-review.md +128 -0
  40. package/agents/security-engineer.md +60 -0
  41. package/agents/security-review.md +218 -0
  42. package/agents/session-analysis.md +95 -0
  43. package/agents/software-engineer.md +105 -0
  44. package/agents/spec-compliance-review.md +100 -0
  45. package/agents/spec-reviewer.md +114 -0
  46. package/agents/structure-review.md +146 -0
  47. package/agents/tech-writer.md +84 -0
  48. package/agents/test-review.md +246 -0
  49. package/agents/test-smell-review.md +188 -0
  50. package/agents/token-efficiency-review.md +139 -0
  51. package/agents/ui-ux-designer.md +54 -0
  52. package/agents/vue-reactivity-review.md +95 -0
  53. package/bin/__pycache__/claudecpython-314.pyc +0 -0
  54. package/bin/claude +258 -0
  55. package/docs/upstream/.pages +1 -0
  56. package/docs/upstream/CHANGELOG.md +2586 -0
  57. package/docs/upstream/README.md +155 -0
  58. package/docs/upstream/agent-architecture.md +214 -0
  59. package/docs/upstream/agent_info.md +187 -0
  60. package/docs/upstream/artifact-migration.md +124 -0
  61. package/docs/upstream/code-intelligence-nudge.md +149 -0
  62. package/docs/upstream/code-review-process.md +294 -0
  63. package/docs/upstream/concurrent-use.md +73 -0
  64. package/docs/upstream/context-management.md +111 -0
  65. package/docs/upstream/developer-notes.md +280 -0
  66. package/docs/upstream/diagrams/architecture-overview.svg +101 -0
  67. package/docs/upstream/diagrams/review-dispatch.svg +139 -0
  68. package/docs/upstream/diagrams/team-agents.svg +128 -0
  69. package/docs/upstream/diagrams/test-improve-flow.svg +166 -0
  70. package/docs/upstream/diagrams/workflow-linear.svg +66 -0
  71. package/docs/upstream/diagrams/workflow-three-phase.svg +200 -0
  72. package/docs/upstream/eval-maintenance.md +95 -0
  73. package/docs/upstream/eval-running-guide.md +147 -0
  74. package/docs/upstream/eval-system.md +291 -0
  75. package/docs/upstream/session-review-oss-complements.md +75 -0
  76. package/docs/upstream/session-review.md +212 -0
  77. package/docs/upstream/skills.md +188 -0
  78. package/docs/upstream/team-structure.md +21 -0
  79. package/docs/upstream/telemetry-ci-access.md +129 -0
  80. package/docs/upstream/telemetry-repo-security.md +120 -0
  81. package/docs/upstream/test-evaluation.md +277 -0
  82. package/docs/upstream/test-improve.md +154 -0
  83. package/docs/upstream/triage-workflow.md +282 -0
  84. package/docs/upstream/workflows.md +289 -0
  85. package/extensions/dev-team/index.ts +539 -0
  86. package/extensions/dev-team/lib/agents.ts +272 -0
  87. package/extensions/dev-team/lib/ai-credits.ts +92 -0
  88. package/extensions/dev-team/lib/autocompact.ts +81 -0
  89. package/extensions/dev-team/lib/child-run.ts +102 -0
  90. package/extensions/dev-team/lib/config.ts +236 -0
  91. package/extensions/dev-team/lib/gh-command.ts +103 -0
  92. package/extensions/dev-team/lib/github-style.ts +307 -0
  93. package/extensions/dev-team/lib/hooks.ts +350 -0
  94. package/extensions/dev-team/lib/metrics.ts +115 -0
  95. package/extensions/dev-team/lib/safe-read.ts +49 -0
  96. package/extensions/dev-team/lib/session-files.ts +57 -0
  97. package/extensions/dev-team/lib/session-spend.ts +123 -0
  98. package/extensions/dev-team/lib/shell-scan.ts +205 -0
  99. package/extensions/dev-team/lib/skills.ts +213 -0
  100. package/extensions/dev-team/lib/subagent-render.ts +245 -0
  101. package/extensions/dev-team/lib/subagent-types.ts +164 -0
  102. package/extensions/dev-team/lib/subagent.ts +596 -0
  103. package/extensions/dev-team/lib/terminal-text.ts +54 -0
  104. package/extensions/dev-team/lib/tools-misc.ts +152 -0
  105. package/extensions/dev-team/lib/transcript.ts +110 -0
  106. package/extensions/dev-team/lib/trust.ts +52 -0
  107. package/extensions/dev-team/lib/usage-breakdown.ts +176 -0
  108. package/extensions/dev-team/lib/usage-chart.ts +153 -0
  109. package/extensions/dev-team/lib/usage-command.ts +107 -0
  110. package/extensions/dev-team/lib/usage-history.ts +203 -0
  111. package/extensions/dev-team/lib/usage-render.ts +225 -0
  112. package/extensions/dev-team/lib/usage-split-bar.ts +127 -0
  113. package/extensions/dev-team/lib/usage-state.ts +116 -0
  114. package/extensions/dev-team/lib/usage-text.ts +159 -0
  115. package/extensions/dev-team/lib/usage-view.ts +109 -0
  116. package/hooks/__pycache__/refactor_test_freeze_guard.cpython-314.pyc +0 -0
  117. package/hooks/agent_dispatch_ledger.py +190 -0
  118. package/hooks/autocompact_setup_nudge.py +99 -0
  119. package/hooks/bash_retry_guard.py +228 -0
  120. package/hooks/boundary_events_write_guard.py +352 -0
  121. package/hooks/code_intelligence_nudge.py +293 -0
  122. package/hooks/code_intelligence_turn_mark.py +317 -0
  123. package/hooks/codegraph_bootstrap.py +139 -0
  124. package/hooks/contract_version_guard.py +362 -0
  125. package/hooks/cost_meter.py +106 -0
  126. package/hooks/destructive-commands.json +62 -0
  127. package/hooks/destructive_guard.py +477 -0
  128. package/hooks/eval_compliance_check.py +440 -0
  129. package/hooks/guards.json +17 -0
  130. package/hooks/hooks.json +323 -0
  131. package/hooks/internal_double_gate.py +296 -0
  132. package/hooks/js_fp_review.py +212 -0
  133. package/hooks/knowledge_index.py +119 -0
  134. package/hooks/lib/__pycache__/artifact_paths.cpython-314.pyc +0 -0
  135. package/hooks/lib/__pycache__/atomic_state.cpython-314.pyc +0 -0
  136. package/hooks/lib/__pycache__/autocompact_config.cpython-314.pyc +0 -0
  137. package/hooks/lib/__pycache__/boundary_events.cpython-314.pyc +0 -0
  138. package/hooks/lib/__pycache__/doc_classification.cpython-314.pyc +0 -0
  139. package/hooks/lib/__pycache__/gh_pr_create_detect.cpython-314.pyc +0 -0
  140. package/hooks/lib/__pycache__/git_safe_diff.cpython-314.pyc +0 -0
  141. package/hooks/lib/__pycache__/instrument_log.cpython-314.pyc +0 -0
  142. package/hooks/lib/__pycache__/metrics_query.cpython-314.pyc +0 -0
  143. package/hooks/lib/__pycache__/plugin_version.cpython-314.pyc +0 -0
  144. package/hooks/lib/__pycache__/pre_commit_doc_classifier.cpython-314.pyc +0 -0
  145. package/hooks/lib/__pycache__/review_agent_registry.cpython-314.pyc +0 -0
  146. package/hooks/lib/__pycache__/review_gate_corroboration.cpython-314.pyc +0 -0
  147. package/hooks/lib/__pycache__/review_gate_hash.cpython-314.pyc +0 -0
  148. package/hooks/lib/__pycache__/review_verdicts.cpython-314.pyc +0 -0
  149. package/hooks/lib/__pycache__/stdin_json.cpython-314.pyc +0 -0
  150. package/hooks/lib/__pycache__/stryker_invocation.cpython-314.pyc +0 -0
  151. package/hooks/lib/__pycache__/telemetry_consent.cpython-314.pyc +0 -0
  152. package/hooks/lib/__pycache__/test_file_classify.cpython-314.pyc +0 -0
  153. package/hooks/lib/__pycache__/token_efficiency_limits.cpython-314.pyc +0 -0
  154. package/hooks/lib/__pycache__/verify_guard_state.cpython-314.pyc +0 -0
  155. package/hooks/lib/__pycache__/xunit_v3_operator_gate.cpython-314.pyc +0 -0
  156. package/hooks/lib/agent_skill_hints.py +74 -0
  157. package/hooks/lib/artifact_paths.py +263 -0
  158. package/hooks/lib/atomic_state.py +557 -0
  159. package/hooks/lib/autocompact_config.py +103 -0
  160. package/hooks/lib/autoship_log.py +106 -0
  161. package/hooks/lib/banned_scripts_policy.py +51 -0
  162. package/hooks/lib/boundary_events.py +436 -0
  163. package/hooks/lib/build_knowledge_index.py +504 -0
  164. package/hooks/lib/build_skills_index.py +361 -0
  165. package/hooks/lib/build_state.py +116 -0
  166. package/hooks/lib/classify_ship_outcome.py +126 -0
  167. package/hooks/lib/config_changelog_schema.py +115 -0
  168. package/hooks/lib/cost_meter.py +955 -0
  169. package/hooks/lib/doc_classification.py +116 -0
  170. package/hooks/lib/gh_pr_create_detect.py +136 -0
  171. package/hooks/lib/git_safe_diff.py +123 -0
  172. package/hooks/lib/instrument_log.py +66 -0
  173. package/hooks/lib/iteration_journal_gate.py +197 -0
  174. package/hooks/lib/knowledge_index_paths.py +88 -0
  175. package/hooks/lib/mcp_json_repowise.py +177 -0
  176. package/hooks/lib/metrics_query.py +202 -0
  177. package/hooks/lib/minimal_yaml.py +434 -0
  178. package/hooks/lib/plugin_version.py +142 -0
  179. package/hooks/lib/pre_commit_detect.py +537 -0
  180. package/hooks/lib/pre_commit_doc_classifier.py +126 -0
  181. package/hooks/lib/pricing.py +118 -0
  182. package/hooks/lib/report_pdf.py +371 -0
  183. package/hooks/lib/review_agent_registry.py +142 -0
  184. package/hooks/lib/review_dispatch_ledger.py +101 -0
  185. package/hooks/lib/review_gate_corroboration.py +521 -0
  186. package/hooks/lib/review_gate_hash.py +252 -0
  187. package/hooks/lib/review_gate_normalized_hash.py +1115 -0
  188. package/hooks/lib/review_verdicts.py +301 -0
  189. package/hooks/lib/run_report.py +160 -0
  190. package/hooks/lib/skill_categories.yaml +125 -0
  191. package/hooks/lib/stdin_json.py +57 -0
  192. package/hooks/lib/stryker_invocation.py +102 -0
  193. package/hooks/lib/telemetry_consent.py +41 -0
  194. package/hooks/lib/telemetry_report.py +108 -0
  195. package/hooks/lib/test_file_classify.py +160 -0
  196. package/hooks/lib/token_efficiency_limits.py +51 -0
  197. package/hooks/lib/turn_identity.py +77 -0
  198. package/hooks/lib/verify_guard_state.py +110 -0
  199. package/hooks/lib/workflow_state.py +206 -0
  200. package/hooks/lib/xunit_v3_operator_gate.py +596 -0
  201. package/hooks/mcp_json_repowise_nudge.py +74 -0
  202. package/hooks/mutation_adapters/__init__.py +7 -0
  203. package/hooks/mutation_adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  204. package/hooks/mutation_adapters/__pycache__/lib.cpython-314.pyc +0 -0
  205. package/hooks/mutation_adapters/__pycache__/mutmut.cpython-314.pyc +0 -0
  206. package/hooks/mutation_adapters/__pycache__/pitest.cpython-314.pyc +0 -0
  207. package/hooks/mutation_adapters/__pycache__/stryker.cpython-314.pyc +0 -0
  208. package/hooks/mutation_adapters/__pycache__/stryker_net.cpython-314.pyc +0 -0
  209. package/hooks/mutation_adapters/lib.py +478 -0
  210. package/hooks/mutation_adapters/mutmut.py +188 -0
  211. package/hooks/mutation_adapters/pitest.py +266 -0
  212. package/hooks/mutation_adapters/stryker.py +157 -0
  213. package/hooks/mutation_adapters/stryker_net.py +264 -0
  214. package/hooks/mutation_gate.py +193 -0
  215. package/hooks/mutation_testing_smoke_gate.py +371 -0
  216. package/hooks/pending_review_notify.py +121 -0
  217. package/hooks/phase_marker.py +138 -0
  218. package/hooks/post_compact_state_reinject.py +180 -0
  219. package/hooks/post_format.py +115 -0
  220. package/hooks/pre_commit_knowledge_index.py +128 -0
  221. package/hooks/pre_commit_review.py +66 -0
  222. package/hooks/pre_pr_review.py +694 -0
  223. package/hooks/pre_tool_guard.py +405 -0
  224. package/hooks/py.sh +73 -0
  225. package/hooks/refactor-bash-write-patterns.json +29 -0
  226. package/hooks/refactor_test_bash_guard.py +253 -0
  227. package/hooks/refactor_test_freeze_guard.py +139 -0
  228. package/hooks/refactor_test_revert_guard.py +186 -0
  229. package/hooks/repo_review_nudge.py +287 -0
  230. package/hooks/review_verdict_recorder.py +464 -0
  231. package/hooks/scan_bash_command_for_banned_scripts.py +428 -0
  232. package/hooks/scan_worktree_for_banned_scripts.py +238 -0
  233. package/hooks/session_learning_trigger.py +248 -0
  234. package/hooks/skills_index.py +126 -0
  235. package/hooks/stryker_xunit_shim_guard.py +571 -0
  236. package/hooks/subagent_completion_guard.py +309 -0
  237. package/hooks/subagent_skill_context.py +139 -0
  238. package/hooks/task_completion_metrics.py +216 -0
  239. package/hooks/tdd_guard.py +229 -0
  240. package/hooks/telemetry.py +341 -0
  241. package/hooks/token_efficiency_review.py +194 -0
  242. package/hooks/verify_guard.py +183 -0
  243. package/hooks/verify_guard_edit_marker.py +73 -0
  244. package/hooks/version_check.py +173 -0
  245. package/knowledge/accepted-risks-schema.md +98 -0
  246. package/knowledge/adr-decision-criteria.md +64 -0
  247. package/knowledge/adversarial-review-protocol.md +139 -0
  248. package/knowledge/agent-registry.md +228 -0
  249. package/knowledge/agent-review-methodology.md +80 -0
  250. package/knowledge/ai-friendly-repo-guidelines.md +67 -0
  251. package/knowledge/architecture-assessment.md +96 -0
  252. package/knowledge/artifact-lifecycle.md +57 -0
  253. package/knowledge/cd-maturity-model.md +82 -0
  254. package/knowledge/cd-test-architecture.md +190 -0
  255. package/knowledge/ci-cd-file-scope.md +24 -0
  256. package/knowledge/codegraph-vs-graphify.md +192 -0
  257. package/knowledge/component-test-patterns.md +139 -0
  258. package/knowledge/database-change-management.md +80 -0
  259. package/knowledge/database-test-patterns.md +79 -0
  260. package/knowledge/decision-defaults.md +88 -0
  261. package/knowledge/dependency-breaking-techniques.md +116 -0
  262. package/knowledge/deployment-pipeline.md +86 -0
  263. package/knowledge/design-smells.md +122 -0
  264. package/knowledge/directory-enumeration.md +38 -0
  265. package/knowledge/domain-modeling.md +123 -0
  266. package/knowledge/evidence-bundle.md +90 -0
  267. package/knowledge/exploratory-testing-field-guide.md +122 -0
  268. package/knowledge/failure-routing.md +28 -0
  269. package/knowledge/fixture-construction.md +56 -0
  270. package/knowledge/frontend-component-architecture.md +139 -0
  271. package/knowledge/gherkin-quality-review-dispatch.md +135 -0
  272. package/knowledge/index.json +6766 -0
  273. package/knowledge/internal-collaborator-doubling.md +101 -0
  274. package/knowledge/legacy-test-strategy.md +71 -0
  275. package/knowledge/long-run-waiting.md +66 -0
  276. package/knowledge/microservice-testing.md +71 -0
  277. package/knowledge/model-pricing.json +23 -0
  278. package/knowledge/mutation-score-formulas.md +60 -0
  279. package/knowledge/object-calisthenics.md +147 -0
  280. package/knowledge/oracle-provenance.md +94 -0
  281. package/knowledge/orchestrator-script-implementation.md +185 -0
  282. package/knowledge/owasp-detection.md +148 -0
  283. package/knowledge/plan-review-rubric.md +56 -0
  284. package/knowledge/proxy-connectivity.md +62 -0
  285. package/knowledge/reactive-effect-patterns.md +73 -0
  286. package/knowledge/recon-inventory-excludes.txt +32 -0
  287. package/knowledge/references/bdd-value-guide.md +61 -0
  288. package/knowledge/references/csharp-http-client-testing.md +264 -0
  289. package/knowledge/release-strategies.md +74 -0
  290. package/knowledge/report-output-location.md +117 -0
  291. package/knowledge/report-pdf-integration.md +63 -0
  292. package/knowledge/report-print.css +129 -0
  293. package/knowledge/report-template.md +114 -0
  294. package/knowledge/report-to-pdf.md +69 -0
  295. package/knowledge/request-processing-flow.md +63 -0
  296. package/knowledge/result-verification.md +52 -0
  297. package/knowledge/review-agent-output-contract.md +121 -0
  298. package/knowledge/review-lens-classification.md +113 -0
  299. package/knowledge/review-rubric.md +62 -0
  300. package/knowledge/review-template.md +104 -0
  301. package/knowledge/rule-fixtures/A02.insecure-random-js/negative.js +1 -0
  302. package/knowledge/rule-fixtures/A02.insecure-random-js/positive.js +1 -0
  303. package/knowledge/rule-fixtures/A02.weak-hashing-md5/negative.py +1 -0
  304. package/knowledge/rule-fixtures/A02.weak-hashing-md5/positive.py +1 -0
  305. package/knowledge/rule-fixtures/A03.command-injection/negative.js +1 -0
  306. package/knowledge/rule-fixtures/A03.command-injection/positive.js +1 -0
  307. package/knowledge/rule-fixtures/A03.sql-injection/negative.js +1 -0
  308. package/knowledge/rule-fixtures/A03.sql-injection/positive.js +1 -0
  309. package/knowledge/rule-fixtures/A03.xss-innerhtml/negative.js +1 -0
  310. package/knowledge/rule-fixtures/A03.xss-innerhtml/positive.js +1 -0
  311. package/knowledge/rule-fixtures/A05.cors-wildcard/negative.js +1 -0
  312. package/knowledge/rule-fixtures/A05.cors-wildcard/positive.js +1 -0
  313. package/knowledge/rule-fixtures/A05.default-credentials/negative.js +1 -0
  314. package/knowledge/rule-fixtures/A05.default-credentials/positive.js +1 -0
  315. package/knowledge/rule-fixtures/A07.jwt-alg-none/negative.js +1 -0
  316. package/knowledge/rule-fixtures/A07.jwt-alg-none/positive.js +1 -0
  317. package/knowledge/rule-fixtures/A08.binary-formatter/negative.cs +1 -0
  318. package/knowledge/rule-fixtures/A08.binary-formatter/positive.cs +1 -0
  319. package/knowledge/rule-fixtures/A08.js-eval/negative.js +1 -0
  320. package/knowledge/rule-fixtures/A08.js-eval/positive.js +1 -0
  321. package/knowledge/rule-fixtures/A08.object-input-stream/negative.java +1 -0
  322. package/knowledge/rule-fixtures/A08.object-input-stream/positive.java +1 -0
  323. package/knowledge/schemas/disposition-register-v1.json +65 -0
  324. package/knowledge/schemas/recon-envelope-v1.json +198 -0
  325. package/knowledge/schemas/unified-finding-v1.json +72 -0
  326. package/knowledge/security-primitives-contract.md +301 -0
  327. package/knowledge/security-review-rule-map.yaml +107 -0
  328. package/knowledge/skills-registry.md +72 -0
  329. package/knowledge/task-size-classifier.md +103 -0
  330. package/knowledge/telemetry-schema.md +881 -0
  331. package/knowledge/test-automation-maturity.md +56 -0
  332. package/knowledge/test-automation-principles.md +71 -0
  333. package/knowledge/test-cadence-tradeoffs.md +68 -0
  334. package/knowledge/test-doubles.md +105 -0
  335. package/knowledge/test-file-indicators.md +22 -0
  336. package/knowledge/test-layer-gates.md +35 -0
  337. package/knowledge/test-matrix-examples/django-batch.md +24 -0
  338. package/knowledge/test-matrix-examples/dotnet-grpc-fronting-api.md +90 -0
  339. package/knowledge/test-matrix-examples/dotnet-http-consumer.md +131 -0
  340. package/knowledge/test-matrix-examples/react-node-spa.md +24 -0
  341. package/knowledge/test-matrix-examples/spring-boot-service.md +25 -0
  342. package/knowledge/test-matrix-examples/ssr-htmx.md +24 -0
  343. package/knowledge/test-organization.md +70 -0
  344. package/knowledge/test-pyramid.md +84 -0
  345. package/knowledge/test-refactoring.md +67 -0
  346. package/knowledge/test-review-division-of-labor.md +85 -0
  347. package/knowledge/test-smells.md +80 -0
  348. package/knowledge/test-stack-profiles/bdd-frameworks.md +235 -0
  349. package/knowledge/test-stack-profiles/django.md +13 -0
  350. package/knowledge/test-stack-profiles/dotnet.md +18 -0
  351. package/knowledge/test-stack-profiles/go.md +16 -0
  352. package/knowledge/test-stack-profiles/node.md +16 -0
  353. package/knowledge/test-stack-profiles/react.md +12 -0
  354. package/knowledge/test-stack-profiles/spring-boot.md +16 -0
  355. package/knowledge/test-stack-profiles/ssr-htmx.md +14 -0
  356. package/knowledge/test-stack-profiles/vue.md +12 -0
  357. package/knowledge/test-strategy.md +70 -0
  358. package/knowledge/testability-patterns.md +240 -0
  359. package/knowledge/testing-quadrants.md +44 -0
  360. package/knowledge/testing-techniques/approval.md +15 -0
  361. package/knowledge/testing-techniques/chaos.md +17 -0
  362. package/knowledge/testing-techniques/fuzz.md +15 -0
  363. package/knowledge/testing-techniques/property-based.md +15 -0
  364. package/knowledge/testing-techniques/schema-validation.md +15 -0
  365. package/knowledge/testing-techniques/screenshot.md +15 -0
  366. package/knowledge/three-phase-workflow.md +198 -0
  367. package/knowledge/value-patterns.md +55 -0
  368. package/knowledge/verification-mode.md +116 -0
  369. package/knowledge/virtual-service-libraries.md +75 -0
  370. package/knowledge/wave-consolidation-guidance.md +21 -0
  371. package/overrides/agents/Explore.md +15 -0
  372. package/overrides/agents/general-purpose.md +10 -0
  373. package/overrides/notes/autoship.md +6 -0
  374. package/overrides/notes/issues-from-assessment.md +3 -0
  375. package/overrides/notes/issues-from-plan.md +3 -0
  376. package/overrides/notes/mutation-night-watch.md +3 -0
  377. package/overrides/notes/mutation-testing.md +3 -0
  378. package/overrides/notes/pr.md +7 -0
  379. package/overrides/notes/project-init.md +6 -0
  380. package/overrides/notes/setup.md +13 -0
  381. package/overrides/notes/specs.md +3 -0
  382. package/overrides/skills/headless-run/SKILL.md +45 -0
  383. package/overrides/skills/upgrade/SKILL.md +30 -0
  384. package/overrides/skills/version/SKILL.md +25 -0
  385. package/package.json +36 -0
  386. package/scripts/authoring_digest.py +93 -0
  387. package/scripts/autoship_discover.py +121 -0
  388. package/scripts/autoship_group.py +409 -0
  389. package/scripts/autoship_proposals.py +494 -0
  390. package/scripts/autoship_queue.py +291 -0
  391. package/scripts/autoship_reclaim.py +495 -0
  392. package/scripts/build_jobs.py +108 -0
  393. package/scripts/build_rollback_point.py +240 -0
  394. package/scripts/build_slice_scope.py +157 -0
  395. package/scripts/build_wave.py +109 -0
  396. package/scripts/build_wave_reconcile.py +252 -0
  397. package/scripts/build_worktree_baseref.py +113 -0
  398. package/scripts/check_agent_scope.py +117 -0
  399. package/scripts/check_agent_tool_mapping.py +213 -0
  400. package/scripts/check_review_agent_mcp_tools.py +317 -0
  401. package/scripts/check_security_assessment_mcp_tools.py +165 -0
  402. package/scripts/checkpoint_abort.py +502 -0
  403. package/scripts/claude_setup_review.py +438 -0
  404. package/scripts/codebase_recon.py +556 -0
  405. package/scripts/coverage_config.py +623 -0
  406. package/scripts/coverage_delta_steering.py +330 -0
  407. package/scripts/coverage_discovery_dotnet.py +315 -0
  408. package/scripts/coverage_discovery_java.py +742 -0
  409. package/scripts/coverage_discovery_js.py +546 -0
  410. package/scripts/coverage_gap_ranking.py +556 -0
  411. package/scripts/coverage_readiness.py +455 -0
  412. package/scripts/coverage_report_parse.py +521 -0
  413. package/scripts/detect_bdd_convention.py +252 -0
  414. package/scripts/eval_ablation.py +376 -0
  415. package/scripts/gherkin_analysis_coverage_gate.py +306 -0
  416. package/scripts/gherkin_cross_feature_duplicate_titles_gate.py +173 -0
  417. package/scripts/gherkin_effectiveness_rollup.py +238 -0
  418. package/scripts/gherkin_failure_path_gate.py +206 -0
  419. package/scripts/gherkin_feature_merge.py +720 -0
  420. package/scripts/gherkin_stub_gate.py +163 -0
  421. package/scripts/gherkin_stub_merge.py +479 -0
  422. package/scripts/git_origin_host.py +88 -0
  423. package/scripts/install-java-static-analysis.py +110 -0
  424. package/scripts/issue_deps.py +74 -0
  425. package/scripts/lib/_bdd_markers.py +28 -0
  426. package/scripts/lib/_gherkin_text.py +93 -0
  427. package/scripts/lib/_vendored_tree.py +70 -0
  428. package/scripts/lib/autoship_state.py +397 -0
  429. package/scripts/lib/claude_md_guard.py +226 -0
  430. package/scripts/lib/deterministic_recon.py +446 -0
  431. package/scripts/lib/mcp_tool_grants.py +211 -0
  432. package/scripts/lib/plan_parse.py +386 -0
  433. package/scripts/lib/review_result.py +84 -0
  434. package/scripts/lib/review_roster.py +86 -0
  435. package/scripts/lib/session_log/__init__.py +34 -0
  436. package/scripts/lib/session_log/__pycache__/__init__.cpython-314.pyc +0 -0
  437. package/scripts/lib/session_log/__pycache__/records.cpython-314.pyc +0 -0
  438. package/scripts/lib/session_log/classify.py +231 -0
  439. package/scripts/lib/session_log/corrections.py +194 -0
  440. package/scripts/lib/session_log/discovery.py +108 -0
  441. package/scripts/lib/session_log/records.py +218 -0
  442. package/scripts/lib/session_log/redact.py +76 -0
  443. package/scripts/lib/session_log/signals.py +373 -0
  444. package/scripts/lib/session_report_downstream.py +614 -0
  445. package/scripts/lib/session_report_maintainer.py +1273 -0
  446. package/scripts/lib/session_report_shared.py +262 -0
  447. package/scripts/lib/settings_hook_guard.py +157 -0
  448. package/scripts/lib/slug.py +33 -0
  449. package/scripts/lib/stub_extractors/__init__.py +82 -0
  450. package/scripts/lib/stub_extractors/_common.py +328 -0
  451. package/scripts/lib/stub_extractors/csharp.py +19 -0
  452. package/scripts/lib/stub_extractors/go.py +173 -0
  453. package/scripts/lib/stub_extractors/java.py +18 -0
  454. package/scripts/lib/stub_extractors/jsts.py +126 -0
  455. package/scripts/mutation_stack_sections.py +149 -0
  456. package/scripts/mutation_yield_steering.py +345 -0
  457. package/scripts/orchestrator.py +895 -0
  458. package/scripts/plan_gherkin_export.py +227 -0
  459. package/scripts/plan_waves.py +208 -0
  460. package/scripts/pr_close_keyword_lint.py +108 -0
  461. package/scripts/progress_guardian.py +888 -0
  462. package/scripts/recon_inventory.py +273 -0
  463. package/scripts/review_findings_log.py +93 -0
  464. package/scripts/run_invariants.py +124 -0
  465. package/scripts/select_lenses.py +640 -0
  466. package/scripts/session_report.py +486 -0
  467. package/scripts/set_autocompact_env.py +221 -0
  468. package/scripts/ship_resume_guard.py +135 -0
  469. package/scripts/ship_review_gate.py +63 -0
  470. package/scripts/specs_convention_marker.py +103 -0
  471. package/scripts/test_improve_resume.py +277 -0
  472. package/scripts/test_review_mechanics.py +958 -0
  473. package/scripts/token_efficiency_review.py +322 -0
  474. package/scripts/verdict_scope.py +285 -0
  475. package/scripts/verify_gherkin_quality_critic_isolation.py +296 -0
  476. package/scripts/verify_tier.py +157 -0
  477. package/skills/adr-tools/SKILL.md +118 -0
  478. package/skills/agent-readiness/SKILL.md +105 -0
  479. package/skills/agent-readiness/ai_friendly_analyzers.py +326 -0
  480. package/skills/agent-readiness/scanner.py +441 -0
  481. package/skills/agent-readiness/scorecard.yaml +88 -0
  482. package/skills/api-design/SKILL.md +115 -0
  483. package/skills/apply-fixes/SKILL.md +171 -0
  484. package/skills/apply-test-doubles/SKILL.md +321 -0
  485. package/skills/artifact-lifecycle/SKILL.md +127 -0
  486. package/skills/autoship/SKILL.md +1124 -0
  487. package/skills/benchmark/SKILL.md +105 -0
  488. package/skills/branch-workflow/SKILL.md +89 -0
  489. package/skills/browse/SKILL.md +184 -0
  490. package/skills/browser-testing/SKILL.md +62 -0
  491. package/skills/browser-testing/references/playwright-patterns.md +216 -0
  492. package/skills/build/SKILL.md +422 -0
  493. package/skills/build/references/static-self-heal.md +245 -0
  494. package/skills/careful/SKILL.md +72 -0
  495. package/skills/cd-test-architecture/SKILL.md +371 -0
  496. package/skills/ci-debugging/SKILL.md +105 -0
  497. package/skills/co-evolution-audit/SKILL.md +269 -0
  498. package/skills/code-review/SKILL.md +1015 -0
  499. package/skills/code-review/examples/aggregated-sample.json +56 -0
  500. package/skills/code-review/examples/sample-report.md +41 -0
  501. package/skills/code-review/output-format.md +478 -0
  502. package/skills/code-review/scripts/activation.py +86 -0
  503. package/skills/code-review/scripts/change_impact.py +357 -0
  504. package/skills/code-review/scripts/change_shape.py +372 -0
  505. package/skills/code-review/scripts/change_size.py +212 -0
  506. package/skills/code-review/scripts/changed_file_list.py +141 -0
  507. package/skills/code-review/scripts/closing_pass.py +187 -0
  508. package/skills/code-review/scripts/consolidate.py +277 -0
  509. package/skills/code-review/scripts/contract_failure_report.py +185 -0
  510. package/skills/code-review/scripts/dispatch_reconcile.py +66 -0
  511. package/skills/code-review/scripts/dispatch_waves.py +164 -0
  512. package/skills/code-review/scripts/finding_signature.py +446 -0
  513. package/skills/code-review/scripts/ledger.py +283 -0
  514. package/skills/code-review/scripts/partition.py +169 -0
  515. package/skills/code-review/scripts/render_tiered_findings.py +274 -0
  516. package/skills/code-review/scripts/repo_invariants.py +1066 -0
  517. package/skills/code-review/scripts/review_context_pack.py +306 -0
  518. package/skills/code-review/scripts/review_round_log.py +345 -0
  519. package/skills/code-review/scripts/review_value_coverage.py +297 -0
  520. package/skills/code-review/scripts/validate_review_output.py +467 -0
  521. package/skills/code-review/sliced-mode.md +205 -0
  522. package/skills/competitive-analysis/SKILL.md +191 -0
  523. package/skills/context-loading-protocol/SKILL.md +157 -0
  524. package/skills/continue/SKILL.md +90 -0
  525. package/skills/cost-report/SKILL.md +178 -0
  526. package/skills/coverage-baseline/SKILL.md +335 -0
  527. package/skills/coverage-baseline/references/multi-project-discovery.md +202 -0
  528. package/skills/coverage-delta/SKILL.md +181 -0
  529. package/skills/coverage-delta/references/mutation-gate.md +70 -0
  530. package/skills/design-doc/SKILL.md +95 -0
  531. package/skills/design-interrogation/SKILL.md +89 -0
  532. package/skills/design-it-twice/SKILL.md +91 -0
  533. package/skills/docker-image-audit/SKILL.md +108 -0
  534. package/skills/docker-image-audit/references/install-guide.md +64 -0
  535. package/skills/docker-image-audit/references/report-template.md +73 -0
  536. package/skills/docker-image-create/SKILL.md +185 -0
  537. package/skills/domain-analysis/SKILL.md +183 -0
  538. package/skills/domain-driven-design/SKILL.md +194 -0
  539. package/skills/exploratory-testing/SKILL.md +108 -0
  540. package/skills/explore/SKILL.md +51 -0
  541. package/skills/farley-score/SKILL.md +165 -0
  542. package/skills/feature-file-validation/SKILL.md +78 -0
  543. package/skills/feature-file-validation/references/validation-rules.md +115 -0
  544. package/skills/feedback-learning/SKILL.md +414 -0
  545. package/skills/fix/SKILL.md +450 -0
  546. package/skills/freeze/SKILL.md +68 -0
  547. package/skills/frontend-architecture/SKILL.md +113 -0
  548. package/skills/gherkin-derive/SKILL.md +630 -0
  549. package/skills/gherkin-public/SKILL.md +266 -0
  550. package/skills/governance-compliance/SKILL.md +150 -0
  551. package/skills/guard/SKILL.md +75 -0
  552. package/skills/handoff/SKILL.md +139 -0
  553. package/skills/handoff/references/summary-templates.md +242 -0
  554. package/skills/harness-audit/SKILL.md +751 -0
  555. package/skills/harness-audit/scripts/lesson_validate.py +386 -0
  556. package/skills/harness-audit/scripts/redundancy_criterion.py +188 -0
  557. package/skills/headless-run/SKILL.md +45 -0
  558. package/skills/headless-run/scripts/isolated_dispatch.py +381 -0
  559. package/skills/help/SKILL.md +72 -0
  560. package/skills/hexagonal-architecture/SKILL.md +85 -0
  561. package/skills/human-oversight-protocol/SKILL.md +224 -0
  562. package/skills/issues-from-assessment/SKILL.md +223 -0
  563. package/skills/issues-from-plan/SKILL.md +133 -0
  564. package/skills/legacy-code/SKILL.md +132 -0
  565. package/skills/mermaid-diagramming/SKILL.md +120 -0
  566. package/skills/mutation-night-watch/SKILL.md +154 -0
  567. package/skills/mutation-night-watch/references/scheduling.md +135 -0
  568. package/skills/mutation-testing/SKILL.md +396 -0
  569. package/skills/mutation-testing/references/languages/csharp-stryker-net.md +676 -0
  570. package/skills/mutation-testing/references/languages/go-go-mutesting.md +95 -0
  571. package/skills/mutation-testing/references/languages/java-pitest.md +77 -0
  572. package/skills/mutation-testing/references/languages/javascript-stryker.md +188 -0
  573. package/skills/mutation-testing/references/languages/python-mutmut.md +97 -0
  574. package/skills/mutation-testing/references/time-estimation.md +34 -0
  575. package/skills/mutation-testing/references/tool-detection.md +15 -0
  576. package/skills/mutation-testing/references/workflow-callers.md +23 -0
  577. package/skills/mutation-testing/scripts/__pycache__/xunit_v3_feature_detector.cpython-314.pyc +0 -0
  578. package/skills/mutation-testing/scripts/csharp_stryker_net_slice_runner.py +635 -0
  579. package/skills/mutation-testing/scripts/csharp_stryker_net_status_loop.py +525 -0
  580. package/skills/mutation-testing/scripts/csharp_stryker_net_wrapper.py +681 -0
  581. package/skills/mutation-testing/scripts/mutation_baseline_reuse.py +292 -0
  582. package/skills/mutation-testing/scripts/mutation_exclude_policy.py +268 -0
  583. package/skills/mutation-testing/scripts/mutation_feasibility_gate.py +463 -0
  584. package/skills/mutation-testing/scripts/mutation_kill_headless.py +331 -0
  585. package/skills/mutation-testing/scripts/mutation_kill_insert.py +199 -0
  586. package/skills/mutation-testing/scripts/mutation_kill_insert_python.py +150 -0
  587. package/skills/mutation-testing/scripts/mutation_kill_loop.py +869 -0
  588. package/skills/mutation-testing/scripts/mutation_kill_loop_python.py +949 -0
  589. package/skills/mutation-testing/scripts/mutation_kill_retry.py +592 -0
  590. package/skills/mutation-testing/scripts/mutation_kill_shared.py +620 -0
  591. package/skills/mutation-testing/scripts/mutation_nightwatch.py +462 -0
  592. package/skills/mutation-testing/scripts/mutation_nightwatch_stacks.py +425 -0
  593. package/skills/mutation-testing/scripts/mutation_report.py +743 -0
  594. package/skills/mutation-testing/scripts/mutation_report_cli.py +175 -0
  595. package/skills/mutation-testing/scripts/mutation_safety_gate.py +69 -0
  596. package/skills/mutation-testing/scripts/stryker_shard_pipeline.py +847 -0
  597. package/skills/mutation-testing/scripts/stryker_shard_setup.py +440 -0
  598. package/skills/mutation-testing/scripts/stryker_timeout_retry.py +142 -0
  599. package/skills/mutation-testing/scripts/xunit_v3_feature_detector.py +341 -0
  600. package/skills/performance-benchmark/SKILL.md +174 -0
  601. package/skills/performance-benchmark/examples/report-format.md +43 -0
  602. package/skills/performance-benchmark/references/benchmark-script.md +169 -0
  603. package/skills/performance-metrics/SKILL.md +265 -0
  604. package/skills/plan/SKILL.md +199 -0
  605. package/skills/plan/references/gherkin-persistence.md +43 -0
  606. package/skills/plan/references/plan-template.md +182 -0
  607. package/skills/pr/SKILL.md +289 -0
  608. package/skills/pr/scripts/gate_retry_state.py +368 -0
  609. package/skills/project-init/README.md +141 -0
  610. package/skills/project-init/SKILL.md +1197 -0
  611. package/skills/project-init/evals/evals.json +200 -0
  612. package/skills/project-init/references/capability-tools.md +55 -0
  613. package/skills/project-init/references/configs.md +221 -0
  614. package/skills/property-based-testing/SKILL.md +121 -0
  615. package/skills/property-based-testing/fixtures/invariant_fixture.py +15 -0
  616. package/skills/property-based-testing/fixtures/js-roundtrip/README.md +42 -0
  617. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/LICENSE +21 -0
  618. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/README.md +263 -0
  619. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/fast-check.d.ts +5165 -0
  620. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/fast-check.js +12147 -0
  621. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/package.json +3 -0
  622. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/types57/fast-check.d.ts +5165 -0
  623. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/fast-check.d.ts +5165 -0
  624. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/fast-check.js +12011 -0
  625. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/rolldown-runtime-D7D4PA-g.js +13 -0
  626. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/types57/fast-check.d.ts +5165 -0
  627. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/package.json +94 -0
  628. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/LICENSE +21 -0
  629. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/README.md +168 -0
  630. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/RandomGenerator-DcXj09Ch.d.ts +14 -0
  631. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformBigInt.d.ts +15 -0
  632. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformBigInt.js +38 -0
  633. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat32.d.ts +15 -0
  634. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat32.js +18 -0
  635. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat64.d.ts +15 -0
  636. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat64.js +22 -0
  637. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformInt.d.ts +15 -0
  638. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformInt.js +134 -0
  639. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/RandomGenerator-DcXj09Ch.d.ts +14 -0
  640. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformBigInt.d.ts +15 -0
  641. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformBigInt.js +37 -0
  642. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat32.d.ts +15 -0
  643. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat32.js +17 -0
  644. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat64.d.ts +15 -0
  645. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat64.js +21 -0
  646. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformInt.d.ts +15 -0
  647. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformInt.js +133 -0
  648. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/congruential32.d.ts +7 -0
  649. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/congruential32.js +44 -0
  650. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/mersenne.d.ts +7 -0
  651. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/mersenne.js +90 -0
  652. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xoroshiro128plus.d.ts +7 -0
  653. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xoroshiro128plus.js +80 -0
  654. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xorshift128plus.d.ts +7 -0
  655. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xorshift128plus.js +78 -0
  656. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/package.json +3 -0
  657. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/JumpableRandomGenerator.d.ts +16 -0
  658. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/JumpableRandomGenerator.js +0 -0
  659. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/RandomGenerator.d.ts +2 -0
  660. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/RandomGenerator.js +0 -0
  661. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/generateN.d.ts +6 -0
  662. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/generateN.js +8 -0
  663. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/purify.d.ts +12 -0
  664. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/purify.js +9 -0
  665. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/skipN.d.ts +6 -0
  666. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/skipN.js +6 -0
  667. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/congruential32.d.ts +7 -0
  668. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/congruential32.js +46 -0
  669. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/mersenne.d.ts +7 -0
  670. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/mersenne.js +92 -0
  671. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xoroshiro128plus.d.ts +7 -0
  672. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xoroshiro128plus.js +82 -0
  673. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xorshift128plus.d.ts +7 -0
  674. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xorshift128plus.js +80 -0
  675. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/JumpableRandomGenerator.d.ts +16 -0
  676. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/JumpableRandomGenerator.js +0 -0
  677. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/RandomGenerator.d.ts +2 -0
  678. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/RandomGenerator.js +0 -0
  679. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/generateN.d.ts +6 -0
  680. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/generateN.js +9 -0
  681. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/purify.d.ts +12 -0
  682. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/purify.js +10 -0
  683. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/skipN.d.ts +6 -0
  684. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/skipN.js +7 -0
  685. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/package.json +133 -0
  686. package/skills/property-based-testing/fixtures/js-roundtrip/package-lock.json +1179 -0
  687. package/skills/property-based-testing/fixtures/js-roundtrip/package.json +14 -0
  688. package/skills/property-based-testing/fixtures/js-roundtrip/roundtrip.js +29 -0
  689. package/skills/property-based-testing/fixtures/js-roundtrip/roundtrip.properties.test.js +16 -0
  690. package/skills/property-based-testing/fixtures/no_property_fixture.py +10 -0
  691. package/skills/property-based-testing/fixtures/roundtrip_fixture.py +16 -0
  692. package/skills/property-based-testing/references/languages/javascript.md +54 -0
  693. package/skills/property-based-testing/scripts/detect_and_dispatch.py +80 -0
  694. package/skills/property-based-testing/scripts/hypothesis_scaffold.py +276 -0
  695. package/skills/proxy-resilience/SKILL.md +84 -0
  696. package/skills/quality-gate-pipeline/SKILL.md +184 -0
  697. package/skills/quality-targets-converge/SKILL.md +254 -0
  698. package/skills/repo-review/SKILL.md +159 -0
  699. package/skills/report-pdf/SKILL.md +66 -0
  700. package/skills/review/SKILL.md +47 -0
  701. package/skills/review-agent/SKILL.md +152 -0
  702. package/skills/review-summary/SKILL.md +73 -0
  703. package/skills/run-report/SKILL.md +70 -0
  704. package/skills/semantic-duplication-scan/SKILL.md +337 -0
  705. package/skills/semantic-scan/SKILL.md +53 -0
  706. package/skills/semgrep-analyze/SKILL.md +139 -0
  707. package/skills/setup/SKILL.md +1122 -0
  708. package/skills/ship/SKILL.md +240 -0
  709. package/skills/source-verification/SKILL.md +210 -0
  710. package/skills/source-verification/scripts/claim_extractor.py +155 -0
  711. package/skills/specs/.size-baseline.json +4 -0
  712. package/skills/specs/SKILL.md +243 -0
  713. package/skills/specs/references/completeness-checklist.md +83 -0
  714. package/skills/specs/references/extraction.md +58 -0
  715. package/skills/specs/references/glossary.md +59 -0
  716. package/skills/specs/references/persistence.md +115 -0
  717. package/skills/specs/references/predictability-check.md +77 -0
  718. package/skills/static-analysis-integration/SKILL.md +235 -0
  719. package/skills/static-analysis-integration/adapters/_envelope.py +26 -0
  720. package/skills/static-analysis-integration/adapters/jscpd-adapter.py +66 -0
  721. package/skills/static-analysis-integration/adapters/lizard-adapter.py +81 -0
  722. package/skills/static-analysis-integration/adapters/mypy-adapter.py +50 -0
  723. package/skills/static-analysis-integration/adapters/mypy-src-layout.py +93 -0
  724. package/skills/static-analysis-integration/adapters/security-review-adapter.py +212 -0
  725. package/skills/static-analysis-integration/maintenance.md +23 -0
  726. package/skills/static-analysis-integration/references/language-setup.md +228 -0
  727. package/skills/static-analysis-integration/references/sarif-parser.md +124 -0
  728. package/skills/static-analysis-integration/references/security-review-adapter.md +118 -0
  729. package/skills/static-analysis-integration/references/tool-configs.md +617 -0
  730. package/skills/static-analysis-integration/rulesets/pmd-quickstart.xml +24 -0
  731. package/skills/stryker-xunit-v2-shim/SKILL.md +274 -0
  732. package/skills/stryker-xunit-v2-shim/references/shim-howto.md +256 -0
  733. package/skills/stryker-xunit-v2-shim/scripts/generate_shim.py +143 -0
  734. package/skills/systematic-debugging/SKILL.md +130 -0
  735. package/skills/telemetry/SKILL.md +75 -0
  736. package/skills/test-audit-disable/SKILL.md +129 -0
  737. package/skills/test-design/SKILL.md +177 -0
  738. package/skills/test-design/scripts/__pycache__/internal_double_detector.cpython-314.pyc +0 -0
  739. package/skills/test-design/scripts/internal_double_detector.py +631 -0
  740. package/skills/test-design-advisor/SKILL.md +166 -0
  741. package/skills/test-driven-development/SKILL.md +169 -0
  742. package/skills/test-health/SKILL.md +262 -0
  743. package/skills/test-improve/SKILL.md +239 -0
  744. package/skills/test-improve/references/phase-0-approach-contract.md +228 -0
  745. package/skills/test-improve/references/phase-1-analyze.md +131 -0
  746. package/skills/test-improve/references/phase-2-baseline.md +121 -0
  747. package/skills/test-improve/references/phase-3-derive-gherkin.md +53 -0
  748. package/skills/test-improve/references/phase-4-plan-fixes.md +34 -0
  749. package/skills/test-improve/references/phase-5-improve.md +215 -0
  750. package/skills/test-improve/references/phase-6-refactor-decision.md +45 -0
  751. package/skills/test-improve/references/phase-7-refactor.md +44 -0
  752. package/skills/test-improve/references/phase-8-validate.md +66 -0
  753. package/skills/test-improve/references/phase-9-close-out-prompt.md +11 -0
  754. package/skills/test-improve/references/phase-9-report.md +62 -0
  755. package/skills/test-improve/references/review-loop.md +92 -0
  756. package/skills/test-improve/templates/executive-summary.md +123 -0
  757. package/skills/threat-modeling/SKILL.md +108 -0
  758. package/skills/triage/SKILL.md +211 -0
  759. package/skills/ubiquitous-language/SKILL.md +192 -0
  760. package/skills/ubiquitous-language/scripts/collect_domain_signals.py +300 -0
  761. package/skills/unfreeze/SKILL.md +37 -0
  762. package/skills/upgrade/SKILL.md +31 -0
  763. package/skills/upgrade/scripts/check_version_drift.py +113 -0
  764. package/skills/upgrade/scripts/enable_autoupdate.py +149 -0
  765. package/skills/version/SKILL.md +25 -0
  766. package/sync/__pycache__/sync_upstream.cpython-314.pyc +0 -0
  767. package/sync/sync_upstream.py +293 -0
  768. package/templates/ACCEPTED-RISKS.md.tmpl +46 -0
  769. package/templates/agents/agent-template.md +151 -0
  770. package/templates/agents/angular-testing.md +66 -0
  771. package/templates/agents/csharp-quality.md +63 -0
  772. package/templates/agents/esm-enforcer.md +52 -0
  773. package/templates/agents/front-end-testing.md +65 -0
  774. package/templates/agents/go-quality.md +65 -0
  775. package/templates/agents/python-quality.md +62 -0
  776. package/templates/agents/react-testing.md +61 -0
  777. package/templates/agents/ts-enforcer.md +60 -0
  778. package/templates/agents/twelve-factor-audit.md +49 -0
  779. package/tools/entropy-check.py +250 -0
  780. package/tools/model-hash-verify.py +213 -0
@@ -0,0 +1,24 @@
1
+ # Worked example — React SPA + Node/Express API
2
+
3
+ Few-shot template for `test-design-advisor`. Adapt the rows; don't copy verbatim. Feature: **a logged-in user submits a "place order" form and sees a confirmation**. Architecture is thin-logic glue over frameworks → **trophy** shape (`test-pyramid.md`).
4
+
5
+ ## Pyramid placement (advisor output shape)
6
+
7
+ | Behavior | Layer | Gate | Tool (`test-stack-profiles/`) | Why |
8
+ |----------|-------|------|-------------------------------|-----|
9
+ | Order total + tax calculation | Unit | — | Vitest/Jest (`node`, `react`) | pure logic, edge cases |
10
+ | `POST /orders` persists + returns 201 | Integration | — | supertest + test DB (`node`) | route, validation, persistence wiring |
11
+ | Order form renders + disables submit while pending | Component | — | Testing Library + MSW (`react`) | DOM, wiring, async state — API mocked |
12
+ | User submits and sees confirmation | E2E | ↑E2E (Gate A) | Playwright (`react`) | user acts and must *see* the rendered result — amortize into the existing checkout journey |
13
+
14
+ ## Quadrants (`testing-quadrants.md`)
15
+
16
+ Q1 unit+integration+component ✓ · Q2 the E2E journey doubles as an acceptance example ✓ · **Q3 empty** → charter one exploratory session on the checkout flow · **Q4** → add a load check on `POST /orders` if it's hot.
17
+
18
+ ## Techniques (`testing-techniques/`, on match)
19
+
20
+ Order-total invariants (never negative, tax ≤ total) → **property-based**. Payload from an untrusted client → **schema-validation** on the request body.
21
+
22
+ ## Notes
23
+
24
+ One E2E for the journey, not one per field — field validation is a component/unit concern (avoid the ice-cream cone). The fat integration+component middle is correct for this architecture, not an hourglass.
@@ -0,0 +1,25 @@
1
+ # Worked example — Spring Boot REST service
2
+
3
+ Few-shot template for `test-design-advisor`. Adapt the rows. Feature: **a service exposes `POST /transfers`, applies a business rule (no overdraft), persists, and publishes a `TransferCompleted` event**. Rich domain logic → **pyramid** shape (`test-pyramid.md`).
4
+
5
+ ## Pyramid placement (advisor output shape)
6
+
7
+ | Behavior | Layer | Gate | Tool (`test-stack-profiles/spring-boot`) | Why |
8
+ |----------|-------|------|------------------------------------------|-----|
9
+ | Overdraft rule rejects an over-limit transfer | Unit | — | JUnit (no Spring context) | core domain logic, all branches |
10
+ | `TransferService` orchestrates rule + repo + publisher | Unit (sociable) | — | JUnit + stub repo/publisher | wiring of collaborators |
11
+ | `POST /transfers` maps request → 200/422, JSON shape | Component | — | MockMvc / `@WebMvcTest` | controller, validation, serialization — deps doubled |
12
+ | Repository persists + reads back correctly | Integration | — | Testcontainers (real DB) | the adapter/SQL actually works |
13
+ | Other services still accept our event/response shape | Contract | — | Spring Cloud Contract / Pact | cross-boundary agreement (`microservice-testing.md`) — not E2E |
14
+
15
+ ## Quadrants (`testing-quadrants.md`)
16
+
17
+ Q1 strong ✓ · Q2 add a BDD acceptance example for "no overdraft" before coding · Q3 N/A (no UI) · **Q4** → security-review the auth on `/transfers`; load-test if it's a hot path.
18
+
19
+ ## Techniques (`testing-techniques/`, on match)
20
+
21
+ Money math invariants (sum preserved across a transfer) → **property-based**. Resilience claim "degrades if the broker is down" → **chaos**.
22
+
23
+ ## Notes
24
+
25
+ Keep the overdraft rule a **unit** test, not a MockMvc test — driving the HTTP layer to assert a calculation is the "testing through the UI for logic" anti-pattern. Cross-service agreement is a **contract** test, not a multi-service E2E (don't depend on provider cooperation — see `cd-test-architecture.md`).
@@ -0,0 +1,24 @@
1
+ # Worked example — SSR + HTMX dynamic swap
2
+
3
+ Few-shot template for `test-design-advisor`. Adapt the rows. Feature: **clicking "Add to cart" sends an HTMX `POST`, the server mutates the cart and returns an HTML fragment that swaps the cart badge**. The client-side swap seam is the point of risk → **Gate C fires** (`test-layer-gates.md`).
4
+
5
+ ## Pyramid placement (advisor output shape)
6
+
7
+ | Behavior | Layer | Gate | Tool (`test-stack-profiles/ssr-htmx`) | Why |
8
+ |----------|-------|------|---------------------------------------|-----|
9
+ | Cart total recomputed after add | Unit | — | server-side unit (`django`/`node`) | pure logic |
10
+ | `POST /cart` mutates state + renders the fragment | Integration | — | TestClient / supertest | handler + template render + persistence |
11
+ | Returned fragment carries the right `hx-target`/`hx-swap` | Component | — | JSDOM + parse the HTML (`ssr-htmx`) | template/wiring assertions, no browser |
12
+ | Badge actually updates in the page after the swap | **Browser (REQUIRED)** | ↑E2E (Gate C) | Playwright | the swap seam — `hx-target`, stale swap, re-init — gets **zero** coverage from integration |
13
+
14
+ ## Quadrants (`testing-quadrants.md`)
15
+
16
+ Q1/Q2 ✓ · Q3 → exploratory pass on rapid double-clicks and back-button state · Q4 → none unless the endpoint is hot.
17
+
18
+ ## Techniques (`testing-techniques/`, on match)
19
+
20
+ If the swapped fragment's visual layout matters (a styled receipt) → **screenshot**; if it's text/markup correctness → **approval** on the rendered fragment.
21
+
22
+ ## Notes
23
+
24
+ Gate C marks the browser test **required, not recommended** — integration verifies the server returns *a* fragment, never that the client wired it into the DOM correctly. The advisor flags the E2E requirement and defers harness/pipeline design to `cd-test-architecture`; it does not design the Playwright setup here.
@@ -0,0 +1,70 @@
1
+ # Test Organization
2
+
3
+ Reference file for `test-review`, `test-smell-review`, and the `test-design-advisor` skill. This file covers how a single test and a whole suite are *structured* — the Four-Phase Test that every test follows, how test classes are grouped, how shared logic is reused, and how the runner finds tests.
4
+
5
+ Source: Gerard Meszaros, *xUnit Test Patterns* (xunitpatterns.com) — Test Organization patterns + XUnit Basics. Language- and framework-agnostic — described by role, not any runner's API.
6
+
7
+ Core principle: **make the structure of every test obvious** — its four phases, its place in a cohesive class, and its name — so the suite reads as documentation.
8
+
9
+ ---
10
+
11
+ ## The Four-Phase Test (the anchor)
12
+
13
+ Every test follows four phases, visibly separated:
14
+
15
+ 1. **Setup** — establish the fixture (→ `fixture-construction.md`).
16
+ 2. **Exercise** — invoke the SUT.
17
+ 3. **Verify** — assert the outcome (→ `result-verification.md`).
18
+ 4. **Teardown** — release what Setup created (→ `fixture-construction.md`).
19
+
20
+ When setup, exercise, and assertions are interleaved with no visible phases, that is the **Obscure Test** smell — restructure into four phases first.
21
+
22
+ ---
23
+
24
+ ## Testcase Class grouping
25
+
26
+ | Grouping | One class per… | Use when | Trade-off |
27
+ |---|---|---|---|
28
+ | **Testcase Class per Class** | production class | default, simple SUTs | can bloat as the SUT grows behaviors |
29
+ | **Testcase Class per Feature** | feature/behavior across classes | a feature spans several production classes | needs a clear feature boundary |
30
+ | **Testcase Class per Fixture** | shared setup | one class's methods need *different* setups | more classes, but each has one cohesive fixture (kills General Fixture) |
31
+
32
+ Split into **Testcase Class per Fixture** when a single class's methods diverge in what they set up.
33
+
34
+ ---
35
+
36
+ ## Sharing logic: composition over inheritance
37
+
38
+ | Mechanism | What it is | Use when |
39
+ |---|---|---|
40
+ | **Test Utility Method / Test Helper** | Shared arrange/assert logic as called methods (composition) | **Default** for any shared logic — explicit, low-coupling |
41
+ | **Testcase Superclass** | A base test class supplying shared setup/utilities via inheritance | Only for genuinely *universal* setup across many classes; couples every subclass to it |
42
+
43
+ Prefer a Test Utility Method / Helper; escalate to a Testcase Superclass only for truly universal setup, and note its coupling cost.
44
+
45
+ ---
46
+
47
+ ## Parameterized Test
48
+
49
+ When several test methods differ only by input/expected **data**, collapse them into a **Parameterized Test** — one test logic over many data rows. This is the in-code counterpart of the **Data-Driven Test** automation strategy in `test-strategy.md`; use it when the variation is purely data, not when cases differ in logic.
50
+
51
+ ---
52
+
53
+ ## Test Discovery / Enumeration / Selection + naming
54
+
55
+ The runner finds tests by **Test Discovery** (convention/annotation), builds a **Test Enumeration**, and runs a selected subset. Two consequences for design:
56
+
57
+ - Give each test an **intent-revealing name** stating the scenario and expected outcome — the name is the first line of documentation a failure shows.
58
+ - Keep tests selectable (tags/categories) so fast and slow suites can be run separately.
59
+
60
+ **Decision flow:** make the four phases visible → group classes per fixture when setups diverge → share via a Test Utility Method, escalating to a Testcase Superclass only for universal setup → collapse data-only duplication into a Parameterized Test → name every test for its scenario.
61
+
62
+ ---
63
+
64
+ ## How this connects to the rest of the toolkit
65
+
66
+ - **`fixture-construction.md`** — the Setup/Teardown phases.
67
+ - **`result-verification.md`** — the Verify phase.
68
+ - **`test-strategy.md`** — Parameterized Test ↔ Data-Driven Test.
69
+ - **`test-smells.md`** — the smells these fix: Obscure Test, Test Code Duplication, High Test Maintenance Cost.
70
+ - **`test-refactoring.md`** — the moves that get an existing suite here: Extract Testcase Class per Fixture, Extract Test Utility Method, Introduce Parameterized Test, Split Test.
@@ -0,0 +1,84 @@
1
+ # The Test Pyramid
2
+
3
+ Reference file for `test-review`, `test-smell-review`, and the `test-design-advisor` skill. The test pyramid is a heuristic for *where* a given check belongs: many fast, isolated tests at the base; progressively fewer, slower, broader tests toward the top.
4
+
5
+ Source: Martin Fowler, "The Practical Test Pyramid" (martinfowler.com/articles/practical-test-pyramid.html), building on Mike Cohn's original. Language- and stack-agnostic.
6
+
7
+ Core principle: **push each check to the lowest layer that can meaningfully verify it.** A bug catchable by a unit test should be caught by a unit test — it's faster, more precise, and more stable there. Reserve higher layers for what genuinely needs integration.
8
+
9
+ ---
10
+
11
+ ## The Layers
12
+
13
+ | Layer | Scope | Speed | Doubles | What it proves |
14
+ |-------|-------|-------|---------|----------------|
15
+ | **Unit** | One unit (class/function/module) in isolation | ms | Real collaborators by default; doubles only per a named blocker | Logic, branches, edge cases of that unit |
16
+ | **Integration** | The unit + one real external it talks to (DB, queue, HTTP client, filesystem) | 10s–100s ms | Real adapter, often a test container | The adapter/serialization/wiring actually works |
17
+ | **Component / Service** | One deployable service in isolation, internals real, *its* externals stubbed | 100s ms–s | Stub the service's own external deps | The service satisfies its own contract end to end, in-process |
18
+ | **Contract** | The agreement between a consumer and a provider | fast | n/a (verifies a pact) | Two services still agree on the interface (see `microservice-testing.md`) |
19
+ | **End-to-End** | The whole system through real entry points (UI/API) | s–min | none (real everything) | Critical user journeys work when wired together |
20
+
21
+ "Unit" can be **solitary** (all collaborators doubled) or **sociable** (real collaborators used, only true boundaries doubled). **Sociable is the default** — a first-party collaborator stays real; solitary is permitted only where every double names a blocker (B1 out-of-process handle, B2 ambient state, B3 prohibitive real cost). See `internal-collaborator-doubling.md` for the full rule, the blocker table, and the waiver contract.
22
+
23
+ ---
24
+
25
+ ## Layer-Selection Heuristics
26
+
27
+ Ask, for each thing you want to verify:
28
+
29
+ 1. **Is it pure logic / a branch / an edge case?** → Unit. Always.
30
+ 2. **Does it depend on real serialization, SQL, or a third-party client behaving a certain way?** → Integration (test the adapter, not the logic around it).
31
+ 3. **Does it cross a service boundary you don't own?** → Contract test, not E2E.
32
+ 4. **Is it a business-critical journey a user actually performs?** → one E2E test. Not every permutation — just the journey.
33
+
34
+ If a check could live at two layers, choose the **lower** one. Duplicating the same assertion at a higher layer is redundant coverage (a project smell — see `test-smells.md`).
35
+
36
+ ---
37
+
38
+ ## Anti-Patterns
39
+
40
+ | Anti-pattern | Shape | Symptom | Fix |
41
+ |--------------|-------|---------|-----|
42
+ | **Ice-cream cone** | Inverted pyramid — mostly E2E/manual, few unit | Slow suite, flaky CI, slow feedback, hard failure triage | Push logic checks down to unit; keep E2E for journeys only |
43
+ | **Hourglass** | Many unit + many E2E, no integration middle | Wiring/serialization bugs slip the gap between layers | Add integration tests for adapters and boundaries |
44
+ | **Cupcake** | Same scenarios re-tested at every layer | Maintenance multiplied; one behavior change breaks N tests | De-duplicate; each behavior verified at exactly one layer |
45
+ | **Testing through the UI for logic** | Driving a browser to check a calculation | Slow, fragile, obscures the real assertion | Unit-test the calculation; UI test only the rendering/journey |
46
+
47
+ ---
48
+
49
+ ## Other shapes (a strategy lens)
50
+
51
+ The pyramid is the default, but the *right silhouette follows the architecture*. Two shapes are legitimate, not anti-patterns, when the architecture earns them:
52
+
53
+ | Shape | Silhouette | Fits when | Source |
54
+ |-------|-----------|-----------|--------|
55
+ | **Pyramid** | wide unit base, narrow E2E top | logic-heavy code with real internal seams | Cohn / Fowler |
56
+ | **Testing trophy** | small unit, **fat integration middle**, some E2E, static analysis as the base | thin-logic apps where most risk is in wiring/serialization (typical UI + API glue) | Kent C. Dodds |
57
+ | **Diamond** | thin unit, **bulging integration/component**, thin E2E | services that are mostly orchestration/adapters over little domain logic | — |
58
+
59
+ Same rule still governs: **push each check to the lowest layer that can verify it.** The trophy and diamond are wide in the middle because *that is where the behavior lives* in those architectures — not as a license to skip unit tests for real logic.
60
+
61
+ ### Shape ↔ architecture fit
62
+
63
+ | If the codebase is… | Expected shape | A different shape signals |
64
+ |---------------------|----------------|---------------------------|
65
+ | Rich domain / business logic | pyramid | inverted → logic untested at unit level |
66
+ | Thin glue over frameworks/APIs | trophy | tall pyramid → unit tests asserting framework behavior (low value) |
67
+ | Orchestration / adapter-heavy service | diamond | wide unit base → over-mocked tests proving little |
68
+ | Static site / content | flat (a11y + link/build checks) | any tall shape → testing the framework |
69
+
70
+ Diagnose by comparing the suite's actual shape to the shape its architecture *should* produce. A mismatch — not the silhouette alone — is the finding.
71
+
72
+ ---
73
+
74
+ ## How to use this during review
75
+
76
+ - A unit-level test doing **real I/O** (DB, network, disk, sleep) is mis-layered → flag as **Slow Tests** smell; move the I/O to an integration test and double the boundary at unit level.
77
+ - An **E2E test asserting a single edge case** (e.g., validation of one field) → flag as mis-layered; that's a unit concern.
78
+ - A suite that is **all E2E with little/no unit coverage** → flag the ice-cream-cone shape at the suite level.
79
+ - Before flagging "wrong level," confirm the *intended* level of the file (path, naming, framework markers). Integration/E2E tests are *supposed* to touch real resources — don't flag them as slow or non-deterministic for doing their job.
80
+
81
+ ## Boundaries
82
+
83
+ - The pyramid is a heuristic, not a quota. Don't invent a numeric ratio and flag suites for missing it. Flag *shape pathologies* (inverted, gap in the middle, pervasive duplication), not arithmetic.
84
+ - Some domains legitimately carry more integration/E2E weight (thin-logic integration glue, data pipelines). Judge by "is this check at the lowest layer that can verify it," not by silhouette alone.
@@ -0,0 +1,67 @@
1
+ # Test Refactoring & Automation Principles
2
+
3
+ Reference file for `test-review`, `test-smell-review`, and the `test-design-advisor` skill. The capstone of the testing-knowledge set: the **goals & principles** define what a good automated test *is* (the criteria); the **refactoring catalog** lists the behavior-preserving moves that get an existing test there. Together they connect a named smell (`test-smells.md`) to the target pattern in the sibling files and back.
4
+
5
+ Source: Gerard Meszaros, *xUnit Test Patterns* (xunitpatterns.com) — Goals of Test Automation, Principles of Test Automation, and the Test Refactorings catalog. Language- and framework-agnostic — described by role, not any library's API.
6
+
7
+ ---
8
+
9
+ ## 1. Goals & Principles (the criteria a refactoring moves toward)
10
+
11
+ **Goals — a good automated test is:**
12
+
13
+ - **Documentation / specification** — reads as an example of how the SUT is meant to behave.
14
+ - **Self-checking** — passes or fails on its own; no human reads output to judge it.
15
+ - **Repeatable** — same result every run, any order, any machine.
16
+ - **Robust** — breaks only when the behavior it checks changes (not on unrelated edits).
17
+ - **Isolated / independent** — does not depend on other tests or leak state to them.
18
+ - **Economical** — fast, and cheap to write and maintain.
19
+
20
+ **Principles — how to get there:**
21
+
22
+ - Write tests first (drive the design); design for testability.
23
+ - Communicate intent (intent-revealing names, Custom Assertions).
24
+ - Verify **one condition per test**; minimize test overlap.
25
+ - Keep tests **independent**; keep **no logic in tests** (no conditionals/loops around assertions).
26
+
27
+ A test that violates a goal has a smell; the refactoring below moves it back toward the goal.
28
+
29
+ ---
30
+
31
+ ## 2. Test Refactoring catalog (the behavior-preserving moves)
32
+
33
+ Each move removes a named smell (`test-smells.md`) and targets a pattern in a sibling file:
34
+
35
+ | Refactoring | Removes smell | Toward (target file) |
36
+ |---|---|---|
37
+ | **Inline Mystery Guest** → build data locally via a Creation Method / Fresh Fixture | Mystery Guest | `fixture-construction.md` |
38
+ | **Replace General Fixture with Minimal Fixture** | General Fixture, Irrelevant Information | `fixture-construction.md` |
39
+ | **Extract Creation Method / Introduce Test Data Builder** | Test Code Duplication (setup) | `fixture-construction.md` |
40
+ | **Replace Inline Setup with Implicit / Delegated Setup** | Test Code Duplication (setup) | `fixture-construction.md` |
41
+ | **Introduce Expected Object** | Assertion Roulette | `result-verification.md` |
42
+ | **Extract Custom Assertion / Verification Method** | Test Code Duplication (verify), poor diagnostics | `result-verification.md` |
43
+ | **Add Guard Assertion** | misleading/cryptic failure | `result-verification.md` |
44
+ | **Split Test** (one logical condition per test) | Eager Test | `test-organization.md` |
45
+ | **Extract Testcase Class per Fixture** | General Fixture, Obscure Test | `test-organization.md` |
46
+ | **Extract Test Utility Method / Testcase Superclass** | Test Code Duplication, High Test Maintenance Cost | `test-organization.md` |
47
+ | **Introduce Parameterized Test** | data-only duplication | `test-organization.md` |
48
+
49
+ ---
50
+
51
+ ## Decision flow
52
+
53
+ 1. Identify the smell (`test-smells.md`).
54
+ 2. Name the violated goal/principle (self-checking? isolated? one condition? intent-revealing?).
55
+ 3. Pick the refactoring above that moves the test toward it.
56
+ 4. Apply **under green** — and **characterization-first**: if the test (or the code it covers) lacks coverage of current behavior, pin that behavior before any move (`testability-patterns.md`, `legacy-code`).
57
+
58
+ These are **test-side** refactorings. When the blocker is *production* code that can't be tested at all, use the production seams in `testability-patterns.md` instead — never a test workaround (reflection, `InternalsVisibleTo`, mocking concretes).
59
+
60
+ ---
61
+
62
+ ## How this connects to the rest of the toolkit
63
+
64
+ - **`test-smells.md`** — the smells each refactoring removes.
65
+ - **`fixture-construction.md`** / **`result-verification.md`** / **`test-organization.md`** — the target patterns the moves head toward.
66
+ - **`test-strategy.md`** — the lifecycle/automation choices the refactored test should land on.
67
+ - **`testability-patterns.md`** / **`legacy-code`** — production seams + characterization-first when the target is untested.
@@ -0,0 +1,85 @@
1
+ # Test Review — Division of Labor
2
+
3
+ `test-review` and `test-smell-review` run over the same test files and can
4
+ detect several of the same signals under different names. This file is the
5
+ single source of truth for **how the two agents divide the work**, so the rule
6
+ lives in one place instead of being restated in both agents and in
7
+ `/test-design`.
8
+
9
+ ## The two roles
10
+
11
+ - **`test-review`** owns the **tactical per-file gate**: an assertion is missing
12
+ entirely, an `await` is missing, a mock is not reset, a coverage path (edge /
13
+ error / happy) is untested, or production code is untestable (static factory,
14
+ singleton, no injectable constructor → recommend the seam, never a test
15
+ workaround).
16
+ - **`test-smell-review`** owns the **named design smell** and its remedy: it
17
+ names the xUnit smell, judges test-double choice, and checks pyramid-layer
18
+ placement, citing the remedy pattern (`fixture-construction.md`,
19
+ `result-verification.md`, `test-organization.md`, `test-refactoring.md`).
20
+
21
+ ## Shared signals — who reports when both run
22
+
23
+ Several signals are detectable by both agents. **When both run** (e.g. under
24
+ `/test-design`), the owner below reports it and the other agent stays silent on
25
+ it; the design-level framing wins. When an agent runs **solo**, it reports the
26
+ signal itself.
27
+
28
+ | Shared signal | Reported by (when both run) | Framing |
29
+ |---|---|---|
30
+ | Non-determinism (clock / RNG / sleep / real-I/O timing) | **test-smell-review** | the **Erratic Test** smell, with root cause |
31
+ | Weak / no-message assertions | **test-smell-review** | **Assertion Roulette** → `result-verification.md` |
32
+ | Copy-pasted arrange/assert blocks | **test-smell-review** | **Test Code Duplication** → builder / custom assertion |
33
+ | Magic literals in assertions | **test-smell-review** | **Hard-Coded / Magic Values** |
34
+ | Mocking concrete classes; wrong double choice | **test-smell-review** | test-double misuse |
35
+ | Unit test doing real I/O; wrong pyramid layer | **test-smell-review** | **Slow Tests** / pyramid placement |
36
+ | Missing assertion entirely; missing `await`; mock-reset hygiene | **test-review** | tactical mechanical gate |
37
+ | Testability blocker (static factory, singleton, no injectable ctor) | **test-review** | flag the blocker; recommend the production-code seam |
38
+ | Internal-collaborator double with no waiver, or a malformed/invalid-blocker waiver | **test-review**, always — never deferred, even when test-smell-review also runs | mechanical gate, same as the row above |
39
+ | An already-waived double's blocker-claim truth, and (B1) owned-adapter-vs-leaf placement | **test-smell-review**, always — only ever applies to a waived (non-`high`-verdict) double, so it never overlaps the row above on the same instance | design-level judgment, cites `internal-collaborator-doubling.md` |
40
+
41
+ The last two rows partition the detector's verdict space (`high` vs. an
42
+ already-waived, non-`high` verdict) rather than deferring within a shared
43
+ verdict the way every other row above does — the two can never fire on the
44
+ same instance, so there is no dedup decision to make between them.
45
+
46
+ ## The rule in one line
47
+
48
+ When both agents run, `test-smell-review` defers the pure mechanics (missing
49
+ assertion, missing `await`, mock-reset) to `test-review`, and `test-review`
50
+ defers the named-smell signals above to `test-smell-review`. `/test-design`
51
+ drops any duplicate that slips through, keeping the design-level framing.
52
+
53
+ ## test-smell-review ↔ test-design-advisor — remedy division
54
+
55
+ `test-smell-review` and `test-design-advisor` both draw remedy guidance from the
56
+ same knowledge set (`fixture-construction.md`, `result-verification.md`,
57
+ `test-organization.md`, `test-refactoring.md`). Rather than de-duplicate remedy
58
+ prose at report time, the two components divide the row structurally.
59
+ `test-smell-review` names the **smell + its remedy family** (the knowledge-file
60
+ cite); `test-design-advisor` names the **specific remedy pattern** and its
61
+ refactor sequence. `/test-design` joins the two on `remedyFamily` — no prose
62
+ matching, no silent drops.
63
+
64
+ | Column | Owner | Content |
65
+ |---|---|---|
66
+ | Smell name + location | test-smell-review | e.g. "Assertion Roulette at foo_test.js:42" |
67
+ | Severity + confidence | test-smell-review | `error` / `warning` / `suggestion`; `high` / `medium` / `none` |
68
+ | Remedy family (knowledge file) | test-smell-review | one of `fixture-construction`, `result-verification`, `test-organization`, `test-refactoring`, or `null` when no family applies |
69
+ | Specific remedy pattern | test-design-advisor | e.g. "Expected Object", "Custom Assertion", "Creation Method", "Delta Assertion" |
70
+ | Refactor sequence (behavior-preserving) | test-design-advisor | ordered steps from `test-refactoring.md` |
71
+ | Forward-design placement (pyramid, doubles) | test-design-advisor | table row from `test-pyramid.md` / `test-doubles.md` |
72
+
73
+ **Invocation rule.** When both components run together under `/test-design`,
74
+ the advisor owns the remedy-pattern columns and `test-smell-review` cites the
75
+ family only — the advisor's per-behavior recommendation is the specific fix.
76
+ When `test-smell-review` runs solo (e.g. under `/code-review`, where the
77
+ advisor is not dispatched), it fills the whole row: `suggestedFix` still names
78
+ a specific pattern from the family (not just the family slug), so no downstream
79
+ consumer is blocked on the advisor.
80
+
81
+ **Grader alignment.** The eval grader (`scripts/eval_graders/verdict.py:40`)
82
+ scans `issue.message` + `summary` prose for `mustMention` keywords. It does
83
+ not read `remedyFamily` structurally. So `test-smell-review` also emits the
84
+ family slug verbatim in the finding's `message` — this makes the family cite
85
+ enforceable by existing fixtures without extending the grader.
@@ -0,0 +1,80 @@
1
+ # Test Smells
2
+
3
+ Reference file for `test-smell-review` and `test-review` agents. A test smell is a symptom in test code that signals a design problem in the test or in the code under test. Each smell below gives a **detection signal** (what to grep/read for), **why it hurts**, and the **fix** — which is sometimes a test change and sometimes a production-code change.
4
+
5
+ Source taxonomy: Gerard Meszaros, *xUnit Test Patterns* (xunitpatterns.com). Language-agnostic — signals are described by behavior, not syntax.
6
+
7
+ Core principle: a test smell is never fixed by suppressing the test. If a test is hard to write, hard to read, or flaky, the test is reporting a real design problem. Fix the cause.
8
+
9
+ ---
10
+
11
+ ## Smell Categories
12
+
13
+ xUnit Test Patterns groups smells into three levels. Detect at all three:
14
+
15
+ - **Code smells** — visible in a single test method (readability, assertions).
16
+ - **Behavior smells** — visible only when tests run (flakiness, fragility, slowness).
17
+ - **Project smells** — visible across the suite over time (manual intervention, production bugs slipping through).
18
+
19
+ ---
20
+
21
+ ## Code Smells (single test, readable now)
22
+
23
+ | Smell | Detection signal | Why it hurts | Fix |
24
+ |-------|-----------------|--------------|-----|
25
+ | **Obscure Test** | Reader cannot tell what behavior is verified without running it; setup buried in `beforeEach`, helpers, or shared fixtures far from the assertion | Test stops being executable documentation; maintenance becomes guesswork | Inline the relevant setup; name intent; one clear arrange-act-assert. Sub-types below. |
26
+ | → Eager Test | One test method exercises many behaviors / many asserts on unrelated outcomes | A failure doesn't pinpoint which behavior broke | Split into one behavior per test |
27
+ | → Mystery Guest | Test depends on external data it doesn't create (a file on disk, a seeded DB row, a fixture in another module) | Reader can't see the inputs; data drift breaks the test silently | Create the data in-test (Fresh Fixture) or via a Test Data Builder |
28
+ | → General Fixture | A shared setup builds far more than this test needs | Reader can't tell which parts matter; coupling across tests | Build only what each test uses (Minimal Fixture) |
29
+ | → Irrelevant Information | Setup exposes values that don't affect the assertion | Noise hides the cause-effect the test proves | Hide irrelevants behind builders with sensible defaults |
30
+ | **Assertion Roulette** | Multiple bare assertions with no messages; on failure you can't tell which line failed | Failure triage requires a debugger | Give assertions descriptive messages, or split tests; use single-behavior assertions |
31
+ | **Conditional Test Logic** | `if`/`switch`/loops/try-catch around assertions; test takes different paths | Some assertions may never run; the test verifies different things on different runs | Remove branching; use parameterized tests or separate cases; assert unconditionally |
32
+ | **Hard-Coded / Magic Values** | Unexplained literals in assertions (`expect(x).toBe(42)`) | Reader can't tell why 42 is correct; fragile to legitimate change | Name the constant for its meaning, or derive it visibly from inputs |
33
+ | **Test Code Duplication** | Copy-pasted arrange or assert blocks across tests | A behavior change forces edits in N places; drift | Extract Creation/Custom Assertion methods or a Test Data Builder |
34
+ | **Test Logic in Production** | Production code contains `if (testMode)`, test-only hooks, or back doors | Tested code path ≠ shipped code path; false confidence | Remove; achieve control via dependency injection / seams (see `testability-patterns.md`) |
35
+
36
+ ---
37
+
38
+ ## Behavior Smells (only visible when tests run)
39
+
40
+ | Smell | Detection signal | Why it hurts | Fix |
41
+ |-------|-----------------|--------------|-----|
42
+ | **Erratic Test** (flaky) | Passes/fails non-deterministically across runs | Destroys trust in the suite; teams start ignoring red | Eliminate the non-determinism source — see sub-types |
43
+ | → Interacting Tests | Test passes alone, fails in suite (or vice versa); order-dependent | Shared mutable state between tests | Fresh Fixture per test; no shared writable state |
44
+ | → Test Run War | Intermittent failures only when suite runs concurrently / on CI | Tests share an external resource (same DB, same file, same port) | Isolate resources per test run (unique schema, temp dir, ephemeral port) |
45
+ | → Nondeterministic timing | `Date.now()`/`now()`, `Math.random()`/`Random`, `sleep`, real timers in assertions | Clock/RNG/scheduler drift | Inject a clock/RNG; use fake timers; never `sleep` to await |
46
+ | → Resource Leakage / Optimism | Test assumes a resource exists or is clean; leaves state behind | Cascading failures, slow degradation | Set up and tear down own resources; assert preconditions |
47
+ | **Fragile Test** | A change unrelated to the behavior under test breaks the test | Maintenance tax; discourages refactoring | Test through stable public behavior, not internals — see sub-types |
48
+ | → Interface Sensitivity | Renaming/reshaping an API breaks many tests | Tests bound to signatures, not behavior | Centralize creation/interaction in helpers (one place to update) |
49
+ | → Behavior Sensitivity | Changing unrelated behavior breaks the test | Over-specified expectations | Assert only what this behavior guarantees |
50
+ | → Overspecified Software (mock-heavy) | Test asserts exact internal call sequences via mocks | Tests the implementation, not the outcome | Prefer state verification; mock only true boundaries (see `test-doubles.md`) |
51
+ | → Context/Data Sensitivity | Breaks when run in a different timezone, locale, or with different seed data | Hidden environmental coupling | Pin locale/timezone; control all inputs explicitly |
52
+ | **Slow Tests** | Unit-level tests taking seconds; real I/O (DB, network, disk) in unit tests | Feedback loop collapses; tests get skipped | Replace boundaries with doubles; push slow checks down the pyramid (see `test-pyramid.md`) |
53
+ | **Frequent Debugging** | Most test *failures* need an interactive debugger or print statements to locate the cause; failure messages don't tell you what broke | The suite has lost Defect Localization — a red bar that doesn't point at the defect is barely better than no test | Add the missing fine-grained unit/component tests; improve Assertion Messages; run tests after every small change so you remember what you touched (see `test-automation-principles.md` → Defect Localization) |
54
+
55
+ ---
56
+
57
+ ## Project Smells (visible across the suite over time)
58
+
59
+ | Smell | Detection signal | Why it hurts | Fix |
60
+ |-------|-----------------|--------------|-----|
61
+ | **Production Bugs** | Defects reach prod despite a green suite | Tests verify the wrong things, or coverage gaps | Add tests at the level the bug lived (often a missing unit/contract test) |
62
+ | **High Test Maintenance Cost** | Every feature change forces large test rewrites | Accumulated Fragile/Obscure smells | Address the underlying code & behavior smells; introduce builders & custom assertions |
63
+ | **Manual Intervention** | A human must edit config, seed data, or run a step for tests to pass | Tests aren't repeatable or CI-able | Automate setup; make the suite hermetic |
64
+ | **Buggy Tests** | Tests pass when the code is broken (or fail when it's correct) | Negative confidence — worse than no test | Verify the test fails for the right reason (mutation testing surfaces these — see `mutation-testing` skill) |
65
+ | **Developers Not Writing Tests** | Code lands without tests; test count flat or falling while code grows; "no time to test" | The safety net never forms; the rest of the suite's value erodes as untested code accumulates | Address the *root cause*, not the symptom: schedule pressure (make testing part of "done"), missing skills (coach/pair), or Hard-to-Test Code (fix testability — `testability-patterns.md`). Often paired with Lost Tests (tests silently disabled) |
66
+
67
+ ---
68
+
69
+ ## Detection Workflow
70
+
71
+ 1. **Read each test method** for code smells — can you state the behavior under test in one sentence from the test alone? If not → Obscure Test.
72
+ 2. **Scan for behavior-smell signals** — clock/RNG/sleep/real-I/O, shared mutable state, exact-call-sequence mock assertions.
73
+ 3. **Scan the suite shape** for project smells — heavy `beforeAll` shared state, manual setup steps, fixtures referenced but not created in-test.
74
+ 4. For each finding, decide: **test fix** (rename, split, add message, build fresh fixture) or **production fix** (introduce a seam — defer to `testability-patterns.md`).
75
+
76
+ ## Boundaries
77
+
78
+ - A single behavior asserted with several related assertions on one object is **not** Eager Test or Assertion Roulette — that's normal.
79
+ - Integration/E2E tests are *expected* to touch real resources; "Slow Tests" applies when that work happens at the **unit** level. Confirm the intended test level before flagging (see `test-pyramid.md`).
80
+ - Do not flag duplication between two tests that assert genuinely different boundary conditions — that's coverage, not Test Code Duplication.