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,121 @@
1
+ Capture the objective starting point **before any file under the stack's test
2
+ directory is modified**. Baselines are the ground truth every downstream delta
3
+ compares against; running any test edit before baseline capture invalidates
4
+ the whole run.
5
+
6
+ **Coverage baseline.** Invoke `/coverage-baseline --workflow test-improve`
7
+ against the resolved repo path. `/coverage-baseline` owns its own
8
+ existing-baseline guard and persist step — see `../../coverage-baseline/SKILL.md`'s
9
+ "Existing-baseline guard" and "Persist the baseline" steps for the full
10
+ mechanics. The result lands directly and atomically at
11
+ `.dev-team-reports/test-improve/<slug>/data/baseline-coverage.json`; there is
12
+ no `.claude/memory/` write and no later copy step for this file — that skill
13
+ has no opt-in awareness of its own, and this write is **unconditional**.
14
+
15
+ This is independent of the mutation mode: a coverage baseline is persisted in
16
+ every mode, and the mutation baseline is written **only** in
17
+ `baseline+kill-loop` mode (see below).
18
+
19
+ **Coverage-gap ranking — the targeting input for Phases 1, 4, and 5 (issue
20
+ #1786).** As soon as `baseline-coverage.json` lands, compute the per-module
21
+ uncovered-line breakdown from the same report the baseline was parsed from
22
+ (its `raw_report` field). This runs in **every mutation mode** — it is the
23
+ coverage targeting input, independent of whether mutation work happens at
24
+ all — and it is computed by script, never estimated in prose:
25
+
26
+ ```
27
+ sh "${CLAUDE_PLUGIN_ROOT}/hooks/py.sh" "${CLAUDE_PLUGIN_ROOT}/scripts/coverage_gap_ranking.py" \
28
+ --report <baseline raw_report> --repo-root <repo-path> \
29
+ --target-line-pct <line target> --target-branch-pct <branch target> \
30
+ --top 0 --json \
31
+ --out .dev-team-reports/test-improve/<slug>/data/coverage-gap-ranking.json
32
+ ```
33
+
34
+ Always pass `--repo-root <repo-path>`: several coverage writers (istanbul/nyc
35
+ `coverage-final.json` among them) emit **absolute** source paths, and without a
36
+ root to strip they would all bucket together — one module makes the seam
37
+ classification a single global comparison, so the check silently stops
38
+ discriminating. The script derives the shared path prefix itself as a fallback,
39
+ and flags `grouping_degenerate: true` whenever many files still land in one
40
+ bucket; treat that flag as "the ranking could not resolve modules", never as a
41
+ verdict.
42
+
43
+ The script buckets every source file into a package/assembly/module and ranks
44
+ the buckets by **uncovered lines descending**, marking each bucket's `seam`
45
+ as `established` (coverage at or above the seam threshold — a test-only change
46
+ is proven to reach it) or `absent` (near-zero coverage — nothing there is
47
+ proven reachable without a production-code seam). `--out` writes the payload
48
+ atomically (temp-file-then-rename), so `coverage-gap-ranking.json` lands in
49
+ the same git-tracked `data/` sibling as the baselines and is read directly
50
+ from there by Phase 1, Phase 4, and Phase 5.
51
+
52
+ **Mutation survivors are not an input to this ranking, and must not become
53
+ one.** A surviving mutant can only exist on a line a test already executes, so
54
+ a survivor-ordered priority list structurally *excludes* the 0%-covered layers
55
+ that hold most of the missing coverage. That is the failure this ranking
56
+ exists to prevent: a Pass-1 run spent its entire Phase 5 adding mutation-kill
57
+ assertions to layers already at 88-95% line coverage while the layer holding
58
+ ~93% of the lines needed to reach the coverage target sat at 0-11% and was
59
+ never targeted.
60
+
61
+ **A deferred Phase-0 conflict check resolves here (issue #1787).** When
62
+ `phase-0.md` recorded `coverage_target_conflict: deferred` (no coverage report
63
+ was discoverable at Phase 0), *this* invocation is that check — now with real
64
+ numbers. A `verdict` of `unreachable_without_seams` (exit 3) surfaces the same
65
+ explicit choice Phase 0 defines, **before Phase 1 runs**, with one letter
66
+ changed: **`[w] waive the target / [s] stop and re-run in refactor-allowed mode
67
+ / [c] continue as-is`**. Phase-0 answers are **immutable** for the rest of the
68
+ run, so `[s]` here **stops the run** and tells the operator to re-invoke
69
+ `/test-improve <repo-path>` choosing `refactor-allowed` — it must **never
70
+ rewrite `refactor-mode`** in `phase-0.md` mid-run. Record the outcome in
71
+ `phase-2.md`. A **non-interactive** run at this point follows Phase 0's rule
72
+ unchanged: record `coverage_target_conflict: unresolved` in `phase-2.md`, print
73
+ the same three options, and continue to Phase 1 — it never auto-stops and never
74
+ auto-waives, and Phase 8 restates the unresolved conflict.
75
+
76
+ **A missing or unparseable report is not a clean ranking.** **Exit 2** means
77
+ the script found nothing to rank (report absent, unrecognized, or parsed to
78
+ zero coverage records) — never an all-clear. Name the report path it tried and
79
+ resolve it (re-run `/coverage-baseline`, or point `--report` at the artifact
80
+ the coverage tool actually emitted) before Phase 1 runs. **Do not proceed with
81
+ mutation survivors as a stand-in ordering.**
82
+
83
+ **Mutation baseline (`baseline+kill-loop` only).** When `phase-0.md` recorded
84
+ mutation mode **`baseline+kill-loop`**, check for an existing tracked baseline
85
+ before invoking `/mutation-testing --baseline` — this is Phase 2's own
86
+ existing-baseline guard for `baseline-mutation.json`, needed here (unlike the
87
+ coverage case) because `/mutation-testing` owns no persistence of its own: it
88
+ has no `--baseline`-specific write path of its own to guard. This
89
+ existing-baseline guard is this phase's application of the shared
90
+ existing-tracked-artifact re-capture guard — the canonical definition and
91
+ rationale live once in `knowledge/decision-defaults.md`'s "Re-capture: keep
92
+ vs. overwrite an existing tracked artifact" axis; applied here:
93
+
94
+ - **No existing file, or overwrite chosen** — invoke `/mutation-testing --baseline --workflow test-improve` and persist the result (below).
95
+ - **Existing file, interactive session** — prompt keep/overwrite (default keep). An answer that is neither "keep" nor "overwrite" (case-insensitive) re-prompts with the identical choice — never falls back silently to either option, no retry limit, no timeout.
96
+ - **Existing file, non-interactive** (no usable TTY, or `DEV_TEAM_AUTO_APPROVE=1`) — keep the existing baseline automatically; both log the auto-decision and echo it to Phase 2's own progress output, naming the reused baseline's `captured_at` — reporting parity with the coverage-baseline case, not a silent reuse.
97
+ - **Existing file is malformed or corrupt** (fails to parse as JSON — e.g. left over from a prior interrupted write) — treat it as absent, never as a baseline to keep. Emit a warning naming why a fresh capture is happening, then invoke `/mutation-testing --baseline --workflow test-improve`.
98
+ - **On keep** — do not invoke `/mutation-testing --baseline`; reuse the existing file's fields and report its `captured_at` instead of a freshly captured timestamp.
99
+
100
+ Persist a freshly captured result directly and atomically (temp-file-then-rename:
101
+ write to `<path>.tmp` then `mv -f <path>.tmp <path>`) to
102
+ `.dev-team-reports/test-improve/<slug>/data/baseline-mutation.json` — never a
103
+ direct, non-atomic write. The file records the **honest score**: hard kills /
104
+ effective total, with the **timeout count reported separately** (timeouts are
105
+ not counted as kills).
106
+
107
+ **No-baseline modes skip (`off` and `kill-loop`).** When `phase-0.md` recorded
108
+ mutation mode **`off`** or **`kill-loop`**, `/mutation-testing --baseline` is
109
+ **not invoked** and no `baseline-mutation.json` is written — `kill-loop` runs the
110
+ mutant-kill loop in Phase 5 but takes no baseline first. For `off`, the Phase-8
111
+ mutation target is later marked "not enabled", not waived; for `kill-loop`,
112
+ Phase 8 reports the final-survivor count rather than a baseline delta (see
113
+ Phase 8).
114
+
115
+ **Go advisory marker.** When the resolved stack is Go and mutation mode is
116
+ `baseline+kill-loop`, the
117
+ mutation baseline is **advisory only** — go-mutesting is alpha-quality (see the
118
+ Go advisory in Phase 0). `baseline-mutation.json` is written with the
119
+ `advisory-only: true` marker; survivor counts are not a gate.
120
+
121
+ **Ordering invariant.** Baselines land **before any test file is modified** — no file under the stack's test directory may change between Phase 0 and the creation of `baseline-coverage.json` (and `baseline-mutation.json` when applicable). Phase 3, Phase 5, and any subsequent test edits depend on this ordering.
@@ -0,0 +1,53 @@
1
+ Gherkin derivation is **conditional on the Phase-0 BDD rubric answer**. It
2
+ runs only when the operator opted in to a binding mode other than `none`.
3
+
4
+ **Binding mode `none` — skipped entirely.** When `phase-0.md` recorded binding
5
+ mode `none`, Phase 3 is **skipped**: `/gherkin-derive` is **not invoked**, no
6
+ `.feature` files are written, no runner is added. **Phase 1 follows Phase 2
7
+ directly** in this case — the executed sequence becomes `0 → 2 → 1 → 4 → 5 →
8
+ 6 → 7/8 → 9` (one fewer named phase; the banner's `<position>` counter still
9
+ advances 1-9 monotonically).
10
+
11
+ **Binding mode `xunit-with-annotations` — .feature files without a runner.**
12
+ Invoke `/gherkin-derive --workflow test-improve --mode xunit-with-annotations`.
13
+ The skill merges scenarios into `.feature` files under gherkin-derive's
14
+ resolved destination (recorded in `.claude/memory/test-improve/<slug>/gherkin.md` —
15
+ typically `features/test-improve/`, but dynamically resolved per the repo's
16
+ own BDD convention, not a fixed path — see `/gherkin-derive`'s Step 2)
17
+ — an existing file's prior content (hand-authored, or enriched by
18
+ `/feature-coverage-analyzer`) is preserved; only genuinely new scenarios are
19
+ appended (issue #1420) — and **no runner dependency** is added to the project.
20
+ The corresponding xUnit tests (authored in Phase 5) will carry the scenario
21
+ name plus Given/When/Then leading comments that cite the `.feature` file, but
22
+ they run through the existing xUnit runner.
23
+
24
+ **Binding mode `bdd-runner` — native parser wired.** Invoke
25
+ `/gherkin-derive --workflow test-improve --mode bdd-runner`. The stack profile
26
+ selects the native parser (`cucumber-js` for JS/TS, `SpecFlow` / `Reqnroll` for
27
+ .NET, `cucumber-jvm` for Java, `godog` for Go). `/gherkin-derive`:
28
+
29
+ - adds the parser as a project dependency,
30
+ - generates pending step-definition stubs,
31
+ - merges scenarios into `.feature` files under its resolved destination
32
+ (same dynamic resolution as `xunit-with-annotations` mode, recorded in
33
+ `.claude/memory/test-improve/<slug>/gherkin.md`), preserving any existing
34
+ enrichment the same way that mode does (issue #1420).
35
+
36
+ **Persistence.** Record the surface inventory and (in `bdd-runner` mode) the
37
+ parser wiring to `.claude/memory/test-improve/<slug>/gherkin.md`.
38
+
39
+ **Human gate.** After Phase 3 produces `.feature` files (or parser wiring in
40
+ `bdd-runner` mode), present them to the operator for review — including
41
+ `gherkin_failure_path_gate.py`'s findings (issue #1420) as part of what's
42
+ being approved, the same reviewed-before-proceeding weight the
43
+ characterization-scenario call-out already carries, not an inert report
44
+ line. **Phase 1 does not run** until the operator approves.
45
+
46
+ **In `bdd-runner` mode with pending step definitions**, Phase 3's own
47
+ not-done statement (`../../gherkin-derive/SKILL.md` Step 6) and Phase 5's later
48
+ hard block on this same state (below) describe one fact at two checkpoints,
49
+ not two separate requirements — both name `/build` (Phase 5's own per-Story
50
+ build loop) as the remediation. Because Phase 5 already owns "what happens
51
+ next" for this state, `gherkin-derive`'s own proactive "continue into
52
+ `/build` now?" ask is suppressed here — it fires only for a genuinely
53
+ standalone invocation with no enclosing orchestrator.
@@ -0,0 +1,34 @@
1
+ Convert Phase 1's ordered improvement plan into actionable work items.
2
+ Delegate the write to
3
+ `/issues-from-assessment --workflow test-improve --refactor-mode <value>`
4
+ (`phase-0.md`'s `no-refactor` or `refactor-allowed`); the skill routes the
5
+ memory + plan paths under `test-improve/` (per Slice 11). Threading
6
+ `--refactor-mode` lets the written plan mark refactor-requiring items
7
+ explicitly: in `no-refactor` mode the Phase-7 `[Refactor-for-testability]`
8
+ work surfaces labeled **out-of-scope / skipped-in-no-refactor**, never as
9
+ actionable Phase-5 Stories.
10
+
11
+ Every finding lands in exactly one of three actionable **gap classes**, plus
12
+ one non-actionable class:
13
+
14
+ - **`NO_REFACTOR`** — fixable by test edits alone. Written as **Phase-5
15
+ Stories** to `.claude/plans/test-improve/` (or the configured parent tracker
16
+ when `--parent` was supplied at Phase 0).
17
+ - **`REFACTOR_REQUIRED`** — needs a production-code seam before a test can reach the behavior. REFACTOR_REQUIRED items are **deferred to Phase 7** and are **not written as Phase-5 Stories**; they surface with rationale for the operator, who decides at Phase 6 whether to enter Phase 7. Under `refactor-mode: no-refactor` they are labeled **out-of-scope (skipped-in-no-refactor)** in the plan — informational context, never an actionable Story this run will execute.
18
+ - **`LOW_VALUE`** — tests that are cheap to have but not worth fixing (e.g. duplicate coverage, trivial getters, dead-code assertions). LOW_VALUE findings are **advisory-only**: enumerated in the report, no PR is opened to delete a test flagged this way.
19
+ - **`NOT_IMPLEMENTED`** (`/test-health`'s gherkin-gap classification only) — the scenario's behavior doesn't exist in production code at all. Not a test-improve target in **any** mode: it is **not** written as a Phase-5 Story and **not** deferred to Phase 7 — Phase 7 accepts seam introductions only, and there is no seam to introduce for behavior that hasn't been written yet. It surfaces only as a feature-gap call-out in the report, same as `LOW_VALUE`'s advisory-only treatment.
20
+
21
+ **Story order follows the coverage-gap ranking (issue #1786).** When a
22
+ coverage percentage is a stated goal, the NO_REFACTOR Story set is written in
23
+ `coverage-gap-ranking.json` **rank order** — highest uncovered-line bucket
24
+ first — so Phase 5 spends its budget on the layer that actually holds the
25
+ missing coverage. Pass that order to `/issues-from-assessment` as the order to
26
+ preserve; it **does not re-derive an order of its own**, and neither a mutation
27
+ survivor count nor a finding's position in `/test-health`'s prose reorders the
28
+ set.
29
+
30
+ **Persistence.** Persist the classified finding set to
31
+ `.claude/memory/test-improve/<slug>/phase-4.md`.
32
+
33
+ **Human gate.** Present the Phase-5 Story set (NO_REFACTOR only) to the
34
+ operator. **Phase 5 does not run** until the operator approves the set.
@@ -0,0 +1,215 @@
1
+ Iterate the approved Phase-5 Story set. For **each Story**:
2
+
3
+ **Never dispatch multiple Stories' build loops in parallel against one shared
4
+ working tree (issue #1571).** Each Story's step 1 runs `/build`, which
5
+ `git add`/`git commit`s as it goes — two or more concurrent dispatches
6
+ against the same checkout race on the index and working files, and that race
7
+ is real: it has produced observed data loss (reverted test files, deleted
8
+ `.feature` files) even when the assigned files looked disjoint, because git
9
+ index/commit operations aren't file-scoped the way file edits are. Process
10
+ Stories one at a time in this session, or — if you fan out multiple Stories
11
+ concurrently via the `Agent` tool — dispatch every one of them with
12
+ `isolation: "worktree"` so each gets its own git working tree; disjoint file
13
+ assignment alone is not a substitute for worktree isolation here.
14
+
15
+ 1. **Build** — invoke `/build <story-id>`. `/build` inherits the **no-refactor**
16
+ mode from Phase 0: production-code changes are **rejected**. A Story that
17
+ would require a production-code change is surfaced as a REFACTOR_REQUIRED
18
+ deferral candidate and re-classified for Phase 6.
19
+ 2. **Apply the Phase-0 binding mode.** If Phase 0 selected
20
+ `xunit-with-annotations`, the resulting test names mirror the source
21
+ scenario name and Given/When/Then lines appear as **leading comments**
22
+ citing the source `.feature` file. In `bdd-runner` mode, the step
23
+ definitions are filled in against the parser wired at Phase 3. In `none`
24
+ mode, the test is authored idiomatically for the stack without
25
+ feature-file citations.
26
+ 3. **Coverage delta** — after `/build` closes the Story, invoke
27
+ `/coverage-delta --workflow test-improve --story <id>`. The delta is
28
+ appended to `.dev-team-reports/test-improve/<slug>/data/coverage-history.json`.
29
+ 4. **Coverage-delta steering check (issue #1790).** After the delta is
30
+ appended — **every Story, not only at the end of the phase** — run the
31
+ trailing-streak check. Do not eyeball the history:
32
+
33
+ ```
34
+ sh "${CLAUDE_PLUGIN_ROOT}/hooks/py.sh" "${CLAUDE_PLUGIN_ROOT}/scripts/coverage_delta_steering.py" \
35
+ --history .dev-team-reports/test-improve/<slug>/data/coverage-history.json \
36
+ --json
37
+ ```
38
+
39
+ - **Exit 0** — continue to the mutation-kill step, but read *which* exit-0
40
+ status came back: `ok` means the last Story actually moved line coverage;
41
+ `insufficient_history` means too few Stories have closed (or the latest
42
+ Story's movement could not be measured) to judge a streak;
43
+ `flat_streak_forming` means the latest Story did **not** move coverage but
44
+ the streak is still short of the threshold — echo that one to the operator
45
+ as a watch signal rather than silently treating it as `ok`.
46
+ - **Exit 3** (`flat_streak`) — three or more consecutive Stories (the
47
+ default; `--consecutive` and `--min-line-delta` tune it) moved line
48
+ coverage by less than the minimum expected per-Story delta.
49
+ **Surface it now, mid-phase** — a run once spent its entire Phase-5
50
+ budget on an already-covered layer because this signal was only read at
51
+ the end; **never defer it to the Phase-9 report.** Print the script's
52
+ flat-Story list and running average, name the top `seam: absent` modules
53
+ from `coverage-gap-ranking.json`, and prompt **`[t] re-check Phase-1
54
+ targeting / [c] continue`** (shape `[t/c]` — `t` is unused elsewhere in
55
+ this flow, and `c` keeps the "accept and move on" meaning it already has
56
+ in mutation-kill's `[c/r/w/q]`):
57
+ - **`[t]`** — re-read `coverage-gap-ranking.json` and re-order the
58
+ remaining Story set into its rank order (Phase 4's rule, applied to
59
+ what is left) before the next Story's `/build`. A remaining Story whose
60
+ target module reads `seam: absent` under `refactor-mode: no-refactor` is
61
+ re-classified **REFACTOR_REQUIRED for Phase 6 rather than retried** —
62
+ retrying it under no-refactor is what produced the flat streak.
63
+ - **`[c]`** — continue, recording `coverage_flat_streak: <n> stories` in
64
+ `.claude/memory/test-improve/<slug>/phase-5.md` so Phase 8 and the
65
+ report read it from a durable record instead of re-deriving it.
66
+ - **Non-interactive runs** record the streak and continue — the same
67
+ **record-and-continue posture, never a silent pass**.
68
+ - **Exit 2** — the history file is missing or unreadable. Resolve it (the
69
+ Story's `/coverage-delta` did not append) rather than treating the
70
+ unknown as `ok`.
71
+ 5. **Mutation-kill, once per module batch (`kill-loop` and
72
+ `baseline+kill-loop`; skipped when `off`).** The `mutation-kill` agent is
73
+ opus-tier at `effort: high`, and every dispatch re-pays its fixed priming
74
+ plus the mutation tool's build/instrumentation warm-up. Phase 4 writes the
75
+ Story set in `coverage-gap-ranking.json` rank order (#1786), so Stories
76
+ targeting the same module are **adjacent** — dispatching per Story paid
77
+ that fixed cost again for a scope that was warm one Story ago (#1963).
78
+
79
+ **Group contiguous Stories by target module, then dispatch per batch.**
80
+ Take the grouping from the ranking's own `modules` buckets — the artifact
81
+ Phase 2 already computed — never by re-deriving a module map here. A batch
82
+ is a maximal run of consecutive Stories in the approved order whose target
83
+ files fall in one bucket; a module with a single Story is a batch of one,
84
+ which behaves **exactly** as the per-Story dispatch did.
85
+
86
+ Steps 1-4 above still run **per Story**, unchanged — the build, the binding
87
+ mode, the coverage delta, and the steering check are per-Story signals and
88
+ batching them would blunt exactly the mid-phase steering #1790 added. Only
89
+ this step batches.
90
+
91
+ After the batch's **last** Story closes, invoke the **`mutation-kill`
92
+ agent** once with `--file <every story file in the batch> --max-rounds 3
93
+ --target-honest-score <the Phase-0 mutation target>`.
94
+ Residual survivors trigger the **`[c]ontinue / [r]etry / [w]aive /
95
+ [q]uit`** prompt — the shape is `[c/r/w/q]` — applied to the batch.
96
+ `[c]` accepts the residual and moves on; `[r]` re-runs one more
97
+ mutation-kill round; `[w]` waives the residual to `waivers.json`; `[q]`
98
+ quits Phase 5.
99
+
100
+ **Pass the Phase-0 mutation target (#2030).** Phase 8
101
+ (`/quality-targets-converge`) gates on that number; without
102
+ `--target-honest-score` the loop runs toward survivor exhaustion instead
103
+ and buys full-price rounds whose work cannot change the gate's verdict.
104
+ Threading it is risk-neutral by construction — the honest score stays the
105
+ only gate, Phase 8 still measures it independently against
106
+ `baseline-mutation.json`, and stopping *at* the threshold cannot turn a
107
+ pass into a fail. Omit the flag when Phase 0 recorded no mutation target;
108
+ the loop then behaves exactly as it did before #2030.
109
+
110
+ **A `YIELD FLOOR` line is an operator decision, not a convergence stop.**
111
+ When the run is invoked with `--min-kills-per-round` and a round kills
112
+ fewer survivors than the floor while the file is *still below target*,
113
+ `mutation-kill` stops that file and logs a line prefixed
114
+ `YIELD FLOOR —`. That is **not** a terminal stop: route it to the same
115
+ `[c/r/w/q]` prompt above, carrying the line's kill count and floor into
116
+ the prompt so the operator can price one more round. Treating it as
117
+ convergence would stop a below-target file on the loop's own initiative,
118
+ which is precisely what #2030 declined to do.
119
+
120
+ **The gate is unchanged in coverage, only in timing.** Every Story's files
121
+ are still mutation-processed before Phase 5 can close, at the same rounds
122
+ cap, behind the same prompt: **Phase 5 may not be reported closed with an
123
+ unprocessed batch**, exactly as it could not close with an unprocessed
124
+ Story. What moves is *when within the phase* a weak assertion surfaces —
125
+ at the batch boundary rather than immediately — which is bounded by batch
126
+ size and by the fact that `mutation-kill` only ever *adds* tests, so a
127
+ later Story in a batch cannot be invalidated by an earlier one's residual.
128
+
129
+ **Name the batches when the phase starts**, so the operator sees the
130
+ grouping rather than inferring it from dispatch counts: print one line per
131
+ batch — `Mutation-kill batch <n>: module <module>, Stories <ids>.`
132
+
133
+ **Mutation-yield steering check at the batch boundary (issue #2033).**
134
+ After each batch's `mutation-kill` dispatch returns, append one record to
135
+ `.dev-team-reports/test-improve/<slug>/data/mutation-history.json` — the
136
+ git-tracked `data/` sibling of `coverage-history.json`, written atomically
137
+ the way the baselines are — carrying `batch`, `module`, `captured_at`,
138
+ `starting_survivors`, `ending_survivors`, `honest_score_before`,
139
+ `honest_score_after`, and `rounds_spent`. Then run the trailing-streak
140
+ check. Do not eyeball the history:
141
+
142
+ ```
143
+ sh "${CLAUDE_PLUGIN_ROOT}/hooks/py.sh" "${CLAUDE_PLUGIN_ROOT}/scripts/mutation_yield_steering.py" \
144
+ --history .dev-team-reports/test-improve/<slug>/data/mutation-history.json \
145
+ --json
146
+ ```
147
+
148
+ This is the #1790 mechanism ported to the more expensive lane, and it
149
+ shares that script's status vocabulary and exit-code contract exactly, so
150
+ read the exit codes the same way:
151
+
152
+ - **Exit 0** — continue to the next batch, but read *which* exit-0 status
153
+ came back: `ok` means the last batch actually killed survivors;
154
+ `insufficient_history` means too few batches have closed (or the latest
155
+ batch's yield could not be measured) to judge a streak;
156
+ `flat_streak_forming` means the latest batch did **not** clear the
157
+ minimum but the streak is still short of the threshold — echo that one
158
+ to the operator as a watch signal rather than silently treating it as
159
+ `ok`.
160
+ - **Exit 2** — the history is missing, unreadable, or corrupt. **Never
161
+ read this as `ok`** — it is the same trap #1790 calls out. Fix the
162
+ history before continuing.
163
+ - **Exit 3** (`flat_streak`) — two or more consecutive batches (the
164
+ default; `--consecutive` and `--min-kills` tune it) killed fewer than
165
+ the minimum net survivors. **Surface it now, at the batch boundary** —
166
+ per-Story would be meaningless because `mutation-kill` runs per batch.
167
+ Print the script's flat-batch list and running average, then prompt
168
+ **`[t] re-check Phase-1 targeting / [c] continue`** — the same `[t/c]`
169
+ shape the coverage check uses:
170
+ - **`[t]`** — re-read `coverage-gap-ranking.json` and re-order the
171
+ remaining batches into its rank order before the next dispatch.
172
+ - **`[c]`** — continue, recording
173
+ `mutation_flat_streak: <n> batches` in the phase's progress file so
174
+ the Phase-9 report carries the accepted signal rather than losing it.
175
+ 6. **Go mutation-kill is advisory.** On Go stacks, `mutation-kill` logs
176
+ survivors but makes **no commit** — the operator is instructed to apply
177
+ changes manually. Advisory-only handling matches the Phase-0 Go advisory,
178
+ and applies per batch exactly as it applied per Story.
179
+
180
+ #### Pending-stub gate (`bdd-runner` mode only, issue #1391)
181
+
182
+ After **all Phase-5 Stories have closed**, and only when Phase 0 selected
183
+ `bdd-runner` binding mode, run the completion gate before Phase 5 may be
184
+ reported closed — a hard gate, not prose:
185
+
186
+ ```
187
+ python3 "${CLAUDE_PLUGIN_ROOT}/scripts/gherkin_stub_gate.py" --dir <step-definitions-dir>
188
+ ```
189
+
190
+ (`<step-definitions-dir>` is wherever test-improve's own Phase 3 —
191
+ `/gherkin-derive`'s Step 4 (stub generation) / Step 5 (output paths) — wrote
192
+ step-definition files, recorded in `.claude/memory/test-improve/<slug>/gherkin.md`.)
193
+
194
+ - **Exit 0 (no pending stubs)** — Phase 5 proceeds to the end-of-phase review
195
+ loop below.
196
+ - **Non-zero (pending stubs remain)** — Phase 5 is **not done**. Surface the
197
+ gate's listed `file:line` pending step definitions to the operator; do not
198
+ report the phase closed. Route each remaining stub back into the per-Story
199
+ build loop (step 2 above — fill in the step definition against the parser
200
+ wired at Phase 3) rather than silently leaving it pending.
201
+ - Skip entirely when binding mode is `none` or `xunit-with-annotations` (no
202
+ step definitions exist to gate on).
203
+
204
+ #### End-of-phase review loop
205
+
206
+ After **all Phase-5 Stories have closed**, run the review loop over the
207
+ Phase-5 diff, writing evidence to
208
+ `.claude/memory/test-improve/<slug>/phase-5-review.json`:
209
+
210
+ <!-- include: references/review-loop.md -->
211
+ See `review-loop.md` for the single-panel dispatch, the test-lens
212
+ guarantee, the narrowed fix-confirmation, the escalation cap, and the
213
+ fixed evidence-schema fields.
214
+
215
+ **`/handoff` suggestion** (context-heavy review). Once the loop above closes, print: `Phase 5 complete. Consider running /handoff to compress context before continuing. To resume: /test-improve <repo-path> --from-phase 6 (or --from-phase with no number to auto-detect the resume point)`
@@ -0,0 +1,45 @@
1
+ With Phase 5 closed, present the **REFACTOR_REQUIRED** list deferred at
2
+ Phase 4. Each item is shown with three columns:
3
+
4
+ - **seam-needed** — the production-code seam the test would need (e.g.
5
+ interface extraction, dependency injection, virtual method).
6
+ - **behavior-gained** — the untested behavior a Phase-7 refactor would
7
+ unlock coverage for.
8
+ - **estimated-risk** — a qualitative risk marker (low / medium / high) for
9
+ the specific refactor.
10
+
11
+ **Phase 6 branches on the Phase-0 `refactor-mode`.** Read `refactor-mode`
12
+ from `.claude/memory/test-improve/<slug>/phase-0.md` **before** rendering any prompt.
13
+ Entering Phase 7 *is* refactoring, so the choice made at Phase 0 governs
14
+ whether Phase 6 is a branch point at all.
15
+
16
+ **`refactor-mode: no-refactor` (the default) — informational, not a branch
17
+ point.** The operator declined refactoring at Phase 0, so the **`[y] enter
18
+ Phase 7` option does not exist** in this mode. Present the REFACTOR_REQUIRED
19
+ list as *"the following require refactoring and are out of scope in
20
+ no-refactor mode"* — the seam-needed / behavior-gained / estimated-risk
21
+ columns still render, so the operator sees the coverage and behavior left on
22
+ the table. Then **auto-backlog** every item to
23
+ `.dev-team-reports/test-improve/<slug>/refactor-backlog.md` (or update the parent
24
+ tracker when `--parent` was passed) and **continue to Phase 8** with the
25
+ current Phase-5 test suite as the target. The prompt collapses to a single
26
+ **acknowledge/continue** step (equivalent to today's `[b]`); when no operator
27
+ is attached, run it **non-interactively** — no keystroke is required and none
28
+ enters Phase 7. The sanctioned way to actually perform these refactors is the
29
+ Phase-8 coverage-below-90% re-run prompt, which offers a fresh
30
+ `refactor-allowed` invocation the operator explicitly opts into.
31
+
32
+ **`refactor-mode: refactor-allowed` — full decision prompt.** Prompt the
33
+ operator with **`[y] enter Phase 7 / [b] backlog and skip to Phase 8 /
34
+ [q] quit`** (shape `[y/b/q]`). The letter `y` was chosen deliberately
35
+ over `r` — `[r]` is already claimed by mutation-kill's `[c/r/w/q]` (retry) and
36
+ the review-loop's `[r/w/q]` (revise); a third `[r]` at the
37
+ highest-consequence prompt would confuse operators.
38
+
39
+ - **`[y]`** — advances to **Phase 7** (refactor-for-testability).
40
+ - **`[b]`** — writes the REFACTOR_REQUIRED items to
41
+ `.dev-team-reports/test-improve/<slug>/refactor-backlog.md` (or updates the parent
42
+ tracker when `--parent` was passed); **skips Phase 7** and runs **Phase 8**
43
+ directly with the current Phase-5 test suite as the target.
44
+ - **`[q]`** — **quits** before Phase 8. No further phase runs; the final
45
+ report reflects Phase-5 state only.
@@ -0,0 +1,44 @@
1
+ Phase 7 runs **only when the operator picked `[y]` at Phase 6**. If Phase 6
2
+ returned `[b]` (backlog) or `[q]` (quit), Phase 7 is **skipped**.
3
+
4
+ **Hard mode gate — Phase 7 refuses to run under `no-refactor`.** Before any
5
+ Phase-7 work begins, `/test-improve` re-reads `refactor-mode` from
6
+ `.claude/memory/test-improve/<slug>/phase-0.md`. When it records
7
+ `refactor-mode: no-refactor`, Phase 7 **refuses to run** and is skipped —
8
+ **even if `[y]` is somehow reached**. Phase 6 offers no `[y]` in this mode,
9
+ so this gate is a defense-in-depth backstop: Phase 7 executes production-code
10
+ refactors the `no-refactor` operator declined at Phase 0, and the mode — not
11
+ the keystroke — is the final authority. Only `refactor-mode: refactor-allowed`
12
+ permits Phase 7 to execute.
13
+
14
+ **Seam-only production code changes.** `/build` in Phase 7 accepts **seam
15
+ introductions only** — interface extractions, dependency injection points,
16
+ virtual method promotions, factory wrapping. Any change beyond a seam is
17
+ rejected. Behavior modifications, refactors that alter semantics, and
18
+ opportunistic clean-ups are all out of scope.
19
+
20
+ **Existing tests are immutable.** Phase 7 **may not modify or remove existing tests** — `/build` rejects deletions and edits to any file under the stack's test directory that existed before Phase 7 started. The pre-Phase-7 suite must stay green throughout; a red pre-Phase-7 test halts the phase.
21
+
22
+ **Phase-5 precondition-check.** Each Phase-7 Story is paired with the
23
+ corresponding Phase-5 baseline Story that could not close under no-refactor.
24
+ Before `/build` runs a Phase-7 Story, `/test-improve` **verifies the paired
25
+ Phase-5 Story is closed and green**. A missing or failing Phase-5 baseline
26
+ halts that Story until the operator resolves it.
27
+
28
+ **Phase 5's parallel-dispatch warning (issue #1571) applies equally here** —
29
+ Phase 7 runs the same per-Story `/build` loop against the same shared
30
+ working tree, so **never dispatch multiple Phase-7 Stories' build loops
31
+ concurrently without `isolation: "worktree"` on every dispatch**; see
32
+ `phase-5-improve.md` for why the race is unsafe.
33
+
34
+ **End-of-phase review loop.** After all Phase-7 Stories close, run the
35
+ **same review loop as Phase 5**, writing evidence to
36
+ `.claude/memory/test-improve/<slug>/phase-7-review.json` using the same
37
+ fixed schema:
38
+
39
+ <!-- include: references/review-loop.md -->
40
+ See `review-loop.md` for the single-panel dispatch, the test-lens
41
+ guarantee, the narrowed fix-confirmation, the escalation cap, and the
42
+ fixed evidence-schema fields.
43
+
44
+ **`/handoff` suggestion** (same rationale as Phase 5). Once the loop above closes, print: `Phase 7 complete. Consider running /handoff to compress context before continuing. To resume: /test-improve <repo-path> --from-phase 8 (or --from-phase with no number to auto-detect the resume point)`
@@ -0,0 +1,66 @@
1
+ Verify the improved suite meets the Phase-0 quality targets. Delegate to
2
+ `/quality-targets-converge --workflow test-improve --refactor-mode <value>`
3
+ (`phase-0.md`'s `no-refactor` or `refactor-allowed`) — the skill routes
4
+ memory and plan paths under `test-improve/` (per Slice 11), and threading
5
+ the flag keeps the operator's no-refactor choice enforced past Phase 6 via
6
+ its own dispatch-table gating.
7
+
8
+ **Mutation target per mode.** The mutation target reads differently for each
9
+ Phase-0 mutation mode:
10
+
11
+ - **`off` — skipped (not waived).** The mutation target is **skipped** and marked
12
+ "not enabled for this run" — it is **not waived**. Skipping and waiving are
13
+ distinct outcomes: a waiver signals a target failed and the operator accepted
14
+ the gap; a skip signals the target was never in scope for this run.
15
+ - **`kill-loop` — final-survivor-only.** No Phase-2 baseline was taken, so there is
16
+ no before/after delta; the target reports the **final surviving-mutant count**
17
+ from the Phase-5 kill loop.
18
+ - **`baseline+kill-loop` — baseline-delta.** The target reports the
19
+ **baseline-to-achieved mutation delta** against `baseline-mutation.json`.
20
+
21
+ **Go mutation advisory.** When the resolved stack is Go and mutation is not `off`,
22
+ the mutation target is **advisory-only** (survivor count is not a gate). The
23
+ target reads with the "advisory only — go-mutesting is alpha" footnote and
24
+ the run may pass regardless of mutation numbers.
25
+
26
+ **Branch-scoped mutation validation (issue #1208).** `/quality-targets-converge`
27
+ scopes its Phase-8 mutation measurement to the **branch-vs-base cumulative
28
+ changed set** — the production source exercised by the tests this branch
29
+ changed across all its sessions — never the whole repo. It still reports a
30
+ whole-repo score by splicing the freshly-measured changed files over the
31
+ **persisted** Phase-2 baseline (`baseline-mutation.json`), and reports any
32
+ module it could not measure (OOM/timeout) as **held at baseline** rather than
33
+ omitting it. No extra flag is threaded through the delegation above — the
34
+ worker resolves the branch base itself using the same idiom as `/build`'s
35
+ Farley-Score step. The whole-repo splice relies on the
36
+ `.dev-team-reports/test-improve/<slug>/data/baseline-mutation.json` that
37
+ Phase 2 persisted directly and unconditionally (see
38
+ `phase-2-baseline.md`) — always
39
+ available for this same run; there is no separate copy to fall back on or
40
+ diverge from.
41
+
42
+ **Coverage < 90% in no-refactor mode.** When Phase 8 closes with coverage
43
+ below 90% and Phase 0 recorded `refactor-mode: no-refactor`,
44
+ `/test-improve` surfaces a **re-run prompt** shaped **`[y/n]`**: *"Coverage is
45
+ below 90% in no-refactor mode. Re-run in refactor-allowed mode to close the
46
+ gap? `[y/n]`"*. The prompt names the **backlogged REFACTOR_REQUIRED items**
47
+ that would close the gap (drawn from `.dev-team-reports/test-improve/<slug>/refactor-backlog.md`
48
+ when `[b]` was picked at Phase 6, or from the Phase-4 deferred list when
49
+ Phase 6 was not reached). Whenever shown, `phase-8.md` records `coverage_reprompt_fired: true` plus the answer — the durable source Phase 9's close-out prompt reads to avoid re-asking (see `phase-9-close-out-prompt.md`).
50
+
51
+ **Evidence.** Persist target outcomes to
52
+ `.claude/memory/test-improve/<slug>/phase-8.md`.
53
+
54
+ **Test-count-by-type recount.** Alongside the target-outcome persistence
55
+ above, perform the **identical** classification pass Phase 1's
56
+ "Test-count-by-type snapshot" defined — same six-type criteria, same
57
+ tie-break rule, same repo-path scope Phase 1 used (not a re-scoped or
58
+ differently-scoped recount) — and persist
59
+ `.dev-team-reports/test-improve/<slug>/data/test-counts-after.json` — written
60
+ directly to the same git-tracked `data/` sibling as `test-counts-before.json`
61
+ (same no-other-consumer rationale) — in the identical shape as
62
+ `test-counts-before.json` (same six keys, same order, zero-count keys
63
+ present). See Phase 1's own instruction for the full classification
64
+ mechanism; this pass does not restate it.
65
+
66
+ **`/handoff` suggestion** (context-heavy re-measurement). Once the recount above is persisted, print: `Phase 8 complete. Consider running /handoff to compress context before continuing. To resume: /test-improve <repo-path> --from-phase 9 (or --from-phase with no number to auto-detect the resume point)`
@@ -0,0 +1,11 @@
1
+ **No prompt** when: `.dev-team-reports/test-improve/<slug>/refactor-backlog.md` does not exist (no `REFACTOR_REQUIRED` items were ever backlogged), the file exists but has zero entries (treated the same as absent), `phase-8.md` records `coverage_reprompt_fired: true` (Phase 8's own coverage-driven `[y/n]` already fired this run — no repeating the same question twice), or `phase-0.md` recorded `refactor-mode: refactor-allowed` (a Phase-6 `[b]` backlog entry under `refactor-allowed` mode is the operator's deliberate deferral, not a no-refactor constraint to lift — re-asking "re-run with refactor-allowed mode now?" would be nonsensical when that's the mode already in use).
2
+
3
+ **Otherwise** (backlog file has ≥1 entry, Phase 8 never fired its prompt,
4
+ and `phase-0.md` recorded `refactor-mode: no-refactor`), prompt **`[y/n]`**
5
+ — distinct from Phase 8's coverage-driven, mid-run prompt, this one is
6
+ backlog-driven and fires at close-out: *"N REFACTOR_REQUIRED items remain
7
+ backlogged. Re-run with refactor-allowed mode now? `[y/n]`"* (N = entry
8
+ count). `[n]` leaves the backlog as-is. `[y]` — Phase-0 answers are
9
+ immutable per-run, so tell the operator to re-run `/test-improve
10
+ <repo-path>` fresh, choosing `refactor-allowed`; this is a new invocation,
11
+ not `--from-phase`.