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,124 @@
1
+ # Artifact migration guide (upgrading an existing project)
2
+
3
+ Audience: **operators** — anyone upgrading an existing project's `dev-team` plugin
4
+ install across the `.claude/`-scoped runtime artifact change (issue #1406, plan
5
+ `opt-in-metrics-and-claude-scoped-artifacts.md`). This is not a maintainer doc —
6
+ see [`developer-notes.md`](developer-notes.md) for plugin-development docs.
7
+
8
+ ## What changed
9
+
10
+ Two coordinated changes:
11
+
12
+ 1. **Consent flips from on-by-default to off-by-default**, gated by a single
13
+ user-level config file: `~/.claude/telemetry.json`. `telemetry.jsonl` and
14
+ `artifact-usage.json` move to `~/.claude/metrics/`.
15
+ 2. **Every other project-scoped runtime artifact directory** (`metrics/`,
16
+ `memory/`, `plans/`) moves under the project's own `.claude/` instead of the
17
+ repo root, and the reports domain (`reports/` + `DEV_TEAM_REPORTS/`)
18
+ consolidates into a new top-level `.dev-team-reports/`.
19
+
20
+ Each pre-existing file falls into exactly one of three treatments below —
21
+ **never assume a file you rely on was auto-migrated; check which bucket it's in.**
22
+
23
+ ## 1. One-time move (writers with a real Python touchpoint)
24
+
25
+ These files are moved — not copied — from their old bare path into
26
+ `.claude/<category>/` **the first time their owning hook/script writes (or, for
27
+ one case, reads) after upgrade**. The move is per-file, never a directory
28
+ sweep, and skips any file that is git-tracked (a tracked legacy file is left in
29
+ place rather than silently moved out from under version control).
30
+
31
+ | File | Old path | New path |
32
+ | --- | --- | --- |
33
+ | `cost-metering.jsonl` | `metrics/cost-metering.jsonl` | `.claude/metrics/cost-metering.jsonl` |
34
+ | `{date}-task-log.jsonl` | `metrics/{date}-task-log.jsonl` | `.claude/metrics/{date}-task-log.jsonl` |
35
+ | `config-changelog.jsonl` | `metrics/config-changelog.jsonl` | `.claude/metrics/config-changelog.jsonl` |
36
+ | `pending-review.jsonl` | `metrics/pending-review.jsonl` | `.claude/metrics/pending-review.jsonl` |
37
+ | `learning-loop-state.json` | `metrics/learning-loop-state.json` | `.claude/metrics/learning-loop-state.json` |
38
+ | boundary-events log | `metrics/boundary-events.jsonl` | `.claude/metrics/boundary-events.jsonl` |
39
+ | `/test-improve`'s phase-state tree | `memory/test-improve/<slug>/` | `.claude/memory/test-improve/<slug>/` (directory-migrated file-by-file on the next resume; `refactor-backlog.md` is excluded — see § 2) |
40
+
41
+ The shared mechanism is `hooks/lib/artifact_paths.py`'s `resolve_file()` (single
42
+ file) and `migrate_dir()` (whole subtree, one call per invocation, still
43
+ file-by-file — never overwrites an existing destination). Both are fail-open:
44
+ a failed move logs one diagnostic line to stderr and the calling operation
45
+ proceeds unaffected — it never blocks or raises.
46
+
47
+ `verify-log.jsonl` is a deliberate exception: it stays at the bare
48
+ `metrics/verify-log.jsonl` and is **not** part of this migration at all (it
49
+ was never moved, gated, or relocated).
50
+
51
+ ## 2. Documented clean break (agent-instruction-driven writers, no Python write call site)
52
+
53
+ These files are written by agent *instructions* (skill/agent markdown telling
54
+ Claude where to `Write`), not by a Python hook. There is no code path that can
55
+ migrate them, so pre-existing top-level content is **left in place
56
+ permanently** — it is not moved, and new writes after upgrade go straight to
57
+ the new location, meaning old and new content end up split across two paths
58
+ with no automatic reconciliation.
59
+
60
+ | File / tree | Old path | New path (new writes only) |
61
+ | --- | --- | --- |
62
+ | `review-value.jsonl` | `metrics/review-value.jsonl` | `.claude/metrics/review-value.jsonl` |
63
+ | `build-phase.json` | `memory/build-phase.json` | `.claude/memory/build-phase.json` (read side uses `migrate=False` deliberately — it never moves the legacy file) |
64
+ | `refactor-backlog.md` (`/test-improve`) | `memory/test-improve/<slug>/refactor-backlog.md` | `.dev-team-reports/test-improve/<slug>/refactor-backlog.md` (a report, not runtime state — explicitly excluded from `migrate_dir()`'s `.claude/memory/` sweep; see the reports-domain row below) |
65
+ | `/test-improve` reports output | `reports/test-improve/<slug>/` | `.dev-team-reports/test-improve/<slug>/` |
66
+ | `/test-improve` plan artifacts | `plans/test-improve/` | `.claude/plans/test-improve/` |
67
+ | `DEV_TEAM_REPORTS/`-domain writers (`/review-agent`, `/code-review` interactive, `/triage`, `/report-pdf`, `/ship`, `/exploratory-testing`, `/session-review`) | `DEV_TEAM_REPORTS/...` / `reports/...` | `.dev-team-reports/...` |
68
+
69
+ **Practical consequence:** if a project has an in-flight `/build` session (a
70
+ recorded `build-phase.json`) or unresolved review-value/reports content at the
71
+ moment it crosses the upgrade boundary, that in-flight state is effectively
72
+ orphaned at the old path — `/build`'s phase tracking for that session will
73
+ behave as if no phase is recorded. There is no data-loss risk (nothing is
74
+ deleted), but the record will not be picked up post-upgrade.
75
+
76
+ ## 3. Dual-read fallback (transition-window self-healing)
77
+
78
+ Three reader commands tolerate the split between old and new locations
79
+ without any manual step:
80
+
81
+ - **`/cost-report`** and **`/harness-audit`** read `cost-metering.jsonl`,
82
+ `review-value.jsonl`, and `config-changelog.jsonl` by preferring
83
+ `.claude/metrics/<file>`, falling back to the bare `metrics/<file>` if the
84
+ new path doesn't exist yet. This self-heals during the transition window —
85
+ no operator action needed.
86
+ - **`/artifact-lifecycle`** reads `artifact-usage.json` exclusively from
87
+ `~/.claude/metrics/artifact-usage.json` (home-scoped). This file was already
88
+ home-scoped as of the telemetry-consent change, so there is no legacy
89
+ project-scoped fallback to read — any older doc reference to a
90
+ project-scoped path was a documentation bug, now corrected to point at the
91
+ one location the file has ever actually been written to.
92
+
93
+ ## Consent-file migration is manual — not automatic
94
+
95
+ If a project previously had a `.claude/telemetry.json` (or, pre-this-change,
96
+ any project-level telemetry consent setting) with `{"enabled": true}`, **that
97
+ setting is not carried forward.** Consent is now resolved exclusively from
98
+ `~/.claude/telemetry.json` (home-scoped). `DEV_TEAM_TELEMETRY` also has no
99
+ effect any more.
100
+
101
+ **Action required:** if you want telemetry after upgrading, re-opt-in at the
102
+ new location:
103
+
104
+ ```bash
105
+ mkdir -p ~/.claude
106
+ echo '{"enabled": true}' > ~/.claude/telemetry.json
107
+ ```
108
+
109
+ Nothing reads or migrates a project's old consent file automatically — an
110
+ un-migrated project simply defaults to telemetry disabled (fail-open), which
111
+ is the deliberate new default posture, not a bug.
112
+
113
+ ## Quick reference: what to check after upgrading
114
+
115
+ - [ ] If you rely on telemetry, artifact-usage, or cost data: re-opt-in via
116
+ `~/.claude/telemetry.json` (see above) — nothing carries over.
117
+ - [ ] If you have an in-flight `/build` session across the upgrade: expect its
118
+ phase-tracking state to reset (§ 2, `build-phase.json`).
119
+ - [ ] Old top-level `reports/`, `DEV_TEAM_REPORTS/`, `memory/`,
120
+ `plans/test-improve/` content stays exactly where it is — read it from
121
+ the old path, or move it by hand if you want it under the new tree.
122
+ - [ ] `.gitignore` rules for these directories were rewritten to match the new
123
+ paths; if you have local overrides, re-check them against the new
124
+ `.claude/`-scoped and `.dev-team-reports/`-scoped paths.
@@ -0,0 +1,149 @@
1
+ # code-intelligence-nudge
2
+
3
+ A PreToolUse hook that recommends whichever of **CodeGraph**, **Repowise**,
4
+ and **Graphify** are indexed in the project over multi-file `Read` / `Grep` /
5
+ `Glob` exploration. Renamed and generalized from `codegraph-nudge` (#1368):
6
+ the original only ever recommended CodeGraph, even on projects where
7
+ Repowise and/or Graphify were also indexed, pushing agents toward the
8
+ narrowest tool even when the question called for a different one.
9
+
10
+ ## What it does
11
+
12
+ The hook fires on every `Read`, `Grep`, and `Glob` tool call. It exits 0
13
+ silently unless **all** of the following are true:
14
+
15
+ 1. The tool call looks like multi-file exploration:
16
+ - `Grep` with `path` unset, or `path` pointing to a directory, or `path` containing glob metacharacters.
17
+ - `Glob` with a `pattern` containing `*`, `?`, or `[`.
18
+ - (Single-file `Read` calls are always silent; `Read` is one path.)
19
+ 2. At least one of `.codegraph/`, `.repowise/`, or `graphify-out/graph.json`
20
+ is present in the project's cwd.
21
+ 3. That tool hasn't already been used earlier in the current turn (see
22
+ "Sentinel mechanism" below) — Graphify is the one exception; see
23
+ "Known asymmetry: Graphify never suppresses" below.
24
+
25
+ Detection is independent per tool: `.codegraph/` must be a directory,
26
+ `.repowise/` must be a directory, and `graphify-out/graph.json` must be a
27
+ regular file. A path that exists but is the wrong type (e.g. `.repowise` as
28
+ a plain file, or `graphify-out/graph.json` as a directory) is treated as
29
+ "not present," never as a crash. `graphify-out/` existing without
30
+ `graph.json` inside it produces no Graphify nudge.
31
+
32
+ **One tool present** — the hook prints a single-tool nudge to stderr, e.g.:
33
+
34
+ ```text
35
+ [code-intelligence-nudge] CodeGraph is initialized in this project. Prefer codegraph_explore — structure, call graph, blast radius (not risk, rationale, or non-code content) for multi-file exploration; Grep/Glob/Read for confirming a specific detail.
36
+ ```
37
+
38
+ **Two or more tools present** — the hook composes one combined message
39
+ naming each present-and-unused tool, in a **fixed precedence order**
40
+ (Graphify, then Repowise, then CodeGraph — never the order in which the
41
+ filesystem checks happened to run), each with a short differentiator clause
42
+ so a reader knows *why* to pick one tool over another, not just its name:
43
+
44
+ ```text
45
+ [code-intelligence-nudge] Multiple code-intelligence indexes found. Pick whichever matches your question:
46
+ - graphify query "<question>" — cross-artifact: code + docs + schemas + infra (non-code content; not a faster CodeGraph/Repowise)
47
+ - repowise get_context / get_risk / get_why — risk, rationale, code health, dead code (not raw call-graph structure)
48
+ - codegraph_explore — structure, call graph, blast radius (not risk, rationale, or non-code content)
49
+ Grep/Glob/Read for confirming a specific detail.
50
+ ```
51
+
52
+ Only the present-and-not-yet-used-this-turn tools appear in the bulleted
53
+ list — a tool already used this turn (per the sentinel) drops out of the
54
+ message entirely; if that leaves zero qualifying tools, the hook is fully
55
+ silent (no output at all, not an empty bulleted list).
56
+
57
+ The hook **always exits 0** unless `/careful` mode is active, in which
58
+ case it exits 2 (blocking the tool call) and appends `[blocked by /careful]`
59
+ to the message. This matches the precedent set by `hooks/destructive_guard.py`.
60
+
61
+ ## Fail-open
62
+
63
+ Any internal error — malformed JSON on stdin, an unreadable transcript, a
64
+ missing or corrupt sentinel, a wrong-type `.codegraph/`/`.repowise/`
65
+ directory or `graphify-out/graph.json` file — exits 0 without output. The
66
+ hook is a nudge, never a gate. A broken hook must never block legitimate
67
+ `Read` / `Grep` / `Glob` calls, and a malformed sentinel is always read as
68
+ "no tool used this turn" rather than raised.
69
+
70
+ ## Sentinel mechanism
71
+
72
+ A companion hook, `hooks/code_intelligence_turn_mark.py`, runs as a
73
+ `PostToolUse` hook on two matchers: `mcp__codegraph__.*` and
74
+ `mcp__plugin_repowise_repowise__.*`. Each time a recognized CodeGraph or
75
+ Repowise MCP tool completes, it writes a small JSON sentinel to
76
+ `${CLAUDE_PROJECT_DIR}/.claude/code-intelligence-turn-state.json`:
77
+
78
+ ```json
79
+ { "transcript_id": "<basename of transcript_path minus extension>",
80
+ "turn_counter": <count of `"type":"user"` markers in the last ~1 MiB of the transcript>,
81
+ "tools_used": ["codegraph", "repowise"] }
82
+ ```
83
+
84
+ `tools_used` **accumulates** rather than overwrites within the same turn —
85
+ if a `codegraph_*` tool ran earlier this turn and a `repowise` tool runs
86
+ next, the sentinel ends up listing both families, deduplicated, in
87
+ first-used order. A new turn (the transcript's `turn_counter` incremented,
88
+ i.e. the user sent another message) or a new `transcript_id` resets the
89
+ list to just the family that triggered the write — the accumulation never
90
+ carries across a turn boundary.
91
+
92
+ The nudge hook reads this sentinel on each invocation and re-computes the
93
+ current `transcript_id` and `turn_counter` from the live transcript. If
94
+ both match the sentinel, every family listed in `tools_used` is subtracted
95
+ from the set of qualifying tools before composing the message — so a
96
+ two-tool project where CodeGraph was already used this turn shows only the
97
+ Repowise line (or is fully silent if Repowise was used too). If the sentinel
98
+ is missing, unparseable, has no `tools_used` field at all (the pre-upgrade
99
+ schema), or has a `tools_used` field that isn't a list, it's treated as an
100
+ empty list — "no tool used this turn" — never a crash.
101
+
102
+ This avoids walking the full transcript on every `Read` / `Grep` / `Glob`
103
+ call (the mark hook does the lookup once, after the CodeGraph/Repowise tool
104
+ runs).
105
+
106
+ ### Known asymmetry: Graphify never suppresses
107
+
108
+ Graphify has no MCP surface — it's conventionally invoked via `Bash`
109
+ (`graphify query "<question>"`, `graphify explain "<concept>"`, etc.), and
110
+ no `Bash` matcher was added to write into the sentinel (a deliberate
111
+ scope decision — see the plan's "Decision-defaults stances" section, not an
112
+ oversight). CodeGraph's and Repowise's nudge lines drop out of the combined
113
+ message once either tool has actually been used this turn; Graphify's line
114
+ cannot be suppressed the same way and can re-fire immediately after a
115
+ CLI-based `graphify query` call, even within the same turn. This is an
116
+ accepted tradeoff, not an unfixed bug — flagging it here so a future
117
+ contributor doesn't mistake the asymmetry for a regression.
118
+
119
+ ## How to silence it
120
+
121
+ 1. Run a `codegraph_*` MCP tool and/or a `repowise` MCP tool first in the
122
+ same turn — the rest of the turn's `Read` / `Grep` / `Glob` calls omit
123
+ that tool's line (or go fully silent if every present tool has been used).
124
+ Graphify is the exception — see "Known asymmetry" above.
125
+ 2. Use single-file shapes when you really do want raw file IO:
126
+ - `Read` is always silent.
127
+ - `Grep` with `path` set to an explicit file is silent.
128
+ - `Glob` with a literal `pattern` (no metacharacters) is silent.
129
+ 3. Remove `.codegraph/`, `.repowise/`, and/or `graphify-out/` from the
130
+ project — the hook is project-scoped and only nudges for tools it
131
+ detects as present.
132
+
133
+ ## How to escalate it
134
+
135
+ `/careful` makes the nudge a hard block (`exit 2`). Useful for
136
+ production-critical sessions where you want to force use of an available
137
+ code-intelligence tool.
138
+
139
+ ## Source
140
+
141
+ - `plugins/dev-team/hooks/code_intelligence_nudge.py`
142
+ - `plugins/dev-team/hooks/code_intelligence_turn_mark.py`
143
+ - `plugins/dev-team/hooks/lib/turn_identity.py` (shared `transcript_id`/
144
+ `count_user_lines` computation used by both hooks)
145
+ - Registered in `plugins/dev-team/settings.json` under PreToolUse
146
+ (`Read`, `Grep`, `Glob`) and PostToolUse (`mcp__codegraph__.*`,
147
+ `mcp__plugin_repowise_repowise__.*`).
148
+ - Tests: `plugins/dev-team/tests/hooks/test_code_intelligence_nudge.py` and
149
+ `plugins/dev-team/tests/hooks/test_code_intelligence_turn_mark.py`.
@@ -0,0 +1,294 @@
1
+ # Code Review Process
2
+
3
+ How `/code-review` (and its alias `/review`) works end-to-end: from invocation to final report, including the auto-fix loop and the artifacts it produces.
4
+
5
+ > **Authoritative source**: the skill spec at [`skills/code-review/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/code-review/SKILL.md). This document is a reader-friendly walkthrough that links to the spec, rubric, template, and output format for details.
6
+
7
+ **On this page**: [What it does](#what-it-does) · [Invocation](#invocation) · [Pipeline](#pipeline) · [Artifacts](#artifacts) · [Customization points](#customization-points) · [Relationship to other workflows](#relationship-to-other-workflows) · [Concurrent use](#concurrent-use) · [References](#references)
8
+
9
+ ## What it does
10
+
11
+ `/code-review` is an **orchestrator-only** workflow. It does not review code itself — it dispatches a suite of focused review agents in parallel, aggregates their structured findings, optionally auto-fixes actionable issues in a bounded loop, and produces a health-scored report.
12
+
13
+ It follows the [Minimum CD agent configuration](https://migration.minimumcd.org/docs/agentic-cd/agent-configuration/) pattern: delegate all semantic analysis, minimize context passed to each agent, run cheap deterministic checks before spending tokens on AI, and return structured results.
14
+
15
+ ## Invocation
16
+
17
+ ```bash
18
+ /code-review # auto-scope
19
+ /code-review --path src/auth # targeted directory
20
+ /code-review --since main # everything changed since ref
21
+ /code-review --all # full repository
22
+ /code-review --agent test-review # single agent (delegates to /review-agent)
23
+ /code-review --json # machine-readable output (CI)
24
+ /code-review --background # drift review (no gates, structural agents only)
25
+ /code-review --force --reason "release freeze" # skip gates, logged
26
+ ```
27
+
28
+ See the [skill spec](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/code-review/SKILL.md#parse-arguments) for the full argument list.
29
+
30
+ ## Pipeline
31
+
32
+ ```mermaid
33
+ %%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#dbeafe', 'primaryTextColor': '#1e3a5f', 'primaryBorderColor': '#3b82f6', 'lineColor': '#64748b', 'secondaryColor': '#f1f5f9', 'tertiaryColor': '#e0f2fe', 'background': '#ffffff', 'mainBkg': '#dbeafe', 'nodeBorder': '#2563eb', 'clusterBkg': '#eff6ff', 'clusterBorder': '#bfdbfe', 'titleColor': '#1e3a5f', 'edgeLabelBackground': '#f8fafc'}}}%%
34
+ flowchart TD
35
+ A[/code-review invoked/] --> B[1. Determine target files]
36
+ B --> C{Auto-scope}
37
+ C -->|dirty tree| D1[Uncommitted files]
38
+ C -->|clean tree| D2[Full repo]
39
+ D1 --> DC{1a. All files docs-only?}
40
+ D2 --> DC
41
+ DC -->|yes — no --force/--agent/--background| SC[Short-circuit: notice +<br/>write .pr-review-passed if auto-scoped + stop]
42
+ DC -->|no| E[1b. REVIEW-CONTEXT.md]
43
+ E --> F[1c. Probe MCP tools]
44
+ F --> G[2. Pre-flight gates]
45
+ G -->|fail| X1[Stop — no agents run]
46
+ G -->|pass| H[2b. Static analysis pre-pass]
47
+ H --> I[3. Select enabled agents]
48
+ I --> J[4. Dispatch agents in parallel]
49
+ J --> K[5. Apply ACCEPTED-RISKS suppression]
50
+ K --> L[5b. Compute health score]
51
+ L --> M{Actionable issues?}
52
+ M -->|no| R[7. Generate report]
53
+ M -->|yes| N[6. Ask: fix or report only?]
54
+ N -->|report only| R
55
+ N -->|fix| O[6a. Review-fix loop<br/>max 5 iterations]
56
+ O --> P{Converged?}
57
+ P -->|yes| R
58
+ P -->|no| Q[Escalate remaining to human]
59
+ Q --> R
60
+ R --> S[8. Save correction prompts]
61
+ S --> T[9. Write .pr-review-passed if applicable]
62
+ ```
63
+
64
+ ### 1. Determine target files
65
+
66
+ File scope is resolved with this priority: `--path` → `--since` → `--all` → **auto-scope**.
67
+
68
+ Auto-scope (the default) runs `git diff --name-only` plus `git diff --cached --name-only`. If either shows changes, only those files are reviewed. If the working tree is clean, the full repository is reviewed.
69
+
70
+ | File count (full-repo mode) | Behavior |
71
+ | ----------------------------- | ---------- |
72
+ | ≤ 200 | Proceed |
73
+ | 201–500 | Warn, proceed |
74
+ | > 500 | Warn and request confirmation |
75
+
76
+ ### 1a. Documentation-only short-circuit
77
+
78
+ After the target set is known, if **every** file is documentation, `/code-review` short-circuits: it emits `Documentation-only changeset — skipping code review`, writes the `.pr-review-passed` gate file when auto-scoped to uncommitted changes (so the eventual `gh pr create` isn't blocked, #1886), and stops before any gate or agent runs. In `--json` mode it emits `{"status": "skipped", "reason": "documentation-only"}`.
79
+
80
+ Documentation = `.md`/`.mdx`/`.rst`/`.txt`/`.adoc`, `docs/**`, and root docs (`README*`, `CHANGELOG*`, `LICENSE*`, …) — **except functional Claude-config markdown** (`.claude/**`, `agents/`, `skills/`, `prompts/`, `knowledge/`, `templates/agents/`, `CLAUDE.md`, `AGENTS.md`), which is always reviewed. `--force --reason`, `--agent`, and `--background` bypass the short-circuit.
81
+
82
+ ### 1b. Institutional context
83
+
84
+ If `REVIEW-CONTEXT.md` exists at the repo root, its contents are read and passed to every agent as "Institutional context provided for this review". This is where a team records domain knowledge, related services, known quirks, or architectural history that agents cannot discover from code alone. The file is optional.
85
+
86
+ ### 1c. Optional MCP tools
87
+
88
+ The orchestrator probes for enhanced analysis tools (RoslynMCP, code knowledge graph, documentation MCP, Semgrep) and records availability. Agents fall back to Glob/Grep/Read when a tool is unavailable — all agents work without them. Tool availability appears in the final report.
89
+
90
+ ### 2. Pre-flight gates (fail fast, fail cheap)
91
+
92
+ Deterministic checks run before any AI agent is invoked. Cheaper checks block expensive ones.
93
+
94
+ | # | Gate | Tool | Stops on |
95
+ | --- | ------ | ------ | ---------- |
96
+ | 1 | Lint | `npx eslint` (or project's lint) | errors |
97
+ | 2 | Type check | `npx tsc --noEmit` (if `tsconfig.json` exists) | errors |
98
+ | 3 | Secret scan | grep for common secret patterns | any match |
99
+ | 4 | Semgrep SAST | `semgrep scan --config auto` | ERROR-severity findings |
100
+ | 5 | Pipeline-red check | `gh run list` on current branch | failing CI (warn only) |
101
+
102
+ Missing tools are skipped silently. Gate failures stop the pipeline — no agents run. `--force --reason "<text>"` skips all gates (and the step-1a documentation-only short-circuit) and logs an entry to `.claude/metrics/override-audit.jsonl`. `--background` skips gates entirely.
103
+
104
+ ### 2b. Static analysis pre-pass
105
+
106
+ If static analysis tools are available (Semgrep, ESLint, TypeScript, Ruff, mypy), they run against the target files and collect structured findings. Results are **deduplicated across tools** and injected into each agent's prompt as pre-confirmed context:
107
+
108
+ > "These issues were detected by static analysis tools. Do not re-report them. Focus on semantic and architectural concerns."
109
+
110
+ Unlike pre-flight gates, the pre-pass never stops the pipeline — its purpose is to give agents a head start. If Semgrep already ran in gate 4, findings are reused rather than re-collected. See [`skills/static-analysis-integration/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/SKILL.md) for detection, execution, and deduplication rules.
111
+
112
+ ### 3. Select enabled agents
113
+
114
+ All review agents in `agents/*.md` that declare an `effort:` band are enabled by default. Two language-agnostic agents always run regardless of tech stack:
115
+
116
+ - `doc-review` — README, API docs, inline comments, ADRs
117
+ - `arch-review` — layer boundaries, dependency direction, pattern consistency
118
+
119
+ `claude-setup-review`, `token-efficiency-review`, and `ai-provenance-review` are deliberately absent (#1733). `claude-setup-review` reviews the **harness** rather than the changeset, so it had nothing to say about a diff — `Scope: always` put it in an 18-lens panel for a two-file JavaScript change in a project with no Claude configuration at all. `token-efficiency-review` (CLAUDE.md/rule verbosity, file-size drift) and `ai-provenance-review` (AI-provenance verification debt) are properties of the whole tree, not any single diff, for the same reason. All three are now dispatched instead by the whole-tree `/repo-review` command — `claude-setup-review` also stays reachable on demand via `/claude-setup-review`.
120
+
121
+ A project-local `review-config.json` can disable specific agents. `--background` mode restricts the run to `doc-review`, `arch-review`, `naming-review`, and `structure-review`.
122
+
123
+ ### 4. Dispatch agents in parallel
124
+
125
+ Each enabled agent is spawned as a sub-agent via the Agent tool, all in a single message for maximum parallelism. Each sub-agent:
126
+
127
+ - Runs in isolation (context is **not** shared with the parent)
128
+ - Receives only the files matching its declared scope (e.g., `js-fp-review` gets JS/TS only)
129
+ - Receives the minimum context its `Context needs` field requires
130
+
131
+ | `Context needs` | Input | When to use |
132
+ | ----------------- | ------- | ------------- |
133
+ | `diff-only` | Git diff output only | Pattern-matching agents (naming, FP) |
134
+ | `full-file` | Complete file contents | Agents needing function-level context |
135
+ | `project-structure` | Full files + directory tree | Agents reasoning about architecture |
136
+
137
+ When the target is the full repository (`--all`, `--path`, or clean auto-scope), agents always receive full files regardless of `Context needs`.
138
+
139
+ **Model selection** is declared per agent, not orchestrator-controlled. Each
140
+ agent declares `model:` (an alias, a full model ID, or `inherit`) and
141
+ `effort:` directly in its frontmatter — the native Claude Code sub-agent
142
+ contract, resolved by the harness itself before dispatch (ADR 0026).
143
+
144
+ Each agent returns a JSON result: `{agentName, status, modelTier, issues[], summary}`. See [`skills/code-review/output-format.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/code-review/output-format.md).
145
+
146
+ ### 5. Aggregate results
147
+
148
+ **5a. ACCEPTED-RISKS suppression.** If `ACCEPTED-RISKS.md` exists at the repo root, its YAML rules are applied in declaration order. The first matching rule suppresses a finding and emits a one-line audit entry. Expired rules become inert and emit a WARN. Broad rules (wildcard `rule_id` or multi-file globs) emit an informational notice. Schema-invalid rules fail the run. Suppressed findings bypass the fix loop and appear in a dedicated report section grouped by rule id. See [`knowledge/accepted-risks-schema.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/accepted-risks-schema.md).
149
+
150
+ **5b. Health scoring** per [`knowledge/review-rubric.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/review-rubric.md):
151
+
152
+ | Score | Condition |
153
+ | ------- | ----------- |
154
+ | 🟢 HEALTHY | 0 fail AND ≤ 2 warn |
155
+ | 🟠 NEEDS ATTENTION | 1–2 fail OR 3+ warn |
156
+ | 🔴 CRITICAL | 3+ fail OR any `security-review` fail |
157
+
158
+ **Actionability classification** determines what the fix loop touches:
159
+ error/warning findings at high or medium confidence are auto-applied, and
160
+ everything else (any `confidence: none`, and all suggestions) is report-only.
161
+ The canonical rubric — severity × confidence → actionable — lives in the
162
+ [review-corrections flow](triage-workflow.md#4-the-review-corrections-flow).
163
+
164
+ ### 6. Fix or report only?
165
+
166
+ If there are zero actionable issues, skip to report generation. Otherwise the orchestrator presents a summary and asks the user:
167
+
168
+ > **"Fix these issues automatically, or save as report only?"**
169
+
170
+ - **Fix** → enter the review-fix loop
171
+ - **Report only** → skip to report generation with all findings intact
172
+
173
+ **Exception — non-interactive mode**: when `/code-review` runs inside `/build` or `/pr`, the prompt is skipped and the fix loop runs automatically. The caller already owns the human gate — the orchestrator's Phase 3 approval for `/build`, and the pre-PR confirmation for `/pr`.
174
+
175
+ ### 6a. Review-fix loop
176
+
177
+ ```
178
+ iteration = 1
179
+ while actionable_issues > 0 and iteration ≤ 5:
180
+ 1. Apply fixes (file-by-file, top-to-bottom by line number)
181
+ 2. Run tests; if tests fail, revert the last fix and mark it human-required
182
+ 3. Re-run only the agents that reported actionable issues, against only the modified files
183
+ 4. Re-aggregate: merge new results with carry-forward passes
184
+ 5. iteration += 1
185
+ ```
186
+
187
+ **Exit conditions**:
188
+
189
+ | Condition | Outcome |
190
+ | ----------- | --------- |
191
+ | Zero actionable issues | Converged → generate report |
192
+ | Iteration limit (5) reached | Escalate remaining issues to human |
193
+ | Same issues persist after fix attempt | Not converging → exit and escalate |
194
+ | Test failure after fix + revert | Mark issue human-required, continue |
195
+
196
+ The final report includes a loop table showing iterations, issues fixed, and agents re-run.
197
+
198
+ ### 7. Generate report
199
+
200
+ Output format depends on the `--json` flag:
201
+
202
+ - **JSON** — a single aggregated object with overall status, per-agent results, totals, fix summary, and token estimate. Consumable by CI.
203
+ - **Prose** — a markdown report following [`knowledge/review-template.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/review-template.md): summary table, pre-flight status, institutional context, issues by file (sorted by severity), loop iteration table, recommendations, tool availability.
204
+
205
+ Remaining issues (not auto-fixed) are tagged `[confidence: none]`, `[auto-fix failed — human review required]`, or `[suggestion]`.
206
+
207
+ ### 8. Correction prompts
208
+
209
+ For every unfixed actionable issue — plus suggestions worth addressing — a correction prompt JSON is written to `corrections/`. Each prompt includes priority, confidence, category, instruction, context, affected files, and `autoFixResult`. These can be addressed manually or with [`/apply-fixes`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/apply-fixes/SKILL.md).
210
+
211
+ The full lifecycle of these files — discovery to applied fix, including who owns a `corrections/*.json` after its branch merges — is documented in [triage-workflow.md](triage-workflow.md).
212
+
213
+ ### 9. Pre-PR gate file
214
+
215
+ When the review was auto-scoped to uncommitted changes, the final status is `pass` or `warn`, and step 6a's fix loop (if it ran) did not exit with actionable issues still outstanding, the orchestrator writes `.pr-review-passed` to `.claude/memory/` (#1886) — a SHA-256 hash of the branch's diff against its base (`git diff <base>...HEAD`), not just the staged patch — an edit or commit after review changes this hash and invalidates the gate:
216
+
217
+ ```bash
218
+ HASH=$(python3 "${CLAUDE_PLUGIN_ROOT}/hooks/lib/review_gate_hash.py" --branch-diff)
219
+ mkdir -p .claude/memory && echo "$HASH" > .claude/memory/.pr-review-passed
220
+ ```
221
+
222
+ Always use this shared helper, not a hand-rolled `git diff | shasum` pipeline — the helper pins several git config overrides (relative-path scoping, external diff drivers, submodule visibility) that a raw pipeline would not.
223
+
224
+ **#1886: the gate moved from `git commit` to `gh pr create`.** `hooks/pre_pr_review.py` reads `.claude/memory/.pr-review-passed` at PR-creation time, bound to the branch's diff vs. its base (`branch_diff_gate_hash()`), not the staged-patch hash (`review_gate_hash()`) the retired `.review-passed` used. `hooks/pre_commit_review.py` (the former reader of `.review-passed`) is now a documented no-op, and `.review-passed` itself is no longer written by this step or read by anything.
225
+
226
+ **Known limitation.** `agent_dispatch_ledger.py` still stamps every dispatch's corroborating evidence with the staged-patch hash, never the branch-diff hash. The two are identical only in the common single-commit-then-PR shape (branch cut from base, reviewed once while staged, committed, then a PR opened immediately) — a branch with multiple separate review-and-commit cycles will correctly fail this gate at `gh pr create` time and need a fresh `/code-review` run against its current diff. Closing this for every shape is tracked as a follow-up, not fixed here.
227
+
228
+ ### Reasoned bypass (`PR_GATE_BYPASS_REASON`)
229
+
230
+ **#1886:** `git commit --no-verify`/`-n` + `GATE_BYPASS_REASON` was the
231
+ historical bypass for the commit-time gate — both still work as ordinary git
232
+ flags/env vars, but `hooks/pre_commit_review.py` no longer reads either, so
233
+ they no longer gate anything at commit time.
234
+
235
+ The current gate (`hooks/pre_pr_review.py`, triggered by `gh pr create`)
236
+ requires a non-empty `PR_GATE_BYPASS_REASON` environment variable to bypass
237
+ — `gh` has no native `--no-verify`-shaped flag, so the env var alone is both
238
+ the trigger and the reason:
239
+
240
+ ```bash
241
+ PR_GATE_BYPASS_REASON="hotfix, review to follow" gh pr create ...
242
+ ```
243
+
244
+ With it set, the hook allows the PR to open and appends an accountability
245
+ line — timestamp, branch, which mechanism triggered it, the reason,
246
+ branch-diff file count, and plugin version — to
247
+ `.claude/metrics/gate-bypass-audit.jsonl`, unconditionally (this log is not
248
+ gated by `DEV_TEAM_TELEMETRY`). Same accountability posture as the original
249
+ commit-time bypass (#709), relocated to the new trigger point (#1886).
250
+
251
+ ## Artifacts
252
+
253
+ | Artifact | When | Purpose |
254
+ | ---------- | ------ | --------- |
255
+ | Stdout report (markdown or JSON) | Every run | Human or CI consumption |
256
+ | `corrections/*.json` | When unfixed actionable or suggestion issues remain | Feeds `/apply-fixes` |
257
+ | `.pr-review-passed` | Auto-scoped clean/warn runs | Read by `hooks/pre_pr_review.py` at `gh pr create` time (#1886 — see § 9 above) |
258
+ | `.claude/metrics/override-audit.jsonl` | `--force --reason ...` | Audit trail for skipped gates |
259
+ | `.claude/metrics/gate-bypass-audit.jsonl` | `gh pr create` with `PR_GATE_BYPASS_REASON` set (#1886) | Audit trail for reasoned pre-PR-gate bypasses |
260
+
261
+ ## Customization points
262
+
263
+ | File | Location | Effect |
264
+ | ------ | ---------- | -------- |
265
+ | `review-config.json` | Project root | Disables specific agents per project |
266
+ | `REVIEW-CONTEXT.md` | Project root | Injects institutional knowledge into every agent's prompt |
267
+ | `ACCEPTED-RISKS.md` | Project root | Suppresses known findings with audit trail and expiry |
268
+
269
+ All three are optional and project-local — they are not part of the plugin.
270
+
271
+ ## Relationship to other workflows
272
+
273
+ - **Inline review checkpoints** (Phase 3 of `/build`) use the same review-fix loop mechanics, but the orchestrator selects a **targeted** subset of agents based on what changed in the unit of work. `/code-review` is the **final gate** before commit and runs the full enabled suite.
274
+ - **[`/review-agent`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/review-agent/SKILL.md)** runs a single agent — used for targeted checks and as the worker for inline checkpoints.
275
+ - **[`/apply-fixes`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/apply-fixes/SKILL.md)** consumes the `corrections/` directory produced here.
276
+ - **[`/pr`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/pr/SKILL.md)** runs `/code-review --json` as part of its pre-PR quality gate. It runs non-interactively (fix loop auto-applies, no "fix or report?" prompt) and `/pr` branches on the returned status — `overall: pass/warn` or `status: skipped` proceeds, `overall: fail` re-engages the user.
277
+
278
+ ## Concurrent use
279
+
280
+ The `.pr-review-passed` gate is a single, gitignored file per working tree, so two
281
+ agents sharing **one** checkout overwrite each other's gate. Give each
282
+ concurrent agent its own git worktree — the full rationale and setup are in
283
+ [concurrent-use.md](concurrent-use.md).
284
+
285
+ ## References
286
+
287
+ - [Skill spec](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/code-review/SKILL.md) — operational detail for the orchestrator
288
+ - [Triage workflow](triage-workflow.md) — the discovery-to-applied-fix lifecycle: `/triage`, correction prompts, `/apply-fixes`, and leftover-corrections ownership
289
+ - [Concurrent use](concurrent-use.md) — one worktree per agent; why the gate is per-checkout
290
+ - [Output format](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/code-review/output-format.md) — per-agent JSON, aggregated JSON, correction prompts
291
+ - [Report template](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/review-template.md) — prose report structure
292
+ - [Scoring rubric](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/review-rubric.md) — health scoring and severity mapping
293
+ - [Agent catalog](agent_info.md) — list of review agents and what each checks
294
+ - [Architecture](agent-architecture.md) — where `/code-review` fits in the three-phase workflow
@@ -0,0 +1,73 @@
1
+ # Concurrent use — multiple agents or people on one repo
2
+
3
+ Short version: **the normal team workflow is safe; for two *agents* on one
4
+ machine, give each its own git worktree.**
5
+
6
+ This resolves the concurrency question (#109) for the per-checkout state in
7
+ the table below: the plugin **documents** a safe pattern rather than
8
+ enforcing locks there, because git worktrees already solve the problem
9
+ cleanly. Separately, a handful of small on-disk state files that a single
10
+ worktree's own hooks read-modify-write or append to — session/retry counters
11
+ (`bash_retry_guard.py`, `session_learning_trigger.py`), and four of the
12
+ `.claude/metrics/*.jsonl` telemetry streams (`boundary-events.jsonl`,
13
+ `workflow-states.jsonl`, `iteration-journal.jsonl`, and an `/autoship`
14
+ round log) — *are* lock-serialized (`hooks/lib/atomic_state.py`,
15
+ #1501/#1874/#1889). Those races are within one worktree, between concurrent
16
+ tool calls or sliced-mode parallel dispatches, not the cross-worktree case
17
+ this doc is about. Other `.claude/metrics/*.jsonl` streams are not yet
18
+ converted (#1896).
19
+
20
+ ## Why the normal case is already safe
21
+
22
+ The plugin's local coordination state is per-checkout, not shared:
23
+
24
+ | State | Where | Shared across checkouts? |
25
+ | --- | --- | --- |
26
+ | Review gate `.pr-review-passed` | `.claude/memory/`, **gitignored** | No — local to each working tree |
27
+ | Plan / build progress | `plans/<name>.md` (**tracked**) | Merges through normal git |
28
+
29
+ So two developers, each with their **own clone**, never collide on these — and
30
+ plan files reconcile the way any tracked file does. "Designed for teams" holds
31
+ for the standard one-checkout-per-person workflow.
32
+
33
+ ## The unsafe case: two agents sharing ONE working tree
34
+
35
+ Two background agents, two terminals in the same directory, or a human and an
36
+ agent in the same checkout share **one** `.git/index` and **one** set of local
37
+ state files. That is where collisions occur (reproduced in
38
+ [`../../../tests/repo/test_multiplayer_collision.py`](https://github.com/bdfinst/agentic-dev-team/blob/main/tests/repo/test_multiplayer_collision.py),
39
+ characterized in issue #109):
40
+ the shared `.pr-review-passed` gets overwritten (false blocks) and the staged
41
+ set interleaves.
42
+
43
+ ## The rule: one worktree per agent
44
+
45
+ Use a separate [git worktree](https://git-scm.com/docs/git-worktree) for each
46
+ concurrent agent. Each worktree has its own working directory, its own index,
47
+ and its own gitignored local state — so the agents never share a gate or a
48
+ staging area, while still sharing one clone's history and branches.
49
+
50
+ ```bash
51
+ # From your main checkout, create an isolated worktree per task/agent:
52
+ git worktree add ../myrepo-feature-a feature-a
53
+ git worktree add ../myrepo-feature-b feature-b
54
+
55
+ # Run each agent in its own worktree directory. When done:
56
+ git worktree remove ../myrepo-feature-a
57
+ ```
58
+
59
+ Guidance:
60
+
61
+ - **One agent (or session) per worktree.** Don't point two agents at the same
62
+ directory.
63
+ - Worktrees are cheap (they share the object store) — make one per parallel task.
64
+ - The review gate, model overrides, and staged set are now per-worktree, so the
65
+ collisions above cannot occur.
66
+
67
+ ## Known limitation (separate from concurrency)
68
+
69
+ The review gate currently binds to staged **paths**, not **content**, so editing
70
+ a file's content after review can commit it unreviewed even for a single user.
71
+ That is an independent correctness bug tracked in **#193** — fixing it (hash the
72
+ staged patch) also hardens the shared-tree case, but the worktree rule above is
73
+ the recommended isolation regardless.