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,200 @@
1
+ {
2
+ "skill_name": "project-init",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "I need a new Node.js project for a CLI tool that processes CSV files. Just set up the project structure and tooling, I'll add the CSV logic myself.",
7
+ "expected_output": "A scaffolded JS project with package.json (type: module), eslint.config.js with functional rules, prettier.config.js, .editorconfig, .gitignore, vitest.config.js, and a starter src/index.js + src/index.test.js. No Playwright since this is a backend project. All lint/format/test commands should pass.",
8
+ "files": [],
9
+ "expectations": [
10
+ "package.json has \"type\": \"module\"",
11
+ "eslint.config.js exists and uses flat config format (export default [])",
12
+ "ESLint config bans ClassDeclaration and ClassExpression",
13
+ "prettier.config.js exists with singleQuote: true",
14
+ ".editorconfig exists with indent_size = 2",
15
+ ".gitignore includes node_modules and .env",
16
+ "vitest.config.js exists",
17
+ "No playwright.config.js (backend project)",
18
+ "src/index.js exports a pure function",
19
+ "src/index.test.js imports from src/index.js and has passing tests",
20
+ "npm run lint succeeds",
21
+ "npm test succeeds",
22
+ "The skill presented defaults and asked for confirmation before scaffolding"
23
+ ]
24
+ },
25
+ {
26
+ "id": 2,
27
+ "prompt": "Set up a new React project for a dashboard app. I want the full tooling — linting, formatting, testing, the works.",
28
+ "expected_output": "A scaffolded JS project with all standard configs plus Playwright for e2e testing. Should include playwright.config.js and an e2e/ directory. The package.json should have a test:e2e script.",
29
+ "files": [],
30
+ "expectations": [
31
+ "package.json has \"type\": \"module\"",
32
+ "playwright.config.js exists (frontend project detected)",
33
+ "e2e/ directory exists with at least one spec file",
34
+ "package.json scripts include test:e2e",
35
+ "eslint.config.js bans classes",
36
+ ".gitignore includes .env",
37
+ "vitest.config.js exists",
38
+ "The skill presented defaults and asked for confirmation before scaffolding"
39
+ ]
40
+ },
41
+ {
42
+ "id": 3,
43
+ "prompt": "Init a JS project but I want tabs instead of spaces, semicolons on, and 4-space tab width. Everything else can be default.",
44
+ "expected_output": "Standard scaffold but with customized formatting: prettier uses tabs, semicolons, tabWidth 4. EditorConfig uses tab indent. ESLint still has functional rules.",
45
+ "files": [],
46
+ "expectations": [
47
+ "prettier.config.js has useTabs: true",
48
+ "prettier.config.js has semi: true",
49
+ "prettier.config.js has tabWidth: 4",
50
+ ".editorconfig has indent_style = tab",
51
+ ".editorconfig has indent_size = 4 or tab_width = 4",
52
+ "eslint.config.js still bans ClassDeclaration",
53
+ "package.json has \"type\": \"module\"",
54
+ "npm run lint succeeds",
55
+ "npm test succeeds"
56
+ ]
57
+ },
58
+ {
59
+ "id": 4,
60
+ "prompt": "Get this repo ready for the plugin.",
61
+ "expected_output": "Python detected from pyproject.toml + .py sources. The three-column plan shows ruff and mypy (and pytest, since no test runner is present) under 'missing and will add'; after confirmation they are added to the project's dev-dependency mechanism, nothing user-level or global. Post-install probes (command -v ruff / command -v mypy) reported.",
62
+ "files": [
63
+ { "path": "pyproject.toml", "contents": "[project]\nname = \"csvkit-lite\"\nversion = \"0.1.0\"\n" },
64
+ { "path": "src/app.py", "contents": "def add(a, b):\n return a + b\n" }
65
+ ],
66
+ "expectations": [
67
+ "Detected stack is Python only",
68
+ "A three-column plan (found and keeping / missing and will add / found but can't participate) is presented before any write or install",
69
+ "ruff, mypy, and pytest appear under 'missing and will add'",
70
+ "The install lands in the project's dev-dependency mechanism (pyproject.toml dev group or requirements-dev.txt)",
71
+ "No pip install --user, pipx, or other user-level/global install is run",
72
+ "pyproject.toml's existing [project] section is not rewritten",
73
+ "The skill ends by running command -v ruff and command -v mypy and reporting per-lane status"
74
+ ]
75
+ },
76
+ {
77
+ "id": 5,
78
+ "prompt": "Set up my project's toolchain.",
79
+ "expected_output": "C# detected from the .csproj. Nothing is installed — the skill verifies the .NET SDK is present (honoring the global.json pin) and that dotnet format responds, then reports the lane bound to the SDK-builtin tools.",
80
+ "files": [
81
+ { "path": "Api.csproj", "contents": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <TargetFramework>net8.0</TargetFramework>\n </PropertyGroup>\n</Project>" },
82
+ { "path": "global.json", "contents": "{ \"sdk\": { \"version\": \"8.0.100\" } }" },
83
+ { "path": "Program.cs", "contents": "System.Console.WriteLine(\"hi\");\n" }
84
+ ],
85
+ "expectations": [
86
+ "Detected stack is C# only",
87
+ "The plan states there is nothing to install for C#",
88
+ "The global.json SDK pin is honored, not overwritten",
89
+ "dotnet format --version is verified to respond",
90
+ "The probe command -v dotnet is run and per-lane status reported"
91
+ ]
92
+ },
93
+ {
94
+ "id": 6,
95
+ "prompt": "Install the linters for this repo.",
96
+ "expected_output": "Java detected from pom.xml + .java sources. After confirmation the skill verifies a JDK, runs the plugin's pinned-PMD installer into repo-local .pmd/, and adds .pmd/ to .gitignore. The user never invokes the installer script by hand.",
97
+ "files": [
98
+ { "path": "pom.xml", "contents": "<project><modelVersion>4.0.0</modelVersion><groupId>x</groupId><artifactId>demo</artifactId><version>1.0</version></project>" },
99
+ { "path": "src/main/java/App.java", "contents": "public class App { public static void main(String[] a) {} }" }
100
+ ],
101
+ "expectations": [
102
+ "Detected stack is Java only",
103
+ "The plan shows PMD under 'missing and will add' before anything runs",
104
+ "The pinned-PMD installer script is run for the user (no manual script invocation asked of them)",
105
+ "PMD lands in repo-local .pmd/, and .pmd/ is added to .gitignore",
106
+ "No user-level or global install occurs",
107
+ "The probe checks .pmd/pmd-bin-*/bin/pmd first, then command -v pmd, and reports status"
108
+ ]
109
+ },
110
+ {
111
+ "id": 7,
112
+ "prompt": "Get this repo ready for the dev-team toolchain.",
113
+ "expected_output": "Mixed Python + TypeScript repo: both lanes are detected and both appear in one three-column plan; each lane's missing tools are installed repo-level after a single confirmation.",
114
+ "files": [
115
+ { "path": "pyproject.toml", "contents": "[project]\nname = \"mixed\"\nversion = \"0.1.0\"\n" },
116
+ { "path": "etl/main.py", "contents": "print(\"etl\")\n" },
117
+ { "path": "tsconfig.json", "contents": "{ \"compilerOptions\": { \"strict\": true } }" },
118
+ { "path": "src/index.ts", "contents": "export const add = (a: number, b: number): number => a + b;\n" },
119
+ { "path": "package.json", "contents": "{ \"name\": \"mixed\", \"private\": true, \"type\": \"module\" }" }
120
+ ],
121
+ "expectations": [
122
+ "Both Python and JS/TS lanes are detected (multi-stack setup)",
123
+ "One three-column plan covers both lanes before any install",
124
+ "Python: ruff and mypy under 'missing and will add', installed into the project's dev-dependency mechanism",
125
+ "JS/TS: oxlint under 'missing and will add', installed with npm install --save-dev oxlint",
126
+ "Post-install probes run for both lanes and per-lane status is reported"
127
+ ]
128
+ },
129
+ {
130
+ "id": 8,
131
+ "prompt": "Set up my project's toolchain. (If asked which stack, answer: something else — it's a Rust project.)",
132
+ "expected_output": "The directory has no detectable stack, so the skill asks the user, presenting the four supported stacks plus 'something else'. On 'something else' it explains what's supported and exits gracefully — no files written, nothing installed.",
133
+ "files": [
134
+ { "path": "README.md", "contents": "# my project\n" }
135
+ ],
136
+ "expectations": [
137
+ "The skill asks the user instead of assuming a stack",
138
+ "The four supported stacks (JS/TS, Python, C#, Java) plus 'something else' are offered",
139
+ "On 'something else' the skill explains what's supported",
140
+ "The skill exits without writing any file or installing anything"
141
+ ]
142
+ },
143
+ {
144
+ "id": 9,
145
+ "prompt": "Get this repo ready for the plugin.",
146
+ "expected_output": "Brownfield Python repo already configured with black + flake8: the inventory binds the pair as the autofix slot's provider (bind-don't-replace), so the plan shows them under 'found and keeping' and installs nothing for that slot; only mypy (the empty diagnostic slot) appears under 'missing and will add'.",
147
+ "files": [
148
+ { "path": "pyproject.toml", "contents": "[project]\nname = \"legacy\"\nversion = \"2.3.0\"\n\n[tool.black]\nline-length = 100\n" },
149
+ { "path": ".flake8", "contents": "[flake8]\nmax-line-length = 100\n" },
150
+ { "path": "requirements-dev.txt", "contents": "black==24.4.2\nflake8==7.0.0\npytest==8.2.0\n" },
151
+ { "path": "legacy/core.py", "contents": "def run():\n return 42\n" }
152
+ ],
153
+ "expectations": [
154
+ "black + flake8 are bound as the autofix slot's provider and shown under 'found and keeping' (with the partial-mapping caveat noted)",
155
+ "ruff is NOT installed — the bound pair satisfies the slot",
156
+ "mypy appears under 'missing and will add' (empty diagnostic slot) and is the only install",
157
+ "pytest is not re-added (a test runner is already present)",
158
+ "The install goes into requirements-dev.txt (the mechanism the project already uses)",
159
+ "pyproject.toml's [tool.black] section and .flake8 are left untouched"
160
+ ]
161
+ },
162
+ {
163
+ "id": 10,
164
+ "prompt": "Install the linters for this repo.",
165
+ "expected_output": "Brownfield Python repo with pyright configured: pyright fails the qualification contract (its recognition adapter does not exist yet), so the plan surfaces it under 'found but can't participate' with that reason stated and mypy offered alongside — never silently replaced. Only the 'missing and will add' column installs.",
166
+ "files": [
167
+ { "path": "pyproject.toml", "contents": "[project]\nname = \"typed-app\"\nversion = \"0.5.0\"\n" },
168
+ { "path": "pyrightconfig.json", "contents": "{ \"typeCheckingMode\": \"strict\" }" },
169
+ { "path": "app/main.py", "contents": "def greet(name: str) -> str:\n return f\"hi {name}\"\n" }
170
+ ],
171
+ "expectations": [
172
+ "pyright is listed under 'found but can't participate' with the reason (no recognition adapter yet) stated",
173
+ "mypy is offered alongside as the diagnostic default, not silently swapped in",
174
+ "Only tools in 'missing and will add' are installed",
175
+ "pyrightconfig.json is left untouched",
176
+ "The user confirms the plan before any install runs"
177
+ ]
178
+ },
179
+ {
180
+ "id": 11,
181
+ "prompt": "Set up my project's toolchain.",
182
+ "expected_output": "Mixed brownfield repo with an existing eslint.config.js and pyproject.toml: tools-only mode installs missing dependencies without modifying either file; the plan shows the existing configs under 'found and keeping' and the summary names them as left alone.",
183
+ "files": [
184
+ { "path": "package.json", "contents": "{ \"name\": \"web\", \"private\": true, \"type\": \"module\", \"devDependencies\": { \"eslint\": \"^9.0.0\" } }" },
185
+ { "path": "eslint.config.js", "contents": "export default [{ rules: { 'prefer-const': 'error' } }];\n" },
186
+ { "path": "src/index.js", "contents": "export const id = (x) => x;\n" },
187
+ { "path": "pyproject.toml", "contents": "[project]\nname = \"web-tools\"\nversion = \"1.0.0\"\n\n[tool.ruff]\nline-length = 100\n" },
188
+ { "path": "tools/gen.py", "contents": "print(\"gen\")\n" }
189
+ ],
190
+ "expectations": [
191
+ "Tools-only mode: no scaffold, no config file created or overwritten",
192
+ "eslint.config.js and pyproject.toml appear under 'found and keeping' and are byte-identical afterwards",
193
+ "ESLint binds with demotion noted (slice-boundary granularity) and one info line mentions the fast default (oxlint)",
194
+ "ruff binds from the existing [tool.ruff] config — not reinstalled over",
195
+ "Only genuinely empty slots' defaults are installed, into devDependencies / the project's Python dev mechanism",
196
+ "The summary names the untouched configs explicitly"
197
+ ]
198
+ }
199
+ ]
200
+ }
@@ -0,0 +1,55 @@
1
+ # Capability-tools registry
2
+
3
+ Single source of truth for the **capability tools** that `/project-init`
4
+ installs beyond the four static-analysis lanes (JS/TS, Python, C#, Java).
5
+ These are the CLIs and browsers that other skills and agents depend on. The
6
+ skill's Step 4b reads this table: it runs each tool's **offer-when** signal,
7
+ presents the warranted tools as their own group in the three-column plan,
8
+ installs only the missing + confirmed ones with the **OS-aware install**
9
+ command, and probes them with the **verify** command in Step 5.
10
+
11
+ Detection-gated by design: a tool is only offered when its signal fires, so a
12
+ Python-only repo with no Dockerfile is never asked about the docker scanners.
13
+ Every offer is confirmed before anything installs — same gate as the lanes.
14
+
15
+ ## Install-level honesty
16
+
17
+ The "always repo-level, never user/system" rule of the static-analysis lanes
18
+ applies to **lane tools + Playwright**. The other capability tools are CLIs
19
+ that are user/system-level by nature (`brew`, `pipx`, apt) — there is no
20
+ repo-local install for a general-purpose CLI like `gh` or `semgrep`. So:
21
+
22
+ - **Playwright** is the **repo-level exception among capability tools**: it
23
+ installs as an `npm` devDependency (`@playwright/test`), versioned with the
24
+ project, exactly like a lane tool. Only its Chromium browser download is
25
+ machine-level (a Playwright cache, not a repo file).
26
+ - **semgrep, adr, gh, hadolint, trivy, grype** are **user/system-level**
27
+ CLIs. Install them with the OS package manager (or pipx/user-pip on Linux).
28
+ This is the deliberate, documented exception to "always repo-level".
29
+
30
+ ## Registry
31
+
32
+ | Tool | Skills that need it | Offer-when signal | OS-aware install command | Verify probe |
33
+ | --- | --- | --- | --- | --- |
34
+ | **semgrep** | `/semgrep-analyze`, security-assessment | Any source lane detected (universal SAST) — opt-in, confirmable | macOS: `brew install semgrep`. Linux: `pipx install semgrep` (fallback `python3 -m pip install --user semgrep`). Windows: `pipx install semgrep`. | `semgrep --version` |
35
+ | **Playwright + Chromium** | `/benchmark`, `/browse`, `/browser-testing`, `/performance-benchmark` | Frontend signals in an **existing** project: React/Svelte/Vue/Angular/Next/Nuxt/SvelteKit/Astro deps, or an `e2e/` dir, or a `playwright.config.*` file. (Greenfield JS scaffold installs it separately.) | Repo-level (npm devDependency): `npm i -D @playwright/test && npx playwright install chromium` | `npx --no-install playwright --version` |
36
+ | **adr** (npryce/adr-tools) | `/adr-tools`, adr-author agent | `docs/adr/`, `docs/decisions/`, or existing ADR `*.md` files present | macOS: `brew install adr-tools`. Linux/Windows: `git clone https://github.com/npryce/adr-tools` and put its `src/` on `PATH` (e.g. symlink into `~/.local/bin`). | `adr help` |
37
+ | **gh** (GitHub CLI) | `/issues-from-assessment` and other issue/PR skills | Git repo with a GitHub remote — `git remote -v` shows `github.com` | macOS: `brew install gh`. Linux: official apt repo (`cli.github.com`), or `webi`/binary download. Windows: `winget install GitHub.cli`. | `gh --version` |
38
+ | **hadolint** | `/docker-image-audit` | A `Dockerfile`, `*.dockerfile`, or `compose.y*ml` present | macOS: `brew install hadolint`. Linux/Windows: official release binary from `hadolint/hadolint`. | `hadolint --version` |
39
+ | **trivy** | `/docker-image-audit` | Same docker signal as hadolint | macOS: `brew install trivy`. Linux/Windows: official install script / release binary from `aquasecurity/trivy`. | `trivy --version` |
40
+ | **grype** | `/docker-image-audit` | Same docker signal as hadolint | macOS: `brew install grype`. Linux/Windows: official install script / release binary from `anchore/grype`. | `grype --version` |
41
+ | **codegraph** | code-intelligence (`codegraph_explore` MCP tool, `code-intelligence-nudge` hook) | Universal — opt-in, confirmable, offered on every repo like semgrep | Install/init is a multi-step state machine, not a single command — see Step 4c and [`codegraph-vs-graphify.md`](../../../knowledge/codegraph-vs-graphify.md). Manual install: `https://github.com/colbymchenry/codegraph#installation`. | `command -v codegraph`, `.codegraph/` present |
42
+ | **graphify** | `/graphify` (native skill, this repo's own `.claude/skills/graphify/`), architecture/onboarding questions spanning code + docs | Universal — opt-in, confirmable | `uv tool install graphifyy` (fallback `pipx install graphifyy`, fallback `python3 -m pip install --user graphifyy`), then `graphify install --project` and `graphify hook install` — see Step 4c for the CLAUDE.md corruption guard this install requires. | `graphify --version` |
43
+
44
+ macOS one-liner for the docker scanners: `brew install hadolint trivy grype`.
45
+
46
+ **codegraph and graphify get their own step (4c)**, not just a table row: codegraph's install+init flow is a stateful branch (installed × initialized), and graphify's install writes to the target repo's own `CLAUDE.md` and needs a corruption guard — both too complex for a single table row's install command. See `SKILL.md` Step 4c.
47
+
48
+ ## OS awareness
49
+
50
+ Mirror the OS detection used by `/setup` — `uname -s` → `Darwin`
51
+ (macOS, brew), `Linux` (apt/dnf/yum/pacman, else pipx/user-pip/binary),
52
+ `MINGW*`/`MSYS*` (Windows Git Bash, winget/choco/scoop). WSL reports `Linux`
53
+ and follows the Linux column. When no package manager is detected, print the
54
+ manual install pointer from the table and continue — a missing capability
55
+ tool degrades the dependent skill gracefully; it never fails `/project-init`.
@@ -0,0 +1,221 @@
1
+ # Configuration File Templates
2
+
3
+ Exact contents for each config file created by the project-init skill. Use these as-is unless the user requested customizations at the confirmation gate.
4
+
5
+ ## eslint.config.js
6
+
7
+ ```js
8
+ import js from '@eslint/js'
9
+ import prettier from 'eslint-config-prettier'
10
+
11
+ export default [
12
+ js.configs.recommended,
13
+ prettier,
14
+ {
15
+ rules: {
16
+ // Functional style: no classes
17
+ 'no-restricted-syntax': [
18
+ 'error',
19
+ {
20
+ selector: 'ClassDeclaration',
21
+ message: 'Use functions and closures instead of classes.',
22
+ },
23
+ {
24
+ selector: 'ClassExpression',
25
+ message: 'Use functions and closures instead of classes.',
26
+ },
27
+ {
28
+ selector: 'ThisExpression',
29
+ message: 'Avoid "this" — use closures and explicit parameters instead.',
30
+ },
31
+ ],
32
+
33
+ // Immutability
34
+ 'prefer-const': 'error',
35
+ 'no-var': 'error',
36
+ 'no-param-reassign': 'error',
37
+
38
+ // Clean code
39
+ 'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
40
+ eqeqeq: ['error', 'always'],
41
+ 'no-console': 'warn',
42
+ },
43
+ },
44
+ {
45
+ ignores: ['node_modules/', 'dist/', 'build/', 'coverage/'],
46
+ },
47
+ ]
48
+ ```
49
+
50
+ ## prettier.config.js
51
+
52
+ ```js
53
+ export default {
54
+ semi: false,
55
+ singleQuote: true,
56
+ trailingComma: 'all',
57
+ printWidth: 100,
58
+ tabWidth: 2,
59
+ useTabs: false,
60
+ arrowParens: 'always',
61
+ endOfLine: 'lf',
62
+ }
63
+ ```
64
+
65
+ ## .editorconfig
66
+
67
+ ```ini
68
+ root = true
69
+
70
+ [*]
71
+ indent_style = space
72
+ indent_size = 2
73
+ end_of_line = lf
74
+ charset = utf-8
75
+ trim_trailing_whitespace = true
76
+ insert_final_newline = true
77
+
78
+ [*.md]
79
+ trim_trailing_whitespace = false
80
+ ```
81
+
82
+ ## .gitignore
83
+
84
+ ```
85
+ # Dependencies
86
+ node_modules/
87
+
88
+ # Build output
89
+ dist/
90
+ build/
91
+
92
+ # Test coverage
93
+ coverage/
94
+
95
+ # Environment variables
96
+ .env
97
+ .env.*
98
+ !.env.example
99
+
100
+ # OS files
101
+ .DS_Store
102
+ Thumbs.db
103
+
104
+ # Editor directories
105
+ .idea/
106
+ .vscode/
107
+ *.swp
108
+ *.swo
109
+
110
+ # Logs
111
+ *.log
112
+ npm-debug.log*
113
+
114
+ # dev-team plugin: shared human-invoked report output (/review-agent,
115
+ # /code-review, /triage) — local-only, regenerated per run. Anchored
116
+ # deny-all + re-included tracked exception for /test-improve's
117
+ # git-tracked report data/ sibling directory (issue #1412). The
118
+ # re-include must stay directory-level (test-improve/), not narrowed to
119
+ # e.g. */data/ — git never re-includes a path whose parent directory is
120
+ # itself excluded, so a narrower exception would silently match nothing.
121
+ /.dev-team-reports/*
122
+ !/.dev-team-reports/test-improve/
123
+ ```
124
+
125
+ ## vitest.config.js
126
+
127
+ ```js
128
+ import { defineConfig } from 'vitest/config'
129
+
130
+ export default defineConfig({
131
+ test: {
132
+ include: ['src/**/*.test.js'],
133
+ },
134
+ })
135
+ ```
136
+
137
+ ## playwright.config.js (frontend projects only)
138
+
139
+ ```js
140
+ import { defineConfig } from '@playwright/test'
141
+
142
+ export default defineConfig({
143
+ testDir: './e2e',
144
+ timeout: 30000,
145
+ retries: 0,
146
+ use: {
147
+ headless: true,
148
+ baseURL: 'http://localhost:3000',
149
+ },
150
+ projects: [
151
+ {
152
+ name: 'chromium',
153
+ use: { browserName: 'chromium' },
154
+ },
155
+ ],
156
+ })
157
+ ```
158
+
159
+ ## .husky/pre-commit
160
+
161
+ ```bash
162
+ npx lint-staged
163
+ ```
164
+
165
+ ## .husky/pre-push
166
+
167
+ ```bash
168
+ npm test
169
+ ```
170
+
171
+ Frontend projects append the e2e suite:
172
+
173
+ ```bash
174
+ npm test
175
+ npm run test:e2e
176
+ ```
177
+
178
+ ## src/index.js (starter file)
179
+
180
+ ```js
181
+ /**
182
+ * Add two numbers together.
183
+ *
184
+ * @param {number} a
185
+ * @param {number} b
186
+ * @returns {number} The sum of a and b
187
+ */
188
+ export const add = (a, b) => a + b
189
+ ```
190
+
191
+ ## src/index.test.js (starter test)
192
+
193
+ ```js
194
+ import { describe, it, expect } from 'vitest'
195
+ import { add } from './index.js'
196
+
197
+ describe('add', () => {
198
+ it('adds two positive numbers', () => {
199
+ expect(add(2, 3)).toBe(5)
200
+ })
201
+
202
+ it('handles zero', () => {
203
+ expect(add(0, 5)).toBe(5)
204
+ })
205
+
206
+ it('handles negative numbers', () => {
207
+ expect(add(-1, 1)).toBe(0)
208
+ })
209
+ })
210
+ ```
211
+
212
+ ## e2e/example.spec.js (frontend projects only)
213
+
214
+ ```js
215
+ import { test, expect } from '@playwright/test'
216
+
217
+ test('homepage loads', async ({ page }) => {
218
+ await page.goto('/')
219
+ await expect(page).toHaveTitle(/.+/)
220
+ })
221
+ ```
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: property-based-testing
3
+ description: Generate a runnable property-based test for a target function from its signature/docstring — a round-trip test when an encode/decode pair exists, or an invariant test when the docstring documents a postcondition (e.g. "returns sorted", "is idempotent"). Detects the project's language via project-init's stack detection, uses Hypothesis for Python and fast-check for JavaScript/TypeScript, and recommends running /mutation-testing against the generated suite afterward. Use when the user says "generate a property test", "property-based test this function", "add Hypothesis/fast-check tests", or wants round-trip/invariant coverage for a pure function rather than hand-written example-based tests.
4
+ role: worker
5
+ user-invocable: true
6
+ argument-hint: "<module_path> <function_name>"
7
+ allowed-tools: Read, Write, Bash(python3 "${CLAUDE_PLUGIN_ROOT}/skills/property-based-testing/scripts/detect_and_dispatch.py" *, python3 "${CLAUDE_PLUGIN_ROOT}/skills/property-based-testing/scripts/hypothesis_scaffold.py" *, npm install *, npx vitest *)
8
+ ---
9
+
10
+ # Property-Based Testing
11
+
12
+ Role: worker. This command derives and generates property-based tests
13
+ directly — it does not replace example-based tests, and it does not
14
+ fabricate a weak "doesn't crash" property when no round-trip pair or
15
+ documented invariant can be found.
16
+
17
+ ## Procedure
18
+
19
+ ### Step 1: Detect the target language (reuse project-init — never re-derive)
20
+
21
+ Run project-init's own stack detection —
22
+ `${CLAUDE_PLUGIN_ROOT}/skills/project-init/SKILL.md` § "Step 1: Detect the
23
+ stack" — over the target project. That section is this repo's canonical,
24
+ single source of truth for stack detection (its own frontmatter says so);
25
+ this skill reuses its result and never re-implements the filesystem-signal
26
+ table (`package.json`/`tsconfig.json` for JS/TS, `pyproject.toml`/
27
+ `requirements*.txt`/`setup.py` for Python, `*.sln`/`*.csproj` for C#,
28
+ `pom.xml`/`build.gradle` for Java) itself.
29
+
30
+ Reduce that step's result to a single detected-language value:
31
+
32
+ - Exactly one stack detected → its display name, verbatim as project-init's
33
+ own stack table spells it (`Python`, `JS/TS`, `C#`, `Java`).
34
+ - Zero or ambiguous signals (project-init's own "ask the user" branch) →
35
+ no detected language.
36
+
37
+ ### Step 2: Gate on support
38
+
39
+ Pass the detected language (or nothing, when Step 1 found none) to
40
+ [`scripts/detect_and_dispatch.py`](scripts/detect_and_dispatch.py):
41
+
42
+ ```bash
43
+ python3 "${CLAUDE_PLUGIN_ROOT}/skills/property-based-testing/scripts/detect_and_dispatch.py" --language "<detected language>"
44
+ ```
45
+
46
+ This script decides support — it does not detect anything itself (see its
47
+ own module docstring). When the language is neither `Python` nor `JS/TS`,
48
+ or no language was passed at all, it prints the exact message below and
49
+ exits non-zero. **Stop here — no partial run, no file written**, exactly as
50
+ the Gherkin "Unsupported or undetected language" scenario requires:
51
+
52
+ ```
53
+ Unsupported language: <detected|unknown> — supported: Python, JS/TS.
54
+ ```
55
+
56
+ `<detected>` is the actual detected language name (e.g. `Go`, `C#`) when
57
+ Step 1 found one but it isn't supported; the literal word `unknown` when
58
+ Step 1 found nothing at all.
59
+
60
+ On a supported language, the script prints which generator to dispatch to
61
+ next and exits `0` — continue to Step 3.
62
+
63
+ ### Step 3: Install the property-testing tool if missing
64
+
65
+ Follow project-init's own detection-gated-tool install pattern (`Step 4:
66
+ Install missing tools` of `project-init/SKILL.md`) rather than inventing a
67
+ new install mechanism — the tool is only installed when it's actually
68
+ missing from the target project:
69
+
70
+ - **Python — Hypothesis.** Add `hypothesis` to the project's own
71
+ dev-dependency mechanism (`pyproject.toml` dev group or
72
+ `requirements-dev.txt`, creating the latter if neither exists), exactly
73
+ as project-init's Python lane already does for `ruff`/`mypy`/`pytest`.
74
+ - **JS/TS — fast-check.** `npm install --save-dev fast-check`, mirroring
75
+ project-init's existing `npm` devDependency install shape for
76
+ `oxlint`/`@playwright/test`.
77
+
78
+ Never a global/user-level install — same repo-level-only rule project-init
79
+ states for every lane and capability tool.
80
+
81
+ ### Step 4: Generate the property test
82
+
83
+ - **Python** — invoke Step 4.1's scaffold directly:
84
+
85
+ ```bash
86
+ python3 "${CLAUDE_PLUGIN_ROOT}/skills/property-based-testing/scripts/hypothesis_scaffold.py" <module_path> <function_name> [--out-dir <dir>]
87
+ ```
88
+
89
+ It derives a round-trip property (a literal `encode`/`decode` pair) or an
90
+ invariant property (a recognized docstring postcondition phrase near a
91
+ type hint), writes `test_<function_name>_properties.py`, and prints its
92
+ path. When neither heuristic matches, it prints the exact "No property
93
+ derived" message and writes nothing — report that message verbatim rather
94
+ than fabricating a property.
95
+
96
+ - **JS/TS** — follow
97
+ [`references/languages/javascript.md`](references/languages/javascript.md)
98
+ for the fast-check equivalent of the Python scaffold above: the same
99
+ round-trip/invariant heuristic (an `encode`/`decode` export pair, or a
100
+ recognized postcondition phrase in a JSDoc comment near a type
101
+ signature), emitting a runnable `fc.assert(fc.property(...))` test file.
102
+
103
+ ### Step 5: Recommend the mutation-testing follow-up (documentation only)
104
+
105
+ After Step 4 writes a test file, **recommend** — do not auto-run —
106
+ verifying it actually catches behavioral changes:
107
+
108
+ > Run `/mutation-testing` against the generated test file and report the
109
+ > resulting mutation score.
110
+
111
+ This skill never invokes `/mutation-testing` itself; that stays a separate,
112
+ user-initiated step so this skill doesn't re-implement mutation-testing's
113
+ own orchestration.
114
+
115
+ ## When not to apply
116
+
117
+ - A function with no obvious round-trip pair or documented invariant — see
118
+ Step 4's "No property derived" message rather than generating a weak
119
+ "doesn't crash" test.
120
+ - A language other than Python or JS/TS, or a project whose stack detection
121
+ is ambiguous — see Step 2's unsupported-language message.
@@ -0,0 +1,15 @@
1
+ """Fixture module for hypothesis_scaffold.py's invariant heuristic (#2190).
2
+
3
+ `sort_values`'s docstring documents a "returns sorted" postcondition next to
4
+ a type-hinted return value — the exact narrow signal the scaffold's
5
+ invariant heuristic looks for.
6
+ """
7
+
8
+
9
+ def sort_values(values: list[int]) -> list[int]:
10
+ """Sort a list of integers.
11
+
12
+ Returns sorted output: a non-decreasing list containing the same
13
+ elements as ``values``.
14
+ """
15
+ return sorted(values)
@@ -0,0 +1,42 @@
1
+ # fast-check round-trip fixture (#2190)
2
+
3
+ Minimal JS fixture project for `/property-based-testing`'s fast-check
4
+ (JS/TS) path, documented in
5
+ [`../../references/languages/javascript.md`](../../references/languages/javascript.md).
6
+
7
+ - `roundtrip.js` — a pure `encode`/`decode` pair (string reversal; its own
8
+ inverse), the same literal-name round-trip heuristic Python's
9
+ `hypothesis_scaffold.py` looks for, mirrored here for JS/TS.
10
+ - `roundtrip.properties.test.js` — the fast-check property test a scaffold
11
+ targeting `encode`/`decode` would generate: `fc.assert(fc.property(...))`
12
+ asserting `decode(encode(x)) === x`.
13
+
14
+ ## Test determinism & the vendoring boundary
15
+
16
+ `node_modules/fast-check/` and `node_modules/pure-rand/` (fast-check's only
17
+ dependency) are **vendored and checked into this repo** — `git add -f`, since
18
+ the repo-root `.gitignore`'s blanket `node_modules/` rule normally excludes
19
+ them and a nested `.gitignore` cannot un-ignore a directory a parent
20
+ `.gitignore` already excludes. Both are pure JS with no native/platform
21
+ binaries, ~1.8M total, so they're identical on every dev machine and CI
22
+ runner — this is what satisfies this skill's "no live install of fast-check
23
+ during a test run" determinism requirement.
24
+
25
+ `vitest` (and its transitive deps) is **not** vendored. Newer vitest pulls
26
+ in platform-native binaries (`@rolldown/binding-<platform>`,
27
+ `lightningcss-<platform>`) that are specific to the host OS/arch — checking
28
+ one platform's build into git would silently break on a maintainer's
29
+ different platform (this repo's CI is `ubuntu-*`, but maintainers develop on
30
+ macOS — see the repo `CLAUDE.md` "Gates are platform-bound too" note), and
31
+ covering every platform would multiply the vendored size for no determinism
32
+ benefit `fast-check` itself doesn't already provide. Resolving `vitest` via
33
+ `npx vitest run` (or `npm install` first) is project-init's own normal
34
+ live-install path for the project's test runner — a repo-level concern this
35
+ fixture doesn't re-litigate.
36
+
37
+ ## Run
38
+
39
+ ```bash
40
+ npm install # fetches vitest + fast-check/pure-rand (already vendored) if missing
41
+ npx vitest run
42
+ ```