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,149 @@
1
+ #!/usr/bin/env python3
2
+ """Report or enable marketplace auto-update for the dev-team plugin.
3
+
4
+ Single source of truth for the ``extraKnownMarketplaces.<market>.autoUpdate``
5
+ flag — the same flag the ``/plugin`` UI toggles (there is no dedicated
6
+ ``claude plugin`` CLI subcommand for it). With it on, the CLI re-pulls the
7
+ marketplace catalog and upgrades the plugin at launch, which is what keeps a
8
+ Claude Code web session current despite its reused filesystem snapshot pinning
9
+ the first-installed version.
10
+
11
+ Two callers share this one implementation, so the flag logic lives in exactly
12
+ one place:
13
+
14
+ * the ``/upgrade`` skill (``SKILL.md`` step 2) — runs ``--check`` to report
15
+ status, asks the user for consent, then runs ``--enable`` only on "yes";
16
+ * the cloud bootstrap (``.claude/cloud-setup.sh`` and
17
+ ``.claude/install-dev-team.sh``) — runs ``--enable`` directly, no consent,
18
+ because pasting the Setup script / setting ``DEV_TEAM_CLOUD_INSTALL=1`` is
19
+ itself the opt-in for an ephemeral cloud VM.
20
+
21
+ Modes:
22
+ --check Print ``enabled`` / ``disabled`` / ``unknown`` and exit (read-only).
23
+ --enable Set the flag to true, idempotently (the default if no mode given).
24
+
25
+ Idempotent and fail-open: ``--enable`` never exits non-zero, so it can never
26
+ break a Setup script or block session start. Honors ``CLAUDE_CONFIG_DIR``.
27
+ Stdlib only, (ADR 0014 / 0015).
28
+ """
29
+ from __future__ import annotations
30
+
31
+ import argparse
32
+ import json
33
+ import os
34
+ import sys
35
+
36
+ PLUGIN = "dev-team"
37
+
38
+
39
+ def config_dir() -> str:
40
+ """The Claude Code config dir — ``CLAUDE_CONFIG_DIR`` if set, else ~/.claude."""
41
+ return os.environ.get("CLAUDE_CONFIG_DIR") or os.path.join(
42
+ os.path.expanduser("~"), ".claude"
43
+ )
44
+
45
+
46
+ def load(path: str):
47
+ """Parse a JSON file, or return None if it is missing or malformed."""
48
+ try:
49
+ with open(path) as f:
50
+ return json.load(f)
51
+ except (FileNotFoundError, json.JSONDecodeError):
52
+ return None
53
+
54
+
55
+ def resolve_market(cfg: str) -> str | None:
56
+ """The marketplace id the plugin is installed from (the ``@<market>`` half
57
+ of its ``installed_plugins.json`` key), or None if it is not installed."""
58
+ installed = (
59
+ load(os.path.join(cfg, "plugins", "installed_plugins.json")) or {}
60
+ ).get("plugins", {})
61
+ return next(
62
+ (
63
+ pid.split("@", 1)[1]
64
+ for pid in installed
65
+ if pid.split("@", 1)[0] == PLUGIN and "@" in pid
66
+ ),
67
+ None,
68
+ )
69
+
70
+
71
+ def settings_candidates(cfg: str) -> list[str]:
72
+ """Settings files to consult, project-scoped first (mirrors the CLI/UI
73
+ precedence), falling back to the config-dir user settings."""
74
+ cwd = os.getcwd()
75
+ return [
76
+ os.path.join(cwd, ".claude", "settings.json"),
77
+ os.path.join(cwd, ".claude", "settings.local.json"),
78
+ os.path.join(cfg, "settings.json"),
79
+ ]
80
+
81
+
82
+ def check(cfg: str) -> str:
83
+ """Return ``enabled`` / ``disabled`` / ``unknown`` for the auto-update flag."""
84
+ market = resolve_market(cfg)
85
+ if not market:
86
+ return "unknown"
87
+ for path in settings_candidates(cfg):
88
+ data = load(path)
89
+ if data and market in (data.get("extraKnownMarketplaces") or {}):
90
+ return "enabled" if data["extraKnownMarketplaces"][market].get(
91
+ "autoUpdate"
92
+ ) is True else "disabled"
93
+ return "disabled"
94
+
95
+
96
+ def _target(cfg: str, market: str) -> tuple[str, dict]:
97
+ """Pick the settings file to write, seeding a fresh config-dir entry from the
98
+ marketplace registry when no existing file already declares the market."""
99
+ for path in settings_candidates(cfg):
100
+ data = load(path)
101
+ if data and market in (data.get("extraKnownMarketplaces") or {}):
102
+ return path, data
103
+ path = os.path.join(cfg, "settings.json")
104
+ data = load(path) or {}
105
+ reg = load(os.path.join(cfg, "plugins", "known_marketplaces.json")) or {}
106
+ entry = reg.get(market)
107
+ ekm = data.setdefault("extraKnownMarketplaces", {})
108
+ ekm[market] = {"source": entry["source"]} if entry else {}
109
+ return path, data
110
+
111
+
112
+ def enable(cfg: str) -> str:
113
+ """Set the flag to true idempotently. Returns a one-line status message."""
114
+ market = resolve_market(cfg)
115
+ if not market:
116
+ return f"'{PLUGIN}' not installed under {cfg}; nothing to do"
117
+ path, data = _target(cfg, market)
118
+ mk = data.setdefault("extraKnownMarketplaces", {}).setdefault(market, {})
119
+ if mk.get("autoUpdate") is True:
120
+ return f"already enabled for '{market}' ({path})"
121
+ mk["autoUpdate"] = True
122
+ tmp = path + ".tmp"
123
+ with open(tmp, "w") as f:
124
+ json.dump(data, f, indent=2)
125
+ f.write("\n")
126
+ os.replace(tmp, path)
127
+ return f"enabled for '{market}' in {path}"
128
+
129
+
130
+ def main(argv: list[str] | None = None) -> int:
131
+ parser = argparse.ArgumentParser(description=__doc__)
132
+ group = parser.add_mutually_exclusive_group()
133
+ group.add_argument("--check", action="store_true", help="Report status only.")
134
+ group.add_argument("--enable", action="store_true", help="Enable (default).")
135
+ args = parser.parse_args(argv)
136
+ cfg = config_dir()
137
+ if args.check:
138
+ print(check(cfg))
139
+ return 0
140
+ # Default action is --enable; fail-open so a bootstrap never breaks.
141
+ try:
142
+ print(enable(cfg))
143
+ except Exception as exc: # noqa: BLE001 - never fail the calling setup/hook
144
+ print(f"non-fatal error: {exc}")
145
+ return 0
146
+
147
+
148
+ if __name__ == "__main__":
149
+ sys.exit(main())
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: version
3
+ description: >-
4
+ Report the installed version of the pi-dev-team package and the upstream
5
+ dev-team release it was synced from.
6
+ user-invocable: true
7
+ allowed-tools: Bash
8
+ ---
9
+
10
+ # Version
11
+
12
+ Role: worker. Purely mechanical lookup.
13
+
14
+ You have been invoked with the `/version` command. Arguments: none.
15
+
16
+ Run and report the single output line verbatim:
17
+
18
+ ```bash
19
+ node -e 'const p=require(process.env.CLAUDE_PLUGIN_ROOT+"/package.json");const u=require(process.env.CLAUDE_PLUGIN_ROOT+"/UPSTREAM.json");console.log(`${p.name} v${p.version} (upstream dev-team v${u.version} @ ${String(u.commit).slice(0,10)})`)'
20
+ ```
21
+
22
+ If `CLAUDE_PLUGIN_ROOT` is unset, report exactly:
23
+ `pi-dev-team extension is not loaded in this session.`
24
+
25
+ Do not add commentary beyond the single result line.
@@ -0,0 +1,293 @@
1
+ #!/usr/bin/env python3
2
+ """Sync upstream bdfinst/agentic-dev-team `plugins/dev-team` into this pi package.
3
+
4
+ Usage:
5
+ python3 sync/sync_upstream.py --upstream /path/to/agentic-dev-team [--check]
6
+
7
+ What it does (idempotent, stdlib only):
8
+ 1. Replaces the managed directories (agents, skills, hooks, scripts, knowledge,
9
+ templates, tools, docs/upstream) with fresh copies from upstream.
10
+ 2. Drops skills that only make sense inside Claude Code (DROPPED_SKILLS).
11
+ 3. Copies pi-specific replacements from overrides/ over the result.
12
+ 4. Normalises SKILL.md frontmatter for pi (description <= 1024 chars).
13
+ 5. Applies the small, explicit text patch set (PATCHES). Every patch must
14
+ match at least once, so upstream drift is caught instead of silently
15
+ skipped.
16
+ 6. Writes UPSTREAM.json (commit, version, what was dropped/overridden/patched).
17
+
18
+ Everything not listed here (extensions/, bin/, sync/, overrides/, test/,
19
+ PORTING.md, README.md, package.json) is owned by the port and never touched.
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ import argparse
25
+ import json
26
+ import re
27
+ import shutil
28
+ import subprocess
29
+ import sys
30
+ from pathlib import Path
31
+
32
+ PKG = Path(__file__).resolve().parent.parent
33
+ PLUGIN_SUBDIR = Path("plugins/dev-team")
34
+
35
+ MANAGED_DIRS = ["agents", "skills", "hooks", "scripts", "knowledge", "templates", "tools"]
36
+ UPSTREAM_DOCS_DEST = Path("docs/upstream")
37
+
38
+ # Skills that test, audit or drive Claude Code itself. See PORTING.md section 4.
39
+ DROPPED_SKILLS = [
40
+ "agent-audit",
41
+ "agent-eval",
42
+ "claude-setup-review",
43
+ "harness-e2e-check",
44
+ "long-eval",
45
+ "orchestration-benchmark",
46
+ "session-review",
47
+ ]
48
+
49
+ IGNORE = shutil.ignore_patterns("__pycache__", "*.pyc", ".pytest_cache", ".mypy_cache", ".ruff_cache")
50
+
51
+ DESCRIPTION_LIMIT = 1024
52
+
53
+ # (glob relative to package root, regex, replacement, description)
54
+ PATCHES: list[tuple[str, str, str, str]] = [
55
+ (
56
+ "skills/plan/SKILL.md",
57
+ r"or stdin is not a usable TTY \(`test -t 0` is false — the headless/CI/automation case\)",
58
+ "or `DEV_TEAM_INTERACTIVE` is not `1` (pi sets it only when a human UI is attached; "
59
+ "a tool shell never has a TTY, so `test -t 0` must not be used — the headless/CI/automation case)",
60
+ "interactivity: tool shells have no TTY in pi",
61
+ ),
62
+ (
63
+ "skills/build/SKILL.md",
64
+ r"or stdin is not a usable TTY \(`test -t 0` is false — the headless/CI/automation case\)",
65
+ "or `DEV_TEAM_INTERACTIVE` is not `1` (pi sets it only when a human UI is attached; "
66
+ "a tool shell never has a TTY, so `test -t 0` must not be used — the headless/CI/automation case)",
67
+ "interactivity: tool shells have no TTY in pi",
68
+ ),
69
+ (
70
+ "skills/review-agent/SKILL.md",
71
+ r"Read `\.claude/agents/<name>\.md`\. If the file doesn't exist, list available\s+review agents from `\.claude/agents/`",
72
+ "Read `.claude/agents/<name>.md` (project override) or else `${CLAUDE_PLUGIN_ROOT}/agents/<name>.md`. "
73
+ "If neither exists, list available\nreview agents from `${CLAUDE_PLUGIN_ROOT}/agents/`",
74
+ "agent definitions live in the package, not the project",
75
+ ),
76
+ (
77
+ "skills/help/SKILL.md",
78
+ r"1\. Use Glob to find every `skills/\*/SKILL\.md` file\.",
79
+ "1. Use `find` to list every `${CLAUDE_PLUGIN_ROOT}/skills/*/SKILL.md` file, plus project skills in "
80
+ "`.pi/skills/*/SKILL.md` and `.claude/skills/*/SKILL.md`.",
81
+ "skills live in the package root",
82
+ ),
83
+ (
84
+ "skills/triage/SKILL.md",
85
+ r'Use the Agent tool with `subagent_type: "Explore"`',
86
+ 'Use the `dev_team_subagent` tool with `agent: "Explore"`',
87
+ "Claude's built-in Explore agent is provided by the port",
88
+ ),
89
+ ]
90
+
91
+
92
+ def run(cmd: list[str], cwd: Path) -> str:
93
+ try:
94
+ return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, check=False).stdout.strip()
95
+ except OSError:
96
+ return ""
97
+
98
+
99
+ def split_frontmatter(text: str) -> tuple[list[str], str] | None:
100
+ if not text.startswith("---"):
101
+ return None
102
+ lines = text.split("\n")
103
+ for i in range(1, len(lines)):
104
+ if lines[i].strip() == "---":
105
+ return lines[1:i], "\n".join(lines[i + 1 :])
106
+ return None
107
+
108
+
109
+ def fm_blocks(fm_lines: list[str]) -> list[tuple[str | None, list[str]]]:
110
+ """Group frontmatter into top-level key blocks (key line + indented continuation)."""
111
+ blocks: list[tuple[str | None, list[str]]] = []
112
+ for line in fm_lines:
113
+ m = re.match(r"^([A-Za-z0-9_-]+):", line)
114
+ if m and not line.startswith((" ", "\t")):
115
+ blocks.append((m.group(1), [line]))
116
+ elif blocks:
117
+ blocks[-1][1].append(line)
118
+ else:
119
+ blocks.append((None, [line]))
120
+ return blocks
121
+
122
+
123
+ def block_value(lines: list[str]) -> str:
124
+ first = lines[0].split(":", 1)[1].strip()
125
+ rest = [l.strip() for l in lines[1:]]
126
+ if first in (">", "|", ">-", "|-", ""):
127
+ return " ".join(r for r in rest if r)
128
+ val = " ".join([first] + [r for r in rest if r])
129
+ if len(val) >= 2 and val[0] == val[-1] and val[0] in "\"'":
130
+ val = val[1:-1]
131
+ return val
132
+
133
+
134
+ def trim_description(desc: str) -> str:
135
+ if len(desc) <= DESCRIPTION_LIMIT:
136
+ return desc
137
+ cut = desc[: DESCRIPTION_LIMIT - 1]
138
+ # prefer ending at a sentence boundary
139
+ dot = cut.rfind(". ")
140
+ if dot > DESCRIPTION_LIMIT * 0.6:
141
+ cut = cut[: dot + 1]
142
+ return cut.rstrip() + ("" if cut.endswith(".") else "…")
143
+
144
+
145
+ def normalise_skill(path: Path) -> bool:
146
+ text = path.read_text(encoding="utf-8")
147
+ parts = split_frontmatter(text)
148
+ if not parts:
149
+ return False
150
+ fm_lines, body = parts
151
+ changed = False
152
+ out: list[str] = []
153
+ for key, lines in fm_blocks(fm_lines):
154
+ if key == "description":
155
+ desc = block_value(lines)
156
+ trimmed = trim_description(desc)
157
+ if trimmed != desc:
158
+ out.append("description: " + json.dumps(trimmed, ensure_ascii=False))
159
+ changed = True
160
+ continue
161
+ out.extend(lines)
162
+ if changed:
163
+ path.write_text("---\n" + "\n".join(out) + "\n---\n" + body, encoding="utf-8")
164
+ return changed
165
+
166
+
167
+ NOTE_MARKER = "<!-- pi-port-notes -->"
168
+
169
+
170
+ def insert_note(skill_md: Path, note: str) -> None:
171
+ """Insert a pi port note block after the first H1 (or after frontmatter)."""
172
+ text = skill_md.read_text(encoding="utf-8")
173
+ if NOTE_MARKER in text:
174
+ return
175
+ block = f"\n{NOTE_MARKER}\n{note.strip()}\n{NOTE_MARKER}\n"
176
+ m = re.search(r"^# .*$", text, flags=re.M)
177
+ if m:
178
+ text = text[: m.end()] + "\n" + block + text[m.end() :]
179
+ else:
180
+ parts = split_frontmatter(text)
181
+ text = text + block if not parts else text.replace("\n---\n", "\n---\n" + block, 1)
182
+ skill_md.write_text(text, encoding="utf-8")
183
+
184
+
185
+ def copy_tree(src: Path, dst: Path) -> None:
186
+ if dst.exists():
187
+ shutil.rmtree(dst)
188
+ shutil.copytree(src, dst, ignore=IGNORE, symlinks=True)
189
+
190
+
191
+ def main() -> int:
192
+ ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
193
+ ap.add_argument("--upstream", required=True, help="checkout of bdfinst/agentic-dev-team")
194
+ args = ap.parse_args()
195
+
196
+ upstream = Path(args.upstream).resolve()
197
+ plugin = upstream / PLUGIN_SUBDIR
198
+ if not (plugin / "agents").is_dir():
199
+ print(f"error: {plugin} does not look like plugins/dev-team", file=sys.stderr)
200
+ return 2
201
+
202
+ for name in MANAGED_DIRS:
203
+ src = plugin / name
204
+ if src.is_dir():
205
+ copy_tree(src, PKG / name)
206
+ if (plugin / "docs").is_dir():
207
+ copy_tree(plugin / "docs", PKG / UPSTREAM_DOCS_DEST)
208
+ for fname, dest in (("CHANGELOG.md", "docs/upstream/CHANGELOG.md"), ("README.md", "docs/upstream/README.md")):
209
+ if (plugin / fname).is_file():
210
+ shutil.copy2(plugin / fname, PKG / dest)
211
+
212
+ # hooks/lib/plugin_version.py reads <root>/.claude-plugin/plugin.json for the version stamped on metrics rows.
213
+ if (plugin / ".claude-plugin" / "plugin.json").is_file():
214
+ (PKG / ".claude-plugin").mkdir(exist_ok=True)
215
+ shutil.copy2(plugin / ".claude-plugin" / "plugin.json", PKG / ".claude-plugin" / "plugin.json")
216
+
217
+ dropped = []
218
+ for skill in DROPPED_SKILLS:
219
+ target = PKG / "skills" / skill
220
+ if target.exists():
221
+ shutil.rmtree(target)
222
+ dropped.append(skill)
223
+
224
+ overridden: list[str] = []
225
+ overrides = PKG / "overrides"
226
+ if overrides.is_dir():
227
+ for src in sorted(overrides.rglob("*")):
228
+ if src.is_file() and "__pycache__" not in src.parts and src.relative_to(overrides).parts[0] != "notes":
229
+ rel = src.relative_to(overrides)
230
+ dst = PKG / rel
231
+ dst.parent.mkdir(parents=True, exist_ok=True)
232
+ shutil.copy2(src, dst)
233
+ overridden.append(str(rel))
234
+
235
+ noted: list[str] = []
236
+ for note in sorted((overrides / "notes").glob("*.md")) if (overrides / "notes").is_dir() else []:
237
+ skill_md = PKG / "skills" / note.stem / "SKILL.md"
238
+ if not skill_md.is_file():
239
+ print(f"warning: note for missing skill {note.stem}", file=sys.stderr)
240
+ continue
241
+ insert_note(skill_md, note.read_text(encoding="utf-8"))
242
+ noted.append(note.stem)
243
+
244
+ normalised = [
245
+ str(p.relative_to(PKG)) for p in sorted((PKG / "skills").glob("*/SKILL.md")) if normalise_skill(p)
246
+ ]
247
+
248
+ patched: list[dict[str, object]] = []
249
+ failures: list[str] = []
250
+ for pattern, regex, repl, why in PATCHES:
251
+ files = sorted(PKG.glob(pattern))
252
+ hits = 0
253
+ for f in files:
254
+ text = f.read_text(encoding="utf-8")
255
+ new, n = re.subn(regex, lambda _m: repl, text)
256
+ if n:
257
+ f.write_text(new, encoding="utf-8")
258
+ hits += n
259
+ if hits == 0:
260
+ failures.append(f"{pattern}: /{regex[:60]}.../ ({why})")
261
+ patched.append({"file": pattern, "reason": why, "hits": hits})
262
+
263
+ version = ""
264
+ manifest = plugin / ".claude-plugin" / "plugin.json"
265
+ if manifest.is_file():
266
+ version = json.loads(manifest.read_text(encoding="utf-8")).get("version", "")
267
+ info = {
268
+ "repository": "https://github.com/bdfinst/agentic-dev-team",
269
+ "plugin": "dev-team",
270
+ "version": version,
271
+ "commit": run(["git", "rev-parse", "HEAD"], upstream),
272
+ "commitDate": run(["git", "log", "-1", "--format=%cI"], upstream),
273
+ "droppedSkills": dropped,
274
+ "overridden": overridden,
275
+ "notes": noted,
276
+ "normalisedFrontmatter": normalised,
277
+ "patches": patched,
278
+ }
279
+ (PKG / "UPSTREAM.json").write_text(json.dumps(info, indent=2) + "\n", encoding="utf-8")
280
+
281
+ print(f"synced dev-team {version} ({info['commit'][:10]})")
282
+ print(f" dropped {len(dropped)} skills, {len(overridden)} override files, {len(normalised)} frontmatter fixes")
283
+ if failures:
284
+ print("PATCHES THAT NO LONGER MATCH (upstream changed; review and update PATCHES):", file=sys.stderr)
285
+ for f in failures:
286
+ print(" - " + f, file=sys.stderr)
287
+ return 1
288
+ print(f" {sum(int(p['hits']) for p in patched)} patch hits, all patches matched")
289
+ return 0
290
+
291
+
292
+ if __name__ == "__main__":
293
+ sys.exit(main())
@@ -0,0 +1,46 @@
1
+ ---
2
+ # ACCEPTED-RISKS — project-local policy for suppressing reviewed findings.
3
+ #
4
+ # Each rule must carry a specific rationale, an owner, and an expiry date.
5
+ # Consumed by /code-review, /review-agent, and security-review.
6
+ # Schema reference: plugins/dev-team/knowledge/accepted-risks-schema.md
7
+ #
8
+ # Delete this example rule and add your own. If you don't yet have any
9
+ # accepted risks, leave rules as an empty list: `rules: []`.
10
+ rules:
11
+ - id: example-placeholder
12
+ rule_id: semgrep.generic.placeholder-example
13
+ files:
14
+ - "examples/**"
15
+ rationale: >
16
+ This is a placeholder rule demonstrating the shape of a real entry. Replace
17
+ it with rules that cite the SPECIFIC business or architectural reason the
18
+ finding is accepted — not generic disclaimers. If in doubt, delete this
19
+ rule and start with an empty list.
20
+ expires: 2026-07-20
21
+ owner: unassigned
22
+ scope: finding
23
+ broad: false
24
+ ---
25
+
26
+ # Accepted Risks
27
+
28
+ This file is a project policy, not a todo list. Every rule is a deliberate
29
+ acceptance with a date when it MUST be re-reviewed.
30
+
31
+ ## How to add a rule
32
+
33
+ 1. Read `plugins/dev-team/knowledge/accepted-risks-schema.md` (lives in
34
+ the plugin) — especially the rationale and expiry requirements.
35
+ 2. Add an entry under `rules:` in the frontmatter above.
36
+ 3. Commit with a message explaining the acceptance decision.
37
+
38
+ ## How to remove a rule
39
+
40
+ Deleting a rule is a real decision. The commit message must state why the risk
41
+ is no longer accepted: fixed upstream, scoped out, moved to a runbook, etc.
42
+
43
+ ## Broad rules
44
+
45
+ Rules with `broad: true` (wildcard `rule_id` or multi-file globs) get flagged
46
+ every run. Keep these narrow; prefer two scoped rules to one broad one.
@@ -0,0 +1,151 @@
1
+ ---
2
+ # REQUIRED — unique identifier
3
+ # Format: lowercase letters, digits, and hyphens only (e.g. code-reviewer, db-reader)
4
+ # Must match the filename convention; used by hooks as agent_type
5
+ name: your-agent-name
6
+
7
+ # REQUIRED — tells Claude when to delegate to this agent
8
+ # Write a clear, specific description. Include "Use proactively" to encourage automatic delegation.
9
+ description: >-
10
+ One-sentence description of what this agent does and when to use it.
11
+ Add "Use proactively when X" to encourage automatic delegation.
12
+
13
+ # OPTIONAL — tools this agent can use
14
+ # If omitted, the agent inherits ALL tools from the main conversation.
15
+ # Use this as an allowlist to restrict what the agent can do.
16
+ #
17
+ # Common tools: Read, Grep, Glob, Bash, Edit, Write, Agent, Skill
18
+ # Tool restrictions: Agent(worker, researcher) limits which subagents can be spawned
19
+ # Bash restrictions: Bash(npx *) limits Bash to matching commands only
20
+ #
21
+ # Note: To preload skill content at startup, use the `skills` field below
22
+ # instead of listing Skill here. Listing Skill here allows runtime invocation
23
+ # but does not inject skill content into context automatically.
24
+ tools: Read, Grep, Glob
25
+
26
+ # OPTIONAL — tools to deny (removed from inherited or specified list)
27
+ # Use when you want to inherit most tools but block a few specific ones.
28
+ # disallowedTools: Write, Edit
29
+
30
+ # OPTIONAL — model to use for this agent's dispatch
31
+ # An alias (haiku | sonnet | opus | fable), a full model ID, or inherit.
32
+ # Resolved natively by the harness before dispatch (ADR 0026) — there is no
33
+ # plugin-side PreToolUse hook, routing map, or ladder file in this path.
34
+ # Do not pin a dated snapshot ID here; use the alias.
35
+ # inherit: use the same model as the main conversation (default if omitted)
36
+ #
37
+ # Routing guidance:
38
+ # haiku — high-volume, structured extraction, simple classification
39
+ # sonnet — balanced capability and speed; most agents
40
+ # opus — frontier reasoning, security analysis, architectural judgment
41
+ model: sonnet
42
+
43
+ # OPTIONAL — reasoning effort for this agent's model calls
44
+ # Values: low | medium | high | xhigh | max (available levels depend on model)
45
+ # ADR 0026 sets every agent to `high` uniformly as the safe default; a
46
+ # follow-up calibration pass may tune this per agent later.
47
+ effort: high
48
+
49
+ # OPTIONAL — permission mode
50
+ # WARNING: Ignored for plugin agents (silently has no effect).
51
+ # Only works for project agents (.claude/agents/) or user agents (~/.claude/agents/).
52
+ # Values: default | acceptEdits | auto | dontAsk | bypassPermissions | plan
53
+ # permissionMode: default
54
+
55
+ # OPTIONAL — maximum agentic turns before the agent stops
56
+ # maxTurns: 10
57
+
58
+ # OPTIONAL — skills to preload into this agent's context at startup
59
+ # The full content of each skill is injected before the agent runs.
60
+ # This is different from listing Skill in tools (which allows runtime invocation).
61
+ # Use skill names as they appear in the skills registry.
62
+ # skills:
63
+ # - api-conventions
64
+ # - error-handling-patterns
65
+
66
+ # OPTIONAL — MCP servers available to this agent
67
+ # WARNING: Ignored for plugin agents (silently has no effect).
68
+ # Only works for project agents (.claude/agents/) or user agents (~/.claude/agents/).
69
+ # mcpServers:
70
+ # - playwright:
71
+ # type: stdio
72
+ # command: npx
73
+ # args: ["-y", "@playwright/mcp@latest"]
74
+
75
+ # OPTIONAL — lifecycle hooks scoped to this agent
76
+ # WARNING: Ignored for plugin agents (silently has no effect).
77
+ # Only works for project agents (.claude/agents/) or user agents (~/.claude/agents/).
78
+ # hooks:
79
+ # PreToolUse:
80
+ # - matcher: "Bash"
81
+ # hooks:
82
+ # - type: command
83
+ # command: "./scripts/validate-command.sh"
84
+
85
+ # OPTIONAL — persistent memory directory that survives across conversations
86
+ # Values: user | project | local
87
+ # user: ~/.claude/agent-memory/<name>/ (all projects)
88
+ # project: .claude/agent-memory/<name>/ (this project, check in to VCS)
89
+ # local: .claude/agent-memory-local/<name>/ (this project, do NOT check in)
90
+ # memory: project
91
+
92
+ # OPTIONAL — always run this agent as a background task (non-blocking)
93
+ # Default: false (agent runs in foreground, blocking the main conversation)
94
+ # background: false
95
+
96
+ # OPTIONAL — effort level for this agent's model calls
97
+ # Overrides the session effort level while this agent is active.
98
+ # Values: low | medium | high | xhigh | max (available levels depend on model)
99
+ # effort: medium
100
+
101
+ # OPTIONAL — run agent in an isolated git worktree
102
+ # Set to "worktree" to give the agent a temporary copy of the repository.
103
+ # The worktree is cleaned up automatically if the agent makes no changes.
104
+ # Values: worktree
105
+ # isolation: worktree
106
+
107
+ # OPTIONAL — display color in the task list and transcript
108
+ # Values: red | blue | green | yellow | purple | orange | pink | cyan
109
+ # color: blue
110
+
111
+ # OPTIONAL — auto-submitted first turn when this agent runs as the main session
112
+ # (via --agent flag or `agent` setting in settings.json)
113
+ # Commands and skills in this prompt are processed.
114
+ # initialPrompt: "Load the project context and summarize the current state."
115
+ ---
116
+
117
+ # Agent Name
118
+
119
+ One-sentence description of what this agent is for and what distinguishes it.
120
+
121
+ ## Responsibilities
122
+
123
+ - Primary responsibility
124
+ - Secondary responsibility
125
+ - What it explicitly does NOT do (scope boundary)
126
+
127
+ ## Process
128
+
129
+ Step-by-step description of how this agent approaches its task.
130
+
131
+ 1. First step
132
+ 2. Second step
133
+ 3. Third step
134
+
135
+ ## Output Format
136
+
137
+ Describe the expected output format. For review agents:
138
+
139
+ ```json
140
+ {"status": "pass|warn|fail|skip", "issues": [{"severity": "error|warning|suggestion", "confidence": "high|medium|none", "file": "", "line": 0, "message": "", "suggestedFix": ""}], "summary": ""}
141
+ ```
142
+
143
+ ## Skip
144
+
145
+ Return skip status when:
146
+
147
+ - Condition that makes this agent inapplicable
148
+
149
+ ## Ignore
150
+
151
+ What this agent explicitly does not check (handled by other agents or out of scope).