pi-dev-team 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (780) hide show
  1. package/LICENSE +21 -0
  2. package/PORTING.md +134 -0
  3. package/README.md +207 -0
  4. package/UPSTREAM.json +64 -0
  5. package/agents/Explore.md +15 -0
  6. package/agents/a11y-review.md +118 -0
  7. package/agents/adr-author.md +70 -0
  8. package/agents/ai-provenance-review.md +120 -0
  9. package/agents/angular-reactivity-review.md +95 -0
  10. package/agents/arch-review.md +135 -0
  11. package/agents/architect.md +78 -0
  12. package/agents/autoship-batch-proposer.md +69 -0
  13. package/agents/claude-setup-review.md +136 -0
  14. package/agents/codebase-recon.md +184 -0
  15. package/agents/component-architecture-review.md +119 -0
  16. package/agents/concurrency-review.md +109 -0
  17. package/agents/correctness-review.md +290 -0
  18. package/agents/data-flow-tracer.md +120 -0
  19. package/agents/doc-review.md +165 -0
  20. package/agents/domain-review.md +136 -0
  21. package/agents/general-purpose.md +10 -0
  22. package/agents/gherkin-quality-critic.md +113 -0
  23. package/agents/js-fp-review.md +114 -0
  24. package/agents/mutation-kill.md +684 -0
  25. package/agents/naming-review.md +142 -0
  26. package/agents/orchestrator.md +339 -0
  27. package/agents/performance-review.md +105 -0
  28. package/agents/plan-review-acceptance.md +115 -0
  29. package/agents/plan-review-design.md +90 -0
  30. package/agents/plan-review-parallelization.md +84 -0
  31. package/agents/plan-review-strategic.md +96 -0
  32. package/agents/plan-review-ux.md +110 -0
  33. package/agents/platform-engineer.md +64 -0
  34. package/agents/product-manager.md +68 -0
  35. package/agents/progress-guardian.md +79 -0
  36. package/agents/qa-engineer.md +289 -0
  37. package/agents/quality-reviewer.md +132 -0
  38. package/agents/react-reactivity-review.md +102 -0
  39. package/agents/refactor-opportunity-review.md +128 -0
  40. package/agents/security-engineer.md +60 -0
  41. package/agents/security-review.md +218 -0
  42. package/agents/session-analysis.md +95 -0
  43. package/agents/software-engineer.md +105 -0
  44. package/agents/spec-compliance-review.md +100 -0
  45. package/agents/spec-reviewer.md +114 -0
  46. package/agents/structure-review.md +146 -0
  47. package/agents/tech-writer.md +84 -0
  48. package/agents/test-review.md +246 -0
  49. package/agents/test-smell-review.md +188 -0
  50. package/agents/token-efficiency-review.md +139 -0
  51. package/agents/ui-ux-designer.md +54 -0
  52. package/agents/vue-reactivity-review.md +95 -0
  53. package/bin/__pycache__/claudecpython-314.pyc +0 -0
  54. package/bin/claude +258 -0
  55. package/docs/upstream/.pages +1 -0
  56. package/docs/upstream/CHANGELOG.md +2586 -0
  57. package/docs/upstream/README.md +155 -0
  58. package/docs/upstream/agent-architecture.md +214 -0
  59. package/docs/upstream/agent_info.md +187 -0
  60. package/docs/upstream/artifact-migration.md +124 -0
  61. package/docs/upstream/code-intelligence-nudge.md +149 -0
  62. package/docs/upstream/code-review-process.md +294 -0
  63. package/docs/upstream/concurrent-use.md +73 -0
  64. package/docs/upstream/context-management.md +111 -0
  65. package/docs/upstream/developer-notes.md +280 -0
  66. package/docs/upstream/diagrams/architecture-overview.svg +101 -0
  67. package/docs/upstream/diagrams/review-dispatch.svg +139 -0
  68. package/docs/upstream/diagrams/team-agents.svg +128 -0
  69. package/docs/upstream/diagrams/test-improve-flow.svg +166 -0
  70. package/docs/upstream/diagrams/workflow-linear.svg +66 -0
  71. package/docs/upstream/diagrams/workflow-three-phase.svg +200 -0
  72. package/docs/upstream/eval-maintenance.md +95 -0
  73. package/docs/upstream/eval-running-guide.md +147 -0
  74. package/docs/upstream/eval-system.md +291 -0
  75. package/docs/upstream/session-review-oss-complements.md +75 -0
  76. package/docs/upstream/session-review.md +212 -0
  77. package/docs/upstream/skills.md +188 -0
  78. package/docs/upstream/team-structure.md +21 -0
  79. package/docs/upstream/telemetry-ci-access.md +129 -0
  80. package/docs/upstream/telemetry-repo-security.md +120 -0
  81. package/docs/upstream/test-evaluation.md +277 -0
  82. package/docs/upstream/test-improve.md +154 -0
  83. package/docs/upstream/triage-workflow.md +282 -0
  84. package/docs/upstream/workflows.md +289 -0
  85. package/extensions/dev-team/index.ts +539 -0
  86. package/extensions/dev-team/lib/agents.ts +272 -0
  87. package/extensions/dev-team/lib/ai-credits.ts +92 -0
  88. package/extensions/dev-team/lib/autocompact.ts +81 -0
  89. package/extensions/dev-team/lib/child-run.ts +102 -0
  90. package/extensions/dev-team/lib/config.ts +236 -0
  91. package/extensions/dev-team/lib/gh-command.ts +103 -0
  92. package/extensions/dev-team/lib/github-style.ts +307 -0
  93. package/extensions/dev-team/lib/hooks.ts +350 -0
  94. package/extensions/dev-team/lib/metrics.ts +115 -0
  95. package/extensions/dev-team/lib/safe-read.ts +49 -0
  96. package/extensions/dev-team/lib/session-files.ts +57 -0
  97. package/extensions/dev-team/lib/session-spend.ts +123 -0
  98. package/extensions/dev-team/lib/shell-scan.ts +205 -0
  99. package/extensions/dev-team/lib/skills.ts +213 -0
  100. package/extensions/dev-team/lib/subagent-render.ts +245 -0
  101. package/extensions/dev-team/lib/subagent-types.ts +164 -0
  102. package/extensions/dev-team/lib/subagent.ts +596 -0
  103. package/extensions/dev-team/lib/terminal-text.ts +54 -0
  104. package/extensions/dev-team/lib/tools-misc.ts +152 -0
  105. package/extensions/dev-team/lib/transcript.ts +110 -0
  106. package/extensions/dev-team/lib/trust.ts +52 -0
  107. package/extensions/dev-team/lib/usage-breakdown.ts +176 -0
  108. package/extensions/dev-team/lib/usage-chart.ts +153 -0
  109. package/extensions/dev-team/lib/usage-command.ts +107 -0
  110. package/extensions/dev-team/lib/usage-history.ts +203 -0
  111. package/extensions/dev-team/lib/usage-render.ts +225 -0
  112. package/extensions/dev-team/lib/usage-split-bar.ts +127 -0
  113. package/extensions/dev-team/lib/usage-state.ts +116 -0
  114. package/extensions/dev-team/lib/usage-text.ts +159 -0
  115. package/extensions/dev-team/lib/usage-view.ts +109 -0
  116. package/hooks/__pycache__/refactor_test_freeze_guard.cpython-314.pyc +0 -0
  117. package/hooks/agent_dispatch_ledger.py +190 -0
  118. package/hooks/autocompact_setup_nudge.py +99 -0
  119. package/hooks/bash_retry_guard.py +228 -0
  120. package/hooks/boundary_events_write_guard.py +352 -0
  121. package/hooks/code_intelligence_nudge.py +293 -0
  122. package/hooks/code_intelligence_turn_mark.py +317 -0
  123. package/hooks/codegraph_bootstrap.py +139 -0
  124. package/hooks/contract_version_guard.py +362 -0
  125. package/hooks/cost_meter.py +106 -0
  126. package/hooks/destructive-commands.json +62 -0
  127. package/hooks/destructive_guard.py +477 -0
  128. package/hooks/eval_compliance_check.py +440 -0
  129. package/hooks/guards.json +17 -0
  130. package/hooks/hooks.json +323 -0
  131. package/hooks/internal_double_gate.py +296 -0
  132. package/hooks/js_fp_review.py +212 -0
  133. package/hooks/knowledge_index.py +119 -0
  134. package/hooks/lib/__pycache__/artifact_paths.cpython-314.pyc +0 -0
  135. package/hooks/lib/__pycache__/atomic_state.cpython-314.pyc +0 -0
  136. package/hooks/lib/__pycache__/autocompact_config.cpython-314.pyc +0 -0
  137. package/hooks/lib/__pycache__/boundary_events.cpython-314.pyc +0 -0
  138. package/hooks/lib/__pycache__/doc_classification.cpython-314.pyc +0 -0
  139. package/hooks/lib/__pycache__/gh_pr_create_detect.cpython-314.pyc +0 -0
  140. package/hooks/lib/__pycache__/git_safe_diff.cpython-314.pyc +0 -0
  141. package/hooks/lib/__pycache__/instrument_log.cpython-314.pyc +0 -0
  142. package/hooks/lib/__pycache__/metrics_query.cpython-314.pyc +0 -0
  143. package/hooks/lib/__pycache__/plugin_version.cpython-314.pyc +0 -0
  144. package/hooks/lib/__pycache__/pre_commit_doc_classifier.cpython-314.pyc +0 -0
  145. package/hooks/lib/__pycache__/review_agent_registry.cpython-314.pyc +0 -0
  146. package/hooks/lib/__pycache__/review_gate_corroboration.cpython-314.pyc +0 -0
  147. package/hooks/lib/__pycache__/review_gate_hash.cpython-314.pyc +0 -0
  148. package/hooks/lib/__pycache__/review_verdicts.cpython-314.pyc +0 -0
  149. package/hooks/lib/__pycache__/stdin_json.cpython-314.pyc +0 -0
  150. package/hooks/lib/__pycache__/stryker_invocation.cpython-314.pyc +0 -0
  151. package/hooks/lib/__pycache__/telemetry_consent.cpython-314.pyc +0 -0
  152. package/hooks/lib/__pycache__/test_file_classify.cpython-314.pyc +0 -0
  153. package/hooks/lib/__pycache__/token_efficiency_limits.cpython-314.pyc +0 -0
  154. package/hooks/lib/__pycache__/verify_guard_state.cpython-314.pyc +0 -0
  155. package/hooks/lib/__pycache__/xunit_v3_operator_gate.cpython-314.pyc +0 -0
  156. package/hooks/lib/agent_skill_hints.py +74 -0
  157. package/hooks/lib/artifact_paths.py +263 -0
  158. package/hooks/lib/atomic_state.py +557 -0
  159. package/hooks/lib/autocompact_config.py +103 -0
  160. package/hooks/lib/autoship_log.py +106 -0
  161. package/hooks/lib/banned_scripts_policy.py +51 -0
  162. package/hooks/lib/boundary_events.py +436 -0
  163. package/hooks/lib/build_knowledge_index.py +504 -0
  164. package/hooks/lib/build_skills_index.py +361 -0
  165. package/hooks/lib/build_state.py +116 -0
  166. package/hooks/lib/classify_ship_outcome.py +126 -0
  167. package/hooks/lib/config_changelog_schema.py +115 -0
  168. package/hooks/lib/cost_meter.py +955 -0
  169. package/hooks/lib/doc_classification.py +116 -0
  170. package/hooks/lib/gh_pr_create_detect.py +136 -0
  171. package/hooks/lib/git_safe_diff.py +123 -0
  172. package/hooks/lib/instrument_log.py +66 -0
  173. package/hooks/lib/iteration_journal_gate.py +197 -0
  174. package/hooks/lib/knowledge_index_paths.py +88 -0
  175. package/hooks/lib/mcp_json_repowise.py +177 -0
  176. package/hooks/lib/metrics_query.py +202 -0
  177. package/hooks/lib/minimal_yaml.py +434 -0
  178. package/hooks/lib/plugin_version.py +142 -0
  179. package/hooks/lib/pre_commit_detect.py +537 -0
  180. package/hooks/lib/pre_commit_doc_classifier.py +126 -0
  181. package/hooks/lib/pricing.py +118 -0
  182. package/hooks/lib/report_pdf.py +371 -0
  183. package/hooks/lib/review_agent_registry.py +142 -0
  184. package/hooks/lib/review_dispatch_ledger.py +101 -0
  185. package/hooks/lib/review_gate_corroboration.py +521 -0
  186. package/hooks/lib/review_gate_hash.py +252 -0
  187. package/hooks/lib/review_gate_normalized_hash.py +1115 -0
  188. package/hooks/lib/review_verdicts.py +301 -0
  189. package/hooks/lib/run_report.py +160 -0
  190. package/hooks/lib/skill_categories.yaml +125 -0
  191. package/hooks/lib/stdin_json.py +57 -0
  192. package/hooks/lib/stryker_invocation.py +102 -0
  193. package/hooks/lib/telemetry_consent.py +41 -0
  194. package/hooks/lib/telemetry_report.py +108 -0
  195. package/hooks/lib/test_file_classify.py +160 -0
  196. package/hooks/lib/token_efficiency_limits.py +51 -0
  197. package/hooks/lib/turn_identity.py +77 -0
  198. package/hooks/lib/verify_guard_state.py +110 -0
  199. package/hooks/lib/workflow_state.py +206 -0
  200. package/hooks/lib/xunit_v3_operator_gate.py +596 -0
  201. package/hooks/mcp_json_repowise_nudge.py +74 -0
  202. package/hooks/mutation_adapters/__init__.py +7 -0
  203. package/hooks/mutation_adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  204. package/hooks/mutation_adapters/__pycache__/lib.cpython-314.pyc +0 -0
  205. package/hooks/mutation_adapters/__pycache__/mutmut.cpython-314.pyc +0 -0
  206. package/hooks/mutation_adapters/__pycache__/pitest.cpython-314.pyc +0 -0
  207. package/hooks/mutation_adapters/__pycache__/stryker.cpython-314.pyc +0 -0
  208. package/hooks/mutation_adapters/__pycache__/stryker_net.cpython-314.pyc +0 -0
  209. package/hooks/mutation_adapters/lib.py +478 -0
  210. package/hooks/mutation_adapters/mutmut.py +188 -0
  211. package/hooks/mutation_adapters/pitest.py +266 -0
  212. package/hooks/mutation_adapters/stryker.py +157 -0
  213. package/hooks/mutation_adapters/stryker_net.py +264 -0
  214. package/hooks/mutation_gate.py +193 -0
  215. package/hooks/mutation_testing_smoke_gate.py +371 -0
  216. package/hooks/pending_review_notify.py +121 -0
  217. package/hooks/phase_marker.py +138 -0
  218. package/hooks/post_compact_state_reinject.py +180 -0
  219. package/hooks/post_format.py +115 -0
  220. package/hooks/pre_commit_knowledge_index.py +128 -0
  221. package/hooks/pre_commit_review.py +66 -0
  222. package/hooks/pre_pr_review.py +694 -0
  223. package/hooks/pre_tool_guard.py +405 -0
  224. package/hooks/py.sh +73 -0
  225. package/hooks/refactor-bash-write-patterns.json +29 -0
  226. package/hooks/refactor_test_bash_guard.py +253 -0
  227. package/hooks/refactor_test_freeze_guard.py +139 -0
  228. package/hooks/refactor_test_revert_guard.py +186 -0
  229. package/hooks/repo_review_nudge.py +287 -0
  230. package/hooks/review_verdict_recorder.py +464 -0
  231. package/hooks/scan_bash_command_for_banned_scripts.py +428 -0
  232. package/hooks/scan_worktree_for_banned_scripts.py +238 -0
  233. package/hooks/session_learning_trigger.py +248 -0
  234. package/hooks/skills_index.py +126 -0
  235. package/hooks/stryker_xunit_shim_guard.py +571 -0
  236. package/hooks/subagent_completion_guard.py +309 -0
  237. package/hooks/subagent_skill_context.py +139 -0
  238. package/hooks/task_completion_metrics.py +216 -0
  239. package/hooks/tdd_guard.py +229 -0
  240. package/hooks/telemetry.py +341 -0
  241. package/hooks/token_efficiency_review.py +194 -0
  242. package/hooks/verify_guard.py +183 -0
  243. package/hooks/verify_guard_edit_marker.py +73 -0
  244. package/hooks/version_check.py +173 -0
  245. package/knowledge/accepted-risks-schema.md +98 -0
  246. package/knowledge/adr-decision-criteria.md +64 -0
  247. package/knowledge/adversarial-review-protocol.md +139 -0
  248. package/knowledge/agent-registry.md +228 -0
  249. package/knowledge/agent-review-methodology.md +80 -0
  250. package/knowledge/ai-friendly-repo-guidelines.md +67 -0
  251. package/knowledge/architecture-assessment.md +96 -0
  252. package/knowledge/artifact-lifecycle.md +57 -0
  253. package/knowledge/cd-maturity-model.md +82 -0
  254. package/knowledge/cd-test-architecture.md +190 -0
  255. package/knowledge/ci-cd-file-scope.md +24 -0
  256. package/knowledge/codegraph-vs-graphify.md +192 -0
  257. package/knowledge/component-test-patterns.md +139 -0
  258. package/knowledge/database-change-management.md +80 -0
  259. package/knowledge/database-test-patterns.md +79 -0
  260. package/knowledge/decision-defaults.md +88 -0
  261. package/knowledge/dependency-breaking-techniques.md +116 -0
  262. package/knowledge/deployment-pipeline.md +86 -0
  263. package/knowledge/design-smells.md +122 -0
  264. package/knowledge/directory-enumeration.md +38 -0
  265. package/knowledge/domain-modeling.md +123 -0
  266. package/knowledge/evidence-bundle.md +90 -0
  267. package/knowledge/exploratory-testing-field-guide.md +122 -0
  268. package/knowledge/failure-routing.md +28 -0
  269. package/knowledge/fixture-construction.md +56 -0
  270. package/knowledge/frontend-component-architecture.md +139 -0
  271. package/knowledge/gherkin-quality-review-dispatch.md +135 -0
  272. package/knowledge/index.json +6766 -0
  273. package/knowledge/internal-collaborator-doubling.md +101 -0
  274. package/knowledge/legacy-test-strategy.md +71 -0
  275. package/knowledge/long-run-waiting.md +66 -0
  276. package/knowledge/microservice-testing.md +71 -0
  277. package/knowledge/model-pricing.json +23 -0
  278. package/knowledge/mutation-score-formulas.md +60 -0
  279. package/knowledge/object-calisthenics.md +147 -0
  280. package/knowledge/oracle-provenance.md +94 -0
  281. package/knowledge/orchestrator-script-implementation.md +185 -0
  282. package/knowledge/owasp-detection.md +148 -0
  283. package/knowledge/plan-review-rubric.md +56 -0
  284. package/knowledge/proxy-connectivity.md +62 -0
  285. package/knowledge/reactive-effect-patterns.md +73 -0
  286. package/knowledge/recon-inventory-excludes.txt +32 -0
  287. package/knowledge/references/bdd-value-guide.md +61 -0
  288. package/knowledge/references/csharp-http-client-testing.md +264 -0
  289. package/knowledge/release-strategies.md +74 -0
  290. package/knowledge/report-output-location.md +117 -0
  291. package/knowledge/report-pdf-integration.md +63 -0
  292. package/knowledge/report-print.css +129 -0
  293. package/knowledge/report-template.md +114 -0
  294. package/knowledge/report-to-pdf.md +69 -0
  295. package/knowledge/request-processing-flow.md +63 -0
  296. package/knowledge/result-verification.md +52 -0
  297. package/knowledge/review-agent-output-contract.md +121 -0
  298. package/knowledge/review-lens-classification.md +113 -0
  299. package/knowledge/review-rubric.md +62 -0
  300. package/knowledge/review-template.md +104 -0
  301. package/knowledge/rule-fixtures/A02.insecure-random-js/negative.js +1 -0
  302. package/knowledge/rule-fixtures/A02.insecure-random-js/positive.js +1 -0
  303. package/knowledge/rule-fixtures/A02.weak-hashing-md5/negative.py +1 -0
  304. package/knowledge/rule-fixtures/A02.weak-hashing-md5/positive.py +1 -0
  305. package/knowledge/rule-fixtures/A03.command-injection/negative.js +1 -0
  306. package/knowledge/rule-fixtures/A03.command-injection/positive.js +1 -0
  307. package/knowledge/rule-fixtures/A03.sql-injection/negative.js +1 -0
  308. package/knowledge/rule-fixtures/A03.sql-injection/positive.js +1 -0
  309. package/knowledge/rule-fixtures/A03.xss-innerhtml/negative.js +1 -0
  310. package/knowledge/rule-fixtures/A03.xss-innerhtml/positive.js +1 -0
  311. package/knowledge/rule-fixtures/A05.cors-wildcard/negative.js +1 -0
  312. package/knowledge/rule-fixtures/A05.cors-wildcard/positive.js +1 -0
  313. package/knowledge/rule-fixtures/A05.default-credentials/negative.js +1 -0
  314. package/knowledge/rule-fixtures/A05.default-credentials/positive.js +1 -0
  315. package/knowledge/rule-fixtures/A07.jwt-alg-none/negative.js +1 -0
  316. package/knowledge/rule-fixtures/A07.jwt-alg-none/positive.js +1 -0
  317. package/knowledge/rule-fixtures/A08.binary-formatter/negative.cs +1 -0
  318. package/knowledge/rule-fixtures/A08.binary-formatter/positive.cs +1 -0
  319. package/knowledge/rule-fixtures/A08.js-eval/negative.js +1 -0
  320. package/knowledge/rule-fixtures/A08.js-eval/positive.js +1 -0
  321. package/knowledge/rule-fixtures/A08.object-input-stream/negative.java +1 -0
  322. package/knowledge/rule-fixtures/A08.object-input-stream/positive.java +1 -0
  323. package/knowledge/schemas/disposition-register-v1.json +65 -0
  324. package/knowledge/schemas/recon-envelope-v1.json +198 -0
  325. package/knowledge/schemas/unified-finding-v1.json +72 -0
  326. package/knowledge/security-primitives-contract.md +301 -0
  327. package/knowledge/security-review-rule-map.yaml +107 -0
  328. package/knowledge/skills-registry.md +72 -0
  329. package/knowledge/task-size-classifier.md +103 -0
  330. package/knowledge/telemetry-schema.md +881 -0
  331. package/knowledge/test-automation-maturity.md +56 -0
  332. package/knowledge/test-automation-principles.md +71 -0
  333. package/knowledge/test-cadence-tradeoffs.md +68 -0
  334. package/knowledge/test-doubles.md +105 -0
  335. package/knowledge/test-file-indicators.md +22 -0
  336. package/knowledge/test-layer-gates.md +35 -0
  337. package/knowledge/test-matrix-examples/django-batch.md +24 -0
  338. package/knowledge/test-matrix-examples/dotnet-grpc-fronting-api.md +90 -0
  339. package/knowledge/test-matrix-examples/dotnet-http-consumer.md +131 -0
  340. package/knowledge/test-matrix-examples/react-node-spa.md +24 -0
  341. package/knowledge/test-matrix-examples/spring-boot-service.md +25 -0
  342. package/knowledge/test-matrix-examples/ssr-htmx.md +24 -0
  343. package/knowledge/test-organization.md +70 -0
  344. package/knowledge/test-pyramid.md +84 -0
  345. package/knowledge/test-refactoring.md +67 -0
  346. package/knowledge/test-review-division-of-labor.md +85 -0
  347. package/knowledge/test-smells.md +80 -0
  348. package/knowledge/test-stack-profiles/bdd-frameworks.md +235 -0
  349. package/knowledge/test-stack-profiles/django.md +13 -0
  350. package/knowledge/test-stack-profiles/dotnet.md +18 -0
  351. package/knowledge/test-stack-profiles/go.md +16 -0
  352. package/knowledge/test-stack-profiles/node.md +16 -0
  353. package/knowledge/test-stack-profiles/react.md +12 -0
  354. package/knowledge/test-stack-profiles/spring-boot.md +16 -0
  355. package/knowledge/test-stack-profiles/ssr-htmx.md +14 -0
  356. package/knowledge/test-stack-profiles/vue.md +12 -0
  357. package/knowledge/test-strategy.md +70 -0
  358. package/knowledge/testability-patterns.md +240 -0
  359. package/knowledge/testing-quadrants.md +44 -0
  360. package/knowledge/testing-techniques/approval.md +15 -0
  361. package/knowledge/testing-techniques/chaos.md +17 -0
  362. package/knowledge/testing-techniques/fuzz.md +15 -0
  363. package/knowledge/testing-techniques/property-based.md +15 -0
  364. package/knowledge/testing-techniques/schema-validation.md +15 -0
  365. package/knowledge/testing-techniques/screenshot.md +15 -0
  366. package/knowledge/three-phase-workflow.md +198 -0
  367. package/knowledge/value-patterns.md +55 -0
  368. package/knowledge/verification-mode.md +116 -0
  369. package/knowledge/virtual-service-libraries.md +75 -0
  370. package/knowledge/wave-consolidation-guidance.md +21 -0
  371. package/overrides/agents/Explore.md +15 -0
  372. package/overrides/agents/general-purpose.md +10 -0
  373. package/overrides/notes/autoship.md +6 -0
  374. package/overrides/notes/issues-from-assessment.md +3 -0
  375. package/overrides/notes/issues-from-plan.md +3 -0
  376. package/overrides/notes/mutation-night-watch.md +3 -0
  377. package/overrides/notes/mutation-testing.md +3 -0
  378. package/overrides/notes/pr.md +7 -0
  379. package/overrides/notes/project-init.md +6 -0
  380. package/overrides/notes/setup.md +13 -0
  381. package/overrides/notes/specs.md +3 -0
  382. package/overrides/skills/headless-run/SKILL.md +45 -0
  383. package/overrides/skills/upgrade/SKILL.md +30 -0
  384. package/overrides/skills/version/SKILL.md +25 -0
  385. package/package.json +36 -0
  386. package/scripts/authoring_digest.py +93 -0
  387. package/scripts/autoship_discover.py +121 -0
  388. package/scripts/autoship_group.py +409 -0
  389. package/scripts/autoship_proposals.py +494 -0
  390. package/scripts/autoship_queue.py +291 -0
  391. package/scripts/autoship_reclaim.py +495 -0
  392. package/scripts/build_jobs.py +108 -0
  393. package/scripts/build_rollback_point.py +240 -0
  394. package/scripts/build_slice_scope.py +157 -0
  395. package/scripts/build_wave.py +109 -0
  396. package/scripts/build_wave_reconcile.py +252 -0
  397. package/scripts/build_worktree_baseref.py +113 -0
  398. package/scripts/check_agent_scope.py +117 -0
  399. package/scripts/check_agent_tool_mapping.py +213 -0
  400. package/scripts/check_review_agent_mcp_tools.py +317 -0
  401. package/scripts/check_security_assessment_mcp_tools.py +165 -0
  402. package/scripts/checkpoint_abort.py +502 -0
  403. package/scripts/claude_setup_review.py +438 -0
  404. package/scripts/codebase_recon.py +556 -0
  405. package/scripts/coverage_config.py +623 -0
  406. package/scripts/coverage_delta_steering.py +330 -0
  407. package/scripts/coverage_discovery_dotnet.py +315 -0
  408. package/scripts/coverage_discovery_java.py +742 -0
  409. package/scripts/coverage_discovery_js.py +546 -0
  410. package/scripts/coverage_gap_ranking.py +556 -0
  411. package/scripts/coverage_readiness.py +455 -0
  412. package/scripts/coverage_report_parse.py +521 -0
  413. package/scripts/detect_bdd_convention.py +252 -0
  414. package/scripts/eval_ablation.py +376 -0
  415. package/scripts/gherkin_analysis_coverage_gate.py +306 -0
  416. package/scripts/gherkin_cross_feature_duplicate_titles_gate.py +173 -0
  417. package/scripts/gherkin_effectiveness_rollup.py +238 -0
  418. package/scripts/gherkin_failure_path_gate.py +206 -0
  419. package/scripts/gherkin_feature_merge.py +720 -0
  420. package/scripts/gherkin_stub_gate.py +163 -0
  421. package/scripts/gherkin_stub_merge.py +479 -0
  422. package/scripts/git_origin_host.py +88 -0
  423. package/scripts/install-java-static-analysis.py +110 -0
  424. package/scripts/issue_deps.py +74 -0
  425. package/scripts/lib/_bdd_markers.py +28 -0
  426. package/scripts/lib/_gherkin_text.py +93 -0
  427. package/scripts/lib/_vendored_tree.py +70 -0
  428. package/scripts/lib/autoship_state.py +397 -0
  429. package/scripts/lib/claude_md_guard.py +226 -0
  430. package/scripts/lib/deterministic_recon.py +446 -0
  431. package/scripts/lib/mcp_tool_grants.py +211 -0
  432. package/scripts/lib/plan_parse.py +386 -0
  433. package/scripts/lib/review_result.py +84 -0
  434. package/scripts/lib/review_roster.py +86 -0
  435. package/scripts/lib/session_log/__init__.py +34 -0
  436. package/scripts/lib/session_log/__pycache__/__init__.cpython-314.pyc +0 -0
  437. package/scripts/lib/session_log/__pycache__/records.cpython-314.pyc +0 -0
  438. package/scripts/lib/session_log/classify.py +231 -0
  439. package/scripts/lib/session_log/corrections.py +194 -0
  440. package/scripts/lib/session_log/discovery.py +108 -0
  441. package/scripts/lib/session_log/records.py +218 -0
  442. package/scripts/lib/session_log/redact.py +76 -0
  443. package/scripts/lib/session_log/signals.py +373 -0
  444. package/scripts/lib/session_report_downstream.py +614 -0
  445. package/scripts/lib/session_report_maintainer.py +1273 -0
  446. package/scripts/lib/session_report_shared.py +262 -0
  447. package/scripts/lib/settings_hook_guard.py +157 -0
  448. package/scripts/lib/slug.py +33 -0
  449. package/scripts/lib/stub_extractors/__init__.py +82 -0
  450. package/scripts/lib/stub_extractors/_common.py +328 -0
  451. package/scripts/lib/stub_extractors/csharp.py +19 -0
  452. package/scripts/lib/stub_extractors/go.py +173 -0
  453. package/scripts/lib/stub_extractors/java.py +18 -0
  454. package/scripts/lib/stub_extractors/jsts.py +126 -0
  455. package/scripts/mutation_stack_sections.py +149 -0
  456. package/scripts/mutation_yield_steering.py +345 -0
  457. package/scripts/orchestrator.py +895 -0
  458. package/scripts/plan_gherkin_export.py +227 -0
  459. package/scripts/plan_waves.py +208 -0
  460. package/scripts/pr_close_keyword_lint.py +108 -0
  461. package/scripts/progress_guardian.py +888 -0
  462. package/scripts/recon_inventory.py +273 -0
  463. package/scripts/review_findings_log.py +93 -0
  464. package/scripts/run_invariants.py +124 -0
  465. package/scripts/select_lenses.py +640 -0
  466. package/scripts/session_report.py +486 -0
  467. package/scripts/set_autocompact_env.py +221 -0
  468. package/scripts/ship_resume_guard.py +135 -0
  469. package/scripts/ship_review_gate.py +63 -0
  470. package/scripts/specs_convention_marker.py +103 -0
  471. package/scripts/test_improve_resume.py +277 -0
  472. package/scripts/test_review_mechanics.py +958 -0
  473. package/scripts/token_efficiency_review.py +322 -0
  474. package/scripts/verdict_scope.py +285 -0
  475. package/scripts/verify_gherkin_quality_critic_isolation.py +296 -0
  476. package/scripts/verify_tier.py +157 -0
  477. package/skills/adr-tools/SKILL.md +118 -0
  478. package/skills/agent-readiness/SKILL.md +105 -0
  479. package/skills/agent-readiness/ai_friendly_analyzers.py +326 -0
  480. package/skills/agent-readiness/scanner.py +441 -0
  481. package/skills/agent-readiness/scorecard.yaml +88 -0
  482. package/skills/api-design/SKILL.md +115 -0
  483. package/skills/apply-fixes/SKILL.md +171 -0
  484. package/skills/apply-test-doubles/SKILL.md +321 -0
  485. package/skills/artifact-lifecycle/SKILL.md +127 -0
  486. package/skills/autoship/SKILL.md +1124 -0
  487. package/skills/benchmark/SKILL.md +105 -0
  488. package/skills/branch-workflow/SKILL.md +89 -0
  489. package/skills/browse/SKILL.md +184 -0
  490. package/skills/browser-testing/SKILL.md +62 -0
  491. package/skills/browser-testing/references/playwright-patterns.md +216 -0
  492. package/skills/build/SKILL.md +422 -0
  493. package/skills/build/references/static-self-heal.md +245 -0
  494. package/skills/careful/SKILL.md +72 -0
  495. package/skills/cd-test-architecture/SKILL.md +371 -0
  496. package/skills/ci-debugging/SKILL.md +105 -0
  497. package/skills/co-evolution-audit/SKILL.md +269 -0
  498. package/skills/code-review/SKILL.md +1015 -0
  499. package/skills/code-review/examples/aggregated-sample.json +56 -0
  500. package/skills/code-review/examples/sample-report.md +41 -0
  501. package/skills/code-review/output-format.md +478 -0
  502. package/skills/code-review/scripts/activation.py +86 -0
  503. package/skills/code-review/scripts/change_impact.py +357 -0
  504. package/skills/code-review/scripts/change_shape.py +372 -0
  505. package/skills/code-review/scripts/change_size.py +212 -0
  506. package/skills/code-review/scripts/changed_file_list.py +141 -0
  507. package/skills/code-review/scripts/closing_pass.py +187 -0
  508. package/skills/code-review/scripts/consolidate.py +277 -0
  509. package/skills/code-review/scripts/contract_failure_report.py +185 -0
  510. package/skills/code-review/scripts/dispatch_reconcile.py +66 -0
  511. package/skills/code-review/scripts/dispatch_waves.py +164 -0
  512. package/skills/code-review/scripts/finding_signature.py +446 -0
  513. package/skills/code-review/scripts/ledger.py +283 -0
  514. package/skills/code-review/scripts/partition.py +169 -0
  515. package/skills/code-review/scripts/render_tiered_findings.py +274 -0
  516. package/skills/code-review/scripts/repo_invariants.py +1066 -0
  517. package/skills/code-review/scripts/review_context_pack.py +306 -0
  518. package/skills/code-review/scripts/review_round_log.py +345 -0
  519. package/skills/code-review/scripts/review_value_coverage.py +297 -0
  520. package/skills/code-review/scripts/validate_review_output.py +467 -0
  521. package/skills/code-review/sliced-mode.md +205 -0
  522. package/skills/competitive-analysis/SKILL.md +191 -0
  523. package/skills/context-loading-protocol/SKILL.md +157 -0
  524. package/skills/continue/SKILL.md +90 -0
  525. package/skills/cost-report/SKILL.md +178 -0
  526. package/skills/coverage-baseline/SKILL.md +335 -0
  527. package/skills/coverage-baseline/references/multi-project-discovery.md +202 -0
  528. package/skills/coverage-delta/SKILL.md +181 -0
  529. package/skills/coverage-delta/references/mutation-gate.md +70 -0
  530. package/skills/design-doc/SKILL.md +95 -0
  531. package/skills/design-interrogation/SKILL.md +89 -0
  532. package/skills/design-it-twice/SKILL.md +91 -0
  533. package/skills/docker-image-audit/SKILL.md +108 -0
  534. package/skills/docker-image-audit/references/install-guide.md +64 -0
  535. package/skills/docker-image-audit/references/report-template.md +73 -0
  536. package/skills/docker-image-create/SKILL.md +185 -0
  537. package/skills/domain-analysis/SKILL.md +183 -0
  538. package/skills/domain-driven-design/SKILL.md +194 -0
  539. package/skills/exploratory-testing/SKILL.md +108 -0
  540. package/skills/explore/SKILL.md +51 -0
  541. package/skills/farley-score/SKILL.md +165 -0
  542. package/skills/feature-file-validation/SKILL.md +78 -0
  543. package/skills/feature-file-validation/references/validation-rules.md +115 -0
  544. package/skills/feedback-learning/SKILL.md +414 -0
  545. package/skills/fix/SKILL.md +450 -0
  546. package/skills/freeze/SKILL.md +68 -0
  547. package/skills/frontend-architecture/SKILL.md +113 -0
  548. package/skills/gherkin-derive/SKILL.md +630 -0
  549. package/skills/gherkin-public/SKILL.md +266 -0
  550. package/skills/governance-compliance/SKILL.md +150 -0
  551. package/skills/guard/SKILL.md +75 -0
  552. package/skills/handoff/SKILL.md +139 -0
  553. package/skills/handoff/references/summary-templates.md +242 -0
  554. package/skills/harness-audit/SKILL.md +751 -0
  555. package/skills/harness-audit/scripts/lesson_validate.py +386 -0
  556. package/skills/harness-audit/scripts/redundancy_criterion.py +188 -0
  557. package/skills/headless-run/SKILL.md +45 -0
  558. package/skills/headless-run/scripts/isolated_dispatch.py +381 -0
  559. package/skills/help/SKILL.md +72 -0
  560. package/skills/hexagonal-architecture/SKILL.md +85 -0
  561. package/skills/human-oversight-protocol/SKILL.md +224 -0
  562. package/skills/issues-from-assessment/SKILL.md +223 -0
  563. package/skills/issues-from-plan/SKILL.md +133 -0
  564. package/skills/legacy-code/SKILL.md +132 -0
  565. package/skills/mermaid-diagramming/SKILL.md +120 -0
  566. package/skills/mutation-night-watch/SKILL.md +154 -0
  567. package/skills/mutation-night-watch/references/scheduling.md +135 -0
  568. package/skills/mutation-testing/SKILL.md +396 -0
  569. package/skills/mutation-testing/references/languages/csharp-stryker-net.md +676 -0
  570. package/skills/mutation-testing/references/languages/go-go-mutesting.md +95 -0
  571. package/skills/mutation-testing/references/languages/java-pitest.md +77 -0
  572. package/skills/mutation-testing/references/languages/javascript-stryker.md +188 -0
  573. package/skills/mutation-testing/references/languages/python-mutmut.md +97 -0
  574. package/skills/mutation-testing/references/time-estimation.md +34 -0
  575. package/skills/mutation-testing/references/tool-detection.md +15 -0
  576. package/skills/mutation-testing/references/workflow-callers.md +23 -0
  577. package/skills/mutation-testing/scripts/__pycache__/xunit_v3_feature_detector.cpython-314.pyc +0 -0
  578. package/skills/mutation-testing/scripts/csharp_stryker_net_slice_runner.py +635 -0
  579. package/skills/mutation-testing/scripts/csharp_stryker_net_status_loop.py +525 -0
  580. package/skills/mutation-testing/scripts/csharp_stryker_net_wrapper.py +681 -0
  581. package/skills/mutation-testing/scripts/mutation_baseline_reuse.py +292 -0
  582. package/skills/mutation-testing/scripts/mutation_exclude_policy.py +268 -0
  583. package/skills/mutation-testing/scripts/mutation_feasibility_gate.py +463 -0
  584. package/skills/mutation-testing/scripts/mutation_kill_headless.py +331 -0
  585. package/skills/mutation-testing/scripts/mutation_kill_insert.py +199 -0
  586. package/skills/mutation-testing/scripts/mutation_kill_insert_python.py +150 -0
  587. package/skills/mutation-testing/scripts/mutation_kill_loop.py +869 -0
  588. package/skills/mutation-testing/scripts/mutation_kill_loop_python.py +949 -0
  589. package/skills/mutation-testing/scripts/mutation_kill_retry.py +592 -0
  590. package/skills/mutation-testing/scripts/mutation_kill_shared.py +620 -0
  591. package/skills/mutation-testing/scripts/mutation_nightwatch.py +462 -0
  592. package/skills/mutation-testing/scripts/mutation_nightwatch_stacks.py +425 -0
  593. package/skills/mutation-testing/scripts/mutation_report.py +743 -0
  594. package/skills/mutation-testing/scripts/mutation_report_cli.py +175 -0
  595. package/skills/mutation-testing/scripts/mutation_safety_gate.py +69 -0
  596. package/skills/mutation-testing/scripts/stryker_shard_pipeline.py +847 -0
  597. package/skills/mutation-testing/scripts/stryker_shard_setup.py +440 -0
  598. package/skills/mutation-testing/scripts/stryker_timeout_retry.py +142 -0
  599. package/skills/mutation-testing/scripts/xunit_v3_feature_detector.py +341 -0
  600. package/skills/performance-benchmark/SKILL.md +174 -0
  601. package/skills/performance-benchmark/examples/report-format.md +43 -0
  602. package/skills/performance-benchmark/references/benchmark-script.md +169 -0
  603. package/skills/performance-metrics/SKILL.md +265 -0
  604. package/skills/plan/SKILL.md +199 -0
  605. package/skills/plan/references/gherkin-persistence.md +43 -0
  606. package/skills/plan/references/plan-template.md +182 -0
  607. package/skills/pr/SKILL.md +289 -0
  608. package/skills/pr/scripts/gate_retry_state.py +368 -0
  609. package/skills/project-init/README.md +141 -0
  610. package/skills/project-init/SKILL.md +1197 -0
  611. package/skills/project-init/evals/evals.json +200 -0
  612. package/skills/project-init/references/capability-tools.md +55 -0
  613. package/skills/project-init/references/configs.md +221 -0
  614. package/skills/property-based-testing/SKILL.md +121 -0
  615. package/skills/property-based-testing/fixtures/invariant_fixture.py +15 -0
  616. package/skills/property-based-testing/fixtures/js-roundtrip/README.md +42 -0
  617. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/LICENSE +21 -0
  618. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/README.md +263 -0
  619. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/fast-check.d.ts +5165 -0
  620. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/fast-check.js +12147 -0
  621. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/package.json +3 -0
  622. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/types57/fast-check.d.ts +5165 -0
  623. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/fast-check.d.ts +5165 -0
  624. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/fast-check.js +12011 -0
  625. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/rolldown-runtime-D7D4PA-g.js +13 -0
  626. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/types57/fast-check.d.ts +5165 -0
  627. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/package.json +94 -0
  628. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/LICENSE +21 -0
  629. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/README.md +168 -0
  630. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/RandomGenerator-DcXj09Ch.d.ts +14 -0
  631. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformBigInt.d.ts +15 -0
  632. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformBigInt.js +38 -0
  633. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat32.d.ts +15 -0
  634. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat32.js +18 -0
  635. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat64.d.ts +15 -0
  636. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat64.js +22 -0
  637. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformInt.d.ts +15 -0
  638. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformInt.js +134 -0
  639. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/RandomGenerator-DcXj09Ch.d.ts +14 -0
  640. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformBigInt.d.ts +15 -0
  641. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformBigInt.js +37 -0
  642. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat32.d.ts +15 -0
  643. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat32.js +17 -0
  644. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat64.d.ts +15 -0
  645. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat64.js +21 -0
  646. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformInt.d.ts +15 -0
  647. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformInt.js +133 -0
  648. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/congruential32.d.ts +7 -0
  649. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/congruential32.js +44 -0
  650. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/mersenne.d.ts +7 -0
  651. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/mersenne.js +90 -0
  652. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xoroshiro128plus.d.ts +7 -0
  653. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xoroshiro128plus.js +80 -0
  654. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xorshift128plus.d.ts +7 -0
  655. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xorshift128plus.js +78 -0
  656. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/package.json +3 -0
  657. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/JumpableRandomGenerator.d.ts +16 -0
  658. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/JumpableRandomGenerator.js +0 -0
  659. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/RandomGenerator.d.ts +2 -0
  660. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/RandomGenerator.js +0 -0
  661. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/generateN.d.ts +6 -0
  662. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/generateN.js +8 -0
  663. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/purify.d.ts +12 -0
  664. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/purify.js +9 -0
  665. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/skipN.d.ts +6 -0
  666. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/skipN.js +6 -0
  667. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/congruential32.d.ts +7 -0
  668. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/congruential32.js +46 -0
  669. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/mersenne.d.ts +7 -0
  670. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/mersenne.js +92 -0
  671. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xoroshiro128plus.d.ts +7 -0
  672. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xoroshiro128plus.js +82 -0
  673. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xorshift128plus.d.ts +7 -0
  674. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xorshift128plus.js +80 -0
  675. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/JumpableRandomGenerator.d.ts +16 -0
  676. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/JumpableRandomGenerator.js +0 -0
  677. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/RandomGenerator.d.ts +2 -0
  678. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/RandomGenerator.js +0 -0
  679. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/generateN.d.ts +6 -0
  680. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/generateN.js +9 -0
  681. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/purify.d.ts +12 -0
  682. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/purify.js +10 -0
  683. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/skipN.d.ts +6 -0
  684. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/skipN.js +7 -0
  685. package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/package.json +133 -0
  686. package/skills/property-based-testing/fixtures/js-roundtrip/package-lock.json +1179 -0
  687. package/skills/property-based-testing/fixtures/js-roundtrip/package.json +14 -0
  688. package/skills/property-based-testing/fixtures/js-roundtrip/roundtrip.js +29 -0
  689. package/skills/property-based-testing/fixtures/js-roundtrip/roundtrip.properties.test.js +16 -0
  690. package/skills/property-based-testing/fixtures/no_property_fixture.py +10 -0
  691. package/skills/property-based-testing/fixtures/roundtrip_fixture.py +16 -0
  692. package/skills/property-based-testing/references/languages/javascript.md +54 -0
  693. package/skills/property-based-testing/scripts/detect_and_dispatch.py +80 -0
  694. package/skills/property-based-testing/scripts/hypothesis_scaffold.py +276 -0
  695. package/skills/proxy-resilience/SKILL.md +84 -0
  696. package/skills/quality-gate-pipeline/SKILL.md +184 -0
  697. package/skills/quality-targets-converge/SKILL.md +254 -0
  698. package/skills/repo-review/SKILL.md +159 -0
  699. package/skills/report-pdf/SKILL.md +66 -0
  700. package/skills/review/SKILL.md +47 -0
  701. package/skills/review-agent/SKILL.md +152 -0
  702. package/skills/review-summary/SKILL.md +73 -0
  703. package/skills/run-report/SKILL.md +70 -0
  704. package/skills/semantic-duplication-scan/SKILL.md +337 -0
  705. package/skills/semantic-scan/SKILL.md +53 -0
  706. package/skills/semgrep-analyze/SKILL.md +139 -0
  707. package/skills/setup/SKILL.md +1122 -0
  708. package/skills/ship/SKILL.md +240 -0
  709. package/skills/source-verification/SKILL.md +210 -0
  710. package/skills/source-verification/scripts/claim_extractor.py +155 -0
  711. package/skills/specs/.size-baseline.json +4 -0
  712. package/skills/specs/SKILL.md +243 -0
  713. package/skills/specs/references/completeness-checklist.md +83 -0
  714. package/skills/specs/references/extraction.md +58 -0
  715. package/skills/specs/references/glossary.md +59 -0
  716. package/skills/specs/references/persistence.md +115 -0
  717. package/skills/specs/references/predictability-check.md +77 -0
  718. package/skills/static-analysis-integration/SKILL.md +235 -0
  719. package/skills/static-analysis-integration/adapters/_envelope.py +26 -0
  720. package/skills/static-analysis-integration/adapters/jscpd-adapter.py +66 -0
  721. package/skills/static-analysis-integration/adapters/lizard-adapter.py +81 -0
  722. package/skills/static-analysis-integration/adapters/mypy-adapter.py +50 -0
  723. package/skills/static-analysis-integration/adapters/mypy-src-layout.py +93 -0
  724. package/skills/static-analysis-integration/adapters/security-review-adapter.py +212 -0
  725. package/skills/static-analysis-integration/maintenance.md +23 -0
  726. package/skills/static-analysis-integration/references/language-setup.md +228 -0
  727. package/skills/static-analysis-integration/references/sarif-parser.md +124 -0
  728. package/skills/static-analysis-integration/references/security-review-adapter.md +118 -0
  729. package/skills/static-analysis-integration/references/tool-configs.md +617 -0
  730. package/skills/static-analysis-integration/rulesets/pmd-quickstart.xml +24 -0
  731. package/skills/stryker-xunit-v2-shim/SKILL.md +274 -0
  732. package/skills/stryker-xunit-v2-shim/references/shim-howto.md +256 -0
  733. package/skills/stryker-xunit-v2-shim/scripts/generate_shim.py +143 -0
  734. package/skills/systematic-debugging/SKILL.md +130 -0
  735. package/skills/telemetry/SKILL.md +75 -0
  736. package/skills/test-audit-disable/SKILL.md +129 -0
  737. package/skills/test-design/SKILL.md +177 -0
  738. package/skills/test-design/scripts/__pycache__/internal_double_detector.cpython-314.pyc +0 -0
  739. package/skills/test-design/scripts/internal_double_detector.py +631 -0
  740. package/skills/test-design-advisor/SKILL.md +166 -0
  741. package/skills/test-driven-development/SKILL.md +169 -0
  742. package/skills/test-health/SKILL.md +262 -0
  743. package/skills/test-improve/SKILL.md +239 -0
  744. package/skills/test-improve/references/phase-0-approach-contract.md +228 -0
  745. package/skills/test-improve/references/phase-1-analyze.md +131 -0
  746. package/skills/test-improve/references/phase-2-baseline.md +121 -0
  747. package/skills/test-improve/references/phase-3-derive-gherkin.md +53 -0
  748. package/skills/test-improve/references/phase-4-plan-fixes.md +34 -0
  749. package/skills/test-improve/references/phase-5-improve.md +215 -0
  750. package/skills/test-improve/references/phase-6-refactor-decision.md +45 -0
  751. package/skills/test-improve/references/phase-7-refactor.md +44 -0
  752. package/skills/test-improve/references/phase-8-validate.md +66 -0
  753. package/skills/test-improve/references/phase-9-close-out-prompt.md +11 -0
  754. package/skills/test-improve/references/phase-9-report.md +62 -0
  755. package/skills/test-improve/references/review-loop.md +92 -0
  756. package/skills/test-improve/templates/executive-summary.md +123 -0
  757. package/skills/threat-modeling/SKILL.md +108 -0
  758. package/skills/triage/SKILL.md +211 -0
  759. package/skills/ubiquitous-language/SKILL.md +192 -0
  760. package/skills/ubiquitous-language/scripts/collect_domain_signals.py +300 -0
  761. package/skills/unfreeze/SKILL.md +37 -0
  762. package/skills/upgrade/SKILL.md +31 -0
  763. package/skills/upgrade/scripts/check_version_drift.py +113 -0
  764. package/skills/upgrade/scripts/enable_autoupdate.py +149 -0
  765. package/skills/version/SKILL.md +25 -0
  766. package/sync/__pycache__/sync_upstream.cpython-314.pyc +0 -0
  767. package/sync/sync_upstream.py +293 -0
  768. package/templates/ACCEPTED-RISKS.md.tmpl +46 -0
  769. package/templates/agents/agent-template.md +151 -0
  770. package/templates/agents/angular-testing.md +66 -0
  771. package/templates/agents/csharp-quality.md +63 -0
  772. package/templates/agents/esm-enforcer.md +52 -0
  773. package/templates/agents/front-end-testing.md +65 -0
  774. package/templates/agents/go-quality.md +65 -0
  775. package/templates/agents/python-quality.md +62 -0
  776. package/templates/agents/react-testing.md +61 -0
  777. package/templates/agents/ts-enforcer.md +60 -0
  778. package/templates/agents/twelve-factor-audit.md +49 -0
  779. package/tools/entropy-check.py +250 -0
  780. package/tools/model-hash-verify.py +213 -0
