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,239 @@
1
+ ---
2
+ name: test-improve
3
+ description: >-
4
+ Consolidated analyze-then-improve test orchestrator. Defaults to lightweight
5
+ ceremony; opts into heavier capabilities (Gherkin extraction, mutation
6
+ testing, refactor-for-testability) only when the operator asks. Always
7
+ baselines coverage (and mutation, when enabled) before any test change, runs
8
+ the end-of-phase review loop after Phases 5 and 7, and produces a stable
9
+ 10-section executive-summary report. Use when the user says "improve our
10
+ tests", "modernize the test suite", "upgrade our tests", or runs
11
+ /test-improve.
12
+ argument-hint: "<repo-path> [--parent <url>] [--analyze-only] [--from-phase [<n>]] [--stack <id>]"
13
+ role: orchestrator
14
+ user-invocable: true
15
+ allowed-tools: Read, Grep, Glob, Bash(git diff *), Bash(python3 *), Bash(sh *), Skill, Agent
16
+ ---
17
+
18
+ # Test Improve
19
+
20
+ Role: orchestrator. This command sequences existing skills and agents through a
21
+ ten-phase (0-9) analyze-then-improve workflow; it does **not** implement, audit, or
22
+ write tests itself. Each phase is **delegated** to the worker skill or agent
23
+ that owns it, and per-phase progress is persisted to
24
+ `.claude/memory/test-improve/<slug>/phase-<n>.md` so `/continue` (and `--from-phase`)
25
+ can resume.
26
+
27
+ You have been invoked with the `/test-improve` command.
28
+
29
+ ## Orchestrator constraints
30
+
31
+ 1. **Delegate every phase.** Call the owning skill or agent (`/test-health`,
32
+ `/gherkin-derive`, `/issues-from-assessment`, `/build`, `/coverage-baseline`,
33
+ `/coverage-delta`, `/mutation-testing`, `mutation-kill` agent,
34
+ `/quality-targets-converge`, `/test-design`, `/code-review`, `/apply-fixes`).
35
+ Never re-implement their logic here.
36
+ 2. **Honor the human gates.** Do not advance past a gate without explicit
37
+ approval.
38
+ 3. **Confirm the approach first.** Phase 0 owns the approach contract; do not
39
+ start work until it has completed and its answers are persisted.
40
+ 4. **Baseline before changing anything.** Coverage (and mutation, when
41
+ enabled) must land directly in `.dev-team-reports/test-improve/<slug>/data/`
42
+ before any file under the stack's test directory is modified.
43
+ 5. **Be concise.** Report each phase's outcome and the next gate, nothing
44
+ more.
45
+
46
+ ## Parse Arguments
47
+
48
+ - Positional: `<repo-path>` (default: cwd).
49
+ - `--parent <url>` — optional tracker parent issue URL; the host selects the
50
+ CLI (ADO / GitHub / GitLab / Jira). Omit for **local-files mode** (the
51
+ default), which writes to `.dev-team-reports/test-improve/` and `.claude/plans/test-improve/`.
52
+ - `--analyze-only` — run Phase 0 then Phase 1 directly and **exit after Phase 1** with a
53
+ summary of the improvement plan (bypassing the default Baseline/Derive-Gherkin
54
+ ordering — see Phase 0's `--analyze-only` semantics). No baseline is
55
+ captured; no code changes.
56
+ - `--from-phase [<n>]` — skips completed phases and resumes at phase `n` when
57
+ `.claude/memory/test-improve/<slug>/phase-<n-1>.md` exists. **The number is
58
+ optional.** Passed with **no argument**, `/test-improve` **auto-detects** the
59
+ resume point from `.claude/memory/test-improve/<slug>/` (see
60
+ `references/phase-0-approach-contract.md`): it resumes at the phase after the highest completed
61
+ progress file and prints which phase it resolved to and why. An explicit
62
+ `<n>` **overrides** auto-detection. Either form does **not** re-prompt
63
+ Phase-0 inputs; to change them, delete
64
+ `.claude/memory/test-improve/<slug>/phase-0.md` and re-run from Phase 0.
65
+ - `--stack <id>` — force a stack profile (e.g. `js`, `dotnet`, `java`, `go`)
66
+ when manifest detection is ambiguous.
67
+
68
+ ## Phase-start banner
69
+
70
+ At the start of every phase, print a two-line banner:
71
+
72
+ ```
73
+ Step <position>/<total> — Phase <N>: <phase name>
74
+ mutation: <off|kill-loop|baseline+kill-loop> · binding: <none|xunit-with-annotations|bdd-runner> · refactor: <no-refactor|refactor-allowed> · sink: <tracker|local>
75
+ ```
76
+
77
+ `<N>` is the phase's stable identity number — unchanged by execution order
78
+ (Phase 1 is always Analyze, Phase 2 is always Baseline, etc.). `<position>`
79
+ is a **running count of phases printed so far this run, including this
80
+ one** — increment it by exactly 1 at each phase-start banner, never
81
+ computed from a fixed per-identity table. A bare `Phase N/9` counter would
82
+ print non-monotonically under this reordered execution sequence (`2/9` then
83
+ `3/9` then `1/9`), reading as a hung or looping run to an operator watching
84
+ stdout; a plain running count fixes this without renumbering any phase,
85
+ file, or `--from-phase` flag value, and — unlike a fixed per-identity
86
+ table — it stays correct regardless of which phases actually execute.
87
+
88
+ **`<total>` is not always 9 or 10 — compute it, never hardcode it.** Two
89
+ independent things vary the count: whether Phase 3 runs (known from Phase
90
+ 0's BDD binding mode: skipped when `none`, so **-1**) and whether Phase 7
91
+ runs (Phase 6's decision — Phase 7 and Phase 8 are **not alternatives**;
92
+ when Phase 6 returns `[y]`, both Phase 7 *and* Phase 8 execute in sequence,
93
+ so entering Phase 7 is **+1**, not a shared slot). Concretely:
94
+
95
+ - Base count is **9** (Phases 0, 2, 3, 1, 4, 5, 6, 8, 9 — Phase 7 excluded
96
+ by default).
97
+ - **-1** when the Phase-0 BDD binding mode is `none` (Phase 3 never runs) —
98
+ known from Phase 0 onward, so this adjustment is baked into every
99
+ banner's `<total>` from the very first one.
100
+ - **+1** the moment Phase 6 resolves to `[y]` (entering Phase 7) — this is
101
+ **not** knowable before Phase 6 fires (an operator in `refactor-allowed`
102
+ mode can still pick `[b]`/`[q]` and skip Phase 7 despite the mode
103
+ permitting it), so `<total>` for Phases 0 through 6's banners uses the
104
+ **without-Phase-7** count; if Phase 6 then returns `[y]`, print one line
105
+ before Phase 7's banner — `Phase 7 entered — total phase count for this
106
+ run is now <new total> (was <old total>).` — and use the new total for
107
+ Phase 7, 8, and 9's banners. When `refactor-mode: no-refactor` (Phase 6
108
+ offers no `[y]` at all) or Phase 6 returns `[b]`/`[q]`, no adjustment ever
109
+ fires and `<total>` stays fixed for the whole run.
110
+
111
+ This keeps `<position>` strictly monotonic in every run shape, and
112
+ `<total>` honest at each point it's printed — correcting exactly once, with
113
+ a visible reason, only in the one case (entering Phase 7) that's genuinely
114
+ unknowable in advance.
115
+
116
+ The recap line reflects the still-active Phase-0 settings so an operator
117
+ resuming via `--from-phase` (or returning to a long-running session) sees the
118
+ current phase and active settings without scrollback archaeology.
119
+
120
+ ## Steps
121
+
122
+ **Execution order.** Phases below are numbered by stable identity, not by
123
+ execution order — Phase 2 (Baseline) and Phase 3 (Derive Gherkin) execute
124
+ before Phase 1 (Analyze) so `/test-health` can use documented-but-untested
125
+ Gherkin scenarios as a coverage signal. **Document order below matches
126
+ execution order**: `0 → 2 → 3 → 1 → 4 → 5 → 6 → 7 → 8 → 9`, where Phase 7
127
+ runs only when Phase 6 returns `[y]` (see "Phase-start banner" above for how
128
+ this affects the banner's `<total>`) — Phase 7 and Phase 8 always run in
129
+ that sequence together, never as alternatives to each other. When the
130
+ Phase-0 BDD binding mode is `none`, Phase 3 is skipped and the executed
131
+ sequence becomes `0 → 2 → 1 → 4 → 5 → 6 → (7) → 8 → 9`.
132
+
133
+ ## Phase Reference Files
134
+
135
+ Each phase's procedural detail lives in its own reference file, listed below.
136
+
137
+ | Phase | Name | Reference file |
138
+ | --- | --- | --- |
139
+ | 0 | Approach contract | `references/phase-0-approach-contract.md` |
140
+ | 1 | Analyze via /test-health | `references/phase-1-analyze.md` |
141
+ | 2 | Baseline | `references/phase-2-baseline.md` |
142
+ | 3 | Derive Gherkin | `references/phase-3-derive-gherkin.md` |
143
+ | 4 | Plan fixes | `references/phase-4-plan-fixes.md` |
144
+ | 5 | Improve without refactoring | `references/phase-5-improve.md` |
145
+ | 6 | Refactor decision | `references/phase-6-refactor-decision.md` |
146
+ | 7 | Refactor-for-testability | `references/phase-7-refactor.md` |
147
+ | 8 | Validate | `references/phase-8-validate.md` |
148
+ | 9 | Executive-summary report | `references/phase-9-report.md` |
149
+
150
+ The After-Phase-9 close-out prompt is not one of the ten numbered phases and deliberately has no row above; it is the separate `### After Phase 9` section further down, backed by `references/phase-9-close-out-prompt.md`.
151
+
152
+ Before executing a phase, read only that phase's reference file — never a
153
+ phase-specific reference file for a phase already completed in this run or a
154
+ prior resumed session. Shared implementation-detail reference files (e.g.
155
+ `references/review-loop.md`) are not phase-specific and may be read whenever
156
+ the phase you are executing points at them, regardless of whether another
157
+ phase also uses them.
158
+
159
+ This instruction is prose, not a hook-enforced gate — no mechanism in this
160
+ repo verifies at runtime that only the active phase's reference file was
161
+ read; compliance depends on the executing agent following the rule as
162
+ written.
163
+
164
+ ### Phase 0 — Approach contract
165
+
166
+ <!-- include: references/phase-0-approach-contract.md -->
167
+ See `references/phase-0-approach-contract.md` for the full prompt battery and conflict-check mechanics.
168
+
169
+ ### Phase 2 — Baseline (coverage + mutation)
170
+
171
+ <!-- include: references/phase-2-baseline.md -->
172
+ See `references/phase-2-baseline.md` for the full coverage-and-mutation baseline procedure, the coverage-gap ranking, and the ordering invariant.
173
+
174
+ ### Phase 3 — Derive Gherkin (conditional)
175
+
176
+ <!-- include: references/phase-3-derive-gherkin.md -->
177
+ See `references/phase-3-derive-gherkin.md` for the full binding-mode
178
+ branches, persistence, human gate, and the bdd-runner pending-stub
179
+ interaction with Phase 5 — conditional on the Phase-0 BDD rubric answer.
180
+
181
+ ### Phase 1 — Analyze via /test-health
182
+
183
+ <!-- include: references/phase-1-analyze.md -->
184
+ See `references/phase-1-analyze.md` for the full `/test-health` delegation,
185
+ the coverage-gap-ranking ordering rule and its `--analyze-only` no-ranking
186
+ case, the test-count-by-type snapshot and existing-snapshot guard, the human
187
+ gate, and the `/handoff` suggestion.
188
+
189
+ ### Phase 4 — Plan fixes (partition findings by gap class)
190
+
191
+ <!-- include: references/phase-4-plan-fixes.md -->
192
+ See `references/phase-4-plan-fixes.md` for the full gap-class partitioning,
193
+ the coverage-gap-ranking Story order, the persistence path, and the human
194
+ gate blocking Phase 5.
195
+
196
+ ### Phase 5 — Improve without refactoring (build + mutation-kill + review loop)
197
+
198
+ <!-- include: references/phase-5-improve.md -->
199
+ See `references/phase-5-improve.md` for the full per-Story build,
200
+ coverage-delta, and mutation-kill loop, the pending-stub gate, and the
201
+ end-of-phase review loop (which shares `references/review-loop.md` with
202
+ Phase 7).
203
+
204
+ ### Phase 6 — Refactor decision (mode-gated)
205
+
206
+ <!-- include: references/phase-6-refactor-decision.md -->
207
+ See `references/phase-6-refactor-decision.md` for the full REFACTOR_REQUIRED
208
+ presentation, the `refactor-mode` branch, and the `[y/b/q]` decision prompt.
209
+
210
+ ### Phase 7 — Refactor-for-testability (conditional)
211
+
212
+ <!-- include: references/phase-7-refactor.md -->
213
+ See `references/phase-7-refactor.md` for the full hard mode gate, the seam-only and
214
+ existing-tests-immutable constraints, the Phase-5 precondition check, and
215
+ the end-of-phase review loop (which shares `references/review-loop.md` with
216
+ Phase 5).
217
+
218
+ ### Phase 8 — Validate (converge quality targets)
219
+
220
+ <!-- include: references/phase-8-validate.md -->
221
+ See `references/phase-8-validate.md` for the full mutation-target-per-mode
222
+ rules, the branch-scoped mutation validation, the coverage-<90%-in-no-refactor
223
+ re-run prompt, the evidence and test-count recount, and the `/handoff`
224
+ suggestion.
225
+
226
+ ### Phase 9 — Executive-summary report
227
+
228
+ <!-- include: references/phase-9-report.md -->
229
+ See `references/phase-9-report.md` for the full executive-summary report
230
+ generation, the template source, output path, interpolation and
231
+ empty-section rules, the mutation row shape, the parent-issue/FEATURE.md
232
+ link update, and the regeneratable-from-tracked-data contract.
233
+
234
+ ### After Phase 9 — Re-run-with-refactor close-out prompt
235
+
236
+ <!-- include: references/phase-9-close-out-prompt.md -->
237
+ See `references/phase-9-close-out-prompt.md` for the full re-run-with-refactor
238
+ close-out prompt: when it is suppressed, its `[y/n]` decision, and how it
239
+ differs from Phase 8's coverage-driven, mid-run prompt.
@@ -0,0 +1,228 @@
1
+ Resolve every ambiguous input in **one batch** before any work starts, then
2
+ persist the resolved inputs to `.claude/memory/test-improve/<slug>/phase-0.md`. The
3
+ file must exist **before Phase 1** runs.
4
+
5
+ **Detect language(s) and stack profile.** Inspect manifests for JS/TS
6
+ (`package.json`), Java (`pom.xml` / `build.gradle`), C# (`*.csproj`), and Go
7
+ (`go.mod`). If `--stack` was passed, honor it. Record the resolved stack in
8
+ `phase-0.md`.
9
+
10
+ **Go advisory (shown before the mutation prompt when Go is detected).**
11
+
12
+ > Mutation testing on Go uses **go-mutesting**, which is **alpha**-quality.
13
+ > Survivor count is **not a gate** on Go — treat it as advisory. For real
14
+ > confidence in Go tests, prefer `go test -fuzz` on the parts of the code
15
+ > that reward it. In `baseline+kill-loop` mode the orchestrator records
16
+ > baseline and delta numbers; in `kill-loop` it records only the final
17
+ > surviving-mutant count. Either way the Phase-8 mutation target is
18
+ > advisory-only for Go.
19
+
20
+ **Prompt battery (one batch, six knobs).** Each prompt displays its default in
21
+ `[brackets]`; pressing **Enter accepts every default in one keystroke** — with
22
+ **one deliberate exception**: knob 6 (code-lookup install) is **not** part of the
23
+ Enter-accepts-all gesture, because accepting it mutates the filesystem (and, for
24
+ Graphify, the repo's `CLAUDE.md`). Knob 6 is the **sole** exception; it requires an
25
+ explicit `y`/`n` and a blank response **re-prompts** rather than defaulting either
26
+ way. This is called out in the knob-6 prompt itself so the divergence is never a
27
+ silent surprise.
28
+
29
+ 1. **Mutation mode** — `[kill-loop]`. A three-way choice; the value recorded in
30
+ `phase-0.md` and shown in the banner is the canonical token (`off` /
31
+ `kill-loop` / `baseline+kill-loop`), used verbatim in both places:
32
+ - `off` — no mutation testing (lightweight ceremony).
33
+ - `kill-loop` (**default**) — run the mutant-kill loop and produce a final
34
+ report of surviving mutants, **without** a separate baseline run first.
35
+ - `baseline+kill-loop` — run the mutation baseline first, then the mutant-kill
36
+ loop (a before/after mutation delta).
37
+
38
+ **Default change — mutation now runs by default.** The old knob defaulted to
39
+ `off` (no mutation work on Enter-through); under `kill-loop` an Enter-through
40
+ run **now performs the mutant-kill loop**. The prompt flags this so it is
41
+ never a silent surprise.
42
+
43
+ **Show the relative cost with the choice (#1965).** This knob is the
44
+ largest single cost multiplier in the workflow, and an operator pressing
45
+ Enter through the battery was accepting it without the price ever being
46
+ named. State it in the prompt — qualitatively, never as a fabricated dollar
47
+ figure (`/cost-report` is the instrument for actuals):
48
+
49
+ > Relative cost: `off` adds none. `kill-loop` adds roughly one
50
+ > opus-tier `mutation-kill` dispatch per module batch in Phase 5 (up to 3
51
+ > rounds each), plus the mutation tool's own runtime.
52
+ > `baseline+kill-loop` adds a full mutation baseline run on top of that.
53
+
54
+ This is disclosure, not a recommendation and not a default change: the
55
+ risk-mitigation trade each mode buys is the operator's call, and mutation
56
+ work is how assertion quality gets measured at all. Naming the price just
57
+ makes it an informed one.
58
+ 2. **BDD rubric** — five yes/no questions from
59
+ `knowledge/references/bdd-value-guide.md`. **Default `none`** if the
60
+ operator declines to answer. Scoring: ≥3 yes → `bdd-runner` recommended;
61
+ 1–2 yes → `xunit-with-annotations` recommended; 0 yes → `none`.
62
+
63
+ **Relative cost (#1965)**, stated with the choice for the same reason as
64
+ knob 1:
65
+
66
+ > `none` skips Phase 3 entirely. `xunit-with-annotations` adds scenario
67
+ > derivation and `.feature` authoring. `bdd-runner` adds those plus parser
68
+ > wiring, step-definition stub generation, and the Phase-5 pending-stub
69
+ > gate every stub must clear before the phase can close.
70
+ 3. **Refactor mode** — `[no-refactor]`. Default is **`no-refactor`**. Choose
71
+ `refactor-allowed` to permit production-code changes in Phase 7 (seams
72
+ only; existing tests may not be modified or removed).
73
+ 4. **Quality targets** — defaults: coverage ≥ 90% line + branch; surviving
74
+ mutants = 0 (only when mutation mode is not `off`); determinism = 100%; wall-clock =
75
+ fastest achievable. Any target can be overridden here; overrides land in
76
+ `phase-0.md` and flow into Phase 8.
77
+ 5. **Sink** — `--parent <url>` selects a tracker (ADO / GitHub / GitLab /
78
+ Jira via the host CLI); missing CLI or omitted flag falls back to
79
+ **local-files** mode (writes under `.dev-team-reports/test-improve/` and
80
+ `.claude/plans/test-improve/`).
81
+ 6. **Code-lookup tools (all-or-none install)** — offer to install the three
82
+ code-lookup tools (**CodeGraph**, **Repowise**, **Graphify**) so the review
83
+ and analysis agents read verified skeletons and resolved call graphs instead
84
+ of re-reading whole files. **Recommended: yes** when any of the three is
85
+ missing. This knob is an **explicit `y`/`n`** (see the Enter-accepts-all
86
+ exception above); a blank answer re-prompts. The prompt names the three tools
87
+ and discloses that Graphify writes a `## graphify` section into this repo's
88
+ `CLAUDE.md` and installs git hooks.
89
+ - **Idempotent / missing-subset.** Detect which of the three are already
90
+ present; offer only the **missing** subset. When all three are present,
91
+ do not prompt — record `code_lookup_tools: already present`.
92
+ - **Delegate the install — never reimplement it.** On `y`, delegate to
93
+ `/project-init`'s Step 4c graph-tools group (the canonical installer); do
94
+ not duplicate install commands or probes here.
95
+ - **Decline is visibly confirmed.** On `n`, install nothing and print
96
+ `Code-lookup tools: skipped — agents fall back to Read/Grep/Glob.`
97
+ - **Partial failure is recorded, not masked.** If the delegated install
98
+ partially fails, record per-tool success/failure in `phase-0.md` and do
99
+ not claim full install success.
100
+
101
+ **Coverage-target vs refactor-mode conflict check (issue #1787).** A stated
102
+ coverage percentage (**knob 4**) and `refactor-mode: no-refactor` (**knob 3**)
103
+ can be structurally incompatible, and Pass 1 held both at once without ever
104
+ saying so: mutation-kill work cannot raise line or branch coverage on code that
105
+ has no tests at all, and a layer at near-zero coverage generally needs a
106
+ production-code seam before any test can reach it. Resolve this **before** any
107
+ work starts — **never by waiving a gate later**, which is what happened when
108
+ branch-90 was quietly waived at a later gate while coverage-90 stayed a stated
109
+ goal to the end.
110
+
111
+ Run the check; do not judge it in prose:
112
+
113
+ ```
114
+ sh "${CLAUDE_PLUGIN_ROOT}/hooks/py.sh" "${CLAUDE_PLUGIN_ROOT}/scripts/coverage_gap_ranking.py" \
115
+ --report <existing coverage report> --repo-root <repo-path> \
116
+ --target-line-pct <line target> --target-branch-pct <branch target> --json
117
+ ```
118
+
119
+ - **A coverage report is discoverable** — a prior run's
120
+ `.dev-team-reports/test-improve/<slug>/data/baseline-coverage.json`'s
121
+ `raw_report`, or a report artifact already on disk (`lcov.info`,
122
+ `coverage.json`, `cobertura.xml`, `jacoco.csv`, `coverage-summary.json`).
123
+ The script's `verdict` decides:
124
+ - **`unreachable_without_seams` (exit 3)** — the target cannot be reached even
125
+ if every module that already has a test seam went to 100%. Present the
126
+ explicit three-way choice **`[w] waive the target / [s] switch to
127
+ refactor-allowed / [c] continue as-is`** (shape `[w/s/c]`), naming the
128
+ script's own numbers — `lines_needed`, `reachable_uncovered_lines`, and the
129
+ top seam-blocked modules — so the operator sees the arithmetic, not an
130
+ opinion. `[w]` records the target as **waived at Phase 0** with this reason
131
+ (Phase 8 then reports it waived up front instead of discovering it); `[s]`
132
+ records `refactor-mode: refactor-allowed` (Phase 0 is still resolving its
133
+ own answers here, so this is not an immutability exception); `[c]` proceeds
134
+ with `coverage_target_conflict: acknowledged` recorded. A **non-interactive**
135
+ run **does not silently pick a stance** — it records
136
+ `coverage_target_conflict: unresolved`, prints the same three options, and
137
+ the conflict is restated at Phase 8 rather than resolved by default.
138
+ - **`reachable` / `already_met` (exit 0)** — record
139
+ `coverage_target_conflict: none` and continue.
140
+ - **No coverage report is discoverable** — do **not** fabricate a verdict from
141
+ no data. Record `coverage_target_conflict: deferred` and run this identical
142
+ check at Phase 2 against the freshly captured baseline, **before** Phase 1
143
+ consumes the ranking (see the coverage-gap ranking step in
144
+ `phase-2-baseline.md`). Deferred means
145
+ *checked one phase later against real numbers* — never dropped, and never
146
+ first surfaced in the Phase-9 report.
147
+
148
+ This check is skipped entirely when knob 4 left no coverage percentage target
149
+ active, or when knob 3 selected `refactor-allowed` (there is no mode conflict
150
+ to surface).
151
+
152
+ **Persistence.** Write the resolved inputs to `.claude/memory/test-improve/<slug>/phase-0.md` before Phase 1 runs — Phase 1 must not start until `phase-0.md` exists. This includes the knob-6 outcome (the operator's install choice, and for each tool whether it was already present, installed, declined, or failed).
153
+
154
+ **Immutability.** Phase-0 answers are **immutable** for the remainder of the
155
+ run. `--from-phase` does not re-prompt Phase-0 inputs. To change them, delete
156
+ `.claude/memory/test-improve/<slug>/phase-0.md` and re-run from Phase 0.
157
+
158
+ **`--analyze-only` semantics.** With `--analyze-only`, Phase 0 completes as
159
+ normal, Phase 1 (`/test-health`) runs, and the orchestrator **exits after Phase 1**
160
+ with a summary of the improvement plan. This is a deliberate carve-out:
161
+ Phase 1 runs **directly**, bypassing the default Baseline (Phase 2) / Derive
162
+ Gherkin (Phase 3) ordering (`0 → 2 → 3 → 1 → 4 → ...`) — not a contradiction
163
+ of it. No baseline is captured; no code changes.
164
+
165
+ **`--from-phase` semantics.** `--from-phase <n>` resumes **at** phase `n` and
166
+ skips every phase that precedes `n` in the **execution** sequence
167
+ `0, 2, 3, 1, 4, 5, 6, 7, 8, 9` (not identity order — e.g. `--from-phase 1`
168
+ skips Phases 0, 2, and 3, not just 0). Phase-0 inputs are read from
169
+ `phase-0.md` (never re-prompted). **An explicit `<n>` is not validated
170
+ against this sequence** beyond requiring `phase-0.md` to exist — e.g.
171
+ `--from-phase 1` does not check that Phase 2 (Baseline) has actually run
172
+ first, so an operator passing an out-of-sequence `<n>` by hand can skip a
173
+ phase whose output later phases depend on (Baseline before any test-file
174
+ change, in particular). Prefer `--from-phase` with no number
175
+ (auto-detect, below) unless there's a specific reason to name a phase
176
+ explicitly.
177
+
178
+ **`--from-phase` with no number — auto-detect the resume point.** When
179
+ `--from-phase` is passed **without** a number, resolve the resume phase by
180
+ calling the helper — do **not** infer it in prose:
181
+
182
+ ```
183
+ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/test_improve_resume.py" <repo-path>
184
+ ```
185
+
186
+ The helper resolves the slug from `<repo-path>` (its last path segment), scans
187
+ **only** that slug's `.claude/memory/test-improve/<slug>/` directory for the
188
+ completed-phase progress files (`phase-0.md` … `phase-9.md`, excluding
189
+ `phase-3.md` — Phase 3 is conditional and tracked via `gherkin.md` instead,
190
+ never a numbered progress file), finds the highest completed phase in
191
+ **execution** order (`0, 2, 1, 4, 5, 6, 7, 8, 9` — Phase 3 excluded, matching
192
+ the progress-file scan above), and prints a JSON object whose
193
+ `resolved_phase` is the phase to resume at and whose `message` reads e.g.
194
+ `Resuming at Phase 8 (latest completed: phase-6.md).`. Print that `message`
195
+ so the operator can confirm before work starts, then resume at
196
+ `resolved_phase`. Resolution rules the helper encodes:
197
+
198
+ - A completed `phase-5.md` with **no** `phase-6.md` resumes at **Phase 6**;
199
+ a completed `phase-6.md` resumes at **Phase 8** (matching the `[b]`/`[q]`
200
+ skip-to-8 flow); a completed `phase-7.md` resumes at **Phase 8**.
201
+ - Only `phase-0.md` present resumes at **Phase 2** (Baseline — the phase that
202
+ now executes immediately after Phase 0).
203
+ - A completed `phase-2.md` with **no** `phase-1.md` resumes at **Phase 1**
204
+ (Phase 3 has no tracked progress file, so the auto-detect skips over it —
205
+ see `test_improve_resume.py`'s module docstring). A completed `phase-1.md`
206
+ resumes at **Phase 4**.
207
+ - **No memory dir / no phase files / `phase-0.md` missing** — the helper exits
208
+ non-zero; surface its error message (which points to running
209
+ `/test-improve <repo-path>` from Phase 0) and do **not** silently start at
210
+ Phase 0.
211
+ - A completed `phase-9.md` means the run is already complete (`complete:
212
+ true`) — report it; there is nothing to resume.
213
+
214
+ To resolve an **explicit** `<n>` (including validating that `phase-0.md`
215
+ exists) the skill may pass `--explicit <n>`; an explicit `<n>` **overrides**
216
+ auto-detection. Auto-detect and explicit alike read Phase-0 inputs from
217
+ `phase-0.md` and never re-prompt them.
218
+
219
+ **Phase-6 prompt letter.** The full Phase-6 refactor-decision prompt —
220
+ shown only in `refactor-allowed` mode — uses `[y/b/q]` (not `[r]`; see
221
+ `phase-6-refactor-decision.md` for why `r` was avoided). `[y]` advances to
222
+ Phase 7; `[b]` backlogs the REFACTOR_REQUIRED items and
223
+ skips to Phase 8; `[q]` quits before Phase 8. In `no-refactor` mode (the
224
+ default) Phase 6 is **informational only** — no `[y]` is offered, the
225
+ REFACTOR_REQUIRED items are auto-backlogged, and the run continues to Phase 8
226
+ (see `phase-6-refactor-decision.md` for the full branch mechanics
227
+ and `phase-7-refactor.md` for the hard-mode-gate backstop that
228
+ enforces this same `no-refactor` restriction if Phase 7 is somehow reached).
@@ -0,0 +1,131 @@
1
+ Delegate the entire analysis pass to **`/test-health`** — it is the **sole
2
+ worker** for Phase 1. Invoke it exactly once with the resolved repo path from
3
+ Phase 0. `/test-health` internally orchestrates whatever sub-skills it needs
4
+ (CD-alignment audit, test-design assessment, mutation-testing roll-up); the
5
+ orchestrator must **not** invoke `/cd-test-architecture`, `/test-design`, or
6
+ `/mutation-testing` separately here. Any prior workflow that reached those
7
+ skills directly is superseded by the single `/test-health` call.
8
+
9
+ **Mutation mode gates the mutation sub-run itself, not just the report
10
+ (#1961).** Read the mutation mode from `phase-0.md` and thread it into the
11
+ invocation:
12
+
13
+ - **Mutation mode `off` — the mutation section is omitted / "not enabled",
14
+ and the sub-run is skipped too.** Invoke `/test-health --no-mutation`, which
15
+ skips its Step-5 `mutation-testing` invocation outright rather than running
16
+ it and discarding the result. This used to be a report-time filter only: the
17
+ mutation tool ran, the roll-up was produced, and the output was then
18
+ suppressed — a measurement with no consumer, since `off` also means no
19
+ Phase-5 kill loop will consume survivor ordering. A skip is not a waiver and
20
+ not a coverage gap; the target was never in scope for this run.
21
+ - **Mutation mode `kill-loop` or `baseline+kill-loop`** — invoke
22
+ `/test-health` with no mutation flag. The mutation section is **present**,
23
+ and its ROI framing feeds the ordered plan as before.
24
+
25
+ **Order the plan by the coverage-gap ranking whenever a coverage percentage
26
+ is a stated goal (issue #1786).** Read
27
+ `.dev-team-reports/test-improve/<slug>/data/coverage-gap-ranking.json` —
28
+ written by Phase 2 (see `phase-2-baseline.md`) — and order the
29
+ coverage-driven items of `/test-health`'s ordered
30
+ improvement plan by that ranking's `modules` array (`rank` 1 first), not by
31
+ mutation survivor count and not by an ordering re-derived here. `/test-health`'s
32
+ own ordering stands only for items the ranking does not speak to (flakiness,
33
+ determinism, suite shape), and for a run where **no coverage percentage is a
34
+ stated goal** (Phase-0 knob 4 overrode the coverage targets away) the ranking
35
+ is **informational** rather than the ordering authority.
36
+
37
+ **Under `--analyze-only` there is no ranking to read.** That mode runs Phase 0
38
+ then Phase 1 directly and captures no baseline, so Phase 2 never wrote
39
+ `coverage-gap-ranking.json`. Do not fabricate one and do not silently fall back
40
+ to survivor ordering: present `/test-health`'s own ordering and state plainly
41
+ that the coverage-gap ranking was not computed for this run (a full run would
42
+ order the coverage-driven items by it). The same holds for a `--from-phase 1`
43
+ resume whose `data/` directory has no ranking file — say so rather than
44
+ proceeding as if the ordering were coverage-derived.
45
+
46
+ **Mutation survivors order work *within* an already-seamed module, never
47
+ across modules.** A module whose ranking entry reads `seam: established`
48
+ already has baseline coverage, so survivor counts are the right next signal
49
+ *there* — that is the ordering the `mutation-kill` agent applies inside Phase
50
+ 5. A module whose entry reads `seam: absent` needs coverage before it needs
51
+ assertion quality, and is ordered by uncovered lines alone. Under
52
+ `refactor-mode: no-refactor` a top-ranked `seam: absent` module whose tests
53
+ need a production seam is still shown in the presented plan — labeled
54
+ **skipped-in-no-refactor** per the human gate below — so the operator sees the
55
+ coverage left on the table instead of a plan that quietly reorders around it.
56
+
57
+ **Output.** Persist the rolled-up analysis plus the ordered improvement plan to
58
+ `.claude/memory/test-improve/<slug>/phase-1.md`.
59
+
60
+ **Test-count-by-type snapshot.** Independent of the `/test-health` call
61
+ above (and of whether `/test-health`'s own trivial-suite short-circuit
62
+ fired for this run), perform a direct classification pass over the test
63
+ files under the `<repo-path>` Phase 0 resolved: apply
64
+ `knowledge/cd-test-architecture.md`'s
65
+ six-type criteria (Static analysis / Unit / Component / Contract /
66
+ Integration / End-to-end) directly to each test suite/file found. **One
67
+ test file counts as exactly one suite**, regardless of how many describe
68
+ blocks or test classes it contains. Tie-break rule for a file that doesn't
69
+ cleanly fit one type: classify by its dominant/highest-dependency type
70
+ (e.g. a suite exercising a real DB connection classifies as integration
71
+ even if most of its assertions read like unit-level checks); if dominance
72
+ is still tied, classify by the higher-fidelity type using this fixed
73
+ precedence: `end_to_end` > `integration` > `contract` > `component` >
74
+ `unit` (this precedence applies to test files only — `static_analysis` is
75
+ never a legitimate outcome of classifying a test file; see its own
76
+ counting rule below). Persist
77
+ `.dev-team-reports/test-improve/<slug>/data/test-counts-before.json` — written
78
+ **directly** to the git-tracked `data/` sibling (this file has no other
79
+ consumer, so no separate `.claude/memory/` copy is needed) — with the six
80
+ canonical snake_case keys, in this fixed order: `static_analysis`, `unit`,
81
+ `component`, `contract`, `integration`, `end_to_end` — each key present
82
+ even at zero, counting **test suites/files, not individual test cases or
83
+ assertions**. `static_analysis` counts configured linter/scanner tool
84
+ invocations (one per tool — e.g. ESLint, Semgrep, mypy) rather than
85
+ test-directory files, since static analysis runs over non-running code and
86
+ is rarely organized as a describe-block suite; when the repo has no
87
+ configured static-analysis tooling at all, the key is `0`, not omitted.
88
+
89
+ **Existing-snapshot guard.** Before persisting, check whether
90
+ `test-counts-before.json` already exists under
91
+ `.dev-team-reports/test-improve/<slug>/data/` for the resolved slug. This
92
+ guard is Phase 1's application of the shared existing-tracked-artifact
93
+ re-capture guard — the canonical definition and rationale live once in
94
+ `knowledge/decision-defaults.md`'s "Re-capture: keep vs. overwrite an existing
95
+ tracked artifact" axis; this step cites that axis for the *why* and spells out
96
+ the operational branches below so an executing agent doesn't need to open a
97
+ second file mid-task. **No existing file** → write the fresh snapshot
98
+ directly; no prompt is needed. **An existing file that is malformed or
99
+ corrupt** (fails to parse as JSON — e.g. left over from a prior interrupted
100
+ write) → treat it as absent, never as a snapshot to keep; emit a warning
101
+ naming why a fresh capture is happening, then write the fresh snapshot
102
+ directly (no prompt — there is nothing valid to keep). **An existing, readable
103
+ file**, interactive session → prompt: *"An existing
104
+ test-counts-before.json was found for `<slug>` — overwrite it (starts a fresh
105
+ before/after comparison) or keep it (reuse for this run)? `[keep/overwrite,
106
+ default: keep]`"* Answering `overwrite` replaces the existing file with a
107
+ fresh snapshot. Answering `keep` (or declining) leaves the existing file
108
+ untouched and Phase 1 reuses it for this run. An **unrecognized answer**
109
+ (anything other than `keep` or `overwrite`) re-prompts with the identical
110
+ text — it never silently falls back to the default. When the run is
111
+ **non-interactive** (no usable TTY / `DEV_TEAM_AUTO_APPROVE=1`), the prompt is
112
+ never shown; Phase 1 defaults to **keep existing** and logs the
113
+ auto-decision, mirroring `decision-defaults.md`'s non-interactive rule — never
114
+ a non-default stance (overwrite) with nobody present to confirm it. The
115
+ malformed-file branch above is the one exception to that keep-by-default
116
+ posture — an unreadable file is treated as absent in every mode, since there
117
+ is nothing valid to keep.
118
+
119
+ This pass does **not** invoke `/test-health` or `/cd-test-architecture`'s
120
+ full skill.
121
+
122
+ **Human gate.** After `/test-health` returns, present **the ordered improvement
123
+ plan** to the operator and wait for explicit approval. **Phase 4 does not run**
124
+ until the operator approves. This is the human gate for Phase 1; do not advance
125
+ past it without approval. When `phase-0.md` recorded
126
+ `refactor-mode: no-refactor`, any plan item that would require a production-code
127
+ refactor is labeled **skipped-in-no-refactor** (out of scope for this run) so
128
+ the operator sees the coverage/behavior left on the table — such items are never
129
+ presented as ordinary next steps that this run will execute.
130
+
131
+ **`/handoff` suggestion** (context-heavy analysis). Once the gate above resolves, print: `Phase 1 complete. Consider running /handoff to compress context before continuing. To resume: /test-improve <repo-path> --from-phase 4 (or --from-phase with no number to auto-detect the resume point)`