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,122 @@
1
+ # Exploratory Testing Field Guide
2
+
3
+ Source: *Explore It!* by Elisabeth Hendrickson (Pragmatic Programmers, 2013).
4
+ Reference for `skills/exploratory-testing/SKILL.md`. Protocol lives in the skill; frameworks live here.
5
+
6
+ ---
7
+
8
+ ## 1. Charter Quality (§2.3–2.4)
9
+
10
+ **Format**: `Explore [target] with [approach] to discover [concern]`
11
+
12
+ **Anti-patterns**:
13
+
14
+ | Anti-pattern | Example |
15
+ |-------------|---------|
16
+ | Too specific — becomes a test case | "Explore editing with value O'Malley to check apostrophe handling" |
17
+ | Too broad — infinite scope, never done | "Explore system security with all hacking tools to find any holes" |
18
+ | Missing "with" — no approach specified | "Explore /payments to find bugs" |
19
+ | Missing "to discover" — no risk hypothesis | "Explore auth with boundary inputs" |
20
+
21
+ Fix for too-broad charters: split into multiple focused charters, one area or concern each.
22
+
23
+ **Charter generation sources**:
24
+
25
+ | Source | Signal | Example |
26
+ |--------|--------|---------|
27
+ | Requirements discussions | Ambiguity, "I'll have to think about that" | "Explore username editing with invalid characters to discover if constraints are enforced" |
28
+ | Implicit expectations | Security model, performance, reliability — never stated | "Explore the new feature with high-volume inputs to discover performance regressions" |
29
+ | Stakeholder questions | Risk questions raised during design | "Explore billing with sequence variations to discover double-billing conditions" |
30
+ | Existing artifacts | Code comments, bug database, support logs | "Explore the payment flow with bug #4231 edge cases to discover if the fix holds" |
31
+ | Mid-session discoveries | Off-charter temptations — each is a new charter | "Explore /api/orders with the same error-format probe to discover cross-endpoint inconsistency" |
32
+
33
+ ---
34
+
35
+ ## 2. Exploration Without a GUI (Ch. 10)
36
+
37
+ All techniques apply to APIs, CLIs, batch programs, libraries — any interface.
38
+
39
+ **Variable identification (pre-probe)**:
40
+
41
+ | Dimension | What to vary |
42
+ |-----------|-------------|
43
+ | Parameters | Count, names, order |
44
+ | Values | Boundary, null/empty/zero, special characters |
45
+ | Data types | String, number, boolean, null, object, array, mixed |
46
+ | Sizes | Short, typical, very long, maximum |
47
+ | Character sets | ASCII, Unicode, accented, CJK, nonprinting, whitespace variants |
48
+ | Combinations | Valid × invalid, valid × boundary, multiple invalid at once |
49
+
50
+ **Type variation probes** (extends Goldilocks):
51
+
52
+ | Input | Finds |
53
+ |-------|-------|
54
+ | `null` | Missing null checks, NPE |
55
+ | `""` (empty string) | Empty-string handling distinct from null |
56
+ | `0` / `[]` / `{}` | Zero-value edge cases |
57
+ | Wrong type | Type coercion bugs, implicit conversion surprises |
58
+ | Very large value / long string | Performance degradation (O(n²)), buffer issues, truncation → triggers Telemetry Deepening |
59
+ | `Infinity`, `NaN`, `-0` | Numeric edge cases in calculations |
60
+ | Unicode / accented / CJK | Encoding bugs, collation issues |
61
+ | Nonprinting / whitespace variants | Trim/strip inconsistencies |
62
+
63
+ ---
64
+
65
+ ## 3. State Modeling (Ch. 8)
66
+
67
+ **State detection — Jorgensen's 3 questions** (ask after each probe):
68
+
69
+ 1. Are there things I could do now that I could not do before?
70
+ 2. Are there things I cannot do now that I could do before?
71
+ 3. Do my actions have different results now than before?
72
+
73
+ **"While" language cue**: any sentence using *while* in requirements or comments identifies a state.
74
+ Examples: "while the account is suspended", "while the system is importing data".
75
+
76
+ **Event taxonomy**:
77
+
78
+ | Type | Description | Why it matters |
79
+ |------|-------------|----------------|
80
+ | User action | Explicit input triggering a transition | Most obvious; usually already tested |
81
+ | System-generated | Background activity completing (auth, data load, job) | Creates interstitial states — narrow windows of vulnerability |
82
+ | Time-based | Timeouts, expiry, scheduled operations | Hard to reproduce; race-condition source |
83
+
84
+ **State model strategies**:
85
+
86
+ | Strategy | Rule |
87
+ |----------|------|
88
+ | Narrow your focus | One target; if you can't name it simply, split it |
89
+ | Identify a perspective | User vs. system perspective → different states |
90
+ | Dial abstraction | Small target → map substates; large target → lump into one named state |
91
+
92
+ **Transition probe set** (Slice 2):
93
+
94
+ - Valid forward transitions
95
+ - Reverse transitions
96
+ - Skipped transitions (A → C, bypassing B)
97
+ - Invalid transitions (action valid only in another state)
98
+ - Time-based transitions (trigger timeout; probe during interstitial)
99
+
100
+ ---
101
+
102
+ ## 4. Iterative Probe-Learn-Probe
103
+
104
+ 1. Identify variables — what can vary in this target?
105
+ 2. Start obvious — confirm happy path before diverging
106
+ 3. Follow surprises — vary the parameters that produced unexpected results
107
+ 4. Off-charter temptations — record as new charters; stay in current session
108
+ 5. Budget awareness — allocate remaining probes to highest-risk variables
109
+
110
+ ---
111
+
112
+ ## 5. Implicit Expectations
113
+
114
+ Stakeholders never state these because they assume they're obvious — highest-value adversarial targets:
115
+
116
+ | Implicit expectation | Adversarial lens |
117
+ |---------------------|-----------------|
118
+ | Security model applies to all features | Authorization bypass |
119
+ | Data operations must not corrupt state | Data integrity |
120
+ | System safe under concurrent use | Timing / ordering |
121
+ | Performance acceptable at scale | Size variation → Telemetry Deepening |
122
+ | Crashes never acceptable | Null / type variation |
@@ -0,0 +1,28 @@
1
+ # Failure-Class Routing
2
+
3
+ Read at the start of each repair iteration in `/build` step 4 (per-behavior
4
+ cycle, review-fix loop) and `/apply-fixes` step 4 (per-fix validation).
5
+ Classify the failing output/exit code by regex — deterministic, no LLM call,
6
+ no extra dispatch. Only the route changes; iteration caps never rise and a
7
+ route switch never resets the shared budget.
8
+
9
+ ## Classification Table
10
+
11
+ | Signature pattern | Class | Route | Escalation |
12
+ |---|---|---|---|
13
+ | `SyntaxError\|error TS\d+\|cannot find symbol\|ParseError\|unexpected token`; compiler exit 2 | `compile-syntax` | inline fix | Stays inline on repeat — no ambiguity left to diagnose. |
14
+ | Named test fails again after one inline attempt; `AssertionError\|expect\(.*\)\.to\|FAILED .*::test_` | `behavioral-test` | inline fix (1st time) | Same test fails again → systematic-debugging, not another blind retry. |
15
+ | `coverage.*below threshold\|Statements.*% \(< \|branch coverage .* below` | `coverage-gap` | test-generation (qa-engineer / test-improve-style) | Repeats → escalate to human (threshold may be miscalibrated). |
16
+ | `eslint\|prettier\|black --check\|ruff\|gofmt` non-zero, style-only diagnostics | `lint-format` | inline fix | Repeats → generic fall-through (likely config, not code). |
17
+ | Security-review finding (secrets, injection, auth bypass) surfaces during validation | `security-finding` | security-engineer (`/build`: dispatch, effort high; `/apply-fixes`: annotate only — no Agent/Skill grant) | Never downgrades to inline; unresolved after dispatch → human arbitration. |
18
+ | Two+ reviewers disagree on the same finding/fix | `reviewer-conflict` | human arbitration (existing escalation: interactive ask; non-interactive hard stop to `.claude/memory/build-escalation-<slug>.md`) | Never auto-resolved by picking a side. |
19
+ | No pattern matches | `unclassified` | generic loop (fall-through, unchanged) | None — identical to pre-routing behavior. |
20
+
21
+ ## Notes
22
+
23
+ - `/build`: classification *is* the diagnosis step orchestrator constraint 7
24
+ already requires — not an added step.
25
+ - `/apply-fixes` has no `Agent`/`Skill` grant: non-inline routes annotate the
26
+ Fix Summary with class + recommended route and move on — never dispatch.
27
+ - A route switch (e.g. inline → systematic-debugging) spends from the same
28
+ 5-iteration cap / 2-correction-iteration checkpoint — never extends or resets it.
@@ -0,0 +1,56 @@
1
+ # Fixture Construction
2
+
3
+ Reference file for `test-review`, `test-smell-review`, and the `test-design-advisor` skill. Where `test-strategy.md` decides *which* fixture (lifecycle Fresh/Shared, design Minimal/Standard), this file covers *how* the fixture is built and disposed — the construction mechanics that realize that strategy and fix fixture smells at the root.
4
+
5
+ Source: Gerard Meszaros, *xUnit Test Patterns* (xunitpatterns.com) — Fixture Setup + Fixture Teardown pattern families. Language- and framework-agnostic — described by role, not any library's API.
6
+
7
+ Core principle: **build only what this test needs, through intent-revealing construction, and release everything the test created.** Hide irrelevant detail; surface what matters to the behavior under test.
8
+
9
+ ---
10
+
11
+ ## 1. Construction patterns (how the fixture object is built)
12
+
13
+ | Pattern | What it is | Use when | Cost / risk |
14
+ |---|---|---|---|
15
+ | **Creation Method** | An intent-revealing factory that builds *and returns* the fixture (`anOverdueAccount()`), hiding irrelevant constructor detail | **Default.** Removes Irrelevant Information and Test Code Duplication | — (the safe first move) |
16
+ | **Test Data Builder** | A fluent builder with sensible defaults; each test overrides only the attribute that matters (`anAccount().overdrawn().build()`) | Objects with many attributes, where tests vary one or two | Slightly more code than a Creation Method; worth it past a few variations |
17
+ | **Object Mother** | A library of *named canonical* fixtures shared across tests (`Customers.goldTier()`) | A small set of genuinely shared, well-understood standard cases | Tends to grow into a **General Fixture** — each test gets more than it needs; keep it minimal |
18
+
19
+ **Decision:** Creation Method by default → Test Data Builder when attributes vary per test → Object Mother only for a few genuinely canonical cases. Prefer building through the SUT's public API; if the fixture cannot be constructed that way, that is a **production-code** problem — introduce a seam per `testability-patterns.md`, never reflection or `InternalsVisibleTo`.
20
+
21
+ ---
22
+
23
+ ## 2. Setup location (where construction runs)
24
+
25
+ | Location | What it is | Trade-off vs Fresh Fixture isolation |
26
+ |---|---|---|
27
+ | **In-line Setup** | Each test builds its own fixture in the test body | Maximum clarity & isolation; duplication if many tests share shape → extract a Creation Method |
28
+ | **Delegated Setup** | Tests call shared Creation Methods, but from the test body | Removes duplication while keeping each test's setup explicit — usually the sweet spot |
29
+ | **Implicit Setup** | A per-test hook (`setUp`/`beforeEach`) builds the fixture for every test in the class | Concise, but can drift into **General Fixture**/**Mystery Guest** if it builds more than some tests use |
30
+ | **Lazy Setup** | The fixture is created on first use and memoized | Useful for an expensive read-only fixture; risks shared mutable state if not truly read-only |
31
+ | **SuiteFixture Setup** | One fixture built once per *suite* of classes | Last resort for very expensive setup; couples tests across classes — pairs with an Immutable Shared Fixture only |
32
+
33
+ Keep setup **Fresh + Minimal** by default (`test-strategy.md`); each step toward Implicit/Lazy/SuiteFixture trades isolation for speed and must be justified.
34
+
35
+ ---
36
+
37
+ ## 3. Teardown (releasing what the test created)
38
+
39
+ | Pattern | What it is | Use when |
40
+ |---|---|---|
41
+ | **In-line Teardown** | The test releases its own resources at the end | Few resources, simple lifetimes |
42
+ | **Implicit Teardown** | A per-test hook (`tearDown`/`afterEach`) releases the fixture | Several tests share the same cleanup shape |
43
+ | **Automated Teardown** | The fixture layer *registers* everything created and releases it automatically after each test | **Persistent fixtures** (DB rows, files, queues) — prevents resource leakage / **Erratic Test** without per-test cleanup code |
44
+
45
+ For any fixture that touches persistent state, recommend **Automated Teardown** (or equivalent) so a failing test can't leak state into the next — the root fix for the resource-leakage form of the Erratic Test smell.
46
+
47
+ ---
48
+
49
+ ## How this connects to the rest of the toolkit
50
+
51
+ - **`test-strategy.md`** — *which* fixture (lifecycle/design); this file is *how* it's constructed.
52
+ - **`test-smells.md`** — the smells these fix: Mystery Guest & General Fixture & Irrelevant Information & Test Code Duplication (construction), resource-leakage Erratic Test (teardown).
53
+ - **`testability-patterns.md`** — the production seams (DI, interface extraction) that let a built fixture be injected without back doors.
54
+ - **`test-doubles.md`** — a Fake (in-memory repo/DB) is itself a constructed fixture; choose the double there.
55
+ - **`test-organization.md`** — Setup and Teardown are the first and last of the Four-Phase Test.
56
+ - **`test-refactoring.md`** — the behavior-preserving moves (Extract Creation Method, Introduce Test Data Builder, Replace General Fixture with Minimal Fixture) that get an existing test here.
@@ -0,0 +1,139 @@
1
+ # Frontend Component Architecture
2
+
3
+ Reference catalog for reviewing how reusable UI components are factored as a
4
+ frontend evolves. The goal is to keep duplication from accreting: when the same
5
+ rendering, layout, or interaction logic appears in several places, it should be
6
+ extracted into one reusable component with a deliberate prop/slot contract —
7
+ without over-abstracting incidental similarity into the wrong shared component.
8
+
9
+ Framework-agnostic. Map each pattern to the local framework's idiom (see
10
+ [Framework mapping](#framework-mapping)) rather than pattern-matching one
11
+ framework's syntax.
12
+
13
+ ## When to extract (and when not to)
14
+
15
+ - **Rule of three.** Two occurrences are not yet duplication — they may diverge.
16
+ At the **third** copy of the same UI structure + behavior, extract a reusable
17
+ component. Flag the third occurrence, not the second.
18
+ - **Semantic vs incidental similarity.** Before flagging, apply the test: *if the
19
+ visual or behavioral rule changes, must every copy change together?* If yes →
20
+ semantic duplication (extract it). If the copies look alike today but answer to
21
+ different product concepts that will diverge → incidental similarity (leave it).
22
+ Two unrelated forms that happen to have a name + email field are not the same
23
+ component.
24
+ - **Cost of the wrong abstraction.** A premature shared component that accumulates
25
+ boolean flags (`isAdmin`, `compact`, `variant`, `mode`) to serve divergent
26
+ callers is worse than the duplication it replaced. Prefer composition over a
27
+ flag-laden mega-component.
28
+
29
+ ## Detection categories
30
+
31
+ ### Duplicate render logic
32
+
33
+ The same JSX/template subtree (markup structure + class/style + bindings) is
34
+ repeated across components or files with only data substituted. Three+ near-copies
35
+ of a card, list row, modal, empty-state, or table is an extraction candidate.
36
+ Severity `warning` (third copy) → `error` when a behavioral rule (validation,
37
+ formatting, accessibility wiring) is duplicated and would force multi-site edits.
38
+
39
+ ### Reusable-primitive extraction candidates
40
+
41
+ Repeated *patterns* that the codebase keeps re-implementing inline instead of
42
+ calling a shared primitive: form-field + label + error wrapper, button variants,
43
+ input groups, loading/skeleton states, pagination, toast/alert. If the project
44
+ already has such a primitive, an inline reimplementation should call it instead
45
+ (name the existing component). If it does not, recommend extracting one.
46
+
47
+ ### Component granularity
48
+
49
+ - **God component**: one component mixing data fetching, business logic, layout,
50
+ and several unrelated UI regions (a 300-line `Dashboard` rendering header +
51
+ sidebar + table + modal inline). Recommend splitting along the seams.
52
+ - **Over-fragmentation**: a separate component per trivial wrapper (`<NameField>`,
53
+ `<EmailField>`, `<PhoneField>` that each only render one labeled input) where a
54
+ single parameterized component would do. Recommend collapsing.
55
+
56
+ ### Prop drilling
57
+
58
+ State or callbacks threaded through intermediate components that do not use them,
59
+ purely to reach a deep descendant (three+ levels of pass-through). Signals that
60
+ the state should be lifted to a context/provider, store, or that the subtree
61
+ should be composed via `children`/slots so the owner passes the node directly.
62
+ Severity `warning`; `suggestion` at two levels.
63
+
64
+ ### Inconsistent component APIs
65
+
66
+ Sibling components that do the same job expose different contracts: event-handler
67
+ naming drift (`onClick` vs `onPress` vs `handleClick`), boolean vs enum for the
68
+ same concept (`isPrimary` in one, `variant="primary"` in another), inconsistent
69
+ prop shapes (`{user}` object here, `userName`/`userId` scalars there). Inconsistent
70
+ public APIs across reusable components block reuse and invite copy-paste. Recommend
71
+ one convention and align the outliers.
72
+
73
+ ### Composition over configuration
74
+
75
+ - A component accumulating mode/variant flags that switch large rendering branches
76
+ is usually better split or recomposed via slots/`children`/compound components.
77
+ - Prefer exposing a `children`/default slot for caller-supplied content over a
78
+ `renderX`/`content` prop that re-implements composition the framework gives free.
79
+ - Compound-component / named-slot patterns (`<Menu><Menu.Item/></Menu>`) suit
80
+ families of parts that share implicit state; recommend them over prop-configured
81
+ monoliths when the family keeps growing.
82
+
83
+ ### Cross-feature / design-system reuse
84
+
85
+ The same visual primitive reimplemented independently in two feature folders
86
+ (two hand-rolled `Modal`s, two date pickers). As a frontend grows these drift in
87
+ behavior and accessibility. Recommend promoting one into the shared component
88
+ layer (`components/`, `ui/`, design system) and deleting the duplicate.
89
+
90
+ ### Library barrel / public exports
91
+
92
+ A shared component library needs **one public entry point** — an `index`
93
+ barrel (`index.ts`/`index.js`/`index.tsx`) that re-exports the components callers
94
+ are meant to use. Flag:
95
+
96
+ - A shared component directory (`components/`, `ui/`, `lib/components`, a
97
+ design-system package) that has **no index barrel** re-exporting its
98
+ components, so consumers must reach into file paths to import them.
99
+ - A barrel that exists but is **stale** — newly added reusable components are not
100
+ re-exported from it, so they are effectively private and get copy-pasted instead
101
+ of reused.
102
+ - Consumers **deep-importing internals** (`import { Button } from
103
+ "ui/components/button/Button"`) when a barrel entry exists (`import { Button }
104
+ from "ui"`); deep imports couple callers to internal layout and discourage reuse.
105
+
106
+ A single, stable public surface makes the library's components discoverable and
107
+ keeps internal file moves from breaking consumers. Recommend adding/updating the
108
+ `index` barrel and importing through it. This is `warning` for a missing/stale
109
+ barrel in an established shared layer, `suggestion` for deep-import drift.
110
+
111
+ ## Framework mapping
112
+
113
+ Recognize the *concept*, then express the fix in the project's framework:
114
+
115
+ - **React/JSX** — extract a function component; lift state to Context or a store;
116
+ use `children`/render-as-children; compound components via `Component.Sub`;
117
+ custom hooks for duplicated stateful logic (not just markup).
118
+ - **Vue (SFC)** — extract a `.vue` component; `provide`/`inject` or a Pinia store
119
+ for drilling; default + named `<slot>`s; composables for shared logic.
120
+ - **Svelte** — extract a `.svelte` component; context API (`setContext`/
121
+ `getContext`) or a store for drilling; default + named slots / snippets.
122
+ - **Angular** — extract a component; a shared service (DI) instead of `@Input`
123
+ chains; content projection via `<ng-content>`; structural directives for
124
+ repeated template fragments.
125
+
126
+ ## What NOT to flag
127
+
128
+ - Two occurrences (below the rule-of-three threshold) with no shared behavioral
129
+ rule — wait for the third.
130
+ - Structurally similar markup serving genuinely different product concepts that
131
+ are expected to diverge (incidental similarity).
132
+ - Framework-idiomatic prop passing one level deep (that is not drilling).
133
+ - One-off layout markup that is intentionally unique to a single screen.
134
+ - A single component or a feature-local folder that is not a reusable library —
135
+ don't demand a barrel for components that aren't meant to be shared.
136
+ - Pure styling/className concerns with no structural duplication (defer to design
137
+ tokens / CSS review, not component extraction).
138
+ - Business-logic duplication that is not UI-shaped — that belongs to
139
+ structure-review / refactor-opportunity-review, not this review.
@@ -0,0 +1,135 @@
1
+ # Adversarial Gherkin Quality Review — Dispatch & Aggregation
2
+
3
+ Shared procedure `/gherkin-derive` (Step 5b) and `/gherkin-public` (Step 4b)
4
+ both cite, so the dispatch/aggregation mechanics live in exactly one place
5
+ instead of being re-derived near-verbatim in two `SKILL.md` files (issue
6
+ #1452). Each calling step states only what's specific to it (when it fires,
7
+ what input it passes); everything below is common to both.
8
+
9
+ ## Dispatch
10
+
11
+ Spawn **two** independent instances of the `gherkin-quality-critic` agent as
12
+ parallel subagents in a single message, using the `Agent` tool — the same
13
+ "Spawn agents as parallel subagents in a single message using the Agent
14
+ tool" convention `../skills/code-review/SKILL.md` already documents. Both instances
15
+ receive the identical input (the `.feature` file(s) plus each surface's cited
16
+ source); neither instance's prompt may contain the other's output — that is
17
+ the entire point of running two, and it is a structural property of the
18
+ dispatch (one message, two calls, read neither result until both are issued),
19
+ not a runtime check.
20
+
21
+ **Why two instances of the same agent, not two distinct critics?** Every
22
+ other multi-agent review point in this fleet (`/plan` step 5b's five
23
+ plan-review-* critics, `/code-review`'s reviewer panel) dispatches **distinct**
24
+ agents with distinct scopes. This is deliberately different: `gaps` and
25
+ `balance_issues` are two facets of one judgment call (does this scenario set
26
+ adequately exercise the cited source?), not two independent concerns that
27
+ split cleanly across separate personas the way plan-review's acceptance/
28
+ design/parallelization/strategic/ux critics do. Running two instances of the
29
+ *same* narrow agent gets ensemble/self-consistency corroboration on that one
30
+ judgment call for the cost of a second call, instead of building a second
31
+ persona with an artificial scope boundary. Splitting `gaps` and
32
+ `balance_issues` into two distinct critics remains the fallback if the two
33
+ checks are ever shown to need materially different review lenses.
34
+
35
+ ## Aggregation
36
+
37
+ The calling skill performs the fold itself — no third agent, mirroring how
38
+ `/code-review` aggregates its panel's JSON without a meta-agent. Match each
39
+ instance's `gaps`/`balance_issues` entries by the key
40
+ **`(feature_file, title)`**:
41
+
42
+ - A finding present for the same key in **both** instances' output is
43
+ **agreed** — even if the two instances worded the `rationale` differently,
44
+ the same `(feature_file, title)` pair is what makes it agreed.
45
+ - A finding present in only **one** instance's output for a given key is
46
+ **single-source (unconfirmed)**.
47
+
48
+ The fold is exact-string, not fuzzy — its accuracy depends on both instances
49
+ wording a shared finding's `title` identically. The agent is instructed to
50
+ word `title` to match the cited `Feature:`/`Scenario:` heading text
51
+ **verbatim** wherever possible, which keeps the common case (the finding is
52
+ about a specific, already-named scenario) exact. The accepted, known gap:
53
+ two instances phrasing the same *novel* finding (e.g. a missing scenario that
54
+ has no existing heading to anchor to) with slightly different wording will
55
+ fold as two single-source findings rather than one agreed finding — this is
56
+ a false negative on "agreed," not a false positive, so it only ever
57
+ under-promotes confidence, never over-promotes it.
58
+
59
+ ## Failure handling
60
+
61
+ If either `Agent` call errors, times out, or returns output that cannot be
62
+ parsed as the agent's documented JSON schema:
63
+
64
+ - Treat that instance's `gaps`/`balance_issues` as empty — never crash the
65
+ skill run over one instance's failure.
66
+ - Never promote the absence of a matching finding from the failed instance
67
+ into a false "agreed" classification, and never silently drop the note
68
+ that a failure happened.
69
+ - The report must state explicitly: *"one review instance did not return
70
+ usable output — findings below are single-source only."*
71
+ - If **both** instances fail, both new report sections print
72
+ `Both review instances failed to return usable output — no Gherkin quality
73
+ findings available for this run.` instead of the two per-finding sections.
74
+
75
+ ## Zero-findings state
76
+
77
+ Both report sections — "Agreed Gherkin quality findings" and "Single-source
78
+ (unconfirmed) Gherkin quality findings" — **always print**, even when a
79
+ bucket is empty, so the section's presence in a report is predictable for
80
+ tooling/tests, not conditional on there being something to say:
81
+
82
+ ```
83
+ Agreed Gherkin quality findings
84
+ None — both instances raised no findings.
85
+
86
+ Single-source (unconfirmed) Gherkin quality findings
87
+ None — both instances raised no findings.
88
+ ```
89
+
90
+ ## Report section format
91
+
92
+ Each calling skill's report step prints two sections, distinct from every
93
+ other callout in that step — this is semantic gap/balance judgment from an
94
+ independent reviewer, never folded into a structural-presence check:
95
+
96
+ - **"Agreed Gherkin quality findings"** — every `(feature_file, title)` pair
97
+ both `gherkin-quality-critic` instances raised, one line each:
98
+ `<feature_file>:<title> — <rationale>`. Per the zero-findings state above,
99
+ print `None — both instances raised no findings.` when this bucket is
100
+ empty — never omit the section itself.
101
+ - **"Single-source (unconfirmed) Gherkin quality findings"** — every pair
102
+ only one instance raised, same line format, explicitly labeled unconfirmed
103
+ (never elevated to the same confidence as an agreed finding). Same
104
+ zero-findings rule applies. If either review instance failed or returned
105
+ unparseable output, state that here per the failure-handling rule above,
106
+ rather than silently treating it as "no findings."
107
+
108
+ ## Runtime isolation check
109
+
110
+ The mutual-blindness property above — "one message, two calls, read neither
111
+ result until both are issued" — is asserted only in this doc's prose and in
112
+ content-guards that check the markdown *says* the right thing; nothing runs
113
+ two real dispatches and checks isolation held at runtime.
114
+ `${CLAUDE_PLUGIN_ROOT}/scripts/verify_gherkin_quality_critic_isolation.py` closes that gap: it
115
+ dispatches the real `gherkin-quality-critic` agent twice via two fully
116
+ independent `claude -p` subprocess calls, each against a fixture carrying its
117
+ own randomly-generated canary marker, and fails if either transcript contains
118
+ the *other* dispatch's canary. Like `evals/README.md`'s live eval gate, it is
119
+ **opt-in and paid** (needs the `claude` CLI + `ANTHROPIC_API_KEY`) and
120
+ **fails open** — missing credentials print a skip message and exit 0, never a
121
+ failure. It is not wired into any CI workflow by default. Run it locally:
122
+
123
+ ```bash
124
+ ANTHROPIC_API_KEY=sk-... python3 "${CLAUDE_PLUGIN_ROOT}/scripts/verify_gherkin_quality_critic_isolation.py"
125
+ ```
126
+
127
+ ## Scope of this doc
128
+
129
+ This doc owns the dispatch/aggregation/failure/zero-findings mechanics and
130
+ the report section format above. It does not own: when a calling skill
131
+ decides to dispatch at all, or what a calling skill's report step must
132
+ distinguish these sections from (each `SKILL.md`'s own Step 5b/4b states its
133
+ skip conditions; each report step names the other callouts these sections
134
+ must stay distinct from — `gherkin-derive`'s characterization/possibly-stale
135
+ callouts, `gherkin-public`'s hand-authoring-flagged-components callout).