claude-dev-env 4.3.0 → 7.0.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 (293) hide show
  1. package/.agents/agents/pr-description-writer.md +2 -2
  2. package/.agents/agents/test_agent_frontmatter.py +2 -2
  3. package/.agents/agents/test_pr_description_writer_style.py +1 -3
  4. package/.agents/skills/e-code-review/SKILL.md +12 -12
  5. package/.agents/skills/e-code-review/preflight-proposal.contract.test.mjs +20 -0
  6. package/.agents/skills/e-code-review/reference/fix.md +15 -17
  7. package/.agents/skills/e-code-review/reference/loop.md +35 -39
  8. package/.agents/skills/e-code-review/reference/mode-contract.test.mjs +2 -1
  9. package/.agents/skills/e-code-review/reference/preflight-proposal.md +44 -9
  10. package/.agents/skills/e-code-review/reference/runner-selection.md +13 -14
  11. package/.agents/skills/issue-tracker/SKILL.md +5 -4
  12. package/.agents/skills/pull-request/SKILL.md +11 -13
  13. package/.agents/skills/pull-request/reference/publication-tasks.md +3 -3
  14. package/.agents/skills/pull-request/scripts/github_pr_command_constants/config/constants.py +9 -1
  15. package/.agents/skills/pull-request/scripts/pull_request.py +33 -44
  16. package/.agents/skills/pull-request/scripts/test_github_pr_command_constants.py +9 -0
  17. package/.agents/skills/pull-request/scripts/test_pull_request.py +1 -3
  18. package/.agents/skills/skill-builder/SKILL.md +3 -196
  19. package/_shared/pr-loop/scripts/pr_loop_shared_constants/terminology_sweep_constants.py +6 -0
  20. package/_shared/pr-loop/scripts/terminology_sweep.py +64 -19
  21. package/_shared/pr-loop/scripts/tests/test_terminology_sweep.py +59 -0
  22. package/bin/install.agents-home.test.mjs +15 -13
  23. package/bin/install.mjs +28 -0
  24. package/bin/install.policy-lint.test.mjs +78 -0
  25. package/bin/install.prune.test.mjs +59 -20
  26. package/bin/install.pstack-plugin.test.mjs +114 -0
  27. package/bin/install.test.mjs +37 -0
  28. package/bin/refresh-pstack-plugin-skills.test.mjs +211 -0
  29. package/hooks/advisory/pr_done_reminder.py +342 -0
  30. package/hooks/advisory/test_pr_done_reminder.py +249 -0
  31. package/hooks/blocking/bash_post_call_dispatcher.py +53 -6
  32. package/hooks/blocking/code_rules_paired_test.py +22 -15
  33. package/hooks/blocking/test_bash_post_call_dispatcher.py +65 -4
  34. package/hooks/blocking/test_code_rules_enforcer_paired_test.py +36 -29
  35. package/hooks/blocking/test_code_rules_js_resume_task_enumeration.py +4 -4
  36. package/hooks/blocking/test_code_rules_js_returns_object_schemaless.py +5 -5
  37. package/hooks/blocking/test_pre_tool_use_dispatcher.py +68 -133
  38. package/hooks/blocking/test_pre_tool_use_dispatcher_native.py +20 -51
  39. package/hooks/blocking/test_precommit_code_rules_gate_native_owner.py +18 -18
  40. package/hooks/git-hooks/git_hooks_constants/staged_policy_lint.py +12 -0
  41. package/hooks/git-hooks/pre_commit.py +52 -11
  42. package/hooks/git-hooks/test_installed_policy_lint.py +159 -0
  43. package/hooks/git-hooks/test_native_policy_commit.py +87 -0
  44. package/hooks/git-hooks/test_pre_commit.py +246 -0
  45. package/hooks/hooks.json +1 -1
  46. package/hooks/hooks_constants/bash_post_call_dispatcher_constants.py +14 -1
  47. package/hooks/hooks_constants/pr_done_reminder_constants.py +98 -0
  48. package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +10 -43
  49. package/hooks/hooks_constants/test_bash_post_call_dispatcher_constants.py +19 -2
  50. package/hooks/hooks_constants/test_pr_done_reminder_constants.py +40 -0
  51. package/hooks/hooks_constants/test_pre_tool_use_dispatcher_constants.py +20 -32
  52. package/package.json +2 -2
  53. package/rules/durable-post-artifacts.md +2 -1
  54. package/rules/git-workflow.md +6 -6
  55. package/scripts/check.ps1 +0 -1
  56. package/{.agents/skills/run-claude-dev-env/driver.mjs → scripts/ci/installer-lifecycle.mjs} +3 -28
  57. package/scripts/ci/installer-lifecycle.test.mjs +26 -0
  58. package/scripts/ci/windows-installer-lifecycle.ps1 +1 -11
  59. package/scripts/dev_env_scripts_constants/shared_tree_constants.py +4 -5
  60. package/{.agents/skills/_shared/pr-loop/scripts → scripts}/durable_post_lint.py +5 -41
  61. package/{.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/durable_post_lint_constants.py → scripts/durable_post_lint_config/config/constants.py} +0 -10
  62. package/{.agents/skills/_shared/pr-loop/scripts/test_durable_post_lint_constants.py → scripts/durable_post_lint_config/config/test_constants.py} +1 -1
  63. package/scripts/policy_lint/adapter_detectors.py +13 -6
  64. package/scripts/policy_lint/adapters.py +7 -4
  65. package/scripts/policy_lint/config/constants.py +5 -0
  66. package/scripts/policy_lint/engine.py +48 -4
  67. package/scripts/policy_lint/model.py +1 -0
  68. package/scripts/policy_lint/registry.py +1 -1
  69. package/scripts/policy_lint/selection.py +2 -1
  70. package/scripts/policy_lint/selection_git.py +2 -0
  71. package/scripts/refresh_pstack_plugin_skills.mjs +200 -0
  72. package/scripts/shared_tree_paths.py +32 -3
  73. package/scripts/test_shared_tree_paths.py +33 -0
  74. package/scripts/tests/test_policy_lint_rules_archive.py +120 -0
  75. package/scripts/tests/test_policy_lint_rules_engine.py +25 -4
  76. package/scripts/tests/test_policy_lint_rules_installed_loader.py +29 -0
  77. package/scripts/tests/test_policy_lint_rules_registry.py +227 -13
  78. package/scripts/tests/test_policy_lint_selection.py +25 -2
  79. package/scripts/tests/test_policy_lint_selection_native_index.py +30 -0
  80. package/scripts/tests/test_rules.py +3 -7
  81. package/.agents/skills/_shared/pr-loop/.claude/CLAUDE.md +0 -1
  82. package/.agents/skills/_shared/pr-loop/AGENTS.md +0 -1
  83. package/.agents/skills/_shared/pr-loop/audit-contract.md +0 -5
  84. package/.agents/skills/_shared/pr-loop/audit-reply-template.md +0 -5
  85. package/.agents/skills/_shared/pr-loop/code-rules-gate.md +0 -5
  86. package/.agents/skills/_shared/pr-loop/fix-protocol.md +0 -5
  87. package/.agents/skills/_shared/pr-loop/gh-payloads.md +0 -5
  88. package/.agents/skills/_shared/pr-loop/portable-driver.md +0 -149
  89. package/.agents/skills/_shared/pr-loop/post-audit-thread-contract.md +0 -5
  90. package/.agents/skills/_shared/pr-loop/precatch-rubric.md +0 -5
  91. package/.agents/skills/_shared/pr-loop/preflight-proposal.contract.test.mjs +0 -119
  92. package/.agents/skills/_shared/pr-loop/preflight-proposal.md +0 -5
  93. package/.agents/skills/_shared/pr-loop/prompts/.claude/CLAUDE.md +0 -1
  94. package/.agents/skills/_shared/pr-loop/prompts/AGENTS.md +0 -1
  95. package/.agents/skills/_shared/pr-loop/prompts/pr-consistency-audit.xml +0 -324
  96. package/.agents/skills/_shared/pr-loop/scripts/.claude/CLAUDE.md +0 -1
  97. package/.agents/skills/_shared/pr-loop/scripts/AGENTS.md +0 -1
  98. package/.agents/skills/_shared/pr-loop/scripts/RUNTIME_SCRIPTS.md +0 -29
  99. package/.agents/skills/_shared/pr-loop/scripts/_cli_utils.py +0 -22
  100. package/.agents/skills/_shared/pr-loop/scripts/_path_resolver.py +0 -186
  101. package/.agents/skills/_shared/pr-loop/scripts/_xml_utils.py +0 -20
  102. package/.agents/skills/_shared/pr-loop/scripts/audit_category_schema.py +0 -355
  103. package/.agents/skills/_shared/pr-loop/scripts/build_audit_prompt.py +0 -289
  104. package/.agents/skills/_shared/pr-loop/scripts/build_converge_task_list.py +0 -310
  105. package/.agents/skills/_shared/pr-loop/scripts/build_fix_prompt.py +0 -292
  106. package/.agents/skills/_shared/pr-loop/scripts/init_loop_state.py +0 -134
  107. package/.agents/skills/_shared/pr-loop/scripts/portable_converge_driver.py +0 -1646
  108. package/.agents/skills/_shared/pr-loop/scripts/preflight_worktree.py +0 -392
  109. package/.agents/skills/_shared/pr-loop/scripts/select_converge_pacer.py +0 -215
  110. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/.claude/CLAUDE.md +0 -1
  111. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/AGENTS.md +0 -1
  112. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/__init__.py +0 -0
  113. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/audit_category_schema_constants.py +0 -37
  114. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/converge_task_list_constants.py +0 -56
  115. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/handoff_constants.py +0 -45
  116. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/pacer_constants.py +0 -47
  117. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/path_resolver_constants.py +0 -157
  118. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +0 -177
  119. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/preflight_constants.py +0 -70
  120. package/.agents/skills/_shared/pr-loop/scripts/teardown_worktrees.py +0 -172
  121. package/.agents/skills/_shared/pr-loop/scripts/test__path_resolver.py +0 -106
  122. package/.agents/skills/_shared/pr-loop/scripts/test_audit_category_schema.py +0 -94
  123. package/.agents/skills/_shared/pr-loop/scripts/test_build_audit_prompt.py +0 -499
  124. package/.agents/skills/_shared/pr-loop/scripts/test_build_converge_task_list.py +0 -140
  125. package/.agents/skills/_shared/pr-loop/scripts/test_build_fix_prompt.py +0 -262
  126. package/.agents/skills/_shared/pr-loop/scripts/test_init_loop_state.py +0 -71
  127. package/.agents/skills/_shared/pr-loop/scripts/test_portable_converge_driver.py +0 -1119
  128. package/.agents/skills/_shared/pr-loop/scripts/test_preflight_worktree.py +0 -287
  129. package/.agents/skills/_shared/pr-loop/scripts/test_select_converge_pacer.py +0 -207
  130. package/.agents/skills/_shared/pr-loop/scripts/test_teardown_worktrees.py +0 -59
  131. package/.agents/skills/_shared/pr-loop/scripts/test_write_handoff.py +0 -201
  132. package/.agents/skills/_shared/pr-loop/scripts/write_audit_outcomes.py +0 -182
  133. package/.agents/skills/_shared/pr-loop/scripts/write_fix_outcomes.py +0 -206
  134. package/.agents/skills/_shared/pr-loop/scripts/write_handoff.py +0 -309
  135. package/.agents/skills/_shared/pr-loop/state-schema.md +0 -5
  136. package/.agents/skills/_shared/pr-loop/worker-spawn.md +0 -5
  137. package/.agents/skills/autoconverge/.claude/CLAUDE.md +0 -1
  138. package/.agents/skills/autoconverge/AGENTS.md +0 -1
  139. package/.agents/skills/autoconverge/SKILL.md +0 -431
  140. package/.agents/skills/autoconverge/reference/.claude/CLAUDE.md +0 -1
  141. package/.agents/skills/autoconverge/reference/AGENTS.md +0 -1
  142. package/.agents/skills/autoconverge/reference/closing-report.md +0 -93
  143. package/.agents/skills/autoconverge/reference/convergence-gates.md +0 -31
  144. package/.agents/skills/autoconverge/reference/convergence.md +0 -219
  145. package/.agents/skills/autoconverge/reference/copilot-findings.md +0 -51
  146. package/.agents/skills/autoconverge/reference/gotchas.md +0 -66
  147. package/.agents/skills/autoconverge/reference/headless-safety.md +0 -44
  148. package/.agents/skills/autoconverge/reference/multi-pr.md +0 -128
  149. package/.agents/skills/autoconverge/reference/self-closing-loop.md +0 -84
  150. package/.agents/skills/autoconverge/reference/stop-conditions.md +0 -127
  151. package/.agents/skills/autoconverge/test_portable_pacer_gate.py +0 -54
  152. package/.agents/skills/autoconverge/workflow/.claude/CLAUDE.md +0 -1
  153. package/.agents/skills/autoconverge/workflow/AGENTS.md +0 -1
  154. package/.agents/skills/autoconverge/workflow/aggregate_runs.py +0 -371
  155. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/.claude/CLAUDE.md +0 -1
  156. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/AGENTS.md +0 -1
  157. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/__init__.py +0 -0
  158. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +0 -250
  159. package/.agents/skills/autoconverge/workflow/converge.clean-audit.test.mjs +0 -665
  160. package/.agents/skills/autoconverge/workflow/converge.codex-gate.test.mjs +0 -472
  161. package/.agents/skills/autoconverge/workflow/converge.contract.test.mjs +0 -64
  162. package/.agents/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +0 -1009
  163. package/.agents/skills/autoconverge/workflow/converge.fix-progress.test.mjs +0 -107
  164. package/.agents/skills/autoconverge/workflow/converge.fix-recovery.test.mjs +0 -33
  165. package/.agents/skills/autoconverge/workflow/converge.merge-conflict.test.mjs +0 -15
  166. package/.agents/skills/autoconverge/workflow/converge.mjs +0 -3132
  167. package/.agents/skills/autoconverge/workflow/converge.p2-advance.test.mjs +0 -202
  168. package/.agents/skills/autoconverge/workflow/converge.path-aware.test.mjs +0 -47
  169. package/.agents/skills/autoconverge/workflow/converge.precatch.test.mjs +0 -152
  170. package/.agents/skills/autoconverge/workflow/converge.run-input.test.mjs +0 -116
  171. package/.agents/skills/autoconverge/workflow/converge_multi.mjs +0 -169
  172. package/.agents/skills/autoconverge/workflow/converge_multi.run-input.test.mjs +0 -173
  173. package/.agents/skills/autoconverge/workflow/convergence_summary.py +0 -110
  174. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +0 -2
  175. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +0 -2
  176. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +0 -2
  177. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +0 -2
  178. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +0 -2
  179. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +0 -2
  180. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ab1c2d3e4f5a6b7c8.jsonl +0 -2
  181. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +0 -2
  182. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +0 -2
  183. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +0 -266
  184. package/.agents/skills/autoconverge/workflow/render_report.py +0 -1024
  185. package/.agents/skills/autoconverge/workflow/test_aggregate_runs.py +0 -134
  186. package/.agents/skills/autoconverge/workflow/test_convergence_summary.py +0 -149
  187. package/.agents/skills/autoconverge/workflow/test_render_report.py +0 -812
  188. package/.agents/skills/hitl/SKILL.md +0 -45
  189. package/.agents/skills/pr-cleanup/SKILL.md +0 -140
  190. package/.agents/skills/pr-cleanup/reference/process-inventory.md +0 -17
  191. package/.agents/skills/pr-cleanup/reference/task-seeds.md +0 -22
  192. package/.agents/skills/pr-name-by-capability/SKILL.md +0 -73
  193. package/.agents/skills/pr-name-by-capability/reference/fetch-commands.md +0 -29
  194. package/.agents/skills/pr-name-by-capability/reference/offense-examples.md +0 -32
  195. package/.agents/skills/pr-name-by-capability/reference/report-template.md +0 -29
  196. package/.agents/skills/pr-name-by-capability/reference/rule-checklist.md +0 -38
  197. package/.agents/skills/pr-name-by-capability/reference/task-seeds.md +0 -10
  198. package/.agents/skills/pr-plain-language-cleanup/SKILL.md +0 -93
  199. package/.agents/skills/pr-refinement/SKILL.md +0 -31
  200. package/.agents/skills/pr-shared-extraction/SKILL.md +0 -177
  201. package/.agents/skills/pr-shared-extraction/reference/examples.md +0 -46
  202. package/.agents/skills/pr-shared-extraction/reference/offense-taxonomy.md +0 -100
  203. package/.agents/skills/pr-small-cl/SKILL.md +0 -52
  204. package/.agents/skills/pr-title-description/SKILL.md +0 -96
  205. package/.agents/skills/prototype/SKILL.md +0 -85
  206. package/.agents/skills/prototype/reference/honest-limitations.md +0 -23
  207. package/.agents/skills/prototype/reference/promotion-tasks.md +0 -23
  208. package/.agents/skills/prototype/scripts/build_sandbox_settings.py +0 -249
  209. package/.agents/skills/prototype/scripts/conftest.py +0 -15
  210. package/.agents/skills/prototype/scripts/launch_sandbox.py +0 -205
  211. package/.agents/skills/prototype/scripts/probe_sandbox_safety.py +0 -311
  212. package/.agents/skills/prototype/scripts/prototype_scripts_constants/__init__.py +0 -1
  213. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/__init__.py +0 -0
  214. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/build_sandbox_settings_constants.py +0 -41
  215. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/launch_sandbox_constants.py +0 -23
  216. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/probe_sandbox_safety_constants.py +0 -45
  217. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/prototype_common_constants.py +0 -10
  218. package/.agents/skills/prototype/scripts/test_build_sandbox_settings.py +0 -275
  219. package/.agents/skills/prototype/scripts/test_launch_sandbox.py +0 -303
  220. package/.agents/skills/prototype/scripts/test_probe_sandbox_safety.py +0 -312
  221. package/.agents/skills/prototype/workflows/promotion.md +0 -25
  222. package/.agents/skills/prototype/workflows/sandbox.md +0 -35
  223. package/.agents/skills/rebase/.claude/CLAUDE.md +0 -1
  224. package/.agents/skills/rebase/AGENTS.md +0 -1
  225. package/.agents/skills/rebase/SKILL.md +0 -178
  226. package/.agents/skills/review-router/SKILL.md +0 -51
  227. package/.agents/skills/review-router/reference/route-policy.json +0 -7
  228. package/.agents/skills/review-router/reference/task-seeds.md +0 -1
  229. package/.agents/skills/review-router/scripts/conftest.py +0 -4
  230. package/.agents/skills/review-router/scripts/review_router.py +0 -50
  231. package/.agents/skills/review-router/scripts/review_router_cli.py +0 -211
  232. package/.agents/skills/review-router/scripts/review_router_constants/__init__.py +0 -1
  233. package/.agents/skills/review-router/scripts/review_router_constants/config/__init__.py +0 -0
  234. package/.agents/skills/review-router/scripts/review_router_constants/config/constants.py +0 -13
  235. package/.agents/skills/review-router/scripts/test_review_router.py +0 -23
  236. package/.agents/skills/review-router/scripts/test_review_router_cli.py +0 -47
  237. package/.agents/skills/review-tier/SKILL.md +0 -56
  238. package/.agents/skills/review-tier/reference/task-seeds.md +0 -1
  239. package/.agents/skills/review-tier/reference/tier-policy.json +0 -9
  240. package/.agents/skills/review-tier/scripts/conftest.py +0 -4
  241. package/.agents/skills/review-tier/scripts/review_tier.py +0 -359
  242. package/.agents/skills/review-tier/scripts/review_tier_constants/__init__.py +0 -1
  243. package/.agents/skills/review-tier/scripts/review_tier_constants/config/__init__.py +0 -0
  244. package/.agents/skills/review-tier/scripts/review_tier_constants/config/constants.py +0 -29
  245. package/.agents/skills/review-tier/scripts/test_generation.py +0 -159
  246. package/.agents/skills/review-tier/scripts/test_review_tier.py +0 -33
  247. package/.agents/skills/run-claude-dev-env/SKILL.md +0 -84
  248. package/.agents/skills/session-log/.claude/CLAUDE.md +0 -1
  249. package/.agents/skills/session-log/AGENTS.md +0 -1
  250. package/.agents/skills/session-log/SKILL.md +0 -170
  251. package/.agents/skills/session-log/templates/frontmatter.md +0 -40
  252. package/.agents/skills/session-tidy/.claude/CLAUDE.md +0 -1
  253. package/.agents/skills/session-tidy/AGENTS.md +0 -1
  254. package/.agents/skills/session-tidy/SKILL.md +0 -191
  255. package/.agents/skills/skill-builder/references/.claude/CLAUDE.md +0 -1
  256. package/.agents/skills/skill-builder/references/AGENTS.md +0 -1
  257. package/.agents/skills/skill-builder/references/delegation-map.md +0 -130
  258. package/.agents/skills/skill-builder/references/description-field.md +0 -111
  259. package/.agents/skills/skill-builder/references/deterministic-elements.md +0 -218
  260. package/.agents/skills/skill-builder/references/progressive-disclosure.md +0 -122
  261. package/.agents/skills/skill-builder/references/self-audit-checklist.md +0 -126
  262. package/.agents/skills/skill-builder/references/skill-modularity.md +0 -111
  263. package/.agents/skills/skill-builder/references/skill-types.md +0 -232
  264. package/.agents/skills/skill-builder/references/thariq-x-post-skills.json +0 -33
  265. package/.agents/skills/skill-builder/templates/.claude/CLAUDE.md +0 -1
  266. package/.agents/skills/skill-builder/templates/AGENTS.md +0 -1
  267. package/.agents/skills/skill-builder/templates/gap-analysis.md +0 -87
  268. package/.agents/skills/skill-builder/workflows/.claude/CLAUDE.md +0 -1
  269. package/.agents/skills/skill-builder/workflows/AGENTS.md +0 -1
  270. package/.agents/skills/skill-builder/workflows/improve-skill.md +0 -136
  271. package/.agents/skills/skill-builder/workflows/new-skill.md +0 -179
  272. package/.agents/skills/skill-builder/workflows/polish-skill.md +0 -139
  273. package/.agents/skills/source-command-sr-loop/SKILL.md +0 -82
  274. package/.agents/skills/update/.claude/CLAUDE.md +0 -1
  275. package/.agents/skills/update/AGENTS.md +0 -1
  276. package/.agents/skills/update/SKILL.md +0 -190
  277. package/_shared/pr-loop/AGENTS.md +0 -1
  278. package/_shared/pr-loop/CLAUDE.md +0 -1
  279. package/_shared/pr-loop/audit-contract.md +0 -183
  280. package/_shared/pr-loop/audit-reply-template.md +0 -151
  281. package/_shared/pr-loop/code-rules-gate.md +0 -65
  282. package/_shared/pr-loop/fix-protocol.md +0 -60
  283. package/_shared/pr-loop/gh-payloads.md +0 -75
  284. package/_shared/pr-loop/post-audit-thread-contract.md +0 -51
  285. package/_shared/pr-loop/precatch-rubric.md +0 -66
  286. package/_shared/pr-loop/preflight-proposal.md +0 -56
  287. package/_shared/pr-loop/scripts/post_audit_thread.py +0 -1242
  288. package/_shared/pr-loop/scripts/pr_loop_shared_constants/post_audit_thread_constants.py +0 -199
  289. package/_shared/pr-loop/scripts/tests/test_post_audit_thread.py +0 -1115
  290. package/_shared/pr-loop/scripts/tests/test_post_audit_thread_constants.py +0 -129
  291. package/_shared/pr-loop/state-schema.md +0 -45
  292. package/_shared/pr-loop/worker-spawn.md +0 -189
  293. /package/{.agents/skills/_shared/pr-loop/scripts → scripts}/test_durable_post_lint.py +0 -0
