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,292 +0,0 @@
1
- """Emit the complete FIX spawn prompt XML to stdout.
2
-
3
- Populates <bug> entries from findings JSON, plus <execution> checklist
4
- and <constraints>. <comment_posting> and <output_format> follow
5
- ``--flavor`` (agent or headless).
6
-
7
- Usage:
8
- python scripts/build_fix_prompt.py --owner jl-cmd --repo claude-dev-env --pr-number 422 --loop 1 --head-ref feat/branch --base-ref main --worktree-path <PATH> --findings-json <PATH> [--flavor agent|headless]
9
- """
10
-
11
- from __future__ import annotations
12
-
13
- import argparse
14
- import json
15
- import sys
16
- from xml.etree.ElementTree import Element, SubElement
17
- from pathlib import Path
18
-
19
- _self_dir = Path(__file__).resolve().parent
20
- if str(_self_dir) not in sys.path:
21
- sys.path.insert(0, str(_self_dir))
22
-
23
- from _cli_utils import require_file
24
- from _path_resolver import fix_outcome_xml_path
25
- from _xml_utils import emit_pretty_xml
26
- from skills_pr_loop_constants.path_resolver_constants import (
27
- ALL_FIX_CONSTRAINT_TEXTS,
28
- ALL_FIX_CONSTRAINT_TEXTS_HEADLESS,
29
- ALL_FIX_EXECUTION_STEPS,
30
- ALL_FIX_EXECUTION_STEPS_HEADLESS,
31
- ALL_FIX_PROMPT_FLAVORS,
32
- FINDINGS_JSON_MUST_BE_LIST_MESSAGE,
33
- FIX_COMMENT_POSTING_AGENT_TEXT,
34
- FIX_COMMENT_POSTING_HEADLESS_TEXT,
35
- FIX_OUTPUT_FORMAT_AGENT_TEXT,
36
- FIX_OUTPUT_FORMAT_HEADLESS_TEMPLATE,
37
- FIX_PROMPT_FLAVOR_AGENT,
38
- FIX_PROMPT_FLAVOR_HEADLESS,
39
- )
40
-
41
-
42
- def _comment_posting_text(flavor: str) -> str:
43
- """Return the <comment_posting> body for the given prompt flavor.
44
-
45
- Args:
46
- flavor: ``agent`` or ``headless`` prompt flavor.
47
-
48
- Returns:
49
- Comment-posting instruction text for that flavor.
50
- """
51
- if flavor == FIX_PROMPT_FLAVOR_HEADLESS:
52
- return FIX_COMMENT_POSTING_HEADLESS_TEXT
53
- return FIX_COMMENT_POSTING_AGENT_TEXT
54
-
55
-
56
- def _format_instruction_text(
57
- *,
58
- flavor: str,
59
- worktree_path: Path,
60
- pr_number: int,
61
- loop: int,
62
- ) -> str:
63
- """Return the <output_format> body for the given prompt flavor.
64
-
65
- Args:
66
- flavor: ``agent`` or ``headless`` prompt flavor.
67
- worktree_path: Path to the git worktree.
68
- pr_number: Pull request number.
69
- loop: Loop iteration number.
70
-
71
- Returns:
72
- Format-instruction text for that flavor.
73
- """
74
- if flavor == FIX_PROMPT_FLAVOR_HEADLESS:
75
- outcome_path = fix_outcome_xml_path(worktree_path, pr_number, loop)
76
- return FIX_OUTPUT_FORMAT_HEADLESS_TEMPLATE.format(
77
- outcome_path=outcome_path.as_posix(),
78
- )
79
- return FIX_OUTPUT_FORMAT_AGENT_TEXT
80
-
81
-
82
- def _all_execution_steps(flavor: str) -> list[str]:
83
- """Return the execution checklist for the given prompt flavor.
84
-
85
- Args:
86
- flavor: ``agent`` or ``headless`` prompt flavor.
87
-
88
- Returns:
89
- Ordered execution step texts for that flavor.
90
- """
91
- if flavor == FIX_PROMPT_FLAVOR_HEADLESS:
92
- return list(ALL_FIX_EXECUTION_STEPS_HEADLESS)
93
- return list(ALL_FIX_EXECUTION_STEPS)
94
-
95
-
96
- def _all_constraint_texts(flavor: str) -> list[str]:
97
- """Return the constraint texts for the given prompt flavor.
98
-
99
- Args:
100
- flavor: ``agent`` or ``headless`` prompt flavor.
101
-
102
- Returns:
103
- Ordered constraint texts for that flavor.
104
- """
105
- if flavor == FIX_PROMPT_FLAVOR_HEADLESS:
106
- return list(ALL_FIX_CONSTRAINT_TEXTS_HEADLESS)
107
- return list(ALL_FIX_CONSTRAINT_TEXTS)
108
-
109
-
110
- def build_fix_prompt_xml(
111
- *,
112
- owner: str,
113
- repo: str,
114
- pr_number: int,
115
- loop: int,
116
- head_ref: str,
117
- base_ref: str,
118
- worktree_path: Path,
119
- findings_json_path: Path,
120
- flavor: str = FIX_PROMPT_FLAVOR_AGENT,
121
- ) -> Element:
122
- """Build the complete FIX spawn prompt XML.
123
-
124
- Args:
125
- owner: GitHub repository owner.
126
- repo: GitHub repository name.
127
- pr_number: Pull request number.
128
- loop: Loop iteration number.
129
- head_ref: Head branch ref.
130
- base_ref: Base branch ref.
131
- worktree_path: Path to the git worktree.
132
- findings_json_path: Path to the findings JSON file.
133
- flavor: Prompt flavor — ``agent`` (in-agent commit/post) or
134
- ``headless`` (outcome file, lead-owned commit/post).
135
-
136
- Returns:
137
- Root <spawn_prompt> element.
138
- """
139
- findings_data = json.loads(findings_json_path.read_text(encoding="utf-8"))
140
- if not isinstance(findings_data, list):
141
- findings_type_name = type(findings_data).__name__
142
- raise TypeError(
143
- FINDINGS_JSON_MUST_BE_LIST_MESSAGE % findings_type_name
144
- )
145
-
146
- root = Element("spawn_prompt", {"role": "fix", "loop": str(loop)})
147
-
148
- context = SubElement(root, "context")
149
- SubElement(context, "owner").text = owner
150
- SubElement(context, "repo").text = repo
151
- SubElement(context, "pr_number").text = str(pr_number)
152
- SubElement(context, "head_ref").text = head_ref
153
- SubElement(context, "base_ref").text = base_ref
154
- SubElement(context, "worktree_path").text = worktree_path.as_posix()
155
-
156
- bugs_elem = SubElement(root, "bugs")
157
- for each_finding in findings_data:
158
- if isinstance(each_finding, dict):
159
- bug = SubElement(bugs_elem, "bug")
160
- for each_key, each_field_detail in each_finding.items():
161
- child = SubElement(bug, each_key)
162
- child.text = (
163
- str(each_field_detail) if each_field_detail is not None else ""
164
- )
165
-
166
- execution = SubElement(root, "execution")
167
- for each_step in _all_execution_steps(flavor):
168
- SubElement(execution, "step").text = each_step
169
-
170
- constraints = SubElement(root, "constraints")
171
- for each_constraint in _all_constraint_texts(flavor):
172
- SubElement(constraints, "constraint").text = each_constraint
173
-
174
- comment_posting = SubElement(root, "comment_posting")
175
- comment_posting.text = _comment_posting_text(flavor)
176
-
177
- format_section = SubElement(root, "output_format")
178
- format_section.text = _format_instruction_text(
179
- flavor=flavor,
180
- worktree_path=worktree_path,
181
- pr_number=pr_number,
182
- loop=loop,
183
- )
184
-
185
- return root
186
-
187
-
188
- def emit_fix_prompt(
189
- *,
190
- owner: str,
191
- repo: str,
192
- pr_number: int,
193
- loop: int,
194
- head_ref: str,
195
- base_ref: str,
196
- worktree_path: Path,
197
- findings_json_path: Path,
198
- flavor: str = FIX_PROMPT_FLAVOR_AGENT,
199
- ) -> str:
200
- """Build and serialize the FIX spawn prompt to a pretty-printed XML string.
201
-
202
- Args:
203
- owner: GitHub repository owner.
204
- repo: GitHub repository name.
205
- pr_number: Pull request number.
206
- loop: Loop iteration number.
207
- head_ref: Head branch ref.
208
- base_ref: Base branch ref.
209
- worktree_path: Path to the git worktree.
210
- findings_json_path: Path to the findings JSON file.
211
- flavor: Prompt flavor — ``agent`` or ``headless``.
212
-
213
- Returns:
214
- Pretty-printed XML string.
215
- """
216
- root = build_fix_prompt_xml(
217
- owner=owner,
218
- repo=repo,
219
- pr_number=pr_number,
220
- loop=loop,
221
- head_ref=head_ref,
222
- base_ref=base_ref,
223
- worktree_path=worktree_path,
224
- findings_json_path=findings_json_path,
225
- flavor=flavor,
226
- )
227
- return emit_pretty_xml(root)
228
-
229
-
230
- def parse_arguments(all_argv: list[str]) -> argparse.Namespace:
231
- """Parse command-line arguments.
232
-
233
- Args:
234
- all_argv: Command-line argument list.
235
-
236
- Returns:
237
- Parsed namespace with all required fix prompt parameters.
238
- """
239
- parser = argparse.ArgumentParser(description=__doc__)
240
- parser.add_argument("--owner", required=True)
241
- parser.add_argument("--repo", required=True)
242
- parser.add_argument("--pr-number", type=int, required=True)
243
- parser.add_argument("--loop", type=int, required=True)
244
- parser.add_argument("--head-ref", required=True)
245
- parser.add_argument("--base-ref", required=True)
246
- parser.add_argument("--worktree-path", type=Path, required=True)
247
- parser.add_argument("--findings-json", type=Path, required=True)
248
- parser.add_argument(
249
- "--flavor",
250
- choices=sorted(ALL_FIX_PROMPT_FLAVORS),
251
- default=FIX_PROMPT_FLAVOR_AGENT,
252
- )
253
- return parser.parse_args(all_argv)
254
-
255
-
256
- def main(all_arguments: list[str]) -> int:
257
- """Entry point: emit FIX spawn prompt XML to stdout.
258
-
259
- Args:
260
- all_arguments: Command-line arguments.
261
-
262
- Returns:
263
- 0 on success, 1 on failure.
264
- """
265
- arguments = parse_arguments(all_arguments)
266
- findings_path = getattr(arguments, "findings_json")
267
-
268
- early_exit = require_file(findings_path, "findings-json")
269
- if early_exit is not None:
270
- return early_exit
271
-
272
- try:
273
- xml_output = emit_fix_prompt(
274
- owner=arguments.owner,
275
- repo=arguments.repo,
276
- pr_number=getattr(arguments, "pr_number"),
277
- loop=arguments.loop,
278
- head_ref=getattr(arguments, "head_ref"),
279
- base_ref=getattr(arguments, "base_ref"),
280
- worktree_path=getattr(arguments, "worktree_path"),
281
- findings_json_path=findings_path,
282
- flavor=arguments.flavor,
283
- )
284
- except (json.JSONDecodeError, OSError, TypeError) as exc:
285
- print(f"emit_fix_prompt failed: {exc}", file=sys.stderr)
286
- return 1
287
- sys.stdout.write(xml_output)
288
- return 0
289
-
290
-
291
- if __name__ == "__main__":
292
- raise SystemExit(main(sys.argv[1:]))
@@ -1,134 +0,0 @@
1
- """Create a loop-state.json file for a bugteam run.
2
-
3
- Usage:
4
- python scripts/init_loop_state.py --pr-number 422 --head-ref feat/branch --starting-sha abc1234 [--is-multi-pr]
5
- """
6
-
7
- from __future__ import annotations
8
-
9
- import argparse
10
- import json
11
- import sys
12
- from pathlib import Path
13
-
14
- _self_dir = Path(__file__).resolve().parent
15
- if str(_self_dir) not in sys.path:
16
- sys.path.insert(0, str(_self_dir))
17
-
18
- from _path_resolver import (
19
- build_run_name,
20
- per_pr_workspace,
21
- resolve_run_temp_dir,
22
- )
23
- from skills_pr_loop_constants.path_resolver_constants import LOOP_STATE_JSON_INDENT
24
-
25
-
26
- def create_loop_state(
27
- *,
28
- pr_number: int,
29
- head_ref: str,
30
- starting_sha: str,
31
- is_multi_pr: bool = False,
32
- ) -> Path:
33
- """Create the loop-state.json file and return its path.
34
-
35
- The written state dict carries the subset of the keys documented
36
- in `_shared/pr-loop/state-schema.md` common-fields table that are
37
- initialized at loop creation. Fields populated only during the loop
38
- (e.g. `audit_log`) are added by later steps and are not written
39
- here:
40
-
41
- - `loop_count: 0` (int counter, bumps on each AUDIT or tick)
42
- - `last_action: "fresh"` (enum: fresh | audited | fixed)
43
- - `last_findings: {p0: 0, p1: 0, p2: 0, total: 0}` (count dict
44
- populated by AUDIT)
45
- - `starting_sha: <str>` (the SHA passed in)
46
- - `loop_comment_index: {}` (dict keyed by finding_id; AUDIT
47
- populates `finding_comment_id`, `finding_comment_url`, and
48
- `thread_node_id` per entry when it posts the per-loop review,
49
- and FIX sets `fix_status` when its commit lands)
50
-
51
- Args:
52
- pr_number: Pull request number.
53
- head_ref: Head branch ref.
54
- starting_sha: Starting commit SHA.
55
- is_multi_pr: Whether multi-PR mode is active.
56
-
57
- Returns:
58
- Path to the created loop-state.json file.
59
- """
60
- run_name = build_run_name(pr_number, head_ref, is_multi_pr=is_multi_pr)
61
- run_temp_dir = resolve_run_temp_dir(run_name)
62
- workspace = per_pr_workspace(run_temp_dir, "", "", pr_number)
63
- worktree_path = workspace.worktree
64
-
65
- worktree_path.mkdir(parents=True, exist_ok=True)
66
- state_path = worktree_path / "loop-state.json"
67
-
68
- state = {
69
- "loop_count": 0,
70
- "last_action": "fresh",
71
- "last_findings": {"p0": 0, "p1": 0, "p2": 0, "total": 0},
72
- "starting_sha": starting_sha,
73
- "loop_comment_index": {},
74
- }
75
-
76
- state_path.write_text(
77
- json.dumps(state, indent=LOOP_STATE_JSON_INDENT) + "\n",
78
- encoding="utf-8",
79
- )
80
- return state_path
81
-
82
-
83
- def parse_arguments(all_argv: list[str]) -> argparse.Namespace:
84
- """Parse command-line arguments.
85
-
86
- Args:
87
- all_argv: Command-line argument list.
88
-
89
- Returns:
90
- Parsed namespace with pr_number, head_ref, starting_sha, and is_multi_pr.
91
- """
92
- parser = argparse.ArgumentParser(description=__doc__)
93
- parser.add_argument("--pr-number", type=int, required=True)
94
- parser.add_argument("--head-ref", required=True)
95
- parser.add_argument("--starting-sha", required=True)
96
- parser.add_argument(
97
- "--is-multi-pr",
98
- action="store_true",
99
- default=False,
100
- )
101
- return parser.parse_args(all_argv)
102
-
103
-
104
- def main(
105
- all_arguments: list[str], *, is_multi_pr: bool | None = None
106
- ) -> int:
107
- """Entry point: create loop-state.json and print its path.
108
-
109
- Args:
110
- all_arguments: Command-line arguments.
111
- is_multi_pr: Override for multi-PR mode (default: from CLI).
112
-
113
- Returns:
114
- 0 on success.
115
- """
116
- arguments = parse_arguments(all_arguments)
117
- if arguments.starting_sha is None:
118
- return 1
119
- state_path = create_loop_state(
120
- pr_number=getattr(arguments, "pr_number"),
121
- head_ref=getattr(arguments, "head_ref"),
122
- starting_sha=arguments.starting_sha,
123
- is_multi_pr=(
124
- arguments.is_multi_pr if is_multi_pr is None else is_multi_pr
125
- ),
126
- )
127
- print(state_path.as_posix())
128
- return 0
129
-
130
-
131
- if __name__ == "__main__":
132
- all_argv = sys.argv[1:]
133
- arguments = parse_arguments(all_argv)
134
- raise SystemExit(main(all_argv, is_multi_pr=arguments.is_multi_pr))