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,192 @@
1
+ # CodeGraph, Repowise, and Graphify
2
+
3
+ Three optional, complementary code-intelligence tools may show up in a
4
+ project this plugin operates on. None is required — a project may have any
5
+ subset (including none), and nothing in the plugin assumes any of them
6
+ exists. When present, they let agents read verified skeletons, resolved call
7
+ graphs, modification risk, and decision rationale instead of re-reading whole
8
+ files and grepping for callers — cheaper and more accurate. When absent, the
9
+ grant is inert and agents fall back to `Read`/`Grep`/`Glob`.
10
+
11
+ ## What each tool is
12
+
13
+ ### CodeGraph
14
+
15
+ Third-party tool (<https://github.com/colbymchenry/codegraph>). Builds a
16
+ tree-sitter AST index of source code into a local SQLite database
17
+ (`.codegraph/codegraph.db`). Code-symbols-only — it indexes functions,
18
+ classes, and call relationships, not prose or non-code artifacts. Queries
19
+ (callers, callees, impact analysis) run sub-millisecond against the local
20
+ index. It has no knowledge of documentation, schemas, or infrastructure
21
+ files.
22
+
23
+ ### Repowise
24
+
25
+ A codebase-documentation / wiki engine (`repowise` on PyPI) that indexes a
26
+ repository into a queryable knowledge base and exposes it as an **MCP
27
+ server**. Its tools answer *contextual* questions about the code rather than
28
+ raw structural ones: `get_overview` returns an architecture-level summary of
29
+ the whole workspace; `get_context` / `get_symbol` return documented context
30
+ and verified skeletons for a file, module, or symbol; `search_codebase` is
31
+ semantic (natural-language) search; `get_answer` answers a free-form question
32
+ against the indexed wiki; `get_risk` estimates the modification risk of a
33
+ change; `get_why` surfaces the recorded architectural-decision rationale
34
+ behind a piece of code; `get_health` reports code-health signals (churn,
35
+ complexity, coverage-adjacent risk) and `get_dead_code` flags unreferenced
36
+ code — both workspace-scoped rather than file-scoped, so they run over the
37
+ whole indexed repo instead of a single symbol. It can index without any LLM
38
+ API key (a keyless index), writing its store under `.repowise/`. Because it
39
+ layers documentation, risk, rationale, and workspace-wide health signals on
40
+ top of structure, it complements CodeGraph's pure call-graph view.
41
+
42
+ ### Graphify
43
+
44
+ A knowledge-graph tool (`graphifyy` on PyPI) that is multi-modal: it ingests
45
+ code *and* docs, PDFs, schemas, infra files, images, and video into one
46
+ graph, using both semantic (embedding-based) and structural (AST/reference)
47
+ extraction. Output is a queryable graph (`graphify-out/graph.json`) plus a
48
+ plain-language `GRAPH_REPORT.md` and an interactive HTML view, with
49
+ community detection to surface cross-document relationships. Because it
50
+ spans code and non-code content, it is the better tool for
51
+ architecture-level and onboarding questions, not just "what calls this
52
+ function."
53
+
54
+ ## How each is installed and invoked here
55
+
56
+ ### CodeGraph
57
+
58
+ - Offered opt-in during `/project-init`'s Step 4c
59
+ ([`skills/project-init/SKILL.md`](../skills/project-init/SKILL.md)) as part
60
+ of the keyless CodeGraph + Repowise all-or-none pair (Graphify is a separate
61
+ opt-in — see below): the skill checks `command -v codegraph` and the
62
+ presence of `.codegraph/`, and when the pair
63
+ is accepted **installs the CLI keylessly** (`npm install -g
64
+ @colbymchenry/codegraph`) and builds the index non-interactively
65
+ (`codegraph init .`, no `-i`), recording the choice in
66
+ `.claude/init-state.json` (issue #1134).
67
+ - **Strictly personal, user-level tooling — never committed.** Once
68
+ initialized, the skill prints the manual command
69
+ (`claude mcp add codegraph -- codegraph serve --mcp`) for the user to
70
+ register the `codegraph` MCP server at **user scope**, exposing a single
71
+ tool, `codegraph_explore` (`mcp__codegraph__explore`), to Claude Code
72
+ sessions on that machine. One call returns the verbatim source of the
73
+ relevant symbols grouped by file, the call path among them, and a
74
+ blast-radius summary of what depends on them — Read-equivalent output, but
75
+ with structure attached. Nothing is written to a project-tracked
76
+ `.mcp.json`, and `.codegraph/` is never committed — only
77
+ `.codegraph/codegraph.db` stays gitignored and machine-local, per project.
78
+ - `hooks/code_intelligence_nudge.py` (PreToolUse on `Read`/`Grep`/`Glob`)
79
+ recommends `codegraph_explore` over multi-file Read/Grep/Glob exploration
80
+ whenever `.codegraph/` exists and no CodeGraph tool has been used yet in
81
+ the current turn; see
82
+ [`docs/code-intelligence-nudge.md`](../docs/code-intelligence-nudge.md)
83
+ for the full sentinel mechanism. `hooks/codegraph_bootstrap.py`
84
+ (SessionStart) rebuilds the local `.db` on a fresh clone when
85
+ `.codegraph/` is committed but the machine-local database is missing.
86
+
87
+ ### Repowise
88
+
89
+ - Offered opt-in during `/project-init`'s Step 4c
90
+ ([`skills/project-init/SKILL.md`](../skills/project-init/SKILL.md)),
91
+ alongside CodeGraph as one **all-or-none** keyless pair (Graphify is a
92
+ separate opt-in, offered after this pair — see below).
93
+ - Installed keyless (`uv`/`pipx`/`pip`), it indexes without prompting for an
94
+ LLM API key and stores its index under `.repowise/`, which is gitignored so
95
+ the index never clutters the repo.
96
+ - Registered as an MCP server, it exposes
97
+ `mcp__plugin_repowise_repowise__{get_overview,get_context,get_symbol,search_codebase,get_answer,get_risk,get_why,get_health,get_dead_code}`
98
+ (and more) to Claude Code sessions.
99
+ - **Server-name coupling caveat.** The tool names agents grant use the literal
100
+ server prefix `mcp__plugin_repowise_repowise__*`. If a given install exposes
101
+ Repowise under a different MCP server name, those grants are **inert** — no
102
+ error, agents just fall back to `Read`/`Grep`/`Glob`. Keep the fallback in
103
+ mind wherever a Repowise tool is assumed.
104
+
105
+ ### Graphify
106
+
107
+ - A repo-level tool with its own native `/graphify` skill
108
+ (`.claude/skills/graphify/SKILL.md` in this repo), not part of the
109
+ `dev-team` plugin's shipped skill set.
110
+ - Also offered opt-in during `/project-init`'s Step 4c, after the keyless
111
+ CodeGraph + Repowise pair. **Only Graphify's AST pass builds keyless** —
112
+ `graphify extract .` is full extraction (AST + semantic LLM pass) and is the
113
+ target invocation, producing the `graph.json` the agents traverse (issue
114
+ #1224); a model/API key with a working backend is required for the semantic
115
+ pass, which is what indexes docs and images, not just community names and
116
+ inferred edges (issue #1483). Without a working backend, use
117
+ `graphify extract . --code-only` instead — a degraded, code-only graph, not
118
+ the full multi-modal index. When accepted, the skill runs full extraction
119
+ when a key/backend is available (or `graphify update .` when a graph already
120
+ exists), falling back to `--code-only` when it is not, and offers the
121
+ further label/`--mode deep` enrichment add-ons only on top of a successful
122
+ full extraction; when graphify is absent, consuming agents fall back to
123
+ `Read`/`Grep`/`Glob`.
124
+ - Build a graph with `graphify extract .` (or the full `/graphify` pipeline),
125
+ which writes `graphify-out/graph.json` (gitignored) plus
126
+ `graphify-out/GRAPH_REPORT.md` and an HTML visualization.
127
+ - Query the graph with `graphify query "<question>"` (broad, BFS-style
128
+ context), `graphify path "<A>" "<B>"` (shortest path between two
129
+ concepts), and `graphify explain "<concept>"` (plain-language explanation
130
+ of a single node).
131
+ - PreToolUse nudge hooks in `.claude/settings.json` (this repo's own,
132
+ separate from the plugin's `code-intelligence-nudge`) steer codebase
133
+ questions toward `graphify query` when `graphify-out/graph.json` already
134
+ exists.
135
+ - Keep the graph current after edits with `graphify update .`
136
+ (incremental, AST-only, no LLM cost).
137
+
138
+ ## When to use which
139
+
140
+ - **CodeGraph** for fast structural queries while editing — callers,
141
+ callees, impact analysis, sub-millisecond lookups against a local SQLite
142
+ index of code symbols.
143
+ - **Repowise** for *contextual* code questions — documented context and
144
+ verified skeletons (`get_context`/`get_symbol`), semantic search
145
+ (`search_codebase`), modification risk (`get_risk`), decision rationale
146
+ (`get_why`), and workspace-wide code health/dead-code signals
147
+ (`get_health`/`get_dead_code`). Reach for it when the question is "what
148
+ does this do / why does it exist / how risky is changing it / how healthy
149
+ is this area," not "who calls it."
150
+ - **Graphify** for architecture and onboarding questions that span code
151
+ *and* docs, schemas, and infrastructure — anything broader than "who
152
+ calls this function."
153
+
154
+ ### Routing precedence
155
+
156
+ This is guidance for the *model* choosing which tool to reach for — it is
157
+ not hook-enforced logic; nothing in `code_intelligence_nudge.py` inspects
158
+ the question text, since only the model sees the natural-language task
159
+ behind a Read/Grep/Glob call. When more than one tool is indexed, prefer in
160
+ this order:
161
+
162
+ 1. **Non-code content** (docs, schemas, infra, cross-artifact questions) →
163
+ **Graphify**.
164
+ 2. **Risk, rationale, code health, or dead code** → **Repowise**.
165
+ 3. **Pure structure or call-graph** (who calls this, what does this affect)
166
+ → **CodeGraph**.
167
+
168
+ The three overlap only lightly: CodeGraph is the fastest for pure call
169
+ graphs, Repowise adds documentation/risk/rationale over structure, and
170
+ Graphify is the widest net across non-code artifacts. Prefer whichever is
171
+ present for the question at hand; use more than one when they're all indexed.
172
+
173
+ ## None is guaranteed to be present
174
+
175
+ All three are optional and independently adopted per project:
176
+
177
+ - CodeGraph requires an explicit `/project-init` opt-in and a successful
178
+ `codegraph init`; a project can decline both the install and the init
179
+ prompts and never have `.codegraph/`.
180
+ - Repowise requires the `/project-init` code-lookup-tools opt-in and a
181
+ keyless index; a project can decline it and never have `.repowise/` or the MCP
182
+ server registered — and even when installed, the grant is inert if the
183
+ server name differs (see the coupling caveat above).
184
+ - Graphify requires someone to run `/graphify` (or `graphify extract`) at
185
+ least once; a project can go its entire life without `graphify-out/`.
186
+
187
+ Plugin behavior must not assume any of the three exists. The
188
+ `code-intelligence-nudge` hook already fails open when none of the three
189
+ are present, Repowise/CodeGraph MCP grants are inert when their servers are
190
+ absent, and no shipped `dev-team` skill or agent depends on
191
+ `graphify-out/` being present. `Read`/`Grep`/`Glob` is the always-available
192
+ fallback.
@@ -0,0 +1,139 @@
1
+ # Component Test Patterns
2
+
3
+ Reference file for the `cd-test-architecture` skill. Per-component-type testing patterns for a CD pipeline. Builds on `cd-test-architecture.md` (the six test types, the pre-merge determinism rule, the adapter rule, and double validation) — read that first.
4
+
5
+ Source: MinimumCD Applied Testing Strategies — component patterns (beyond.minimumcd.org/docs/testing/applied-testing-strategies/patterns/). These are recommended starting points, not mandates: drop items that don't apply, add what a component clearly needs.
6
+
7
+ Core principle for every pattern: **assemble the real component, double only the systems the team doesn't control, drive through the public interface, assert observable outcomes.** — and, at or below the component layer, no *internal* collaborator either, per the full blocker rule in `internal-collaborator-doubling.md`. Everything below is a specialization of that.
8
+
9
+ ---
10
+
11
+ ## Identify the Component's Pattern
12
+
13
+ | If the component… | Pattern | Group |
14
+ |---|---|---|
15
+ | renders data and accepts user interaction against backend APIs | **User Interface** | UI |
16
+ | exposes endpoints and owns its data store, no outbound internal calls | **API Provider** | Services |
17
+ | exposes endpoints **and** calls upstream services | **API Consumer** | Services |
18
+ | consumes messages from a broker | **Event Consumer** | Services |
19
+ | publishes messages to a broker | **Event Producer** | Services |
20
+ | holds long-lived in-memory state (cache, aggregate, coordinator, websocket gateway) | **Stateful Service** | Services |
21
+ | is a binary/package invoked via CLI or imported API | **CLI / Library** | Services |
22
+ | is triggered by cron/queue/scheduler to process data and write output | **Scheduled Job** | Batch |
23
+
24
+ A real system is often several of these; test each surface by its pattern.
25
+
26
+ ---
27
+
28
+ ## UI
29
+
30
+ ### User Interface
31
+
32
+ Renders data and accepts interaction against backend APIs.
33
+
34
+ - **Coverage layers:** pure rendering (solitary unit) → component composition (sociable unit) → feature behavior in the DOM (component tests in a real browser, backend stubbed at the network layer) → backend HTTP client (consumer-side contract tests) → a small set of E2E happy paths against real backends (post-deploy).
35
+ - **Isolation (run without the backend configured):** drive the UI in a real browser engine; stub the backend **at the network layer** (e.g. Playwright `page.route`). The same fixtures later serve E2E smoke. Do **not** use an in-memory DOM shim (JSDOM) for feature tests — it trades accuracy for false positives on layout/event timing.
36
+ - **Success scenarios:** critical flows via keyboard + mouse; valid input submits; loading states; empty/populated/overflow states; i18n (long translations, RTL); responsive breakpoints.
37
+ - **Failure modes:** every API call's 4xx/5xx/network/timeout; validation messages (screen-reader announced); token expiry mid-session → re-auth; permission denied; stale data after cross-tab deletes; slow (3G) network; concurrent-edit/optimistic-lock UX; back-button nav; automated WCAG scan.
38
+ - **Double validation:** backend stubs must match real endpoints — pin them with contract tests pre-merge, then run **scheduled verification of those contracts against the real backend in a test environment** to detect drift when it happens (not at your next deploy). If the backend is the same team's, provider-side verification in its pipeline is a bonus; don't depend on it for backends you don't control. Post-deploy E2E smoke catches drift the contracts didn't pin.
39
+ - **Pipeline:** unit + component (headless browser) + consumer contract tests in Stage 1; visual regression Stage 1/2; E2E smoke post-deploy (blocks rollout, not build); RUM + synthetics in prod.
40
+
41
+ ---
42
+
43
+ ## Services
44
+
45
+ ### API Provider
46
+
47
+ Exposes endpoints, owns its data store, no outbound internal calls.
48
+
49
+ - **Coverage layers:** HTTP/API surface (component + provider contract) → domain logic (solitary/sociable unit + component) → persistence adapter (sociable unit + adapter integration + component) → external database (doubled in component; real engine in adapter integration).
50
+ - **Isolation:** assemble the full app with an **in-memory repository** and in-memory event bus; drive through HTTP handlers; assert status, persisted state, emitted events.
51
+ - **Success scenarios:** documented endpoints return expected shape/status for valid input; auth succeeds for valid creds/tokens; pagination/filter/sort; idempotent ops idempotent, non-idempotent create exactly one; success-path side effects (events, audit).
52
+ - **Failure modes:** malformed input (bad JSON, missing/extra fields, type errors); out-of-range/unicode; authz failures (missing/expired token, insufficient scope, cross-tenant); not-found returns 404 not 500; concurrency conflicts with correct status; persistence failure without partial commit; rate-limit/size enforcement; idempotency under retry.
53
+ - **Double validation:** adapter integration tests run against a real instance of the **production database engine** via testcontainers (matching version + extensions) — never an SQLite shim for a Postgres prod; provider contract verification confirms the API still satisfies every consumer expectation.
54
+ - **Pipeline:** unit + sociable unit pre-commit/Stage 1; component Stage 1; adapter integration out-of-band on a schedule, regardless of ownership; provider contract verification in CD contract/boundary stage.
55
+
56
+ ### API Consumer
57
+
58
+ Exposes endpoints **and** calls upstream services. The most failure-prone distributed pattern — give it the most attention.
59
+
60
+ - **Coverage layers:** inbound HTTP surface → domain/orchestration (composes calls) → **resilience policy** (retry, circuit breaker, timeout, fallback) → outbound HTTP client (request build, response parse, headers, deadlines) → persistence adapter → external DB (doubled/real) → downstream service (doubled in pipeline, real out-of-band).
61
+ - **Isolation (run without the upstream configured):** wrap the upstream client in a **team-owned thin adapter**; double the adapter in component tests. Drive each failure through the client double.
62
+ - **Success scenarios:** constructs right URL/headers/body/auth/timeout; parses success incl. optional/unknown fields; composes multiple downstream calls (sequence/parallel); caching within TTL + refresh after expiry; trace-context propagation.
63
+ - **Failure modes:** **timeout** (deadline enforces, caller gets documented response e.g. 504, no partial commit); connection refused (retry count + backoff → fallback/error); 5xx retried only when retryable; 4xx mapped to documented behavior, generally not retried, 429 respects `Retry-After`; malformed/drifted response per Postel's Law; circuit breaker opens under sustained failure, fast-fails, recovers on half-open probe; partial multi-call failure → compensation/rollback/documented partial success.
64
+ - **Double validation (do not depend on provider cooperation):** assume the provider can break the contract without versioning and that you won't know until an incident. (1) consumer-side contract tests pin request + response shape, block the build; (2) **scheduled provider-contract verification in a test environment** — *you* run your pinned contract against the provider's real non-prod endpoint on a schedule, out-of-band, decoupled from your deploys — this is the primary defense, attributing a break to the provider when it happens rather than to your next unrelated change; (3) adapter integration tests exercise the real outbound client against controlled states (testcontainers) — asserts the *adapter*, not the dependency; (4) resilience component tests (above) prove the consumer **survives** a broken contract, not just detects it. Provider-side verification of your contract is a bonus *if* they offer it — never relied upon.
65
+ - **Anti-pattern:** mocking the third-party SDK directly instead of wrapping + doubling an owned adapter.
66
+ - **Pipeline:** consumer contract + resilience component tests (fault injection) Stage 1; adapter integration out-of-band on a schedule, decoupled from deploys — regardless of whether the dependency is in-house or third-party/other-team, never in-band; post-deploy checks scheduled.
67
+ - **Stack-specific mechanics — .NET:** the canonical pre-merge seam is `HttpMessageHandler` (stubbed + wired via `IHttpClientFactory.ConfigurePrimaryHttpMessageHandler`); WireMock.Net is the preferred implementation of that seam when installed, with the hand-rolled stub kept as backup. See `references/csharp-http-client-testing.md` and the worked matrix in `test-matrix-examples/dotnet-http-consumer.md`. (Other stacks: Node / Nock preferred, MSW as a documented fallback; JVM / WireMock; Python / VCR.py preferred, `responses`/`httpx` mock as a documented fallback. `virtual-service-libraries.md` is the single source of truth for the per-stack preferred/backup catalog — cite it rather than restating tool names here; add to a stack profile as needed.)
68
+
69
+ ### Event Consumer
70
+
71
+ Consumes messages from a broker (Kafka/SQS/RabbitMQ/PubSub).
72
+
73
+ - **Coverage layers:** message handler (solitary unit) → idempotency & ordering (component) → dead-letter / poison-message (component) → backpressure (resilience component) → broker client (adapter integration vs real broker container) → external broker & schema registry (doubled in component; contract + post-deploy synthetic publish).
74
+ - **Isolation (run without the broker):** replace the broker with a double; drive the handler with messages directly.
75
+ - **Success scenarios:** well-formed message → expected state change + documented downstream event; batch policy honored; replay from offset reproduces identical end state; documented schema versions accepted.
76
+ - **Failure modes:** poison message → DLQ with correlation id, consumer survives; duplicate delivery → exactly one record (idempotency); out-of-order per documented policy; mid-batch failure → offsets uncommitted, no data loss; schema skew per version policy; backpressure (slow, don't OOM); rebalancing strands no in-flight messages.
77
+ - **Double validation:** adapter integration tests vs a real broker container the team controls (Docker Kafka, ElasticMQ, Redpanda) assert the adapter speaks the protocol (not broker ordering — that's the broker's job); schema-registry doubles validated via contract tests + post-deploy checks vs the real registry.
78
+ - **Pipeline:** handler unit + component Stage 1; adapter integration out-of-band on a schedule — regardless of whether the broker is team-controlled or managed/third-party; post-deploy synthetic publishes out-of-band.
79
+
80
+ ### Event Producer
81
+
82
+ Publishes messages to a broker (often paired with a consumer in the same service).
83
+
84
+ - **Coverage layers:** publish logic (unit) → publish contract (contract test pins message schema) → broker client adapter (adapter integration) → external broker (doubled; post-deploy synthetic).
85
+ - **Isolation:** double the broker adapter; assert the message that *would* be published (shape, key, headers, idempotency).
86
+ - **Success/failure:** correct schema/partition-key/headers on the happy path; publish failure → documented retry/outbox behavior, no silent drop; transactional outbox prevents loss on crash between state-write and publish.
87
+ - **Double validation:** message schema pinned by contract (consumers verify); adapter integration vs real broker container; post-deploy synthetic publish.
88
+ - **Pipeline:** unit + contract Stage 1; adapter integration out-of-band on a schedule, regardless of ownership; post-deploy synthetic.
89
+
90
+ ### Stateful Service
91
+
92
+ Long-lived in-memory state: caches, aggregates, coordinators, websocket gateways, real-time engines.
93
+
94
+ - **Coverage layers:** state-machine logic (solitary unit) → persistence & recovery (component with doubled persistence) → single-node concurrency (component) → replication & leader election (cluster tests with real consensus library) → memory bounds (soak) → connection lifecycle (component) → external persistence engine (doubled in component; real engine in adapter integration, out-of-band).
95
+ - **Isolation:** double persistence; control time and event ordering to make concurrency deterministic.
96
+ - **Success scenarios:** transitions follow documented state machine; state rebuilds identically after restart; replication lag within budget.
97
+ - **Failure modes:** crash mid-write → consistent state on restart, no torn writes; concurrent mutations serialize without lost updates; network partition → minority steps down with documented reconciliation; memory pressure → evicts per policy, no OOM; idle connections close cleanly with documented reconnect.
98
+ - **Double validation:** persistence doubles validated by adapter integration against the real persistence engine, out-of-band; consensus doubles validated by cluster testcontainer tests, out-of-band.
99
+ - **Pipeline:** unit + component Stage 1; adapter integration (persistence recovery) out-of-band on a schedule, regardless of ownership; cluster tests out-of-band on a schedule, regardless of ownership; soak + chaos out-of-pipeline vs deployed instances.
100
+
101
+ ### CLI / Library
102
+
103
+ Binary or package consumed via CLI or an exported API.
104
+
105
+ - **Coverage layers:** public-interface behavior (unit/component invoking the real surface) → process startup for a CLI (deployed-binary test invoking the real artifact) → any external deps via owned adapters.
106
+ - **Isolation:** test through the public invocation surface (args/stdin/stdout/exit codes for a CLI; exported functions for a library); double external deps via adapters.
107
+ - **Success/failure:** documented commands/flags produce documented output + exit code; bad args → documented error + non-zero exit; stdin/stdout/stderr contracts; backward-compatible public API (the consumer's contract).
108
+ - **Double validation:** a small set of deployed-binary tests invoke the real built artifact to catch packaging/startup gaps unit tests miss. Unlike Scheduled Job's equivalent check (out-of-band, below), this smoke is deterministic enough to gate in-band when it exercises only the artifact itself — startup, arg parsing, exit codes — with no external system configured: any external dep it does call is already behind an owned adapter (per Isolation above), so the smoke carries none of the source/sink/scheduler coupling that pushes Scheduled Job's version out-of-band.
109
+ - **Pipeline:** unit + component Stage 1; deployed-binary smoke Stage 1/2.
110
+
111
+ ---
112
+
113
+ ## Batch
114
+
115
+ ### Scheduled Job
116
+
117
+ Triggered by cron/queue/scheduler to process data and write output/state.
118
+
119
+ - **Coverage layers:** pure transformation (solitary unit, no I/O) → job orchestration (component: idempotency, partial-failure recovery, checkpointing, time-window logic) → source/sink adapters (adapter integration vs real container or WireMock) → process startup (deployed-binary test invoking the real artifact) → scheduling integration (out-of-band vs the real scheduler in non-prod) → observability (assertions in component tests).
120
+ - **Isolation (run without real data stores or the scheduler):** field-level in-memory fakes for sources/sinks seeded in the test; **inject the clock** (`Clock.fixed(Instant.parse(...), ZoneOffset.UTC)`); invoke the job entrypoint directly rather than via the scheduler.
121
+ - **Success scenarios:** representative input → expected output (report/db update/published message); idempotency (running twice for the same logical period → same result, no duplicates); checkpoint resume without reprocessing; time-window correctness across DST and month/year boundaries; empty input → valid empty report; output conforms to documented schema.
122
+ - **Failure modes:** source unavailable → clean failure with documented exit code, no partial output, safely re-runnable; sink unavailable → no source state change; partial-write → idempotency keys / transactional outbox prevent duplicates on retry; slow run → alertable, locking prevents overlapping runs; malformed records → log context + configured policy (skip/dead-letter/fail); timezone bugs tested via injected clock; concurrent runs → locking/partitioning; mid-run crash → resume from consistent checkpoint.
123
+ - **Double validation:** one out-of-band real-clock check validates production clock wiring (catches "tests UTC, prod container-local"); source/sink contracts pin the shape, post-deploy checks confirm ongoing alignment; a real-scheduler check in non-prod confirms entrypoint discovery, cron timing, env/secret resolution, concurrency policy.
124
+ - **Pipeline:** unit + component + contract Stage 1; adapter integration out-of-band on a schedule, regardless of ownership; small deployed-binary set out-of-band on a schedule; real-clock + real-scheduler checks out-of-band scheduled vs non-prod; post-deploy synthetic invocation verifies it ran, processed records, met SLO.
125
+
126
+ ---
127
+
128
+ ## Quick Reference: Isolation Strategy by Pattern
129
+
130
+ | Pattern | Double to run pre-merge without config | Validated by |
131
+ |---------|----------------------------------------|--------------|
132
+ | User Interface | Network-layer backend stub (real browser) | Consumer contracts + post-deploy E2E |
133
+ | API Provider | In-memory repository + event bus | Adapter integration (real DB container) + provider contracts |
134
+ | API Consumer | Owned adapter over upstream client | 4-layer: consumer contract + adapter integration + provider verify + post-deploy |
135
+ | Event Consumer | Broker double | Adapter integration (real broker container) + schema contracts |
136
+ | Event Producer | Broker adapter double | Message contract + adapter integration + post-deploy synthetic |
137
+ | Stateful Service | Persistence double + controlled time/ordering | Adapter integration + cluster testcontainers |
138
+ | CLI / Library | Adapters over external deps | Deployed-binary smoke |
139
+ | Scheduled Job | In-memory source/sink fakes + injected clock | Adapter integration + real-clock + real-scheduler out-of-band |
@@ -0,0 +1,80 @@
1
+ # Database Change Management
2
+
3
+ Reference for evolving a schema while keeping every release candidate
4
+ deployable and every change reversible. Source: *Continuous Delivery* (Humble &
5
+ Farley) Ch.12. This file is about **changing** the database safely in a CD
6
+ pipeline; for **testing** against a database see `database-test-patterns.md`.
7
+
8
+ The governing rule: **a schema change must never block a deploy or a rollback.**
9
+ The application and the database evolve on independent clocks, so any single
10
+ change must work with both the old and the new application version.
11
+
12
+ ## Everything is a versioned, scripted migration
13
+
14
+ - The database has a **version** (a row in a `schema_version` / `migrations`
15
+ table). A migration tool (Flyway, Liquibase, `dbmate`, Rails/Alembic/EF
16
+ migrations) computes which scripts to apply to move from the current version to
17
+ the target and runs them at deploy time.
18
+ - Every change is a **script in version control** — initialization and each
19
+ migration. No manual SQL against any environment, including production. The
20
+ scripts provision any database in the pipeline from empty to current.
21
+ - Each forward (roll-forward) script has a matching **roll-back script**. Test
22
+ both: applying then reverting a migration must return the schema to its prior
23
+ shape.
24
+
25
+ ## Expand / contract (the parallel-change pattern)
26
+
27
+ A change that would break the running application if applied in one step is split
28
+ into backward-compatible phases. This is the core technique for zero-downtime.
29
+
30
+ | Phase | What happens | Compatibility |
31
+ |-------|--------------|---------------|
32
+ | **Expand** | Add the new structure (new column/table/index) without removing the old. Backfill data. New and old code both work. | Deploy independently of the app |
33
+ | **Migrate** | Ship app code that writes to both old and new, reads new. Backfill completes. | Old code still works |
34
+ | **Contract** | Once no running app version references the old structure, drop it in a later release. | Only after the app no longer needs it |
35
+
36
+ Example — rename `qty` → `quantity`: add `quantity` (expand) → dual-write and
37
+ backfill → switch reads → drop `qty` in a subsequent release (contract). The
38
+ rename is never a single `ALTER ... RENAME` that breaks the deployed app.
39
+
40
+ ## Make changes reversible without data loss
41
+
42
+ | Change | Reversible approach |
43
+ |--------|---------------------|
44
+ | Drop column/table | Copy data to a temp/archive table first (preserve keys + constraints); the roll-back restores from it. Never drop in the same release that stops using it. |
45
+ | Narrow a type / add NOT NULL | Add nullable, backfill, enforce in a later release once data is clean |
46
+ | Add a constraint | Validate existing data first; add as `NOT VALID` then validate, so the lock is short |
47
+ | Destructive data fix | Snapshot affected rows before the change so the roll-back script can replay them |
48
+
49
+ For zero-downtime where transactions are in flight, prefer **cache-and-replay**
50
+ or a blue-green database (backup/restore on the standby) over an in-place
51
+ destructive change.
52
+
53
+ ## Decouple database change from application change
54
+
55
+ - Design the app so the database can migrate **independently** of the app upgrade
56
+ — the schema is at a version the current *and* next app version both accept.
57
+ - Let the data owner (DBA or the owning team) evolve the schema incrementally;
58
+ the app does not assume the two deploy atomically.
59
+ - For shared or orchestrated databases, rehearse the change in a production-like
60
+ (SIT) environment before production.
61
+
62
+ ## Detection — flag these in review
63
+
64
+ | Signal | Risk | Fix direction |
65
+ |--------|------|---------------|
66
+ | A migration that `DROP`s or `RENAME`s a column/table referenced by the same release's app code | Breaks running app during rollout; blocks rollback | Split into expand/contract across releases |
67
+ | A roll-forward script with no roll-back script | Cannot roll back the release | Author the paired reversal; test it |
68
+ | `NOT NULL` / new constraint added without a backfill step | Migration fails or locks on real data | Add nullable → backfill → enforce later |
69
+ | App code and schema assumed to deploy atomically (read of a column added in the same deploy) | Old app instances error mid-rollout | Make the change backward-compatible (expand first) |
70
+ | Manual SQL in a runbook instead of a versioned script | No audit trail, not reproducible, drifts across environments | Move into a migration script in version control |
71
+
72
+ ## How this connects to the rest of the toolkit
73
+
74
+ - **`database-test-patterns.md`** — how to *test* against a database (isolation,
75
+ teardown, real-vs-fake); this file is how to *change* one safely.
76
+ - **`release-strategies.md`** — expand/contract is the data-tier counterpart of
77
+ decoupling deploy from release; blue-green and canary assume the schema is
78
+ compatible across the versions running side by side.
79
+ - **`deployment-pipeline.md`** — migrations run as an automated, scripted step of
80
+ the same deploy process in every environment.
@@ -0,0 +1,79 @@
1
+ # Database Test Patterns
2
+
3
+ Reference file for the `cd-test-architecture` and `test-design-advisor` skills and the `test-smell-review` agent. Tests that touch a real database are the most common source of Erratic Tests, Test Run Wars, and Slow Tests — and the hardest to make safe for a CD pipeline. This file covers how to **isolate**, **tear down**, and **avoid** database state so persistence tests stay independent and repeatable.
4
+
5
+ Source: Gerard Meszaros, *xUnit Test Patterns* (xunitpatterns.com) — Ch. 13 *Testing with Databases* and Ch. 25 *Database Patterns*. Language- and engine-agnostic.
6
+
7
+ Core principle: **a database test must leave the world exactly as it found it, and must not collide with any other test or test run.** State that leaks across tests creates order-dependence (Interacting Tests); state shared across concurrent runs creates Test Run Wars. The whole game is isolation + reliable teardown — or removing the database from the test entirely.
8
+
9
+ ---
10
+
11
+ ## First question: does this test need a real database at all?
12
+
13
+ Most logic that *uses* data does not need to test the *database engine*. Push the decision down:
14
+
15
+ ```
16
+ What is actually under test?
17
+ ├─ Business logic that happens to read/write data
18
+ │ └─ Replace persistence with a Fake (in-memory repository / In-Memory Database).
19
+ │ Fast, deterministic, pre-merge-gate safe. This is the default. (see test-doubles.md)
20
+ │
21
+ ├─ The mapping/queries themselves (ORM config, SQL, schema constraints)
22
+ │ └─ A real database IS the SUT — use the isolation + teardown patterns below.
23
+ │
24
+ └─ Stored procedures / DB-side logic
25
+ └─ Stored Procedure Test against a real engine, isolated per run.
26
+ ```
27
+
28
+ A suite that spins up the whole database to test ordinary domain logic is the **Slow Tests** smell with a side of fragility. Reserve real-DB tests for the cases where the persistence layer itself is the thing being verified.
29
+
30
+ ---
31
+
32
+ ## Isolation: keep test runs from colliding
33
+
34
+ | Pattern | What it does | Trade-off |
35
+ |---------|-------------|-----------|
36
+ | **Database Sandbox** | Each developer / CI runner gets its **own** database, so no two runs share rows | The baseline. Without it, concurrent runs cause Test Run Wars |
37
+ | → *Dedicated Database Sandbox* | A separate lightweight DB instance per user/runner | Most flexible (schema changes allowed); needs a per-runner instance |
38
+ | → *DB Schema per Test Runner* | One engine, a separate **schema** per runner; an Immutable Shared Fixture can live in a common schema | Cheaper; users can't diverge the structure |
39
+
40
+ A Sandbox separates *runs* from each other; it does **not** make the tests *within* a run independent — that still requires a Fresh Fixture per test plus the teardown below.
41
+
42
+ ---
43
+
44
+ ## Teardown: undo what the test did
45
+
46
+ Pick the cheapest teardown that fully restores state. Prefer rollback; fall back to truncation.
47
+
48
+ | Pattern | How it cleans up | Use when | Caveats |
49
+ |---------|------------------|----------|---------|
50
+ | **Transaction Rollback Teardown** | Run the whole test in a transaction; roll back at the end so nothing commits | A Fresh-Fixture test on an engine with rollback; **fastest** and schema-change-proof | The SUT must **never commit** — it must run inside a transaction owned by a *Humble Transaction Controller* (`testability-patterns.md`). A stray commit silently defeats it |
51
+ | **Table Truncation Teardown** | Delete/truncate the tables the test populated | The SUT commits, or rollback isn't usable | Must truncate in FK-safe order; more teardown code to maintain |
52
+ | **Delete-by-key / scoped cleanup** | Remove just the rows this test created (often via *Automated Teardown* tracking inserted keys) | Targeted cleanup in a shared schema | Easy to miss a table → leaked state |
53
+
54
+ Rule of thumb: **Transaction Rollback Teardown** when the design permits it (and design *toward* permitting it via a Humble Transaction Controller); **Table Truncation Teardown** when commits are unavoidable.
55
+
56
+ ---
57
+
58
+ ## Stored Procedure Test
59
+
60
+ When logic lives in the database (procedures, triggers, functions), it still deserves a test: arrange inputs in tables/parameters, invoke the procedure, verify the returned result set or the resulting table state, then tear down (rollback or truncation). Treat the procedure as the SUT and apply the same isolation. Note that DB-side logic is harder to keep under the pyramid's fast layers — prefer moving non-trivial logic *out* of the database where the team's primary tooling can test it (*Ensure Commensurate Effort*, `test-automation-principles.md`).
61
+
62
+ ---
63
+
64
+ ## CD pipeline placement
65
+
66
+ - A real database makes a test roughly **an order of magnitude slower** than an in-memory equivalent — Meszaros cites ~50× for round-trips. That cost decides pipeline stage.
67
+ - **Pre-merge gate:** Fake/in-memory persistence (deterministic, no external config). This is where the bulk of data-touching tests belong.
68
+ - **Later stage:** the narrow band of real-DB tests that verify mapping/schema/procedures, running against a per-runner Sandbox with rollback or truncation teardown.
69
+ - A database test that needs a human to seed data or reset state is the **Manual Intervention** smell and cannot gate a pipeline — automate the setup or it doesn't ship. See `cd-test-architecture.md` for the determinism→stage rule this feeds into.
70
+
71
+ ---
72
+
73
+ ## How this connects to the rest of the toolkit
74
+
75
+ - **`cd-test-architecture.md`** — owns the determinism→pipeline-stage decision; this file supplies the persistence-specific isolation/teardown that makes a DB test gate-eligible.
76
+ - **`test-doubles.md`** — the Fake Object (in-memory DB/repository) that lets most data-logic tests avoid a real database entirely.
77
+ - **`testability-patterns.md`** — the *Humble Transaction Controller* (a Humble Object) that Transaction Rollback Teardown depends on.
78
+ - **`test-smells.md`** — Erratic Test (Test Run War, Interacting Tests), Slow Tests, Manual Intervention: the smells unmanaged database state produces.
79
+ - **`test-strategy.md` / `fixture-construction.md`** — Fresh vs. Shared Fixture and Automated Teardown, the general machinery this specializes for databases.
@@ -0,0 +1,88 @@
1
+ # Decision Defaults
2
+
3
+ High-reversal-cost decision axes that recur across tasks and, when guessed wrong,
4
+ force an interrupt and rework. For each axis: the trigger that raises it, the default
5
+ stance, and what to confirm before committing. Screen every non-trivial request
6
+ against this list during discovery; surface any ambiguous axis in a single upfront
7
+ batch — **each with its recommended default attached** — rather than guessing and
8
+ being corrected later. A surfaced axis with no recommended default is incomplete: it
9
+ makes the user do the deciding from a blank, which is the menu anti-pattern this list
10
+ exists to prevent. State your best answer for each axis and let the user override it.
11
+
12
+ These are defaults, not laws — an explicit user instruction always wins. The point is
13
+ to resolve the axis *before* building, not to relitigate it mid-stream.
14
+
15
+ **Non-interactive runs.** When no human can answer the upfront batch (headless
16
+ `/plan`/`/build`, `--yes`, `DEV_TEAM_AUTO_APPROVE=1`), surfacing degrades to
17
+ recording: take the recommended default for every ambiguous axis, state each axis and
18
+ stance in the plan (and, via `/pr`, the PR body) — and **never take a non-default
19
+ stance on any axis without an explicit user instruction**. A non-default stance with
20
+ nobody present to confirm it is a guess, not a decision; if the task appears to
21
+ require one, that is an escalation, not an assumption.
22
+
23
+ ## Destructive shape: replace vs. merge
24
+
25
+ Trigger: a request writes config, settings, dotfiles, or installer output where prior
26
+ content may exist. Default: **recommend merge — preserve existing content** — because
27
+ it is the reversible option; a clean replace discards prior settings and is hard to
28
+ undo. Surface the choice before acting, but always with that merge default attached —
29
+ never a bare "merge or replace?". Confirm: does the user want existing content
30
+ preserved (merge, the recommended default) or overwritten (replace)? When unstated and
31
+ the target is non-trivial, surface the choice with the merge default and proceed once
32
+ it is resolved; do not silently act in either direction.
33
+
34
+ ## Format fidelity: preserve the native format
35
+
36
+ Trigger: handling a vector or structured asset (SVG, source diagram, lossless data).
37
+ Default: preserve the native, lossless form; do not down-convert (for example, SVG to
38
+ PNG) for convenience. Confirm: if a conversion seems necessary, name the reason and
39
+ get agreement before doing it.
40
+
41
+ ## Evolution: migrate vs. edit a stub in place
42
+
43
+ Trigger: a target has been renamed, deprecated, or replaced by a successor (a plugin,
44
+ module, or file with a forwarding stub). Default: migrate to the current target rather
45
+ than editing the deprecated stub in place. Confirm: verify which artifact is canonical
46
+ before changing it — a stub edit that looks done can leave the real target untouched.
47
+
48
+ ## Integration: auto-merge vs. direct-to-trunk
49
+
50
+ Trigger: landing changes on a shared branch. Default: open a PR and use auto-merge
51
+ gated on green checks rather than merging directly to trunk. Confirm: only merge
52
+ directly when the user has asked for it; a direct merge can bypass checks and lose work.
53
+
54
+ ## Scope: touch only what was requested
55
+
56
+ Trigger: a request names specific files, slides, or targets. Default: change only
57
+ those; do not expand scope to adjacent items. Confirm: if neighboring changes seem
58
+ warranted, propose them separately rather than folding them in unasked.
59
+
60
+ ## Re-capture: keep vs. overwrite an existing tracked artifact
61
+
62
+ Trigger: a worker is about to re-run an expensive capture for an artifact that
63
+ already has a tracked copy for the same key (e.g. a coverage baseline, a mutation
64
+ history entry, a benchmark snapshot). Default: **keep** — recommend reuse of the
65
+ existing tracked artifact, and confirm before discarding what may be a comparison
66
+ baseline. Overwriting without confirmation risks silently invalidating the
67
+ baseline every later phase measures against.
68
+
69
+ Mechanics:
70
+
71
+ - **Interactive**: prompt keep/overwrite with default keep. An unrecognized answer
72
+ (anything other than "keep" or "overwrite", case-insensitive) re-prompts with the
73
+ identical choice — never silently falls back to either option. There is no retry
74
+ limit and no timeout; the guard keeps re-prompting until it receives "keep" or
75
+ "overwrite".
76
+ - **Non-interactive** (no usable TTY, or `DEV_TEAM_AUTO_APPROVE=1`): keep the
77
+ existing tracked artifact automatically, without prompting. The auto-decision is
78
+ both **logged** (to the worker's own record/audit trail) **and echoed** to run
79
+ output — a decision recorded only to a file the operator never sees is not an
80
+ auto-decision the operator can trust.
81
+ - **Existing file is malformed or corrupt**: if the existing tracked artifact fails to parse
82
+ (e.g. invalid JSON from a prior interrupted write), treat it as absent — never
83
+ silently keep a file that cannot be read back. Emit a warning naming why a fresh
84
+ capture is happening.
85
+
86
+ Confirm: on overwrite, replace the tracked artifact with the fresh capture; on keep
87
+ (or an equivalent non-interactive default), skip the expensive capture entirely and
88
+ reuse the existing artifact's recorded values.