@@ -1,262 +0,0 @@
1
- """Tests for build_fix_prompt's agent-facing path rendering."""
2
-
3
- from __future__ import annotations
4
-
5
- import importlib.util
6
- import json
7
- import sys
8
- from pathlib import Path
9
- from types import ModuleType
10
-
11
- import pytest
12
-
13
- _SCRIPTS_DIR = Path(__file__).resolve().parent
14
- if str(_SCRIPTS_DIR) not in sys.path:
15
- sys.path.insert(0, str(_SCRIPTS_DIR))
16
-
17
- from skills_pr_loop_constants.path_resolver_constants import (
18
- FINDINGS_JSON_MUST_BE_LIST_MESSAGE,
19
- FIX_COMMENT_POSTING_AGENT_TEXT,
20
- FIX_COMMENT_POSTING_HEADLESS_TEXT,
21
- FIX_OUTCOME_XML_TEMPLATE,
22
- FIX_OUTPUT_FORMAT_AGENT_TEXT,
23
- FIX_OUTPUT_FORMAT_HEADLESS_TEMPLATE,
24
- FIX_PROMPT_FLAVOR_AGENT,
25
- FIX_PROMPT_FLAVOR_HEADLESS,
26
- )
27
-
28
-
29
- def _load_build_fix_prompt() -> ModuleType:
30
- module_path = _SCRIPTS_DIR / "build_fix_prompt.py"
31
- spec = importlib.util.spec_from_file_location("build_fix_prompt", module_path)
32
- assert spec is not None
33
- assert spec.loader is not None
34
- module = importlib.util.module_from_spec(spec)
35
- sys.modules["build_fix_prompt"] = module
36
- spec.loader.exec_module(module)
37
- return module
38
-
39
-
40
- build_fix_prompt = _load_build_fix_prompt()
41
-
42
-
43
- def _write_findings_json(tmp_path: Path) -> Path:
44
- findings_json_path = tmp_path / "findings.json"
45
- findings_json_path.write_text(
46
- json.dumps([{"severity": "P1", "file": "a.py", "line": 1}]),
47
- encoding="utf-8",
48
- )
49
- return findings_json_path
50
-
51
-
52
- def test_context_worktree_path_renders_with_forward_slashes(tmp_path: Path) -> None:
53
- findings_json_path = _write_findings_json(tmp_path)
54
- root = build_fix_prompt.build_fix_prompt_xml(
55
- owner="jl-cmd",
56
- repo="claude-dev-env",
57
- pr_number=376,
58
- loop=1,
59
- head_ref="feat/branch",
60
- base_ref="main",
61
- worktree_path=Path("C:/Users/example/AppData/Local/Temp/bugteam-pr-376/worktree"),
62
- findings_json_path=findings_json_path,
63
- )
64
- context = root.find("context")
65
- assert context is not None
66
- worktree_text = context.findtext("worktree_path")
67
- assert worktree_text == "C:/Users/example/AppData/Local/Temp/bugteam-pr-376/worktree"
68
-
69
-
70
- def test_emit_fix_prompt_returns_xml_string_with_worktree_path(tmp_path: Path) -> None:
71
- findings_json_path = _write_findings_json(tmp_path)
72
- worktree_path = Path("C:/Users/example/AppData/Local/Temp/bugteam-pr-376/worktree")
73
- xml_text = build_fix_prompt.emit_fix_prompt(
74
- owner="jl-cmd",
75
- repo="claude-dev-env",
76
- pr_number=376,
77
- loop=1,
78
- head_ref="feat/branch",
79
- base_ref="main",
80
- worktree_path=worktree_path,
81
- findings_json_path=findings_json_path,
82
- )
83
- assert isinstance(xml_text, str)
84
- assert "C:/Users/example/AppData/Local/Temp/bugteam-pr-376/worktree" in xml_text
85
- assert 'role="fix"' in xml_text
86
- assert "<spawn_prompt" in xml_text
87
-
88
-
89
- def test_parse_arguments_defaults_flavor_to_agent() -> None:
90
- arguments = build_fix_prompt.parse_arguments([
91
- "--owner", "jl-cmd",
92
- "--repo", "claude-dev-env",
93
- "--pr-number", "422",
94
- "--loop", "1",
95
- "--head-ref", "feat/branch",
96
- "--base-ref", "main",
97
- "--worktree-path", "/tmp/wt",
98
- "--findings-json", "/tmp/findings.json",
99
- ])
100
- assert arguments.flavor == FIX_PROMPT_FLAVOR_AGENT
101
-
102
-
103
- def test_parse_arguments_reads_headless_flavor() -> None:
104
- arguments = build_fix_prompt.parse_arguments([
105
- "--owner", "jl-cmd",
106
- "--repo", "claude-dev-env",
107
- "--pr-number", "422",
108
- "--loop", "1",
109
- "--head-ref", "feat/branch",
110
- "--base-ref", "main",
111
- "--worktree-path", "/tmp/wt",
112
- "--findings-json", "/tmp/findings.json",
113
- "--flavor", FIX_PROMPT_FLAVOR_HEADLESS,
114
- ])
115
- assert arguments.flavor == FIX_PROMPT_FLAVOR_HEADLESS
116
-
117
-
118
- def test_agent_flavor_comment_posting_and_output_format(tmp_path: Path) -> None:
119
- findings_json_path = _write_findings_json(tmp_path)
120
- root = build_fix_prompt.build_fix_prompt_xml(
121
- owner="jl-cmd",
122
- repo="claude-dev-env",
123
- pr_number=422,
124
- loop=1,
125
- head_ref="feat/branch",
126
- base_ref="main",
127
- worktree_path=Path("/tmp/bugteam-pr-422/worktree"),
128
- findings_json_path=findings_json_path,
129
- flavor=FIX_PROMPT_FLAVOR_AGENT,
130
- )
131
- comment_posting = root.find("comment_posting")
132
- assert comment_posting is not None
133
- assert comment_posting.text == FIX_COMMENT_POSTING_AGENT_TEXT
134
- output_format = root.find("output_format")
135
- assert output_format is not None
136
- assert output_format.text == FIX_OUTPUT_FORMAT_AGENT_TEXT
137
- execution = root.find("execution")
138
- assert execution is not None
139
- all_step_texts = [each_step.text or "" for each_step in execution]
140
- assert any("commit" in each_step.lower() for each_step in all_step_texts)
141
- assert any("push" in each_step.lower() for each_step in all_step_texts)
142
-
143
-
144
- def test_headless_flavor_forbids_commit_push_and_mcp(tmp_path: Path) -> None:
145
- findings_json_path = _write_findings_json(tmp_path)
146
- worktree_path = Path("/tmp/bugteam-pr-422/worktree")
147
- pr_number = 422
148
- loop = 3
149
- root = build_fix_prompt.build_fix_prompt_xml(
150
- owner="jl-cmd",
151
- repo="claude-dev-env",
152
- pr_number=pr_number,
153
- loop=loop,
154
- head_ref="feat/branch",
155
- base_ref="main",
156
- worktree_path=worktree_path,
157
- findings_json_path=findings_json_path,
158
- flavor=FIX_PROMPT_FLAVOR_HEADLESS,
159
- )
160
- comment_posting = root.find("comment_posting")
161
- assert comment_posting is not None
162
- assert comment_posting.text == FIX_COMMENT_POSTING_HEADLESS_TEXT
163
- assert "MCP" not in (comment_posting.text or "")
164
- assert "TaskCreate" not in (comment_posting.text or "")
165
- assert "gh" in (comment_posting.text or "")
166
-
167
- expected_outcome_path = (
168
- worktree_path
169
- / FIX_OUTCOME_XML_TEMPLATE.format(number=pr_number, loop=loop)
170
- ).as_posix()
171
- output_format = root.find("output_format")
172
- assert output_format is not None
173
- assert output_format.text == FIX_OUTPUT_FORMAT_HEADLESS_TEMPLATE.format(
174
- outcome_path=expected_outcome_path,
175
- )
176
- assert expected_outcome_path in (output_format.text or "")
177
- assert "TaskCreate" in (output_format.text or "")
178
- assert "MCP" in (output_format.text or "")
179
-
180
- execution = root.find("execution")
181
- assert execution is not None
182
- all_step_texts = [each_step.text or "" for each_step in execution]
183
- joined_steps = " ".join(all_step_texts).lower()
184
- assert "do not stage, commit, or push" in joined_steps
185
- assert "push the commit" not in joined_steps
186
-
187
- constraints = root.find("constraints")
188
- assert constraints is not None
189
- all_constraint_texts = [each_constraint.text or "" for each_constraint in constraints]
190
- joined_constraints = " ".join(all_constraint_texts).lower()
191
- assert "do not stage, commit, or push" in joined_constraints
192
-
193
-
194
- def test_main_headless_flavor_emits_outcome_path_on_stdout(
195
- tmp_path: Path,
196
- capsys: pytest.CaptureFixture[str],
197
- ) -> None:
198
- findings_json_path = _write_findings_json(tmp_path)
199
- worktree_path = "/tmp/bugteam-pr-99/worktree"
200
- exit_code = build_fix_prompt.main([
201
- "--owner", "jl-cmd",
202
- "--repo", "claude-dev-env",
203
- "--pr-number", "99",
204
- "--loop", "2",
205
- "--head-ref", "feat/branch",
206
- "--base-ref", "main",
207
- "--worktree-path", worktree_path,
208
- "--findings-json", str(findings_json_path),
209
- "--flavor", FIX_PROMPT_FLAVOR_HEADLESS,
210
- ])
211
- assert exit_code == 0
212
- captured = capsys.readouterr()
213
- expected_outcome = (
214
- Path(worktree_path)
215
- / FIX_OUTCOME_XML_TEMPLATE.format(number=99, loop=2)
216
- ).as_posix()
217
- assert expected_outcome in captured.out
218
- assert "Do not post replies" in captured.out
219
- assert "Do not stage, commit, or push" in captured.out
220
- assert "add_reply_to_pull_request_comment" not in captured.out
221
-
222
-
223
- def test_main_rejects_object_root_findings_json(
224
- tmp_path: Path,
225
- capsys: pytest.CaptureFixture[str],
226
- ) -> None:
227
- findings_json_path = tmp_path / "findings.json"
228
- findings_json_path.write_text(
229
- json.dumps({"findings": [{"severity": "P1", "file": "a.py"}]}),
230
- encoding="utf-8",
231
- )
232
- exit_code = build_fix_prompt.main([
233
- "--owner", "jl-cmd",
234
- "--repo", "claude-dev-env",
235
- "--pr-number", "99",
236
- "--loop", "1",
237
- "--head-ref", "feat/branch",
238
- "--base-ref", "main",
239
- "--worktree-path", "/tmp/wt",
240
- "--findings-json", str(findings_json_path),
241
- ])
242
- assert exit_code == 1
243
- captured = capsys.readouterr()
244
- expected_message = FINDINGS_JSON_MUST_BE_LIST_MESSAGE % "dict"
245
- assert expected_message in captured.err
246
- assert captured.out == ""
247
-
248
-
249
- def test_build_fix_prompt_xml_rejects_null_root(tmp_path: Path) -> None:
250
- findings_json_path = tmp_path / "findings.json"
251
- findings_json_path.write_text("null", encoding="utf-8")
252
- with pytest.raises(TypeError, match="JSON array"):
253
- build_fix_prompt.build_fix_prompt_xml(
254
- owner="jl-cmd",
255
- repo="claude-dev-env",
256
- pr_number=1,
257
- loop=1,
258
- head_ref="feat/branch",
259
- base_ref="main",
260
- worktree_path=Path("/tmp/wt"),
261
- findings_json_path=findings_json_path,
262
- )
@@ -1,71 +0,0 @@
1
- """Tests for init_loop_state.create_loop_state consuming the typed workspace."""
2
-
3
- from __future__ import annotations
4
-
5
- import importlib.util
6
- import json
7
- import sys
8
- from pathlib import Path
9
- from types import ModuleType
10
-
11
- import pytest
12
-
13
- _SCRIPTS_DIR = Path(__file__).resolve().parent
14
- if str(_SCRIPTS_DIR) not in sys.path:
15
- sys.path.insert(0, str(_SCRIPTS_DIR))
16
-
17
-
18
- def _load_init_loop_state_module() -> ModuleType:
19
- module_path = _SCRIPTS_DIR / "init_loop_state.py"
20
- spec = importlib.util.spec_from_file_location("init_loop_state", module_path)
21
- assert spec is not None
22
- assert spec.loader is not None
23
- module = importlib.util.module_from_spec(spec)
24
- spec.loader.exec_module(module)
25
- return module
26
-
27
-
28
- init_loop_state = _load_init_loop_state_module()
29
-
30
-
31
- def test_create_loop_state_writes_state_under_typed_worktree(
32
- tmp_path: Path, monkeypatch: pytest.MonkeyPatch
33
- ) -> None:
34
- """create_loop_state resolves the worktree from PerPrWorkspace.worktree and
35
- writes loop-state.json inside it, with the starting SHA recorded."""
36
- path_resolver_module = init_loop_state.resolve_run_temp_dir.__globals__["tempfile"]
37
- monkeypatch.setattr(path_resolver_module, "gettempdir", lambda: str(tmp_path))
38
- state_path = init_loop_state.create_loop_state(
39
- pr_number=422,
40
- head_ref="feat/branch",
41
- starting_sha="abc1234",
42
- is_multi_pr=False,
43
- )
44
- assert state_path.name == "loop-state.json"
45
- assert state_path.parent.name == "worktree"
46
- written_state = json.loads(state_path.read_text(encoding="utf-8"))
47
- assert written_state["starting_sha"] == "abc1234"
48
- assert written_state["loop_count"] == 0
49
-
50
-
51
- def test_main_prints_state_path_with_forward_slashes(
52
- tmp_path: Path,
53
- monkeypatch: pytest.MonkeyPatch,
54
- capsys: pytest.CaptureFixture[str],
55
- ) -> None:
56
- path_resolver_module = init_loop_state.resolve_run_temp_dir.__globals__["tempfile"]
57
- monkeypatch.setattr(path_resolver_module, "gettempdir", lambda: str(tmp_path))
58
- exit_code = init_loop_state.main(
59
- [
60
- "--pr-number",
61
- "422",
62
- "--head-ref",
63
- "feat/branch",
64
- "--starting-sha",
65
- "abc1234",
66
- ]
67
- )
68
- assert exit_code == 0
69
- printed_path = capsys.readouterr().out.strip()
70
- assert "\\" not in printed_path
71
- assert printed_path.endswith("worktree/loop-state.json")