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,1122 @@
1
+ ---
2
+ name: setup
3
+ description: >-
4
+ Provision a repo for the dev-team plugin end to end — install the plugin's
5
+ own prerequisites (jq, python3, per-language mutation tooling — Stryker,
6
+ pitest, Stryker.NET), then generate dev-team-specific project
7
+ configuration — project-level CLAUDE.md, the PostToolUse formatting hook,
8
+ language-specific agent template activation, and a generated `/pr`
9
+ command — from the stack signal `/dev-team:project-init` establishes. This
10
+ is NOT where toolchain detection/installation itself lives (that's
11
+ `/project-init`); `/setup` only consumes it. Use this when onboarding a
12
+ new project to the dev-team plugin, when the mutation gate reports a
13
+ missing tool, or when the user says "setup", "bootstrap", "configure this
14
+ project for dev-team", "install required tools for the dev-team plugin",
15
+ or "activate agent templates".
16
+ argument-hint: "[--yes] [--dry-run] [--autocompact-pct N] [--no-autocompact]"
17
+ user-invocable: true
18
+ allowed-tools: Read, Write, Edit, Glob, Grep, Bash
19
+ ---
20
+
21
+ # Project Setup
22
+
23
+ <!-- pi-port-notes -->
24
+ ## pi port notes (read first — these override the steps below)
25
+
26
+ This is the pi port of `/setup`. Follow the steps below with these substitutions:
27
+
28
+ - **Hard dependencies (Step 3):** the `claude` CLI is not required. `pi`, `python3`, `jq`, `git` and `gh` are.
29
+ - **Step 4:** run the `project-init` skill with the `skill` tool (`dev-team:project-init` and `project-init` are the same).
30
+ - **Step 7 (agent templates):** activate templates into `.claude/agents/` exactly as written. The pi `dev_team_subagent` tool loads project agents from `.pi/agents/` and `.claude/agents/`, and they take precedence over the package agents.
31
+ - **Step 8 / 8a (project CLAUDE.md):** pi loads context files from the project root and its ancestors (`AGENTS.md`, or `CLAUDE.md`), **not** from `.claude/CLAUDE.md`. Everywhere these steps say `.claude/CLAUDE.md`, use `AGENTS.md` at the repository root instead (if the repo already has a root `CLAUDE.md` and no `AGENTS.md`, use that `CLAUDE.md`). Same merge/skip and marker rules.
32
+ - **Step 9 (formatting hook):** do not write `.claude/settings.json`. Instead set `"autoFormat": true` in `.pi/dev-team.json` (create the file if missing, keep other keys). The pi extension then runs `hooks/post_format.py` (prettier / ruff / black, auto-detected) after every `write`/`edit`.
33
+ - **Step 9b (autocompact):** run `scripts/set_autocompact_env.py` exactly as written. It only merges `env.CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` into `.claude/settings.json` (the one write to that file this port allows); the pi extension reads that value and compacts the session at that percentage of the model's window. pi's own threshold is `contextWindow - reserveTokens`, so the "values above ~83% have no effect" caveat becomes "values above pi's own threshold have no effect".
34
+ - **Step 10 (/pr):** write the generated project command to `.claude/skills/pr/SKILL.md` as written. The pi port resolves project skills in `.pi/skills/` and `.claude/skills/` before the package's own.
35
+ - **Step 11:** also add `.pi/dev-team.local.json` to the `.gitignore` block.
36
+ - **Step 12 (report):** list `AGENTS.md` and `.pi/dev-team.json` instead of `.claude/CLAUDE.md`, and list `.claude/settings.json` only for the Step 9b `env.CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` key. Add a line recommending `/dev-team models` to map the opus/sonnet/haiku agent tiers to this user's models.
37
+ <!-- pi-port-notes -->
38
+
39
+
40
+ Role: orchestrator. See frontmatter description for scope; delegates all
41
+ stack detection and toolchain install/inventory to `/dev-team:project-init`,
42
+ which `/setup` never re-derives.
43
+
44
+ ## Orchestrator constraints
45
+
46
+ 1. Detect and scaffold; delegate generation, do not review code yourself.
47
+ 2. Install prerequisites and write config only where the user confirms.
48
+ 3. Do not overwrite existing project config without confirming.
49
+ 4. Be OS-aware; do not assume a package manager.
50
+ 5. **Be concise.** Report detected stack, installed prerequisites, and
51
+ generated artifacts — no narration.
52
+
53
+ ## Parse Arguments
54
+
55
+ Arguments: $ARGUMENTS
56
+
57
+ - `--dry-run`: Report what would be created/installed without writing any
58
+ files or installing anything.
59
+ - `--yes`: Run unattended — auto-confirm every prompt with its **safe**
60
+ default and pass `--yes` through when invoking `/dev-team:project-init`
61
+ (Step 4). No step waits for input.
62
+ - `--autocompact-pct N`: write `N` (integer 1-100) as the repo's
63
+ `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` (Step 9b) instead of the default `40`.
64
+ - `--no-autocompact`: skip Step 9b's settings write and silence the
65
+ SessionStart nudge that recommends running `/dev-team:setup`.
66
+
67
+ ### `--yes` semantics (the unattended contract)
68
+
69
+ When `--yes` is set, take these actions without prompting. **Affirmative** —
70
+ auto-confirm and proceed:
71
+
72
+ - Per-language mutation tooling for the detected stack (Step 6). Already
73
+ non-interactive when the stack is definite; `--yes` additionally suppresses
74
+ the ambiguous-stack fallback below.
75
+ - Agent-template activation for the detected stack (Step 7).
76
+ - Project `CLAUDE.md` (Step 8) and `/pr` (Step 10) generation **when the file
77
+ is absent**; the downstream `.gitignore` append (Step 11).
78
+ - Everything `/dev-team:project-init` auto-confirms under its own `--yes`
79
+ (its three-column plan, capability tools whose signal fired, and the keyless
80
+ CodeGraph + Repowise pair — see that skill's Arguments section).
81
+
82
+ **Conservative** — never silently overwrite an existing file or mutate the
83
+ repo in a surprising way; take the skip default and print a one-line note:
84
+
85
+ - **Existing project `CLAUDE.md`** (Step 8) — never overwritten (orchestrator
86
+ constraint 3). Skip and note it, exactly as the interactive "merge or skip"
87
+ path's skip branch.
88
+ - **Coverage-config edits** (Step 6, JS/TS readiness) — `--yes` may install the
89
+ additive `@vitest/coverage-v8` devDependency, but does **not** run `--patch`
90
+ or hand-edit an existing `jest.config.js` / `vitest.config.*`. Report the
91
+ hints as it does interactively; the operator applies those edits.
92
+ - **Graphify** — declined for this run inside `/dev-team:project-init` (see
93
+ that skill); it writes to the repo, so it stays opt-in even under `--yes`.
94
+ - **Unrecognized / ambiguous stack** — `--yes` never guesses a toolchain. Do
95
+ the language-neutral steps and report what could not be set up.
96
+ - **Concise-response preference** (Step 8a) — `--yes` never guesses a
97
+ communication-style preference. Skip the prompt and the `CLAUDE.md`
98
+ append entirely; note `concise-preference-skipped-under-yes`. This is
99
+ the outcome only when Step 8a's own pre-check found the block absent —
100
+ when the block is already present, the pre-check reports
101
+ `concise-preference-already-covered` before `--yes` is ever consulted,
102
+ regardless of whether `--yes` was passed.
103
+
104
+ **Precedence.** If both `--yes` and `--dry-run` are passed, `--dry-run` wins:
105
+ report only, write and install nothing, and add "`--yes` ignored under
106
+ `--dry-run`" to the report.
107
+
108
+ ## Steps
109
+
110
+ ### 1. Detect OS
111
+
112
+ Run the following and record the result:
113
+
114
+ ```bash
115
+ uname -s
116
+ ```
117
+
118
+ - `Darwin` → macOS (use `brew`)
119
+ - `Linux` → Linux (detect package manager below)
120
+ - `MINGW*` or `MSYS*` (e.g. `MINGW64_NT-10.0-22621`) → Windows running Git Bash
121
+ (detect Windows package manager below)
122
+ - Other → note the platform; provide manual instructions and continue
123
+
124
+ > **Windows note:** Claude Code on Windows runs in Git Bash (MINGW) or WSL.
125
+ > WSL reports `Linux` and is fully handled by the Linux steps. The Windows
126
+ > steps below apply to native Git Bash only. If you are using WSL, follow
127
+ > the Linux steps instead.
128
+
129
+ For Linux, detect the available package manager:
130
+
131
+ ```bash
132
+ command -v apt-get && echo apt
133
+ command -v dnf && echo dnf
134
+ command -v yum && echo yum
135
+ command -v pacman && echo pacman
136
+ ```
137
+
138
+ Use the first one found.
139
+
140
+ For Windows (Git Bash), detect the available package manager:
141
+
142
+ ```bash
143
+ command -v winget && echo winget
144
+ command -v choco && echo choco
145
+ command -v scoop && echo scoop
146
+ ```
147
+
148
+ Use the first one found. If none are found, tell the user:
149
+ "No Windows package manager detected. Install winget (built into Windows 10/11
150
+ via the App Installer), Chocolatey (<https://chocolatey.org>), or Scoop
151
+ (<https://scoop.sh>), then re-run `/setup`."
152
+
153
+ ### 2. Detect the agentic-dev-team repo and delegate to dev-setup.sh
154
+
155
+ Before installing anything, check whether this invocation is running inside
156
+ the agentic-dev-team plugin-dev repo itself (as opposed to a downstream
157
+ project that merely has the plugin installed):
158
+
159
+ ```bash
160
+ test -f requirements-dev.txt && test -f plugins/dev-team/.claude-plugin/plugin.json && echo "in-repo" || echo "downstream"
161
+ ```
162
+
163
+ - **`in-repo`**: print "Detected the agentic-dev-team repo — running
164
+ scripts/dev-setup.sh to bootstrap the plugin-dev toolchain (shellcheck, jq,
165
+ python3, Python dev dependencies)." Then run:
166
+
167
+ ```bash
168
+ bash scripts/dev-setup.sh
169
+ ```
170
+
171
+ Surface its stdout/stderr to the user. `dev-setup.sh` is a separate,
172
+ intentionally-kept bash entry point — it works before Claude Code or the
173
+ plugin is installed, and is reused as a generic template by
174
+ `/new-marketplace` for other marketplace repos (see the note at the top of
175
+ `scripts/dev-setup.sh`). This skill calls it rather than reimplementing its
176
+ install logic. After it runs, still execute Step 3's jq/python3 checks below
177
+ — they are idempotent and confirm dev-setup.sh's work rather than
178
+ duplicating installation, so running both is a harmless double-check, not
179
+ redundant install logic.
180
+ - **`downstream`**: no plugin-dev repo detected — proceed exactly as before
181
+ with Step 3 (existing downstream-user behavior, unchanged).
182
+
183
+ ### 3. Install hard dependencies (jq and python3)
184
+
185
+ These are required by the mutation gate regardless of language.
186
+
187
+ #### jq
188
+
189
+ Check if already installed:
190
+
191
+ ```bash
192
+ command -v jq && jq --version
193
+ ```
194
+
195
+ If missing, install:
196
+
197
+ | OS | Command |
198
+ | ---- | --------- |
199
+ | macOS | `brew install jq` |
200
+ | Linux (apt) | `sudo apt-get install -y jq` |
201
+ | Linux (dnf/yum) | `sudo dnf install -y jq` or `sudo yum install -y jq` |
202
+ | Linux (pacman) | `sudo pacman -S --noconfirm jq` |
203
+ | Windows (winget) | `winget install jqlang.jq` |
204
+ | Windows (choco) | `choco install jq` |
205
+ | Windows (scoop) | `scoop install jq` |
206
+ | Unknown | Tell the user: "Install jq manually from <https://jqlang.github.io/jq/> and re-run `/setup`." |
207
+
208
+ #### python3
209
+
210
+ Check if already installed:
211
+
212
+ ```bash
213
+ command -v python3 && python3 --version
214
+ ```
215
+
216
+ If missing, install:
217
+
218
+ | OS | Command |
219
+ | ---- | --------- |
220
+ | macOS | `brew install python3` |
221
+ | Linux (apt) | `sudo apt-get install -y python3` |
222
+ | Linux (dnf/yum) | `sudo dnf install -y python3` or `sudo yum install -y python3` |
223
+ | Linux (pacman) | `sudo pacman -S --noconfirm python` |
224
+ | Windows (winget) | `winget install Python.Python.3` |
225
+ | Windows (choco) | `choco install python` |
226
+ | Windows (scoop) | `scoop install python` |
227
+ | Unknown | Tell the user: "Install Python 3 manually from <https://python.org> and re-run `/setup`." |
228
+
229
+ > **Windows python3 alias:** Windows installers often register the binary as
230
+ > `python`, not `python3`. After installing, check:
231
+ >
232
+ > ```bash
233
+ > command -v python3 || python --version
234
+ > ```
235
+ >
236
+ > If only `python` is found, create a Git Bash alias so the mutation gate can
237
+ > find it:
238
+ >
239
+ > ```bash
240
+ > echo "alias python3='python'" >> ~/.bashrc && source ~/.bashrc
241
+ > ```
242
+ >
243
+ > Verify with `python3 --version` before proceeding.
244
+
245
+ If either installation fails, stop and tell the user: "Could not install
246
+ `<tool>`. Please install it manually and re-run `/setup`."
247
+
248
+ ### 4. Invoke `/dev-team:project-init` for stack detection and toolchain
249
+
250
+ Run `/dev-team:project-init` and let it complete, including its confirmation
251
+ gate, before continuing. **Under `--yes`, invoke it as
252
+ `/dev-team:project-init --yes`** so its own gates auto-confirm with their safe
253
+ defaults rather than blocking (see that skill's Arguments section).
254
+
255
+ ### 5. Record the stack signal for dev-team's own use
256
+
257
+ `/setup` still needs a small, cheap signal of its own to populate
258
+ `.claude/project-stack.json` and to drive Step 6's mutation-tool selection
259
+ and Step 7's template selection. `/dev-team:project-init` performs its own
260
+ detection in Step 4 but persists no machine-readable artifact for `/setup`
261
+ to consume, so this is a deliberate lightweight re-probe using the same
262
+ indicator conventions (`skills/project-init/SKILL.md` Step 1 and Step 2) —
263
+ `package.json`, `tsconfig.json`, `pyproject.toml`/`requirements*.txt`,
264
+ `*.csproj`/`*.sln`, `pom.xml`/`build.gradle*` — plus the handful of framework
265
+ dependency checks (`react`, `vue`, `svelte`, `@angular/core`, `next`,
266
+ `django`, `flask`, `fastapi`) that project-init's own stack table doesn't
267
+ record. It does not repeat project-init's heavier JS/TS ES-module/
268
+ TypeScript/require-scan checks or its formatter-selection logic (those stay
269
+ entirely project-init's job — its Step 4/Scaffold steps and Step 4b/4c) and
270
+ it does not install anything.
271
+
272
+ Write findings to `.claude/project-stack.json`:
273
+
274
+ ```json
275
+ {
276
+ "detected": "2026-03-18",
277
+ "stacks": ["typescript", "node"],
278
+ "frameworks": ["react", "vitest"],
279
+ "packageManager": "npm|yarn|pnpm|bun",
280
+ "hasDocker": true,
281
+ "indicators": {
282
+ "package.json": true,
283
+ "tsconfig.json": true
284
+ }
285
+ }
286
+ ```
287
+
288
+ ### 6. Install per-language mutation tooling
289
+
290
+ Mutation-tool installation is **strictly relative to the detected stack**.
291
+ Do not decide which language sections to run by hand — the mapping is a
292
+ deterministic helper, so the wrong-stack probe (e.g. `dotnet` on a JS repo)
293
+ cannot fire. Call it once:
294
+
295
+ ```bash
296
+ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/mutation_stack_sections.py" .
297
+ ```
298
+
299
+ It reads `.claude/project-stack.json`'s `stacks` array (recorded in Step 5)
300
+ and prints one JSON object:
301
+
302
+ ```json
303
+ { "sections": ["js"], "stacks": ["typescript", "node"], "ambiguous": false, "note": null }
304
+ ```
305
+
306
+ - `sections` — the sections to run, from `js` (JS/TS — Stryker), `java`
307
+ (Java/Kotlin — pitest), `csharp` (C#/.NET — Stryker.NET), `python`
308
+ (Python — mutmut). The mapping is `typescript`/`node`/`javascript` → `js`,
309
+ `java`/`kotlin` → `java`, `csharp`/`dotnet` → `csharp`, `python` →
310
+ `python`. **Run every section in `sections` and no others.** More than one
311
+ may apply in a polyglot repo.
312
+ - `ambiguous` — `true` **only** when the stack signal is genuinely empty or
313
+ missing (no `.claude/project-stack.json`, unreadable/invalid, or an empty
314
+ `stacks` array). This is the **only** outcome that authorizes the
315
+ interactive fallback below.
316
+ - `note` — set when a definite stack matched no section (e.g. a Ruby or
317
+ Elixir repo — there is no mutation tool wired into this step for that
318
+ stack). When `note` is non-null, `sections` is empty and `ambiguous` is
319
+ `false`: install **nothing**, probe **nothing** (no `dotnet`, `node`,
320
+ `mvn`, or `pip`), print the `note` line verbatim, and skip the rest of
321
+ this step.
322
+
323
+ **Interactive fallback — only when `ambiguous` is `true`.** When a definite
324
+ stack was detected (`ambiguous` is `false`), never prompt; honor `sections`
325
+ exactly. **Under `--yes`, skip this fallback entirely even when `ambiguous`
326
+ is `true`** — never guess a stack: install no mutation tooling and print
327
+ `Mutation tooling skipped — no stack detected (run /setup without --yes to choose)`.
328
+ Otherwise, only when `ambiguous` is `true` (e.g. `--dry-run` scanning a repo
329
+ with no recognizable stack) fall back to asking:
330
+
331
+ > "Which languages do you need mutation testing for? (Select all that apply)"
332
+ >
333
+ > 1. **JS/TS** — Stryker (`@stryker-mutator/core`)
334
+ > 2. **Java / Kotlin** — pitest (`pitest-maven` or `info.solidsoft.gradle.pitest`)
335
+ > 3. **C# / .NET** — Stryker.NET (`dotnet-stryker`)
336
+ > 4. **Python** — mutmut
337
+ > 5. **All of the above**
338
+ > 6. **None — skip mutation tooling**
339
+
340
+ Parse the response. If they choose 5, treat it as selecting 1, 2, 3, and 4
341
+ (i.e. `sections` = `["js", "java", "csharp", "python"]`). If 6, skip the
342
+ rest of this step.
343
+
344
+ Each language subsection below **re-asserts its own gate as its literal
345
+ first step** — a section whose key is not in `sections` returns immediately,
346
+ before any `command -v` / tool probe. The guard is therefore robust even if
347
+ a section is reached out of order.
348
+
349
+ ---
350
+
351
+ #### JS/TS — Stryker
352
+
353
+ **Stack gate (first step — hard precondition):** if `js` is not in the
354
+ Step 6 helper's `sections`, return immediately. Do **not** run the
355
+ prerequisites probe below. Only proceed when `js` is in `sections`.
356
+
357
+ **Prerequisites check:**
358
+
359
+ ```bash
360
+ command -v node && node --version
361
+ command -v npm && npm --version
362
+ ```
363
+
364
+ If `node` or `npm` is not found, tell the user:
365
+ "Node.js is required for Stryker. Install it from <https://nodejs.org> and
366
+ re-run `/setup`." Do not proceed with this language section.
367
+
368
+ **Bootstrap project if package.json is missing:**
369
+
370
+ Step 4 already ran `/dev-team:project-init` once this invocation, so this
371
+ should rarely trigger — it only fires when Step 5's signal maps to JS/TS but
372
+ the user's Step 4 selections didn't result in a scaffolded `package.json`
373
+ (e.g. they declined scaffolding, or picked a non-JS path there).
374
+
375
+ ```bash
376
+ test -f package.json && echo "package.json found" || echo "no-package"
377
+ ```
378
+
379
+ If the result is `no-package`:
380
+
381
+ 1. Print: `No package.json found. Running /dev-team:project-init first to scaffold the project.`
382
+ 2. Invoke the `/dev-team:project-init` skill. It will scaffold a
383
+ functional ES-module project with prettier, eslint, editorconfig, and
384
+ vitest (see the skill's own documentation for the full default set).
385
+ 3. After the skill returns:
386
+ - If `package.json` now exists → proceed to "Check if already installed".
387
+ - If `package.json` still does not exist (user aborted project-init):
388
+ print `Stryker skipped — no package.json. Re-run /setup after scaffolding your JS project.`
389
+ and skip the rest of the JS/TS section.
390
+ - If the skill reported an explicit failure: print
391
+ `Stryker skipped — project-init failed. See errors above and re-run /setup after resolving them.`
392
+ and skip the rest of the JS/TS section.
393
+
394
+ If the result is `package.json found`, proceed directly to "Check if already installed".
395
+
396
+ **Check if already installed (project-local):**
397
+
398
+ ```bash
399
+ test -f node_modules/.bin/stryker && echo "installed" || echo "not found"
400
+ ```
401
+
402
+ **If not installed** (the check above reported `not found`)**, add Stryker as a
403
+ dev dependency** — skip this install when it reported `installed`:
404
+
405
+ ```bash
406
+ npm install --save-dev @stryker-mutator/core
407
+ ```
408
+
409
+ **Detect the test runner and install its Stryker plugin — but only when that
410
+ plugin is not already present.** Run this independently of the core check
411
+ above: the core binary can be installed while its runner plugin is missing,
412
+ and an already-present runner plugin must never be reinstalled.
413
+
414
+ ```bash
415
+ # Detect the runner from package.json
416
+ cat package.json 2>/dev/null | grep -E '"vitest"|"jest"|"mocha"|"jasmine"' | head -5
417
+ # Then, for the detected runner (substitute its name), check before installing:
418
+ test -d node_modules/@stryker-mutator/vitest-runner && echo "present" || echo "missing"
419
+ ```
420
+
421
+ Install the plugin **only if the check above reported `missing`**
422
+ (`npm install --save-dev <package>`):
423
+
424
+ | Detected runner | Plugin package |
425
+ | ----------------- | ---------------- |
426
+ | vitest | `@stryker-mutator/vitest-runner` |
427
+ | jest | `@stryker-mutator/jest-runner` |
428
+ | mocha | `@stryker-mutator/mocha-runner` |
429
+ | jasmine | `@stryker-mutator/jasmine-runner` |
430
+ | none detected | `@stryker-mutator/vitest-runner` (default; note to the user they may need to swap this for their runner) |
431
+
432
+ **If any Stryker install above fails with `npm error code ERESOLVE`**, the
433
+ conflict is a peer-dependency clash already present in the repo's tree — not
434
+ between it and `@stryker-mutator/*`, which carries no such peer relationship.
435
+ Retry that command once with `--legacy-peer-deps` (e.g. `npm install
436
+ --save-dev @stryker-mutator/core --legacy-peer-deps`), and add a one-line note
437
+ to the user that you fell back to `--legacy-peer-deps` because of a
438
+ pre-existing peer conflict. Don't abort on the first ERESOLVE.
439
+
440
+ **Initialize Stryker config if not already present:**
441
+
442
+ ```bash
443
+ test -f stryker.config.js -o -f stryker.config.mjs -o -f stryker.config.ts \
444
+ -o -f stryker.config.cjs -o -f .strykerrc.json && echo "config exists" || echo "no config"
445
+ ```
446
+
447
+ If no config exists, **write `stryker.config.mjs` directly** — do not run
448
+ `npx stryker init`, which is interactive (it prompts for the test runner,
449
+ reporters, and package manager) and hangs a non-interactive `/setup` run.
450
+ You already detected the test runner above, so emit the config with
451
+ `testRunner` set to that runner. Write the file with this shape, substituting
452
+ the detected runner (`vitest` / `jest` / `mocha` / `jasmine`; use `vitest`
453
+ when none was detected):
454
+
455
+ ```js
456
+ // stryker.config.mjs
457
+ export default {
458
+ packageManager: "npm",
459
+ testRunner: "jest", // <- the runner detected above
460
+ coverageAnalysis: "perTest",
461
+ reporters: ["html", "clear-text", "progress"],
462
+ mutate: ["src/**/*.{js,ts}", "!src/**/*.{test,spec}.{js,ts}"],
463
+ };
464
+ ```
465
+
466
+ Runner-specific notes when substituting `testRunner`:
467
+
468
+ - **jest** — add a `jest` block so Stryker finds the project config, e.g.
469
+ `jest: { projectType: "custom", configFile: "jest.config.js" }` (point
470
+ `configFile` at the repo's actual Jest config). Angular repos also want
471
+ `"!src/**/*.module.ts"` appended to `mutate`.
472
+ - **vitest / mocha / jasmine** — no extra runner block is required; the
473
+ `testRunner` value alone wires up the installed runner plugin.
474
+
475
+ Keep `mutate` scoped to the repo's real source layout — adjust the globs if
476
+ sources live somewhere other than `src/`.
477
+
478
+ > If you'd rather configure interactively, `npx stryker init` walks through
479
+ > the same choices with prompts — but only run it in an interactive shell, not
480
+ > as part of an automated `/setup`.
481
+
482
+ **Verify:**
483
+
484
+ ```bash
485
+ npx stryker --version
486
+ ```
487
+
488
+ **Coverage baseline readiness (Jest/Vitest):**
489
+
490
+ `/coverage-baseline` (Phase 2 of `/test-improve`) parses
491
+ `coverage/coverage-summary.json` for `total.lines.pct` / `total.branches.pct`.
492
+ Jest and Vitest only emit that file when the **`json-summary`** reporter is
493
+ enabled, and the floor is only meaningful when coverage measures the whole
494
+ source tree (Jest `collectCoverageFrom` / Vitest `coverage.include`). Without
495
+ both, a repo that otherwise passes `/setup` still aborts `/test-improve`
496
+ Phase 2 (issue #1086). Probe and repair it now:
497
+
498
+ ```bash
499
+ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/coverage_readiness.py" .
500
+ ```
501
+
502
+ Read the JSON report. `ready` is the hard requirement (the summary can be
503
+ parsed **and**, for Vitest, a coverage provider is installed); `meaningful`
504
+ is whether the baseline reflects the whole tree.
505
+
506
+ - **Vitest with `has_provider` `false`** (no `@vitest/coverage-v8` or
507
+ `@vitest/coverage-istanbul` — Vitest emits no coverage at all without one,
508
+ unlike Jest's built-in Istanbul) → show `provider_hint` and, on
509
+ confirmation, install it as a devDependency:
510
+
511
+ ```bash
512
+ npm install --save-dev @vitest/coverage-v8
513
+ ```
514
+
515
+ Then re-run the probe. This is orthogonal to the reporter/scope checks
516
+ below — both must be satisfied for `ready` to flip to `true`.
517
+ - **`ready` is `true`** → record it for the Step 12 report and continue.
518
+ - **`ready` is `false` and `patchable` is `true`** (config lives in
519
+ `package.json`'s `jest` block or a `*.json` config) → tell the operator
520
+ exactly which reporter will be added, and on confirmation re-run with
521
+ `--patch`:
522
+
523
+ ```bash
524
+ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/coverage_readiness.py" . --patch
525
+ ```
526
+
527
+ The patch only appends `json-summary`, preserving existing reporters.
528
+ - **`ready` is `false` and `patchable` is `false`** (config is a JS/TS file
529
+ like `jest.config.js` or `vitest.config.ts` — the probe never rewrites
530
+ these) → show the operator `reporter_hint` and, on confirmation, apply that
531
+ one-line edit with the Edit tool. Re-run the probe (no `--patch`) to confirm
532
+ `ready` flipped to `true`.
533
+ - **`meaningful` is `false`** → show `scope_hint` and offer to add the
534
+ suggested `collectCoverageFrom`/`coverage.include` (confirm first; never
535
+ overwrite an existing scope). This is advisory — a missing scope doesn't
536
+ block the baseline, it just inflates it.
537
+
538
+ Never write or patch coverage config without operator confirmation. **Under
539
+ `--yes`, install only the additive `@vitest/coverage-v8` devDependency without
540
+ prompting; do not run `--patch` or hand-edit an existing config file** — leave
541
+ those edits to the operator and surface the hints in the report exactly as the
542
+ interactive path does. Record the final `ready`/`meaningful`/`patched` state
543
+ for the Step 12 report.
544
+
545
+ ---
546
+
547
+ #### Java / Kotlin — pitest
548
+
549
+ **Stack gate (first step — hard precondition):** if `java` is not in the
550
+ Step 6 helper's `sections`, return immediately. Do **not** run the
551
+ prerequisites probe below. Only proceed when `java` is in `sections`.
552
+
553
+ **Prerequisites check:**
554
+
555
+ ```bash
556
+ command -v mvn && echo "maven found"
557
+ command -v gradle && echo "gradle found"
558
+ ```
559
+
560
+ If neither is found, tell the user:
561
+ "Maven or Gradle is required for pitest. Install one from
562
+ <https://maven.apache.org> or <https://gradle.org> and re-run `/setup`."
563
+
564
+ **Detect build tool:**
565
+
566
+ ```bash
567
+ test -f pom.xml && echo "maven"
568
+ test -f build.gradle -o -f build.gradle.kts && echo "gradle"
569
+ ```
570
+
571
+ **Maven — check if pitest-maven already configured:**
572
+
573
+ ```bash
574
+ grep -q 'pitest-maven' pom.xml 2>/dev/null && echo "configured" || echo "not configured"
575
+ ```
576
+
577
+ If not configured, add the pitest-maven plugin to `pom.xml`. Find the
578
+ `<build><plugins>` section and insert:
579
+
580
+ ```xml
581
+ <plugin>
582
+ <groupId>org.pitest</groupId>
583
+ <artifactId>pitest-maven</artifactId>
584
+ <version>1.17.4</version>
585
+ <configuration>
586
+ <outputFormats>
587
+ <param>XML</param>
588
+ </outputFormats>
589
+ <timestampedReports>false</timestampedReports>
590
+ </configuration>
591
+ </plugin>
592
+ ```
593
+
594
+ Tell the user: "Added pitest-maven plugin to `pom.xml`. Run
595
+ `mvn pitest:mutationCoverage` to verify."
596
+
597
+ **Gradle — check if pitest plugin already applied:**
598
+
599
+ ```bash
600
+ grep -q 'pitest' build.gradle 2>/dev/null || grep -q 'pitest' build.gradle.kts 2>/dev/null \
601
+ && echo "configured" || echo "not configured"
602
+ ```
603
+
604
+ If not configured, tell the user to add the following to `build.gradle` or
605
+ `build.gradle.kts` manually (Gradle plugins cannot be added programmatically):
606
+
607
+ For `build.gradle`:
608
+
609
+ ```groovy
610
+ plugins {
611
+ id 'info.solidsoft.pitest' version '1.15.0'
612
+ }
613
+
614
+ pitest {
615
+ outputFormats = ['XML']
616
+ timestampedReports = false
617
+ }
618
+ ```
619
+
620
+ For `build.gradle.kts`:
621
+
622
+ ```kotlin
623
+ plugins {
624
+ id("info.solidsoft.pitest") version "1.15.0"
625
+ }
626
+
627
+ configure<com.info.solidsoft.pitest.PitestPluginExtension> {
628
+ outputFormats.set(setOf("XML"))
629
+ timestampedReports.set(false)
630
+ }
631
+ ```
632
+
633
+ **Verify (Maven only — Gradle requires manual add):**
634
+
635
+ ```bash
636
+ mvn pitest:mutationCoverage -DtimestampedReports=false -DoutputFormats=XML --help 2>&1 | head -5
637
+ ```
638
+
639
+ ---
640
+
641
+ #### C# / .NET — Stryker.NET
642
+
643
+ **Stack gate (first step — hard precondition):** if `csharp` is not in the
644
+ Step 6 helper's `sections`, return immediately. Do **not** run the
645
+ prerequisites probe below (no `command -v dotnet`, no `dotnet tool list`).
646
+ Only proceed when `csharp` is in `sections`.
647
+
648
+ **Prerequisites check:**
649
+
650
+ ```bash
651
+ command -v dotnet && dotnet --version
652
+ ```
653
+
654
+ If `dotnet` is not found, tell the user:
655
+ ".NET SDK is required for Stryker.NET. Install it from <https://dotnet.microsoft.com>
656
+ and re-run `/setup`."
657
+
658
+ **Check if dotnet-stryker is already installed as a project-local tool:**
659
+
660
+ ```bash
661
+ dotnet tool list --local 2>/dev/null | grep stryker
662
+ ```
663
+
664
+ Only the **local** (project-manifest) install satisfies this check. A
665
+ global `dotnet tool install --global dotnet-stryker` on this machine does
666
+ not — it doesn't propagate to teammates who clone the repo and run
667
+ `dotnet tool restore`, so it must never substitute for the local manifest
668
+ entry (issue #937).
669
+
670
+ **If not installed locally, install as a local tool:**
671
+
672
+ ```bash
673
+ # If the file doesn't exist, create the tool manifest
674
+ test -f .config/dotnet-tools.json || dotnet new tool-manifest
675
+
676
+ # Install dotnet-stryker as a local tool, tracked in .config/dotnet-tools.json
677
+ dotnet tool install dotnet-stryker
678
+ ```
679
+
680
+ If a global install is also detected, mention it informationally in the
681
+ summary (e.g. "also found globally installed") — it's harmless, just not a
682
+ substitute for the local manifest entry above.
683
+
684
+ **Verify:**
685
+
686
+ ```bash
687
+ dotnet stryker --version 2>/dev/null || dotnet tool run dotnet-stryker --version
688
+ ```
689
+
690
+ ---
691
+
692
+ #### Python — mutmut
693
+
694
+ **Stack gate (first step — hard precondition):** if `python` is not in the
695
+ Step 6 helper's `sections`, return immediately. Do **not** run the
696
+ prerequisites probe below (no `command -v mutmut`, no `pip show mutmut`).
697
+ Only proceed when `python` is in `sections`.
698
+
699
+ **Prerequisites check:**
700
+
701
+ ```bash
702
+ command -v python3 && python3 --version
703
+ python3 -m pip --version
704
+ ```
705
+
706
+ If `python3` or `pip` is not found, tell the user: "Python 3 with pip is
707
+ required for mutmut. Install it from <https://www.python.org> and re-run
708
+ `/setup`."
709
+
710
+ **Check if mutmut is already installed:**
711
+
712
+ ```bash
713
+ mutmut version 2>/dev/null || python3 -m mutmut version 2>/dev/null
714
+ ```
715
+
716
+ Use the `version` **subcommand**, not `--version`. mutmut 2.x — the range this
717
+ step pins — has no `--version` flag and exits 2 on it, so a `--version` probe
718
+ reports "not installed" for a perfectly good install and this step reinstalls
719
+ on every run.
720
+
721
+ **If not installed, install it — isolated, never `--user` or system-wide** (that
722
+ puts mutmut in a location whose `PATH` presence depends on shell config, the
723
+ silent-failure trap this step exists to avoid). **Pin `mutmut<3`** — mutmut 3.x
724
+ ships an incompatible config/CLI contract (`source_paths` in a `[mutmut]`
725
+ setup.cfg section, no `--paths-to-mutate` flag) that the shipped adapter
726
+ (`hooks/mutation_adapters/mutmut.py`) does not speak.
727
+
728
+ **Prefer `uv`, because `pip` cannot build this pin on a current toolchain.**
729
+ mutmut 2.x depends on `glob2` 0.7, whose `setup.py` uses `install_layout` and
730
+ fails against setuptools >= 60 with `AttributeError: install_layout`, ending in
731
+ `Could not build wheels for mutmut, glob2`. That is not an edge case — it is
732
+ every machine with a modern setuptools. uv supplies a compatible setuptools
733
+ inside its own build isolation and succeeds where pip cannot:
734
+
735
+ ```bash
736
+ uv tool install "mutmut<3"
737
+ ```
738
+
739
+ uv installs the console script into an isolated environment and puts `mutmut`
740
+ on `PATH`, which is exactly what the adapter looks for: `_mutmut_argv()` in
741
+ `hooks/mutation_adapters/mutmut.py` resolves `shutil.which("mutmut")` first and
742
+ only falls back to `python3 -m mutmut`.
743
+
744
+ If `uv` is unavailable, fall back to pip **inside an activated virtualenv**
745
+ (never `--user`), accepting that it only succeeds on setuptools < 60:
746
+
747
+ ```bash
748
+ python3 -m pip install "mutmut<3"
749
+ ```
750
+
751
+ If the project declares dev dependencies in `pyproject.toml`
752
+ (`[project.optional-dependencies]` / `[tool.poetry.group.dev.dependencies]`),
753
+ prefer adding `mutmut<3` there and installing via the project's existing
754
+ dev-dependency flow instead of a bare `pip install`.
755
+
756
+ **Verify:**
757
+
758
+ ```bash
759
+ mutmut version 2>/dev/null || python3 -m mutmut version
760
+ ```
761
+
762
+ ---
763
+
764
+ ### 7. Select agent templates
765
+
766
+ Based on detected stack, select applicable templates from `templates/agents/`:
767
+
768
+ | Template | Condition |
769
+ | ---------- | ----------- |
770
+ | `ts-enforcer` | `tsconfig.json` exists or TypeScript in deps |
771
+ | `esm-enforcer` | Any JS/TS project (always-on) |
772
+ | ~~`functional-patterns`~~ | ~~Any JS/TS project~~ — **deprecated**, superseded by `js-fp-review` agent |
773
+ | `react-testing` | `react` or `react-dom` in deps |
774
+ | `front-end-testing` | Any frontend framework (React, Vue, Svelte, Angular) |
775
+ | `twelve-factor-audit` | Has Dockerfile, server entry point, or cloud config |
776
+ | `python-quality` | Python stack detected |
777
+ | `go-quality` | Go stack detected |
778
+ | `csharp-quality` | C#/.NET stack detected |
779
+ | `angular-testing` | `@angular/core` in deps |
780
+
781
+ Present the list to the user and ask for confirmation before scaffolding.
782
+ **Under `--yes`, activate the selected templates without prompting** and list
783
+ them in the Step 12 report.
784
+
785
+ ### 8. Generate project-level CLAUDE.md
786
+
787
+ If `.claude/CLAUDE.md` does not already exist in the target project, generate one containing:
788
+
789
+ - Project name and detected stack summary
790
+ - Discovered conventions (formatter, linter, test runner)
791
+ - References to activated agent templates
792
+ - Build/test/lint commands detected from `package.json` scripts, `Makefile`, etc.
793
+
794
+ If `.claude/CLAUDE.md` already exists, ask whether to merge or skip. **Under
795
+ `--yes`, take the skip branch** — never overwrite existing project config
796
+ (orchestrator constraint 3) — and note `CLAUDE.md exists — left unchanged` in
797
+ the Step 12 report. This note describes only Step 8's own generate-or-skip
798
+ decision — Step 8a runs independently right after and may still append to
799
+ this same file, so "left unchanged" here and a `concise-preference-added`
800
+ outcome from Step 8a are not a contradiction in the Step 12 report.
801
+
802
+ ### 8a. Ask about concise-response preference
803
+
804
+ **Check first, before prompting anyone.** If the marker is already present
805
+ in `.claude/CLAUDE.md`, the preference is already in place — do not ask
806
+ the operator at all, under any flag combination:
807
+
808
+ ```bash
809
+ MARKER="<!-- dev-team: concise-response preference v1 -->"
810
+ grep -qF "$MARKER" .claude/CLAUDE.md 2>/dev/null && echo "concise-preference-already-covered" || echo "concise-preference-not-yet-covered"
811
+ ```
812
+
813
+ If this reports `concise-preference-already-covered`, record that outcome
814
+ for the Step 12 report and skip the rest of this step entirely — no
815
+ prompt, no `--yes`/`--dry-run` branching, nothing else to do. Only when it
816
+ reports `concise-preference-not-yet-covered` does the rest of this step
817
+ run.
818
+
819
+ Ask the operator: "Would you like Claude to give concise responses by default in this repo? This appends a block to the project's committed `.claude/CLAUDE.md`, so it becomes a shared convention for every contributor, not just you." **Under `--yes`, skip this prompt entirely** — never
820
+ guess a communication-style preference — and note
821
+ `concise-preference-skipped-under-yes` (run /setup without --yes to choose)
822
+ in the Step 12 report. **Under `--dry-run`, report what would be appended
823
+ without writing** (same convention as Step 11's two idempotent blocks).
824
+
825
+ If the operator declines, note `concise-preference-declined` and move on —
826
+ do not write anything.
827
+
828
+ If the operator confirms, idempotently append the block below to the
829
+ project's `CLAUDE.md` (the same file Step 8 generated or left in place —
830
+ `.claude/CLAUDE.md`; this step creates `.claude/` and the file itself if
831
+ Step 8 somehow left them absent). The marker is a dedicated, content-free
832
+ comment — not a substring of the prose — so a future wording tweak to the
833
+ block below can never desync it from the idempotency check (the hazard
834
+ Step 11's own `.mcp.json` marker note, below, already calls out for its own
835
+ pair of blocks). Both `.claude` and `.claude/CLAUDE.md` are checked for
836
+ symlinks before any write, since a symlinked parent directory is an
837
+ equally valid escape route as a symlinked file:
838
+
839
+ ```bash
840
+ MARKER="<!-- dev-team: concise-response preference v1 -->"
841
+ if [ -L .claude ] || [ -L .claude/CLAUDE.md ]; then
842
+ echo "concise-preference-skipped-symlink"
843
+ else
844
+ mkdir -p .claude
845
+ touch .claude/CLAUDE.md
846
+ if ! grep -qF "$MARKER" .claude/CLAUDE.md; then
847
+ { printf '\n%s\n' "$MARKER"; cat <<'CONCISE_BLOCK'
848
+ ## General
849
+ Unless asked to behave otherwise, always give concise responses and sacrifice grammar for the sake of concision. Ask clarifying questions when needed and offer your best guess at available interpretations/answers for those questions when possible.
850
+
851
+ ### Be RUTHLESSLY concise — this is the rule I break most often
852
+ Default to a few sentences. If the answer is "yes", say "yes" and stop.
853
+
854
+ - **Answer the question asked. Nothing else.** No adjacent findings, no "while I was looking I noticed", no caveats I didn't ask for. Sit on it until I ask.
855
+ - **One thing at a time.** Never hand me a numbered list of 3+ considerations, options, or trade-offs unless I asked for options. Pick one, recommend it, move on.
856
+ - **No teaching.** Skip the mechanism, the background, the "why this matters". State the conclusion. I'll ask why if I care.
857
+ - **No tables, no headers, no bold-label paragraphs** for a simple answer. Prose or a couple of lines.
858
+ - **Cut every parenthetical, every "worth noting", every "the real finding is".**
859
+ - Corrections: one sentence, no post-mortem.
860
+
861
+ Length is the tell: if a reply is over ~10 lines and I didn't ask for depth, it's wrong. Detail I have to skim to find the answer is worse than no answer.
862
+ CONCISE_BLOCK
863
+ } >> .claude/CLAUDE.md && echo "concise-preference-added" || echo "concise-preference-write-failed"
864
+ else
865
+ echo "concise-preference-already-covered"
866
+ fi
867
+ fi
868
+ ```
869
+
870
+ This always appends a fresh, self-contained `## General` heading rather
871
+ than trying to detect and merge into a pre-existing one — a prior version
872
+ of this step attempted that merge and introduced two bugs of its own (an
873
+ orphaned sub-heading when the file's last `##` section wasn't `General`,
874
+ and a `^## General$` anchor that silently missed CRLF line endings on
875
+ Windows). A file ending up with two `## General` headings is a cosmetic,
876
+ rare edge case; a script that silently corrupts document structure on a
877
+ supported platform is not an acceptable trade for avoiding it.
878
+
879
+ Record the outcome — `concise-preference-declined` /
880
+ `concise-preference-added` / `concise-preference-already-covered` /
881
+ `concise-preference-skipped-under-yes` / `concise-preference-skipped-symlink`
882
+ / `concise-preference-write-failed` — for the Step 12 report, using these
883
+ exact tokens. `already-covered` has two possible sources — usually the
884
+ pre-check above (the normal path, before any prompt), or, on the rare
885
+ race where the file changes between the pre-check and confirmation, the
886
+ append script's own internal re-check — either way the token is the
887
+ same. The other three the append script can reach (`added` /
888
+ `skipped-symlink` / `write-failed`) are echoed verbatim from its own
889
+ output — `write-failed` covers a `mkdir`/`touch`/append that fails (e.g.
890
+ `.claude` exists as a non-directory, or the tree is read-only), so a
891
+ failed write is never misreported as `added`; the remaining two
892
+ (`declined` / `skipped-under-yes`) are recorded directly from the prose
893
+ branches below the pre-check,
894
+ since the script never runs on those paths.
895
+
896
+ ### 9. Generate PostToolUse formatting hook
897
+
898
+ Wire a PostToolUse hook entry for the project's `.claude/settings.json` that
899
+ runs the formatter for the detected stack, mapped by extension (Node/TS →
900
+ prettier + eslint, Python → ruff, Go → gofmt, Rust → rustfmt, Ruby →
901
+ rubocop, Java/Kotlin → google-java-format/ktlint, C# → dotnet format). The
902
+ tool itself is `/project-init`'s responsibility to install — since Step 4
903
+ already ran it, the formatter should be present. Only if a formatter is
904
+ still missing (check e.g. `npx prettier --version`, `ruff --version`), warn
905
+ the user and re-point them at `/project-init` rather than installing it here.
906
+
907
+ ### 9b. Configure harness autocompact (#2177)
908
+
909
+ Replaces the retired context-ceiling hook: the harness compacts the
910
+ conversation at a chosen percentage of its window. Merge the env var into the
911
+ project's `.claude/settings.json` — never overwrite the file:
912
+
913
+ ```bash
914
+ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/set_autocompact_env.py" \
915
+ --project-dir "$PWD" [--yes] [--autocompact-pct N | --no-autocompact]
916
+ ```
917
+
918
+ Forward `--yes` when `/setup` got it, and `--autocompact-pct`/`--no-autocompact`
919
+ when given. The script owns all prompt and `--yes` behavior: it writes
920
+ `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` (default `40`) into the `env` block, keeps an
921
+ existing valid value unless `--autocompact-pct` is passed, and aborts without
922
+ touching the file when it is malformed or a symlink (report the stderr line
923
+ and continue with the next step). The harness can only **lower** its
924
+ threshold, so values above its default (~83%) have no effect. The script only
925
+ ever writes the project's `settings.json`; when it warns that a process-env or
926
+ `settings.local.json` entry takes precedence, relay that warning verbatim. Under
927
+ `--dry-run`, report what would be written and skip the script. Report line:
928
+ `Autocompact: <value>% (set | kept | replaced | skipped)`.
929
+
930
+ ### 10. Generate /pr command
931
+
932
+ Create a project-specific `skills/pr/SKILL.md` if one doesn't exist, referencing the project's test/lint/typecheck commands.
933
+
934
+ ### 11. Ensure `.gitignore` covers dev-team runtime artifacts
935
+
936
+ **Downstream projects only** — skip this step entirely when Step 2 detected
937
+ `in-repo` (the plugin-dev repo curates its own `.gitignore`, and it tracks
938
+ deliverables such as `.claude/memory/decisions.md` and bare `memory/` eval
939
+ fixtures that this blanket ignore would wrongly hide). One carve-out: the `.mcp.json`
940
+ standing check `project-init`'s Repowise sub-section runs (#1416) is
941
+ unconditional and reaches in-repo too, via this skill's own Step 4 — that one
942
+ `.gitignore` entry lands regardless of Step 2's result. See the `.mcp.json`
943
+ paragraph below.
944
+
945
+ `/test-improve`, `/build`, and the review workflows write per-run resume
946
+ state, progress bookkeeping, and metrics into `.claude/memory/`,
947
+ `.claude/metrics/`, and `.claude/plans/`; reports land in
948
+ `.dev-team-reports/` (the `.claude/`-scoped artifact migration and
949
+ reports-domain consolidation, #1406). `/code-review` additionally writes a
950
+ `.pr-review-passed` gate file to `.claude/memory/` (already covered by the
951
+ `.claude/memory/` line below), consumed and deleted by `hooks/pre_pr_review.py`
952
+ on the next matching `gh pr create` (#1886) — but left behind whenever that
953
+ PR is never opened (branch content changed since review, or
954
+ `PR_GATE_BYPASS_REASON`), cluttering `git status` and risking capture by a
955
+ stray `git add -A` (issue #1377). These
956
+ are regeneratable runtime artifacts, not deliverables — but `/build` commits
957
+ the working tree per completed step, so without an ignore rule they land in
958
+ the project's history (issue #1101).
959
+
960
+ In a downstream project, `.claude/memory/`, `.claude/metrics/`, and
961
+ `.claude/plans/` are exclusively dev-team runtime state, so each whole
962
+ folder is safe to ignore. `.dev-team-reports/` is **not** wholly safe to
963
+ ignore: `/test-improve` git-tracks a `<slug>/data/` sibling directory
964
+ under it (issue #1412) so its report is a pure function of tracked data and
965
+ regeneratable from a fresh checkout, so the rule anchors a deny-all and
966
+ re-includes that one tracked exception instead of ignoring the whole
967
+ folder — the identical shape this repo's own `.gitignore` and
968
+ `/project-init`'s JS-scaffold template use. The legacy bare `memory/`,
969
+ `reports/`, `metrics/`, `plans/` lines are appended alongside as a safety
970
+ net for any pre-#1406 content still landing at the old paths.
971
+ Idempotently append the block (create `.gitignore` if absent; do nothing if
972
+ the marker is already present):
973
+
974
+ ```bash
975
+ MARKER="# dev-team workflow runtime artifacts (.claude/-scoped + .dev-team-reports/, #1406) v2"
976
+ if ! grep -qF "$MARKER" .gitignore 2>/dev/null; then
977
+ # Self-heal: a pre-#1412 run of this block (under the v1 marker) may have
978
+ # already appended the superseded blanket `.dev-team-reports/` line. Strip
979
+ # it before appending the anchored replacement below — git never
980
+ # re-includes a path whose parent directory is itself excluded, so leaving
981
+ # the old blanket line in place would silently shadow the new exception.
982
+ if [ -f .gitignore ]; then
983
+ grep -vxF '.dev-team-reports/' .gitignore > .gitignore.tmp && mv .gitignore.tmp .gitignore
984
+ fi
985
+ printf '\n%s\n%s\n' \
986
+ "$MARKER (regeneratable; not deliverables — issues #1101, #1377, #1406, #1412)" \
987
+ ".claude/memory/
988
+ .claude/metrics/
989
+ .claude/plans/
990
+ /.dev-team-reports/*
991
+ !/.dev-team-reports/test-improve/
992
+ memory/
993
+ reports/
994
+ metrics/
995
+ plans/
996
+ .pr-review-passed" >> .gitignore
997
+ echo "gitignore-updated"
998
+ else
999
+ echo "gitignore-already-covered"
1000
+ fi
1001
+ ```
1002
+
1003
+ `DEV_TEAM_TASK_METRICS` and `DEV_TEAM_REPORTS` do not override a directory
1004
+ path in code today — `DEV_TEAM_TASK_METRICS=off` is an on/off opt-out for the
1005
+ task-log writer only, and `DEV_TEAM_REPORTS` is not an environment variable
1006
+ at all (it names the legacy `DEV_TEAM_REPORTS/` directory folded into
1007
+ `.dev-team-reports/` above). There is no "relocated path" case to special-case
1008
+ here. Record whether the block was added for the Step 12 report. Under
1009
+ `--dry-run`, report what would be appended without writing.
1010
+
1011
+ **`.mcp.json` machine-specific-path hygiene (issues #1376, #1416).**
1012
+ Separately — still downstream-projects-only, same Step 2 `in-repo` skip — a
1013
+ project's `.mcp.json` (written by `index-codebase`, hand-registered MCP
1014
+ servers, or any other means) commonly bakes in the absolute filesystem path
1015
+ of the machine that wrote it (e.g. a CodeGraph server's `args` array). If
1016
+ committed, every other clone inherits a path that doesn't exist on their
1017
+ machine and the server fails to start. Idempotently append its own block
1018
+ (independent marker, so this check runs and self-heals even on a repo where
1019
+ the runtime-artifacts block above was already added by an older `/setup`):
1020
+
1021
+ ```bash
1022
+ MCP_MARKER="# dev-team hygiene — machine-specific MCP config"
1023
+ if ! grep -qF "$MCP_MARKER" .gitignore 2>/dev/null; then
1024
+ printf '\n%s\n%s\n' \
1025
+ "$MCP_MARKER (absolute-path pollution — issue #1376)" \
1026
+ ".mcp.json" >> .gitignore
1027
+ echo "mcp-json-gitignore-updated"
1028
+ else
1029
+ echo "mcp-json-gitignore-already-covered"
1030
+ fi
1031
+ ```
1032
+
1033
+ This exact marker (including the em dash) is also emitted, unconditionally
1034
+ and regardless of in-repo/downstream, by the `.mcp.json` machine-specific-path
1035
+ hygiene standing check in `project-init`'s Repowise sub-section (issue #1416
1036
+ — Repowise's own install path is the more common source of a project's
1037
+ `.mcp.json`, and that check no longer waits for this downstream-only Step 11
1038
+ pass to cover it). The marker prefix (everything up to and including
1039
+ `machine-specific MCP config`) must stay byte-identical between the two
1040
+ blocks — `grep -qF` matches that prefix only, so the trailing issue-number
1041
+ suffix may differ, but changing the prefix itself in only one place breaks
1042
+ idempotency. This block remains a downstream-only, defense-in-depth backstop
1043
+ for `.mcp.json` files written by means other than Repowise (e.g.
1044
+ `index-codebase`, hand-registered MCP servers).
1045
+
1046
+ This ignores `.mcp.json` going forward regardless of whether it currently
1047
+ exists — the same "detect it whenever we write or see it" contract issue
1048
+ #1376 asks for. If `.mcp.json` is already tracked by git (`git ls-files
1049
+ --error-unmatch .mcp.json` exits 0), tell the operator to `git rm --cached
1050
+ .mcp.json` themselves rather than doing it automatically — untracking is a
1051
+ history-visible action `/setup` should not take silently. Record whether the
1052
+ block was added for the Step 12 report. Under `--dry-run`, report what would
1053
+ be appended without writing. Reached via `/setup` (Step 4 runs `/project-init`
1054
+ before this step), this block normally reports already-covered, since
1055
+ `/project-init`'s own standing check already ran first — the "added" outcome
1056
+ is what a direct, standalone `/project-init` invocation reports.
1057
+
1058
+ ### 12. Report
1059
+
1060
+ Display a summary of everything installed and created:
1061
+
1062
+ ```
1063
+ ## Setup Complete
1064
+
1065
+ **Stack**: TypeScript, React, Vitest
1066
+ **Package manager**: pnpm
1067
+
1068
+ ### Prerequisites
1069
+ - jq: ✓ <version>
1070
+ - python3: ✓ <version>
1071
+ - Mutation testing: ✓ <tool> <version> [or: ✗ skipped | ✗ failed]
1072
+
1073
+ Report a mutation-testing line **only for sections actually in scope** — the
1074
+ `sections` the Step 6 helper returned (Stryker for `js`, pitest for `java`,
1075
+ Stryker.NET for `csharp`, mutmut for `python`). Never list a tool for a
1076
+ stack that was not detected. When the helper's `note` was set (a detected
1077
+ stack with no mutation tool wired in, e.g. Ruby or Elixir), report that one
1078
+ line verbatim — `no mutation tooling for detected stack (<stacks>)` — and no
1079
+ tool line.
1080
+
1081
+ ### Coverage baseline readiness (JS/TS only)
1082
+ - ✓ json-summary + coverage scope present [ready + meaningful]
1083
+ - ✓ patched (added json-summary reporter to <config>) [was not ready, now fixed]
1084
+ - ✓ installed @vitest/coverage-v8 [Vitest provider was missing, now present]
1085
+ - ⚠ manual action needed — <reporter_hint> [JS/TS config the operator declined or must edit]
1086
+ - ⚠ Vitest coverage provider missing — <provider_hint> [not ready]
1087
+ - ⚠ coverage scope unset — baseline will be inflated (<scope_hint>) [not meaningful]
1088
+
1089
+ ### Code-intelligence indexes (project-init Step 4c — all-or-none group)
1090
+ - CodeGraph: ✓ installed + `.codegraph/` built (keyless) [or: ✗ declined | ✗ failed]
1091
+ - Repowise: ✓ installed + `.repowise/` indexed (keyless) [or: ✗ declined | ✗ failed]
1092
+ - `.mcp.json` gitignore: ✓ added [or: ✓ already covered | ⚠ tracked by git — run `git rm --cached .mcp.json` (#1416)]
1093
+ - Graphify: ✓ `graphify-out/` built (keyless AST; enrichment key-gated) [or: ✗ declined | ✗ failed]
1094
+ - settings.json guard: ✓ clean [or: ✓ relocated N machine-specific graphify hook(s) to settings.local.json (#1367)]
1095
+
1096
+ The separate "run index-codebase first" step is no longer required — accepting
1097
+ the group installs and builds all three indexes in the same run. The
1098
+ settings.json guard line reports project-init's standing check (#1367) — it
1099
+ runs on every pass, including one where Graphify install itself is skipped
1100
+ because it's already present, so a repo carrying a machine-specific path from
1101
+ an install predating this guard gets self-healed the next time `/setup` runs.
1102
+ The `.mcp.json` gitignore line reports project-init's own standing check
1103
+ (#1416) the same way — it runs on every pass, in-repo included, regardless of
1104
+ Repowise's own install/decline state for that run.
1105
+
1106
+ ### Created
1107
+ - `.claude/project-stack.json` — stack detection results
1108
+ - `.claude/CLAUDE.md` — project conventions [Step 8a concise-response preference, independent of this line's created/left-unchanged status: concise-preference-added | concise-preference-already-covered | concise-preference-declined | concise-preference-skipped-under-yes | concise-preference-skipped-symlink | concise-preference-write-failed]
1109
+ - `.claude/settings.json` — PostToolUse formatting hook (prettier + eslint); `env.CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` (Step 9b)
1110
+ - `.gitignore` — dev-team runtime artifacts (.claude/memory/, .claude/metrics/, .claude/plans/, .dev-team-reports/, memory/, reports/, metrics/, plans/, .pr-review-passed) [downstream only; omit if already covered] plus `.mcp.json` machine-specific-path hygiene (#1376, #1416) [runs in-repo too, via project-init's Repowise standing check; omit if already covered]
1111
+ - Activated templates: ts-enforcer, esm-enforcer, react-testing
1112
+
1113
+ ### Recommendations
1114
+ - Add `"type": "module"` to package.json
1115
+ - 3 files using `require()` — consider migrating to ES imports
1116
+ ```
1117
+
1118
+ If any prerequisite step failed, add a "Next steps" section with the
1119
+ specific manual actions needed (mirroring the per-step failure messages
1120
+ above).
1121
+
1122
+ If `--dry-run` was specified, prefix the report with "**DRY RUN** — no files were written and nothing was installed." and skip all writes/installs. If `--yes` was also passed, add "`--yes` ignored under `--dry-run`" to that prefix.