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,101 @@
1
+ # Internal-Collaborator Doubling: The Blocker Rule
2
+
3
+ Reference file for `test-review`, `test-smell-review`, `test-design-advisor`,
4
+ the internal-double detector (#2127), and the authoring lane
5
+ (`software-engineer`, `qa-engineer`, `/build`, `/test-driven-development`).
6
+ This is the **single normative source** for when doubling a collaborator
7
+ declared in the project's own first-party source is admissible. Every
8
+ consumer cites this file by path; none restates it.
9
+
10
+ Source: epic #2123.
11
+
12
+ ## The rule
13
+
14
+ In any test at or below the component layer, **a collaborator declared in
15
+ the project's own first-party source stays real.** A double standing in for
16
+ one is admissible only when that collaborator matches a blocker below.
17
+
18
+ There is no test-type exemption. "Solitary unit test" stops being a licence
19
+ to double everything and becomes "a unit test whose every double names a
20
+ blocker."
21
+
22
+ ## The three blockers (exhaustive)
23
+
24
+ Each is a property of **the collaborator**, never of the test. A double is
25
+ the fallback in all three — making the boundary explicit and injecting it is
26
+ preferred.
27
+
28
+ | # | Blocker | Holds when | Preferred remedy before doubling |
29
+ |---|---|---|---|
30
+ | **B1** | Out-of-process handle | The collaborator holds or opens a handle beyond this process — socket, DB connection, URL, file handle, broker channel, subprocess | Double the leaf it wraps, not the collaborator |
31
+ | **B2** | Ambient state | It reads non-injectable ambient state — clock, RNG/GUID, env, hostname, cwd, locale | Inject a value or port; double only if injection is not yet available |
32
+ | **B3** | Prohibitive real cost | Real execution makes the test non-viable at this layer's speed — production-factor KDF, deliberate retry backoff, heavy computation | Parameterize the cost so the real code path still runs |
33
+
34
+ ## Non-reasons (normative, so the rule is falsifiable)
35
+
36
+ None of the following, alone, is a blocker — doubling on their basis alone
37
+ is inadmissible:
38
+
39
+ - "This test isn't about X" / "I only want this branch"
40
+ - "Setup is easier" / "the double was faster to write"
41
+ - "The collaborator has its own tests"
42
+ - "It's an injected interface" — and the type's name: `*Service`, `*Client`,
43
+ `*Provider`, `*Gateway`, `*Manager`, `*Repository` say nothing about which
44
+ side of a boundary a type sits on
45
+ - Forcing an error path that is unreachable through the public interface —
46
+ treat that as evidence the handling is dead or the seam is wrong, not as a
47
+ blocker
48
+
49
+ ## Patching internal functions
50
+
51
+ Reaching into a module to replace a function (`unittest.mock.patch`,
52
+ `vi.spyOn`, monkeypatching a module attribute) is the same defect in a worse
53
+ form: it needs no seam, so it applies zero design pressure and couples the
54
+ test to the callee's name and location. It is **never** admissible under
55
+ B1–B3. Where a blocker genuinely applies, extract the boundary and inject
56
+ it.
57
+
58
+ ## The waiver
59
+
60
+ An admitted double carries an inline comment marker at the double site,
61
+ naming the blocker and the reason. Comments are the one mechanism every
62
+ stack has, and colocating the waiver with the double is what stops it
63
+ drifting from the code it justifies:
64
+
65
+ ```
66
+ // double-waiver: B1 — SmtpGateway holds the SMTP socket
67
+ var mail = Substitute.For<ISmtpGateway>();
68
+
69
+ # double-waiver: B2 — reads the system clock
70
+ with patch("billing.clock.now") as now:
71
+
72
+ // double-waiver: B3 — Argon2 at prod work factor (~800ms)
73
+ const hasher = vi.mocked(passwordHasher)
74
+ ```
75
+
76
+ **Visibility, not sign-off.** The waiver needs no separate approval step.
77
+ The author states the blocker; the reviewer challenges it like any other
78
+ line of the diff, and `test-smell-review` judges whether the claim is true.
79
+ B1 and B2 doubles are common (DB, clock, HTTP), so an approval gate on each
80
+ would make the rule a bottleneck rather than a backstop.
81
+
82
+ ## A declaration never exempts
83
+
84
+ `solitary` and `sociable` both survive as vocabulary, redefined: a
85
+ **sociable** unit test uses its real collaborators; a **solitary** unit test
86
+ is one whose every double names a blocker. Neither exempts the
87
+ internal-collaborator rule, and neither does any other test-type
88
+ declaration.
89
+
90
+ This is worth stating explicitly because "solitary" historically *meant*
91
+ the exemption being removed here. Test-type declarations are **descriptive,
92
+ never permissive**.
93
+
94
+ ## See also
95
+
96
+ `test-doubles.md`'s "Common Misuses" table already flags mocking a
97
+ collaborator internal to the SUT's own component as a boundary-selection
98
+ error; `component-test-patterns.md`'s core principle ("double only the
99
+ systems the team doesn't control") gestures at the same idea. This file is
100
+ the rule those two already point toward, made unconditional and mechanically
101
+ checkable.
@@ -0,0 +1,71 @@
1
+ # Legacy Test Strategy — Where to Test & How to Edit Safely
2
+
3
+ Reference file for the `legacy-code` and `test-design-advisor` skills. Breaking a dependency (`dependency-breaking-techniques.md`) gets code *into* a harness; this file answers the two questions that come before and after: **where do I put the tests** (so they actually sense the change I'm making) and **how do I edit without breaking anything** while I get there. This is the legacy-code counterpart of test-architecture design — placing verification where it has leverage.
4
+
5
+ Source: Michael Feathers, *Working Effectively with Legacy Code* (2005) — Ch. 11 *What Methods Should I Test?*, Ch. 12 *I Need to Make Many Changes in One Area*, Ch. 13 *Characterization Tests*, Ch. 23 *How Do I Know That I'm Not Breaking Anything?*. Language-agnostic.
6
+
7
+ Core principle: **reason about effects before you write a test.** In tangled code with no tests, knowing *what your change can affect* and *where you can observe it* is the skill everything else depends on.
8
+
9
+ ---
10
+
11
+ ## 1. Reason about effects
12
+
13
+ Every functional change has a chain of effects that propagates outward — through the methods that call the changed code — until it reaches a place you can observe, or stops because nothing downstream depends on it. To decide what to test, trace that chain.
14
+
15
+ For a piece of code, list **everything that, if changed, would change a result returned by any of its methods**:
16
+
17
+ - mutable state held by reference (a collection passed to a constructor and kept — callers can mutate it later),
18
+ - objects in that state that can themselves be altered or replaced,
19
+ - and *exclude* what genuinely can't change the outcome (e.g. an immutable string field — `getName` always returns the same value).
20
+
21
+ This is **effect reasoning**: a learnable skill, done without tools, that tells you which methods are worth testing for a given change.
22
+
23
+ ## 2. Draw an effect sketch
24
+
25
+ An **effect sketch** is a small directed graph: bubbles for data and methods, arrows from a cause to what it affects. Sketch it for the change you intend to make. The sketch reveals:
26
+
27
+ - **Fan-out** — one piece of data affecting several methods. You can then *choose* which method to test through. Prefer the one that exercises the most behavior (the richest endpoint), so fewer tests cover more.
28
+ - **Hidden classes** — clusters of methods/fields that only talk to each other form a natural encapsulation boundary and suggest an Extract Class.
29
+ - **Simplification feedback** — removing tiny duplication often collapses endpoints (a method that starts calling another internally now gets exercised whenever the other is tested), making testing decisions easier.
30
+
31
+ > Encapsulation is a tool for understanding, not an end in itself. Several dependency-breaking techniques *reduce* encapsulation; when encapsulation and test coverage conflict, bias toward coverage — good tests let you reason about the code more directly, and you can often recover encapsulation later.
32
+
33
+ ## 3. Find interception & pinch points
34
+
35
+ - **Interception point** — any point where you can detect the effect of a change. Start at the change point and trace effects outward; each observable spot is a candidate. The nearest one isn't always the best — judgment call.
36
+ - **Pinch point** — a *narrowing* in the effect sketch: a place where tests against one or two methods detect changes across many. It's a natural encapsulation boundary and the ideal place to anchor characterization tests before invasive work — write tests there, carve out an "oasis," then change freely behind it.
37
+ - **Key question** for any candidate: *"If I break this method, will I be able to sense it here?"* If yes, it's a usable interception point.
38
+ - **When no pinch point exists** (the sketch is a tangled tree): you're probably changing too much at once. Narrow to one or two change points, or test individual changes as close to the change as you can.
39
+ - **Pinch-point trap** — don't let characterization tests anchored at a high pinch point *stay* as mini-integration tests. They're scaffolding to enable change; once the area is malleable, push verification down into narrower unit tests and let the broad tests go.
40
+
41
+ ## 4. Write the characterization tests
42
+
43
+ A characterization test documents what the code **actually does**, not what it *should* do. The heuristic:
44
+
45
+ 1. Write tests for the area where you'll make the change — as many cases as you need to understand current behavior.
46
+ 2. Then target the **specific things you're about to change** and write tests that pin them.
47
+ 3. If you're extracting or moving functionality, write tests that verify those behaviors **exist and are connected** on a case-by-case basis — confirm you're exercising the code you'll move and that it's wired correctly (exercise the conversions).
48
+
49
+ Procedure for one test: call the code, let it fail, read the actual output from the failure, then set the assertion to that observed value. Repeat until the change area and its immediate dependencies are covered. (The fuller procedure lives in the `legacy-code` skill.)
50
+
51
+ ---
52
+
53
+ ## 5. Edit safely while getting there (Ch. 23)
54
+
55
+ Before tests are in place, these habits keep behavior intact:
56
+
57
+ | Technique | The discipline | Why it helps |
58
+ |-----------|----------------|--------------|
59
+ | **Lean on the Compiler** | Make a declaration change (rename/retype) and let compile errors enumerate every site that must change | Turns the compiler into a worklist; you can't forget a usage |
60
+ | **Preserve Signatures** | When extracting/moving code, keep parameter lists identical — copy whole signatures rather than retyping | Avoids transcription errors; lets you cut-and-paste blocks wholesale during invasive refactoring |
61
+ | **Single-Goal Editing** | Do exactly one thing at a time; when you notice another change, write it on a list and finish the current one first | "Programming is the art of doing one thing at a time" — prevents the half-finished-thrash that breaks integration |
62
+ | **Hyperaware Editing** | Know whether each keystroke changes behavior or not; pair programming and a sub-second test loop sustain this flow state | The feedback loop that makes change-without-tests survivable until tests exist |
63
+
64
+ ---
65
+
66
+ ## How this connects to the rest of the toolkit
67
+
68
+ - **`dependency-breaking-techniques.md`** — once effect reasoning tells you *where* to intercept, those techniques create the seam to put a test there.
69
+ - **`legacy-code` skill** — owns the Legacy Code Change Algorithm and characterization-test procedure; this file deepens its "find test points" step.
70
+ - **`test-design-advisor` skill** — uses effect/pinch reasoning to recommend the lowest-leverage-cost place to verify hard-to-test code.
71
+ - **`test-automation-principles.md`** — *Verify One Condition per Test* and Defect Localization are why you push pinch-point tests down to narrow units once the area is malleable.
@@ -0,0 +1,66 @@
1
+ # Waiting on Long-Running Work
2
+
3
+ Read before arming any timer, monitor, or self-re-arming check-in for a job
4
+ that outlives a single turn: mutation runs, long evals, CI jobs, full test
5
+ suites, watched PRs. Skills that reference this file: `/long-eval`,
6
+ `/mutation-testing`, `/stryker-xunit-v2-shim`, `/ci-debugging`, `/ship`.
7
+
8
+ ## Pick the waiting mechanism first
9
+
10
+ | Situation | Mechanism |
11
+ | --- | --- |
12
+ | The job emits a stream (log file, command output) and you want the event the moment it appears | A monitor on that stream, with an exit condition — never an unbounded `tail -f` |
13
+ | The job's progress is only readable by re-running a status command | A scheduled wake-up whose body re-runs that status command |
14
+ | A wake could be missed (container recycle, dropped notification) | A scheduled wake-up as a **backstop**, in addition to the primary signal |
15
+ | Anything | **Never** a foreground `sleep`/`while true` in Bash — it burns the turn and cannot survive a recycle |
16
+
17
+ The tool that arms a scheduled wake-up is **surface-specific** — a session may
18
+ expose a wake-up scheduler, a `send_later`-style reminder, a cron-style
19
+ Routine, or none of them. Use whichever the session actually exposes; if none
20
+ does, say so and fall back to reporting status when the operator next asks.
21
+ Do not synthesize a wait out of `sleep`.
22
+
23
+ ## The scheduled wake-up calling contract
24
+
25
+ Every scheduler in this family takes the **work to do on wake** as a required
26
+ argument. There is no "just wait, no instructions" call shape. Concretely, on
27
+ the Remote runtime's `ScheduleWakeup`:
28
+
29
+ - `prompt` (**required**) — the instruction re-issued when the timer fires.
30
+ This is the whole point of the call: the wake-up replays the prompt, it does
31
+ not resume some remembered intent.
32
+ - `reason` (**required**) — one short sentence on what is being waited for.
33
+ - `delaySeconds` — clamped to `[60, 3600]`.
34
+ - `stop: true` — ends the loop. This is the **only** shape that may omit
35
+ `prompt`, and it takes **no other fields**.
36
+
37
+ **The failure this prevents:** calling the scheduler with only a delay (or
38
+ only a reason) fails with
39
+
40
+ ```
41
+ Error: `prompt` is required when `stop` is not true.
42
+ ```
43
+
44
+ and — the part that actually costs you — **no timer is armed**. A backstop that
45
+ errored is a backstop that never fires, so a missed wake is never recovered and
46
+ the run looks stalled with nothing scheduled to notice. Two call shapes, both
47
+ complete:
48
+
49
+ - **Arm / re-arm:** `delaySeconds` + `prompt` + `reason`.
50
+ - **Stand down:** `stop: true` alone.
51
+
52
+ Ending a check-in loop means the second shape. Passing a `reason` that explains
53
+ why you are stopping — with no `stop: true` — is the same malformed call as
54
+ above, not a stop.
55
+
56
+ ## Re-arming loops
57
+
58
+ A check-in that is supposed to repeat must carry its own continuation: the
59
+ `prompt` you pass has to re-issue the same status-check-and-re-arm instruction,
60
+ because the next firing starts from that prompt and nothing else.
61
+
62
+ State the terminal condition inside the prompt, so the loop can end itself —
63
+ "stop re-arming once `status` reports `DONE`, or if the operator said stop"
64
+ — and end it with a `stop: true` call, not by silently letting the last wake
65
+ pass. A loop with no terminal condition in its own prompt runs until the
66
+ operator kills it.
@@ -0,0 +1,71 @@
1
+ # Microservice Testing Strategy
2
+
3
+ Reference file for `test-smell-review` and the `test-design-advisor` skill. Distributed systems add failure modes a single-process pyramid doesn't cover: the network between services, and the *agreement* between a service and its consumers. This file covers the layers and the contract-testing discipline that keep independently-deployable services from breaking each other.
4
+
5
+ Source: Martin Fowler / Toby Clemson, "Testing Strategies in a Microservice Architecture" (martinfowler.com/articles/microservice-testing/). Complements `test-pyramid.md`.
6
+
7
+ > For CD-pipeline framing — the determinism→pre-merge-gate rule, running CI without configuring dependencies, and per-component (UI/service/batch) patterns — see `cd-test-architecture.md` and `component-test-patterns.md`. Note those use MinimumCD vocabulary, where "integration test" specifically means *validating that contract doubles still match reality* (post-merge), which is narrower than this file's usage.
8
+
9
+ Core principle: **independent deployability requires that no service can be broken by another service's change without a test catching it first.** End-to-end tests are too slow and flaky to be that safety net at scale. Contract tests are — but only when paired with *scheduled verification of those contracts against the real provider* (because you cannot depend on the provider to honor or verify a contract; see the reality check below).
10
+
11
+ ---
12
+
13
+ ## The Layers (per service)
14
+
15
+ | Layer | Scope | What it verifies | Doubles |
16
+ |-------|-------|------------------|---------|
17
+ | **Unit** | A single class/function | Internal logic, branches, edge cases | Collaborators doubled |
18
+ | **Integration** | A module + one external it owns | The adapter works against a real DB/broker/HTTP peer (test container) | Real external, isolated instance |
19
+ | **Component** | One whole service, in isolation | The service meets *its own* API contract end to end, internals real | The service's downstream deps stubbed (in-process or network-level) |
20
+ | **Contract** | The consumer↔provider agreement | Both sides still agree on request/response shape & semantics | A pact, verified independently on each side |
21
+ | **End-to-end** | Several real services together | A critical cross-service journey works | None — real deployments |
22
+
23
+ The shape is the same pyramid: lots of unit/integration, a layer of component tests per service, a thin layer of E2E for journeys. The new and load-bearing layer is **Contract**.
24
+
25
+ ---
26
+
27
+ ## Consumer-Driven Contracts (CDC)
28
+
29
+ The mechanism that lets services deploy independently:
30
+
31
+ 1. The **consumer** writes tests describing exactly the requests it makes and the responses it depends on → this produces a **contract** (a "pact").
32
+ 2. The contract is shared with the **provider** (a broker, a repo, an artifact).
33
+ 3. The **provider** runs the contract against itself in *its* CI. If a provider change would break that consumer, the provider's build goes red — before deploy, without the consumer present.
34
+ 4. Each side tests against the contract in **isolation**: the consumer stubs the provider per the contract; the provider replays the contract against the real implementation.
35
+
36
+ Why this beats E2E for integration safety:
37
+
38
+ - Fast and deterministic — no shared environment, no orchestrating N services.
39
+ - Failure points at the exact broken expectation, not "something in the journey failed."
40
+ - The provider learns it broke a consumer **at build time**, which is what makes independent deploys safe.
41
+
42
+ > **Reality check — don't depend on step 3.** The full CDC loop above only works when teams collaborate closely *and* use tooling that enforces provider-side verification. For any provider you don't control, **assume that doesn't exist**: assume the provider can break the contract without versioning and that you won't discover it until an incident — usually during your next unrelated deploy, which then takes the blame. The defense you actually own is to run *your* pinned contract against the provider's real endpoint **in a test environment on a schedule, out-of-band**, so a break is detected when it happens and attributed to the provider, not to your undelivered changes. And because you assume the provider *will* break, test that your consumer **survives** it (timeouts, retries, circuit breaker, drifted-response handling). Provider-side verification is a bonus when available, never the mechanism you rely on. See `cd-test-architecture.md` → Double Validation for the CD-pipeline formulation.
43
+
44
+ ---
45
+
46
+ ## What to test where (microservice heuristics)
47
+
48
+ - **Business logic** → unit, in the owning service. Never via another service.
49
+ - **Serialization / DB mapping / broker plumbing** → integration tests with a real instance (test container), not mocks of the driver.
50
+ - **"Does my service honor its own API?"** → component test, internals real, downstreams stubbed.
51
+ - **"Do I and the service I call still agree?"** → a contract test you own (pins what you send/expect), plus **scheduled verification of it against the provider's real test endpoint**. Provider-side verification too, if available. This replaces most cross-service E2E.
52
+ - **"Does this critical journey work end to end?"** → a *small number* of E2E tests for the highest-value journeys only.
53
+
54
+ ---
55
+
56
+ ## Smells specific to distributed testing (flag these)
57
+
58
+ | Smell | Signal | Fix |
59
+ |-------|--------|-----|
60
+ | **E2E as the integration net** | Cross-service correctness relies on a large E2E suite; no contract tests | Introduce contract tests + scheduled provider verification; shrink E2E to journeys |
61
+ | **Unmonitored provider contract** | Consumer stubs a provider's response, but nobody runs that contract against the real provider on a schedule | Run *your* contract against the provider's real test endpoint on a schedule, out-of-band — don't wait for your next deploy (or the provider's cooperation) to discover a break |
62
+ | **Consumer can't survive a break** | Consumer assumes the provider's contract holds; no timeout/retry/circuit-breaker/drifted-response tests | Test that the consumer degrades gracefully — assume the provider *will* break without versioning |
63
+ | **Stubs that lie** | Hand-written stubs of a downstream that aren't derived from / checked against the real contract | Pin the stub with a contract test; verify it against the real provider on a schedule |
64
+ | **Shared integration environment for correctness** | Tests pass/fail based on the state of a shared staging system | Isolate: component tests with stubbed downstreams + contract tests |
65
+ | **Cross-service unit test** | A "unit" test spins up or calls a second real service to check this service's logic | Double the boundary; move true cross-service checks to contract/E2E |
66
+
67
+ ## Boundaries
68
+
69
+ - Not every codebase is microservices. For a monolith or library, `test-pyramid.md` is sufficient — apply this file only when there are independently-deployable services with network boundaries between them.
70
+ - Contract testing is the recommendation for service↔service agreements; don't flag the *absence* of E2E tests as a defect when contracts cover the integration. The point is independent deployability, achieved by whichever combination provides it.
71
+ - A small, curated E2E suite is healthy. Flag E2E *over-reliance* (it's the integration safety net), not E2E existence.
@@ -0,0 +1,23 @@
1
+ {
2
+ "_comment": "Per-million-token USD pricing for the cost meter (issue #102). Keyed by model snapshot ID (and tier alias). input/output are $ per 1M tokens; cache_write_multiplier (5-min TTL) and cache_read_multiplier are applied to the input rate per Anthropic's prompt-caching pricing (write 1.25x, read 0.1x). Source: Claude API reference, cached 2026-08-05; 5-family rates from the claude-api skill model catalog (Opus 5 $5/$25, Fable 5 and Mythos 5 $10/$50, Sonnet 5 $3/$15 standard), cached 2026-08-05. Claude Sonnet 5 carries an introductory rate of $2/$10 per MTok through 2026-08-31; the $3/$15 entered here is the standard post-intro sticker (the named instrument uses the durable rate, and over-reporting is the safe direction for a budget ceiling). A model absent from `models` prices at $0.00, which silently disables any cost cap built on this file for exactly the model doing the work — claude-opus-5 was missing while it was this repo's default, so /autoship's --max-cost-usd read 4.7% of real spend (issue #1830). Anything absent here is now named in each cost-metering record's `unpriced_models` field and by tests/repo/test_cost_meter.py; add new model IDs in the same commit that starts using them. cache_write_multiplier covers the 5-minute TTL only — the 1-hour TTL is 2x, which this file does not model. Update when pricing changes; this is the named instrument for any cost claim.",
3
+ "source": "platform.claude.com/docs/en/pricing (via claude-api skill cache 2026-08-05)",
4
+ "cache_write_multiplier": 1.25,
5
+ "cache_read_multiplier": 0.1,
6
+ "models": {
7
+ "claude-opus-5": { "input": 5.0, "output": 25.0 },
8
+ "claude-opus-4-8": { "input": 5.0, "output": 25.0 },
9
+ "claude-opus-4-7": { "input": 5.0, "output": 25.0 },
10
+ "claude-opus-4-6": { "input": 5.0, "output": 25.0 },
11
+ "claude-fable-5": { "input": 10.0, "output": 50.0 },
12
+ "claude-mythos-5": { "input": 10.0, "output": 50.0 },
13
+ "claude-sonnet-5": { "input": 3.0, "output": 15.0 },
14
+ "claude-sonnet-4-6": { "input": 3.0, "output": 15.0 },
15
+ "claude-haiku-4-5": { "input": 1.0, "output": 5.0 },
16
+ "claude-haiku-4-5-20251001": { "input": 1.0, "output": 5.0 }
17
+ },
18
+ "aliases": {
19
+ "opus": "claude-opus-5",
20
+ "sonnet": "claude-sonnet-5",
21
+ "haiku": "claude-haiku-4-5"
22
+ }
23
+ }
@@ -0,0 +1,60 @@
1
+ # Mutation score formulas
2
+
3
+ Canonical formulas for `mutation-kill` (the autonomous survivor-kill agent)
4
+ and the `/mutation-testing` skill (advisory scoring/reporting). Both compute
5
+ identical numbers from a mutation report's `Killed`/`Survived`/`Timeout`/
6
+ `NoCoverage` counts — this file is the single definition so the two never
7
+ drift on naming or arithmetic.
8
+
9
+ ## Honest vs. reported score
10
+
11
+ Mutation tools count **timed-out** mutations as "killed." They are not — a
12
+ score inflated by timeouts is not evidence of good tests (observed: one run
13
+ scored 61.3% "killed," 76% of which were timeouts; targeted tests that let
14
+ those mutations *complete* instead of timing out dropped the honest score to
15
+ 30.36%). This is a separate observed incident from the worked example in
16
+ `skills/mutation-testing/SKILL.md`'s Output format section (23.0% honest vs.
17
+ 61.3% claimed, 999/1305 timeouts) — both are real, independently sourced
18
+ illustrations of the same failure mode, not one canonical figure restated
19
+ inconsistently.
20
+
21
+ ```
22
+ honest_score = Killed / (Killed + Survived + NoCoverage)
23
+ reported_score = (Killed + Timeout) / (Killed + Survived + Timeout + NoCoverage)
24
+ ```
25
+
26
+ Same formula, two fixed field names — not free-to-unify synonyms:
27
+ `mutation_report.py` emits the dataclass field `reported_score`;
28
+ `skills/mutation-testing/SKILL.md`'s `--emit-json` machine-readable output
29
+ key is `claimed_score` (a stable, versioned schema — see that file's
30
+ Machine-readable output section). Both name what the mutation tool's own
31
+ report/HTML prints. **`honest_score` is the only number that gates a round
32
+ or a file** — Timeout stays out of the numerator. Report both, so a reviewer
33
+ comparing them sees an honest gap (numerator delta) rather than a formula
34
+ mismatch. `Timeout` and `NoCoverage` counts always print separately
35
+ alongside both scores.
36
+
37
+ ## Raw vs. adjusted score (accepted survivors)
38
+
39
+ When one or more survivors are marked `status: "accepted"` (a real, killable
40
+ mutant deliberately deferred this pass — distinct from `"equivalent"`), also
41
+ print:
42
+
43
+ ```
44
+ raw_score = honest_score (unchanged)
45
+ adjusted_score = Killed / (Killed + (Survived - Accepted) + NoCoverage)
46
+ ```
47
+
48
+ Label both clearly (e.g. `Raw: 68.57% (24/35) · Adjusted for 11 accepted
49
+ survivors: 100% (24/24)`), plus a per-mutant "Accepted Survivors (deferred)"
50
+ table (file, line, operator, reason). Never let `adjusted_score` stand
51
+ alone — `raw_score` plus the reason table is what keeps a documented
52
+ deferral from silently vanishing.
53
+
54
+ ## NoCoverage is a first-class signal
55
+
56
+ Each `NoCoverage → Killed` conversion improves the score as much as killing
57
+ a `Survived` mutant — and NoCoverage paths are usually easier, because
58
+ **any** test that reaches the line kills the mutant (no specific-value
59
+ assertion required). Prioritize NoCoverage coverage before attacking hard
60
+ Survived mutations.
@@ -0,0 +1,147 @@
1
+ # Object Calisthenics
2
+
3
+ Nine rules for writing clean, maintainable, testable object-oriented code. Apply to **business domain code** — exempt DTOs, config classes, test builders, and framework boilerplate.
4
+
5
+ Source: Jeff Bay, "Object Calisthenics" (*The ThoughtWorks Anthology*, Pragmatic Bookshelf, 2008)
6
+
7
+ ---
8
+
9
+ ## The Rules
10
+
11
+ ### 1. One Level of Indentation Per Method
12
+
13
+ If a method has nested `if`/`for`/`while`, extract the inner block into a named method.
14
+
15
+ ```
16
+ // BAD
17
+ function processPayments(payments) {
18
+ for payment in payments:
19
+ if payment.isEligible:
20
+ if payment.amount > 0:
21
+ submit(payment)
22
+ }
23
+
24
+ // GOOD
25
+ function processPayments(payments) {
26
+ for payment in payments:
27
+ processIfEligible(payment)
28
+ }
29
+ ```
30
+
31
+ ### 2. Don't Use the ELSE Keyword
32
+
33
+ Replace `if/else` with guard clauses (early returns) or polymorphism.
34
+
35
+ ```
36
+ // BAD
37
+ function calculateShipping(method):
38
+ if method == "express": return weight * 2.5
39
+ else if method == "overnight": return 25.0
40
+ else: return 0
41
+
42
+ // GOOD — guard clauses
43
+ function calculateShipping(method):
44
+ if method == "express": return weight * 2.5
45
+ if method == "overnight": return 25.0
46
+ return 0
47
+ ```
48
+
49
+ ### 3. Wrap All Primitives and Strings
50
+
51
+ Domain-meaningful primitives become value objects with validation.
52
+
53
+ ```
54
+ // BAD
55
+ createOrder(customerId: string, amount: decimal, email: string)
56
+
57
+ // GOOD
58
+ createOrder(customerId: CustomerId, amount: Money, email: EmailAddress)
59
+ ```
60
+
61
+ ### 4. First-Class Collections
62
+
63
+ Any class with a collection field should contain no other fields. The collection gets its own class with domain behavior.
64
+
65
+ ```
66
+ // BAD
67
+ class BatchProcessor:
68
+ payments: List<Payment>
69
+ batchId: string // mixing concerns
70
+
71
+ // GOOD
72
+ class PaymentBatch:
73
+ payments: List<Payment> // the ONLY field
74
+ total(): Money
75
+ eligiblePayments(): List<Payment>
76
+ ```
77
+
78
+ ### 5. One Dot Per Line (Law of Demeter)
79
+
80
+ Don't chain through object graphs. Each method call should be on the immediate collaborator.
81
+
82
+ ```
83
+ // BAD — reaching through the graph
84
+ city = order.customer.address.city
85
+
86
+ // GOOD — ask the immediate object
87
+ city = order.shippingCity // Order delegates to its own data
88
+ ```
89
+
90
+ ### 6. Don't Abbreviate
91
+
92
+ Names should be intention-revealing. If a name is too long, the class may have too many responsibilities.
93
+
94
+ ```
95
+ // BAD
96
+ proc = new Proc()
97
+ txn = getTxn(id)
98
+ amt = calcAmt(txn)
99
+
100
+ // GOOD
101
+ processor = new PaymentProcessor()
102
+ transaction = getTransaction(id)
103
+ amount = calculateAmount(transaction)
104
+ ```
105
+
106
+ ### 7. Keep All Entities Small
107
+
108
+ - Classes: under 200 lines
109
+ - Methods: under 20 lines
110
+ - Packages/modules: under 15 classes
111
+
112
+ If a class exceeds these limits, it likely violates SRP — extract responsibilities.
113
+
114
+ ### 8. No Classes with More Than Two Instance Variables
115
+
116
+ The spirit: classes should be small and focused. In practice, aim for fewer than five fields. More than five is a strong signal for Extract Class.
117
+
118
+ ### 9. No Getters/Setters/Properties (Tell, Don't Ask)
119
+
120
+ Move behavior into the object that owns the data instead of exposing data for others to operate on.
121
+
122
+ ```
123
+ // BAD — asking for data, deciding externally
124
+ if account.balance >= amount:
125
+ account.balance -= amount
126
+
127
+ // GOOD — telling the object what to do
128
+ account.withdraw(amount) // Account enforces its own invariants
129
+ ```
130
+
131
+ ---
132
+
133
+ ## Applying Pragmatically
134
+
135
+ These are training exercises, not absolute laws. Use them as design pressure:
136
+
137
+ | Rule | Always Apply | Pragmatic Exceptions |
138
+ |---|---|---|
139
+ | One indentation level | Yes | Complex LINQ / stream expressions |
140
+ | No ELSE | Yes | Simple boolean returns |
141
+ | Wrap primitives | For domain values | Infrastructure code, DTOs |
142
+ | First-class collections | When collection has behavior | Simple DTOs |
143
+ | One dot per line | At domain boundaries | Fluent APIs, builders |
144
+ | Don't abbreviate | Yes | Industry-standard acronyms (HTTP, SQL, ID, JWT) |
145
+ | Small classes | Yes | EF/ORM configurations, test fixtures |
146
+ | Few instance variables | As design pressure | Aggregate roots may need more |
147
+ | No getters | At domain boundaries | DTOs, serialization, view models |
@@ -0,0 +1,94 @@
1
+ # Oracle Provenance
2
+
3
+ ## Purpose
4
+
5
+ Classifies each test's expected value by how that value was determined. The classification drives whether the test verifies *correctness* (the system matches an independent standard) or merely *stability* (the system matches its own prior output).
6
+
7
+ ## Taxonomy
8
+
9
+ ### SPEC-DERIVED
10
+
11
+ The expected value is traceable to an external specification, standard, or documented requirement. Examples:
12
+
13
+ - Expected output computed from a written requirement (`// per RFC 7231, §6.3.1`)
14
+ - Value cited in acceptance criteria or a user story
15
+ - Result mandated by a protocol or industry standard
16
+ - Expected value from a product specification document
17
+
18
+ ### INDEPENDENT
19
+
20
+ The expected value was computed independently of the system under test. Examples:
21
+
22
+ - Result of a hand calculation (`// 42 = 6 * 7, manually verified`)
23
+ - Output of a reference implementation written separately
24
+ - Value from a trusted external data source (known test vectors, published test cases)
25
+
26
+ ### CIRCULAR
27
+
28
+ The expected value was captured from the system's own current output — golden files, snapshots, or assertions that encode "what we produce today." There is no external justification that this output is correct.
29
+
30
+ Examples:
31
+
32
+ - Snapshot / golden file assertions (Jest `toMatchSnapshot()`, `.toMatchInlineSnapshot()`, approved-files frameworks, `verify()` calls in ApprovalTests)
33
+ - Assertions written by recording a baseline run (`received → expected` copy)
34
+ - Assertions that exactly echo what the system returned when first observed, with no independent derivation
35
+ - AI-generated assertions that reproduce observed output without verifying it against a specification
36
+
37
+ ## Detection Heuristics
38
+
39
+ ### Identifying CIRCULAR oracles
40
+
41
+ Look for these signals at the assertion call site:
42
+
43
+ | Language / Framework | Circular oracle pattern |
44
+ |---|---|
45
+ | Jest (JS/TS) | `expect(x).toMatchSnapshot()`, `expect(x).toMatchInlineSnapshot(...)` |
46
+ | Jest (JS/TS) | Snapshot files in `__snapshots__/` |
47
+ | Vitest | `expect(x).toMatchSnapshot()`, `expect(x).toMatchInlineSnapshot(...)` |
48
+ | C# / ApprovalTests | `Approvals.Verify(...)`, `ApprovalTests.Verify(...)` |
49
+ | C# / Snapshooter | `Snapshot.Match(...)` |
50
+ | Python / syrupy | `assert result == snapshot` |
51
+ | Any | Assertion comment says "baseline", "captured from prod", "recorded output" |
52
+ | Any | Test file in `__snapshots__/` or `snapshots/` subdirectory with no rationale comment |
53
+
54
+ ### Identifying INDEPENDENT / SPEC-DERIVED oracles
55
+
56
+ Positive signals:
57
+
58
+ - A comment citing a spec section, issue number, RFC, or requirement ID near the assertion
59
+ - An inline formula or derivation comment (`// expected = base * rate = 100 * 0.07 = 7.0`)
60
+ - A reference to a separately written oracle function not based on the SUT
61
+ - A test named after a known algorithm or well-specified behavior
62
+
63
+ ### When to flag AI-generated assertions as CIRCULAR
64
+
65
+ If the test was generated by an AI tool (comment, commit message, or file header says so) and the expected values match what the system produced with no additional derivation, classify as CIRCULAR — the AI captured the current output, not a verified specification.
66
+
67
+ ## Suite-level Ratio and Quality Cap
68
+
69
+ Count the oracle class for each assertion in scope:
70
+
71
+ ```
72
+ circular_ratio = circular_count / total_assertions
73
+ ```
74
+
75
+ | Circular ratio | Effect on finding |
76
+ |---|---|
77
+ | < 20 % | Note at suggestion level — consider adding provenance comments |
78
+ | 20 – 50 % | Warning — suite has meaningful circular-oracle contamination |
79
+ | > 50 % | Error — suite is circular-oracle-dominated; Test Quality contribution for the affected file is capped at 60 (out of 100) |
80
+
81
+ A circular-oracle-dominated suite verifies stability, not correctness. A system can regress silently and all snapshots will still pass after update.
82
+
83
+ ## Coordination with test-smell-review
84
+
85
+ `test-smell-review` already flags snapshot tests as a named smell ("Snapshot Overuse"). When both agents run together:
86
+
87
+ - `test-smell-review` owns the *smell* signal (overuse, brittleness of snapshots).
88
+ - `test-review` owns the *oracle-provenance* signal (correctness vs. stability, quality cap).
89
+
90
+ Do not double-report the same snapshot assertion. If `test-smell-review` is running in the same session, `test-review` should note the oracle-provenance ratio in the summary without re-listing each individual snapshot as a separate finding.
91
+
92
+ ## Relationship to Farley Score
93
+
94
+ The Farley Score's "Necessary" property — tests that fail only when real bugs exist — correlates with SPEC-DERIVED and INDEPENDENT oracles. A circular oracle can remain green after introducing a regression if the snapshot is updated. When the oracle-provenance ratio is available, it may inform "Necessary" scoring.