@@ -0,0 +1,192 @@
1
+ ---
2
+ name: ubiquitous-language
3
+ description: Build or refresh the project's ubiquitous language glossary — one markdown file per business concept at `.plans/domain/<Concept>.md` plus a `_index.md`. Mines grep-based signals (class names, enum values, interface names, domain-event names, BDD scenario names, validator rules) and applies a four-gate filter to keep only genuine business concepts. Optional interactive interview phase to refine definitions and capture behavior (state transitions, invariants, synonyms to avoid). Language-agnostic — works for JS/TS, C#, Java, Python, Go, or any mix. Use whenever the user says "build the glossary", "extract domain terms", "document the ubiquitous language", "what are the domain concepts", or when domain-review surfaces pervasive terminology inconsistency (3+ names for the same concept).
4
+ role: worker
5
+ user-invocable: true
6
+ argument-hint: "[path-to-source-root]"
7
+ ---
8
+
9
+ # Ubiquitous Language
10
+
11
+ Produces a queryable per-concept glossary at `.plans/domain/`. Each concept gets its own file (one-sentence definition, classification, related terms). The glossary feeds `domain-review` as classification ground truth — run this skill before `domain-review` for sharper findings.
12
+
13
+ **This skill never modifies source files.** It writes only to `.plans/domain/` and `.plans/domain-language-plan.md`.
14
+
15
+ ---
16
+
17
+ ## Announce on start
18
+
19
+ "Running ubiquitous-language. Gathering domain signals from `$ARGUMENTS` (or cwd if empty). I'll apply a four-gate filter and write one file per approved business concept to `.plans/domain/`. Existing files are append-mostly — previous definitions are preserved."
20
+
21
+ ---
22
+
23
+ ## Phase 1: Gather signals (grep-based, no build required)
24
+
25
+ Run the colocated gather script. It collects raw candidates; it does not decide what is domain language (that is Phase 3's job).
26
+
27
+ ```bash
28
+ python3 .claude/skills/ubiquitous-language/scripts/collect_domain_signals.py "$ARGUMENTS"
29
+ ```
30
+
31
+ The script writes to `.plans/raw/domain-language/`:
32
+
33
+ - `class-names.txt` — PascalCase class/struct/record/interface names from domain and application layers
34
+ - `enum-values.txt` — enum declarations with their values
35
+ - `domain-events.txt` — type names ending in `Created`, `Updated`, `Submitted`, `Approved`, `Cancelled`, `Rejected`, `Completed`, `Failed`, `Requested`
36
+ - `bdd-names.txt` — BDD scenario and step names from `.feature` files (`Given_`, `When_`, `Then_`, `Should_`)
37
+ - `validator-rules.txt` — validation rule method names and error messages
38
+ - `interface-names.txt` — interface/protocol names from domain and application layers
39
+
40
+ If the script is unavailable, gather manually using `Grep` with the patterns documented in the script's comments.
41
+
42
+ **Graph-assisted disambiguation.** Prefer CodeGraph/Repowise over more `Grep` passes to check a candidate term's actual call sites and surrounding context when the raw signal is ambiguous (e.g. a name that could be a technical or a business concept, or two near-duplicate names that might be the same concept under different spellings). This is a supplement to Phase 1's grep-based collection, not a replacement — the collector script output is still the primary candidate source. See [`knowledge/codegraph-vs-graphify.md`](../../knowledge/codegraph-vs-graphify.md) for tool selection and the fallback contract.
43
+
44
+ ---
45
+
46
+ ## Phase 2: Load existing glossary (if present)
47
+
48
+ Check for `.plans/domain/_index.md`. If it exists, read the current term list so new terms can be diffed against what already exists. Do not regenerate files for terms already in the glossary unless the definition is missing or clearly wrong.
49
+
50
+ ---
51
+
52
+ ## Phase 3: Apply the four-gate filter
53
+
54
+ For each candidate term from Phase 1, apply all four gates. Promote only terms that pass all four.
55
+
56
+ | Gate | Question | Fail condition |
57
+ | --- | --- | --- |
58
+ | 1. Business concept | Would a domain expert (not a developer) recognize this term as part of the business vocabulary? | Pure technical terms: `Repository`, `Controller`, `Factory`, `Builder`, `Manager`, `Handler`, `Util`, `Helper`, `Config`, `Base`, `Abstract` |
59
+ | 2. Non-generic | Does the name carry specific business meaning beyond "thing that does stuff"? | Single-word generics: `Item`, `Data`, `Info`, `Record`, `Object`, `Entity`, `Model` (unless qualified: `OrderLineItem` passes) |
60
+ | 3. Appears in ≥2 signal sources | Is the term used in at least two different signal types (e.g., class name AND BDD scenario name)? | Terms that appear only once in a single file with no corroborating evidence |
61
+ | 4. Domain expert would recognize it | Would a domain expert, reading only the name, understand roughly what it refers to? | Portmanteaus, internal jargon, or abbreviations not explainable without context |
62
+
63
+ When in doubt on gate 3, lean toward including the term — false positives are cheap (the user can remove a file); false negatives mean silent glossary gaps.
64
+
65
+ ---
66
+
67
+ ## Phase 4: Write concept files
68
+
69
+ For each approved term, write (or update) `.plans/domain/<Concept>.md` using this format:
70
+
71
+ ```markdown
72
+ ---
73
+ classification: Aggregate | Entity | Value Object | Domain Event | Domain Service | Policy | Concept
74
+ context: <bounded context name, if multi-context repo>
75
+ ---
76
+
77
+ # <ConceptName>
78
+
79
+ <One to two sentence definition in plain business language. Avoid technical terms.>
80
+
81
+ ## Lifecycle / State Transitions
82
+ <!-- Optional: fill in during interview phase or when state-transition signals are present -->
83
+
84
+ ## Invariants
85
+ <!-- Optional: business rules that must always hold for this concept -->
86
+
87
+ ## Related
88
+ <!-- Optional: link to related concepts -->
89
+ - [[RelatedConcept]]
90
+
91
+ ## Avoid
92
+ <!-- Optional: synonyms the codebase uses that should be consolidated to this term -->
93
+ - `PurchaseOrder` (use `Order` instead)
94
+
95
+ ## Sources
96
+ <!-- Optional: where this definition came from -->
97
+ ```
98
+
99
+ **Append-mostly**: if the file already exists, preserve existing content. Add new sections; do not overwrite human-curated definitions. Update only if the existing definition is blank or contradicted by new evidence.
100
+
101
+ ---
102
+
103
+ ## Phase 5: Regenerate index
104
+
105
+ After writing all concept files, regenerate `.plans/domain/_index.md`:
106
+
107
+ ```markdown
108
+ # Domain Glossary Index
109
+
110
+ _Last updated: <date>_
111
+
112
+ ## Aggregates
113
+ - [Order](Order.md)
114
+ - [Payment](Payment.md)
115
+
116
+ ## Entities
117
+ - [OrderLine](OrderLine.md)
118
+
119
+ ## Value Objects
120
+ - [Money](Money.md)
121
+ - [Address](Address.md)
122
+
123
+ ## Domain Events
124
+ - [OrderSubmitted](OrderSubmitted.md)
125
+
126
+ ## Domain Services
127
+ - [PricingPolicy](PricingPolicy.md)
128
+
129
+ ## Concepts
130
+ - [FulfillmentWindow](FulfillmentWindow.md)
131
+ ```
132
+
133
+ Preserve human-curated categorical structure if it exists. Only the term links are auto-maintained; section headings and ordering are owned by the human.
134
+
135
+ ---
136
+
137
+ ## Phase 6: Optional interview (interactive sessions only)
138
+
139
+ If running interactively (not in a non-interactive CI context), ask: "Would you like to interview to refine definitions and capture behavior (state transitions, invariants, synonyms to avoid)? This usually takes 5-10 minutes."
140
+
141
+ If yes, for each aggregate and entity in the glossary:
142
+
143
+ 1. Ask: "How would you describe `<Term>` to a new team member in one sentence?"
144
+ 2. Ask: "What states can a `<Term>` be in? What triggers transitions between them?"
145
+ 3. Ask: "What must always be true about a `<Term>` (invariants)?"
146
+ 4. Ask: "Are there other names in the codebase for `<Term>` that we should consolidate?"
147
+
148
+ Update the concept files with answers. Record the interview transcript in `.plans/domain-language-plan.md`.
149
+
150
+ ---
151
+
152
+ ## Output
153
+
154
+ Write a run summary to `.plans/domain-language-plan.md`:
155
+
156
+ ```markdown
157
+ # Domain Language — Run Summary
158
+
159
+ **Date**: <date>
160
+ **Scope**: <path>
161
+ **Mode**: grep-fallback | roslyn (if available)
162
+
163
+ ## New concepts written
164
+ - `Payment` (Aggregate) — new
165
+ - `Money` (Value Object) — new
166
+
167
+ ## Updated concepts
168
+ - `Order` (Aggregate) — added Invariants section
169
+
170
+ ## Skipped (already current)
171
+ - `Customer` — definition present, no changes
172
+
173
+ ## Filtered out
174
+ - `Repository` — gate 1 fail (technical term)
175
+ - `Data` — gate 2 fail (generic)
176
+
177
+ ## Open questions
178
+ - Is `Transaction` the same concept as `Payment`? Found both in codebase.
179
+
180
+ ## Interview transcript
181
+ <!-- appended if Phase 6 ran -->
182
+ ```
183
+
184
+ Tell the user: "Glossary written to `.plans/domain/`. Run `/code-review` or `domain-review` for domain boundary analysis using these terms as ground truth."
185
+
186
+ ---
187
+
188
+ ## Integration
189
+
190
+ - **[Domain Analysis](../domain-analysis/SKILL.md)** — run domain-analysis after this skill to get architectural coupling findings annotated with canonical terms
191
+ - **[Domain-Driven Design](../domain-driven-design/SKILL.md)** — use the glossary as input when designing bounded contexts or aggregate boundaries
192
+ - **[Specs](../specs/SKILL.md)** — when writing BDD scenarios, pull term names from `.plans/domain/` to ensure scenario language matches the glossary
@@ -0,0 +1,300 @@
1
+ #!/usr/bin/env python3
2
+ """Python port of collect-domain-signals.sh (#617 / #572 Phase 3).
3
+
4
+ Gathers grep-based domain signals for the ubiquitous-language skill.
5
+
6
+ Deliberate divergence from the .sh: the shipped
7
+ `collect-domain-signals.sh` runs under `set -euo pipefail`, and every
8
+ section is a `{ safe_grep ... } | grep -v ... | sed ... | sort -u` pipe.
9
+ When any intermediate grep matches nothing (the common case for a real
10
+ project — e.g. no Java code), the pipe returns non-zero → pipefail →
11
+ `set -e` aborts. The script therefore stops after the first section, so
12
+ only `class-names.txt` is ever written in practice.
13
+
14
+ The .sh has zero bats coverage, so nothing tests (or depends on) the
15
+ broken early-exit. This port implements the six-section contract the
16
+ script's docstring + the ubiquitous-language SKILL.md both describe:
17
+ class names, enum values, domain events, BDD names, validator rules,
18
+ interface names — every section always runs and writes its file.
19
+
20
+ Usage: python3 collect_domain_signals.py [source-root]
21
+
22
+ Output: .plans/raw/domain-language/{class-names,enum-values,domain-events,
23
+ bdd-names,validator-rules,interface-names}.txt
24
+
25
+ Uses `grep -rn --include=<glob> <pattern> -- <root>` under the hood (subprocess)
26
+ because reproducing bash grep -r's file walk + include semantics natively in
27
+ Python would drift on Windows line-endings and locale collation. The .sh is
28
+ authoritative; this port dispatches the same greps so both sides find the same
29
+ matches. Additional filtering + regex substitution is done in-process.
30
+
31
+ Stdlib-only. See docs/python-hook-contract.md.
32
+ """
33
+
34
+ from __future__ import annotations
35
+
36
+ import re
37
+ import subprocess
38
+ import sys
39
+ from collections.abc import Iterable
40
+ from pathlib import Path
41
+
42
+
43
+ def _safe_grep(glob: str, pattern: str, root: str) -> list[str]:
44
+ """`grep -rnE --include=<glob> <pattern> -- <root>`, silencing errors.
45
+
46
+ The .sh runs plain `grep -rn`, which uses BRE and treats the ERE
47
+ metachars in the shipped patterns (`(...|...)`, `[A-Z]+`) as
48
+ literals — so the shipped .sh finds nothing and writes empty files
49
+ on every real project. The port fixes this by using ERE (`grep -E`);
50
+ the SKILL.md intent is a working signal collector, not a broken
51
+ stub.
52
+ """
53
+ try:
54
+ r = subprocess.run(
55
+ ["grep", "-rnE", f"--include={glob}", pattern, "--", root],
56
+ capture_output=True,
57
+ text=True,
58
+ check=False,
59
+ )
60
+ except (FileNotFoundError, OSError):
61
+ return []
62
+ if r.returncode not in (0, 1):
63
+ # 0 = matches; 1 = no match; anything else is unexpected — treat as
64
+ # no matches (the .sh does `|| true`).
65
+ return []
66
+ return [line for line in r.stdout.splitlines() if line]
67
+
68
+
69
+ def _sort_unique(lines: Iterable[str]) -> list[str]:
70
+ return sorted(set(lines))
71
+
72
+
73
+ def _write_lines(path: Path, lines: list[str]) -> None:
74
+ path.write_text("".join(f"{line}\n" for line in lines))
75
+
76
+
77
+ # Repeated exclusion list from the .sh's `grep -v` chain.
78
+ _CLASS_EXCLUDES = re.compile(
79
+ r"Test|Spec|Mock|Fake|Stub|Builder|Factory|Repository|Controller|Handler"
80
+ r"|Middleware|Config|Settings|Helper|Util|Base|Abstract|Migration"
81
+ )
82
+
83
+ _INTERFACE_EXCLUDES = re.compile(
84
+ r"Repository|Controller|Handler|Middleware|Factory|Builder|Config"
85
+ r"|Logger|Cache|Queue|Bus|Mapper|Serializer|Parser"
86
+ )
87
+
88
+ # The .sh chains four `sed` substitutions to pull just the identifier out
89
+ # of a matched line. Each one strips everything up to a keyword then keeps
90
+ # only the [A-Z][a-zA-Z]* run and the trailing junk.
91
+ _NAME_EXTRACT_PATTERNS = [
92
+ re.compile(r".*class ([A-Z][a-zA-Z]*).*"),
93
+ re.compile(r".*interface ([A-Z][a-zA-Z]*).*"),
94
+ re.compile(r".*struct ([A-Z][a-zA-Z]*).*"),
95
+ re.compile(r".*record ([A-Z][a-zA-Z]*).*"),
96
+ ]
97
+
98
+
99
+ def _extract_name(line: str) -> str:
100
+ for pattern in _NAME_EXTRACT_PATTERNS:
101
+ m = pattern.match(line)
102
+ if m:
103
+ return m.group(1)
104
+ return line
105
+
106
+
107
+ def collect_class_names(root: str, out_dir: Path) -> int:
108
+ print(" → class names...")
109
+ raw: list[str] = []
110
+ raw.extend(_safe_grep("*.ts", "^export (abstract )?class [A-Z][a-zA-Z]+", root))
111
+ raw.extend(_safe_grep("*.ts", "^export (abstract )?interface [A-Z][a-zA-Z]+", root))
112
+ raw.extend(
113
+ _safe_grep(
114
+ "*.cs",
115
+ r"^[[:space:]]*(public|internal|sealed|abstract) (partial )?"
116
+ r"(class|record|struct) [A-Z][a-zA-Z]+",
117
+ root,
118
+ )
119
+ )
120
+ raw.extend(
121
+ _safe_grep(
122
+ "*.java",
123
+ "^public (abstract |final )?(class|interface|enum|record) [A-Z][a-zA-Z]+",
124
+ root,
125
+ )
126
+ )
127
+ raw.extend(_safe_grep("*.py", "^class [A-Z][a-zA-Z]+", root))
128
+ raw.extend(_safe_grep("*.go", "^type [A-Z][a-zA-Z]+ struct", root))
129
+ raw.extend(_safe_grep("*.go", "^type [A-Z][a-zA-Z]+ interface", root))
130
+ raw.extend(_safe_grep("*.rb", "^class [A-Z][a-zA-Z]+", root))
131
+
132
+ filtered = [line for line in raw if not _CLASS_EXCLUDES.search(line)]
133
+ names = [_extract_name(line) for line in filtered]
134
+ unique = _sort_unique(names)
135
+ _write_lines(out_dir / "class-names.txt", unique)
136
+ print(f" {len(unique)} candidates")
137
+ return len(unique)
138
+
139
+
140
+ def collect_enum_values(root: str, out_dir: Path) -> int:
141
+ print(" → enum values...")
142
+ raw: list[str] = []
143
+ raw.extend(_safe_grep("*.ts", "^export (const )?enum [A-Z]", root))
144
+ raw.extend(_safe_grep("*.cs", r"^[[:space:]]*(public|internal) enum [A-Z]", root))
145
+ raw.extend(_safe_grep("*.java", "^public enum [A-Z]", root))
146
+ raw.extend(
147
+ _safe_grep("*.py", r"class [A-Z][a-zA-Z]*(Enum|Status|Type|State)\b", root)
148
+ )
149
+ raw.extend(_safe_grep("*.go", "// [A-Z][a-zA-Z]+ (is|represents|indicates)", root))
150
+ unique = _sort_unique(raw)
151
+ _write_lines(out_dir / "enum-values.txt", unique)
152
+ print(f" {len(unique)} candidates")
153
+ return len(unique)
154
+
155
+
156
+ _EVENT_SUFFIXES = (
157
+ "Created|Updated|Submitted|Approved|Cancelled|Rejected|Completed|Failed"
158
+ "|Requested|Issued|Revoked|Expired|Activated|Deactivated|Shipped"
159
+ "|Delivered|Refunded|Disputed"
160
+ )
161
+
162
+
163
+ def collect_domain_events(root: str, out_dir: Path) -> int:
164
+ print(" → domain events...")
165
+ raw: list[str] = []
166
+ raw.extend(_safe_grep("*.ts", f"class [A-Z][a-zA-Z]*({_EVENT_SUFFIXES})", root))
167
+ raw.extend(_safe_grep("*.cs", f"class [A-Z][a-zA-Z]*({_EVENT_SUFFIXES})", root))
168
+ raw.extend(_safe_grep("*.java", f"class [A-Z][a-zA-Z]*({_EVENT_SUFFIXES})", root))
169
+ raw.extend(
170
+ _safe_grep("*.go", f"type [A-Z][a-zA-Z]*({_EVENT_SUFFIXES}) struct", root)
171
+ )
172
+
173
+ event_class = re.compile(r".*class ([A-Z][a-zA-Z]*).*")
174
+ event_type = re.compile(r".*type ([A-Z][a-zA-Z]*) struct.*")
175
+ names = []
176
+ for line in raw:
177
+ m = event_class.match(line) or event_type.match(line)
178
+ names.append(m.group(1) if m else line)
179
+
180
+ unique = _sort_unique(names)
181
+ _write_lines(out_dir / "domain-events.txt", unique)
182
+ print(f" {len(unique)} candidates")
183
+ return len(unique)
184
+
185
+
186
+ def collect_bdd_names(root: str, out_dir: Path) -> int:
187
+ print(" → BDD names...")
188
+ raw: list[str] = []
189
+ # Gherkin keywords: `Scenario:`, `Given x`, `When y`, etc. — the
190
+ # trailing char after the keyword is either whitespace or `:` (for
191
+ # `Scenario` outlines / `Feature`). The .sh required trailing `\s`,
192
+ # which never matches `Scenario:` — another bug we fix here.
193
+ raw.extend(
194
+ _safe_grep(
195
+ "*.feature",
196
+ r"^[[:space:]]*(Scenario|Given|When|Then|And)([[:space:]]|:)",
197
+ root,
198
+ )
199
+ )
200
+ raw.extend(_safe_grep("*.ts", "it\\(['\"].*['\"]", root))
201
+ raw.extend(_safe_grep("*.ts", "describe\\(['\"].*['\"]", root))
202
+ raw.extend(
203
+ _safe_grep("*.cs", r"\[Fact\]|public void (Given|When|Then|Should)[A-Z]", root)
204
+ )
205
+ raw.extend(
206
+ _safe_grep("*.java", r"@Test.*\n.*void (given|when|then|should)[A-Z]", root)
207
+ )
208
+ unique = _sort_unique(raw)
209
+ _write_lines(out_dir / "bdd-names.txt", unique)
210
+ print(f" {len(unique)} candidates")
211
+ return len(unique)
212
+
213
+
214
+ def collect_validator_rules(root: str, out_dir: Path) -> int:
215
+ print(" → validator rules...")
216
+ raw: list[str] = []
217
+ # ERE alternation (matches grep -E): raw `|` is the alternation
218
+ # operator, not the escaped BRE `\|` the .sh has (which grep -E treats
219
+ # as a literal `|` character).
220
+ raw.extend(
221
+ _safe_grep(
222
+ "*.ts",
223
+ r"\.withMessage|\.mustBe|\.isRequired|z\.string\(\)\.refine|yup\.",
224
+ root,
225
+ )
226
+ )
227
+ raw.extend(
228
+ _safe_grep("*.cs", r"RuleFor|\.Must|\.WithMessage|\.NotNull|\.NotEmpty", root)
229
+ )
230
+ raw.extend(
231
+ _safe_grep(
232
+ "*.java",
233
+ r"@NotNull|@NotBlank|@Size|@Min|@Max|@Pattern|@Valid|@Constraint",
234
+ root,
235
+ )
236
+ )
237
+ raw.extend(
238
+ _safe_grep("*.py", r"raise ValueError|raise TypeError|assert .*, ['\"]", root)
239
+ )
240
+ unique = _sort_unique(raw)
241
+ _write_lines(out_dir / "validator-rules.txt", unique)
242
+ print(f" {len(unique)} candidates")
243
+ return len(unique)
244
+
245
+
246
+ def collect_interface_names(root: str, out_dir: Path) -> int:
247
+ print(" → interface names...")
248
+ raw: list[str] = []
249
+ raw.extend(_safe_grep("*.ts", "^export interface [A-Z][a-zA-Z]+", root))
250
+ raw.extend(
251
+ _safe_grep(
252
+ "*.cs",
253
+ r"^[[:space:]]*(public|internal) interface I[A-Z][a-zA-Z]+",
254
+ root,
255
+ )
256
+ )
257
+ raw.extend(_safe_grep("*.java", "^public interface [A-Z][a-zA-Z]+", root))
258
+ raw.extend(_safe_grep("*.go", "type [A-Z][a-zA-Z]+ interface", root))
259
+
260
+ filtered = [line for line in raw if not _INTERFACE_EXCLUDES.search(line)]
261
+ iface_extract = re.compile(r".*interface (I?)([A-Z][a-zA-Z]*).*")
262
+ names = []
263
+ for line in filtered:
264
+ m = iface_extract.match(line)
265
+ names.append(m.group(2) if m else line)
266
+
267
+ unique = _sort_unique(names)
268
+ _write_lines(out_dir / "interface-names.txt", unique)
269
+ print(f" {len(unique)} candidates")
270
+ return len(unique)
271
+
272
+
273
+ def main(argv: list) -> int:
274
+ root = argv[1] if len(argv) > 1 else "."
275
+ out_dir = Path(".plans/raw/domain-language")
276
+ out_dir.mkdir(parents=True, exist_ok=True)
277
+
278
+ print(f"Collecting domain signals from: {root}")
279
+
280
+ collect_class_names(root, out_dir)
281
+ collect_enum_values(root, out_dir)
282
+ collect_domain_events(root, out_dir)
283
+ collect_bdd_names(root, out_dir)
284
+ collect_validator_rules(root, out_dir)
285
+ collect_interface_names(root, out_dir)
286
+
287
+ print()
288
+ print(f"Signal collection complete. Results in {out_dir}/")
289
+
290
+ # Total unique candidates across all txt files.
291
+ combined = set()
292
+ for txt in out_dir.glob("*.txt"):
293
+ combined.update(txt.read_text().splitlines())
294
+ combined.discard("")
295
+ print(f"Total raw candidates: {len(combined)}")
296
+ return 0
297
+
298
+
299
+ if __name__ == "__main__":
300
+ raise SystemExit(main(sys.argv))
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: unfreeze
3
+ description: >-
4
+ Lift the scope lock set by /freeze. All files become editable again.
5
+ user-invocable: true
6
+ allowed-tools: Bash(rm *)
7
+ ---
8
+
9
+ # Unfreeze
10
+
11
+ Role: worker. This command removes the file editing scope lock.
12
+
13
+ You have been invoked with the `/unfreeze` command.
14
+
15
+ Arguments: none — operates on the current freeze state.
16
+
17
+ ## Worker constraints
18
+
19
+ 1. Clear only the freeze-state file.
20
+ 2. Do not edit source.
21
+ 3. **Be concise.** Confirm the lock is lifted in one line.
22
+
23
+ ## Steps
24
+
25
+ ### 1. Remove freeze state
26
+
27
+ Delete `.claude/hooks/freeze-state.json` if it exists (the same per-repo
28
+ path `/freeze` writes and `hooks/pre_tool_guard.py` reads — see issue #1890):
29
+
30
+ ```bash
31
+ rm -f .claude/hooks/freeze-state.json
32
+ ```
33
+
34
+ ### 2. Confirm
35
+
36
+ Display:
37
+ > Scope lock lifted. All files are editable.
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: upgrade
3
+ description: >-
4
+ Check for and apply pi-dev-team package updates using pi's package manager.
5
+ user-invocable: true
6
+ allowed-tools: Read, Bash
7
+ ---
8
+
9
+ # Upgrade
10
+
11
+ Role: worker. Updates the pi-dev-team package through pi's own package
12
+ mechanism. Never hand-edit installed package files.
13
+
14
+ You have been invoked with the `/upgrade` command. Arguments: none.
15
+
16
+ ## Steps
17
+
18
+ 1. Report the current version: run the `/version` command's script
19
+ (`${CLAUDE_PLUGIN_ROOT}/package.json` and `UPSTREAM.json`).
20
+ 2. Find how the package is installed: `pi list` (look for `pi-dev-team`).
21
+ - **git or npm source** → run `pi update <source>` to update that package,
22
+ regardless of whether it is installed globally or in project settings.
23
+ Report the version delta afterwards.
24
+ - **local path** (e.g. `./pi-dev-team`) → pi does not update local packages.
25
+ Tell the user to pull the package directory (`git -C <path> pull`) or, when
26
+ it is a sync of upstream, to run
27
+ `python3 <path>/sync/sync_upstream.py --upstream <agentic-dev-team checkout>`.
28
+ 3. Tell the user to run `/reload` (or restart pi) so the new extension code,
29
+ skills and agents load.
30
+
31
+ **Be concise.** Report version deltas only.
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env python3
2
+ """Report dev-team plugin version drift: installed version vs latest catalog.
3
+
4
+ Read-only diagnostic. Prints a one-line advisory when the installed plugin
5
+ version differs from the version the (refreshed) marketplace catalog offers.
6
+ That mismatch is the signal auto-update alone cannot surface:
7
+
8
+ * a refreshed catalog is ahead but the update lands only on the next launch, or
9
+ * the refresh was blocked (e.g. by a restrictive network policy) so the session
10
+ is silently stale.
11
+
12
+ Prints nothing when the versions match (or when either can't be resolved), so a
13
+ caller can gate on empty output.
14
+
15
+ Modes:
16
+ (default) Print a plain advisory line, or nothing when current.
17
+ --session-start Print a SessionStart hookSpecificOutput JSON wrapping the
18
+ advisory, or nothing when current — for the cloud hook.
19
+
20
+ Honors ``CLAUDE_CONFIG_DIR``. Stdlib only, (ADR 0014 / 0015).
21
+ """
22
+ from __future__ import annotations
23
+
24
+ import argparse
25
+ import json
26
+ import os
27
+
28
+ PLUGIN = "dev-team"
29
+
30
+
31
+ def config_dir() -> str:
32
+ """The Claude Code config dir — ``CLAUDE_CONFIG_DIR`` if set, else ~/.claude."""
33
+ return os.environ.get("CLAUDE_CONFIG_DIR") or os.path.join(
34
+ os.path.expanduser("~"), ".claude"
35
+ )
36
+
37
+
38
+ def load(path: str):
39
+ """Parse a JSON file, or return None if missing or malformed."""
40
+ try:
41
+ with open(path) as f:
42
+ return json.load(f)
43
+ except (FileNotFoundError, json.JSONDecodeError, OSError):
44
+ return None
45
+
46
+
47
+ def installed(cfg: str) -> tuple[str | None, str | None]:
48
+ """(version, marketplace) for the installed dev-team plugin, or (None, None)."""
49
+ plugins = (
50
+ load(os.path.join(cfg, "plugins", "installed_plugins.json")) or {}
51
+ ).get("plugins", {})
52
+ for pid, entries in plugins.items():
53
+ if pid.split("@", 1)[0] == PLUGIN and "@" in pid and entries:
54
+ return entries[0].get("version"), pid.split("@", 1)[1]
55
+ return None, None
56
+
57
+
58
+ def latest(cfg: str, market: str) -> str | None:
59
+ """The dev-team version the cached marketplace catalog offers, or None."""
60
+ reg = load(os.path.join(cfg, "plugins", "known_marketplaces.json")) or {}
61
+ loc = (reg.get(market) or {}).get("installLocation")
62
+ if not loc:
63
+ return None
64
+ catalog = load(os.path.join(loc, ".claude-plugin", "marketplace.json")) or {}
65
+ for p in catalog.get("plugins", []):
66
+ if p.get("name") == PLUGIN:
67
+ return p.get("version")
68
+ return None
69
+
70
+
71
+ def advisory(cfg: str) -> str:
72
+ """The drift advisory line, or '' when current / indeterminate."""
73
+ inst, market = installed(cfg)
74
+ if not inst or not market:
75
+ return ""
76
+ newest = latest(cfg, market)
77
+ if not newest or newest == inst:
78
+ return ""
79
+ return (
80
+ f"dev-team plugin is v{inst}; v{newest} is available from '{market}'. "
81
+ "Restart Claude Code (or run /upgrade) to apply."
82
+ )
83
+
84
+
85
+ def main(argv=None) -> int:
86
+ parser = argparse.ArgumentParser(description="Report dev-team version drift.")
87
+ parser.add_argument(
88
+ "--session-start",
89
+ action="store_true",
90
+ help="Emit a SessionStart hookSpecificOutput JSON instead of a plain line.",
91
+ )
92
+ args = parser.parse_args(argv)
93
+ msg = advisory(config_dir())
94
+ if not msg:
95
+ return 0
96
+ if args.session_start:
97
+ print(
98
+ json.dumps(
99
+ {
100
+ "hookSpecificOutput": {
101
+ "hookEventName": "SessionStart",
102
+ "additionalContext": msg,
103
+ }
104
+ }
105
+ )
106
+ )
107
+ else:
108
+ print(msg)
109
+ return 0
110
+
111
+
112
+ if __name__ == "__main__":
113
+ raise SystemExit(main())