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,309 +0,0 @@
1
- """Write durable resume-handoff files for a pr-loop run.
2
-
3
- A converge loop can stop mid-run: a paused tick, a budget cutoff, a killed
4
- session. The next session then has no pointer to where the run was. This writer
5
- drops that pointer somewhere the OS temp sweep cannot purge.
6
-
7
- ::
8
-
9
- write_handoff.py --pr-number <N> --head-ref <branch> --phase tick
10
- --resume-command "claude --resume /pr-converge" [--state-file <PATH>]
11
- writes: ~/.claude/runtime/pr-loop/<run-name>/handoff.json + HANDOFF.md
12
- plus: state-copy.json (only when --state-file is given)
13
-
14
- It records the resume command, the phase reached, the steps already done, and a
15
- copy of the loop state, so a fresh session picks up without re-deriving it.
16
- """
17
-
18
- from __future__ import annotations
19
-
20
- import argparse
21
- import json
22
- import os
23
- import sys
24
- from datetime import datetime, timezone
25
- from pathlib import Path
26
-
27
- _self_dir = Path(__file__).resolve().parent
28
- if str(_self_dir) not in sys.path:
29
- sys.path.insert(0, str(_self_dir))
30
-
31
- from _path_resolver import build_run_name # noqa: E402
32
- from skills_pr_loop_constants.handoff_constants import ( # noqa: E402
33
- ATOMIC_STAGING_SUFFIX,
34
- COMPLETED_STEPS_SEPARATOR,
35
- DEFAULT_NEXT_STEP_LINE,
36
- ALL_HANDOFF_DIR_SEGMENTS,
37
- HANDOFF_JSON_FILENAME,
38
- HANDOFF_JSON_INDENT,
39
- HANDOFF_MARKDOWN_FILENAME,
40
- HANDOFF_MARKDOWN_TEMPLATE,
41
- NO_STATE_SNAPSHOT_LINE,
42
- NO_STEPS_DONE_LINE,
43
- STATE_COPY_FILENAME,
44
- STEP_LINE_SEPARATOR,
45
- )
46
-
47
-
48
- def _now_iso() -> str:
49
- """Return the current UTC time as an ISO-format timestamp string.
50
-
51
- Returns:
52
- The stamp recorded on the handoff so a reader knows how fresh it is.
53
- """
54
- return datetime.now(timezone.utc).isoformat()
55
-
56
-
57
- def _handoff_base_dir() -> Path:
58
- """Return the durable base directory that holds every run's handoff folder.
59
-
60
- Returns:
61
- The ``~/.claude/runtime/pr-loop`` path under the user's home directory.
62
- """
63
- return Path.home().joinpath(*ALL_HANDOFF_DIR_SEGMENTS)
64
-
65
-
66
- def resolve_handoff_dir(run_name: str) -> Path:
67
- """Resolve the durable handoff directory for a run name.
68
-
69
- Args:
70
- run_name: Run name token (from build_run_name).
71
-
72
- Returns:
73
- Absolute path to the run's handoff directory under the durable base.
74
- """
75
- return _handoff_base_dir() / run_name
76
-
77
-
78
- def _write_text_atomic(target_path: Path, text: str) -> None:
79
- """Write text to a path atomically via a staging file and a rename.
80
-
81
- Args:
82
- target_path: Destination file path.
83
- text: Full file contents to write.
84
- """
85
- target_path.parent.mkdir(parents=True, exist_ok=True)
86
- staging_path = target_path.with_name(
87
- f"{target_path.name}{ATOMIC_STAGING_SUFFIX}.{os.getpid()}"
88
- )
89
- staging_path.write_text(text, encoding="utf-8")
90
- os.replace(staging_path, target_path)
91
-
92
-
93
- def _snapshot_state(handoff_dir: Path, state_file: Path | None) -> str | None:
94
- """Copy a loop state file into the handoff directory when one is supplied.
95
-
96
- Args:
97
- handoff_dir: The run's durable handoff directory.
98
- state_file: Loop state file to snapshot, or None to skip the copy.
99
-
100
- Returns:
101
- The forward-slash path of the copy to trust, or None when no state
102
- file was supplied.
103
- """
104
- if state_file is None:
105
- return None
106
- state_copy_path = handoff_dir / STATE_COPY_FILENAME
107
- _write_text_atomic(state_copy_path, state_file.read_text(encoding="utf-8"))
108
- return state_copy_path.as_posix()
109
-
110
-
111
- def _steps_markdown_block(all_completed_steps: list[str]) -> str:
112
- """Render the completed steps as a markdown bullet list.
113
-
114
- Args:
115
- all_completed_steps: Steps already finished this run.
116
-
117
- Returns:
118
- A bullet list, or a placeholder line when no steps are recorded.
119
- """
120
- if not all_completed_steps:
121
- return NO_STEPS_DONE_LINE
122
- return STEP_LINE_SEPARATOR.join(f"- {each_step}" for each_step in all_completed_steps)
123
-
124
-
125
- def _build_handoff_markdown(
126
- *,
127
- pr_number: int,
128
- head_ref: str,
129
- phase: str,
130
- resume_command: str,
131
- trusted_state_path: str | None,
132
- all_completed_steps: list[str],
133
- note: str | None,
134
- ) -> str:
135
- """Build the human-facing HANDOFF.md body for a fresh session.
136
-
137
- Args:
138
- pr_number: Pull request number.
139
- head_ref: Head branch ref.
140
- phase: The checkpoint the run reached.
141
- resume_command: The exact command a fresh session runs to resume.
142
- trusted_state_path: The state-copy path to trust, or None.
143
- all_completed_steps: Steps already finished this run.
144
- note: Free-text next-step note, or None.
145
-
146
- Returns:
147
- The rendered markdown document.
148
- """
149
- state_line = (
150
- f"Trust this state snapshot: {trusted_state_path}"
151
- if trusted_state_path is not None
152
- else NO_STATE_SNAPSHOT_LINE
153
- )
154
- return HANDOFF_MARKDOWN_TEMPLATE.format(
155
- pr_number=pr_number,
156
- head_ref=head_ref,
157
- phase=phase,
158
- resume_command=resume_command,
159
- state_line=state_line,
160
- steps_block=_steps_markdown_block(all_completed_steps),
161
- next_step=note if note else DEFAULT_NEXT_STEP_LINE,
162
- )
163
-
164
-
165
- def write_handoff(
166
- *,
167
- pr_number: int,
168
- head_ref: str,
169
- phase: str,
170
- resume_command: str,
171
- state_file: Path | None = None,
172
- run_id: str | None = None,
173
- all_completed_steps: list[str] | None = None,
174
- note: str | None = None,
175
- ) -> Path:
176
- """Write handoff.json, HANDOFF.md, and an optional state copy for a run.
177
-
178
- Names the run with build_run_name and places the files under the durable
179
- handoff directory. When a state file is supplied, its contents are copied to
180
- state-copy.json and that copy path is recorded as the state to trust.
181
-
182
- Args:
183
- pr_number: Pull request number.
184
- head_ref: Head branch ref.
185
- phase: The checkpoint the run reached (e.g. 'tick', 'teardown').
186
- resume_command: The exact command a fresh session runs to resume.
187
- state_file: Loop state file to snapshot, or None to skip the copy.
188
- run_id: Workflow run id to resume from, or None.
189
- all_completed_steps: Steps already finished this run, or None.
190
- note: Free-text next-step note for the fresh session, or None.
191
-
192
- Returns:
193
- Path to the run's durable handoff directory.
194
- """
195
- steps_done = all_completed_steps if all_completed_steps else []
196
- run_name = build_run_name(pr_number, head_ref, is_multi_pr=False)
197
- handoff_dir = resolve_handoff_dir(run_name)
198
- handoff_dir.mkdir(parents=True, exist_ok=True)
199
-
200
- trusted_state_path = _snapshot_state(handoff_dir, state_file)
201
- payload = {
202
- "pr_number": pr_number,
203
- "head_ref": head_ref,
204
- "phase": phase,
205
- "resume_command": resume_command,
206
- "run_id": run_id,
207
- "state_file": trusted_state_path,
208
- "completed_steps": steps_done,
209
- "note": note,
210
- "timestamp": _now_iso(),
211
- }
212
- _write_text_atomic(
213
- handoff_dir / HANDOFF_JSON_FILENAME,
214
- json.dumps(payload, indent=HANDOFF_JSON_INDENT) + "\n",
215
- )
216
- _write_text_atomic(
217
- handoff_dir / HANDOFF_MARKDOWN_FILENAME,
218
- _build_handoff_markdown(
219
- pr_number=pr_number,
220
- head_ref=head_ref,
221
- phase=phase,
222
- resume_command=resume_command,
223
- trusted_state_path=trusted_state_path,
224
- all_completed_steps=steps_done,
225
- note=note,
226
- ),
227
- )
228
- return handoff_dir
229
-
230
-
231
- def _split_completed_steps(raw_steps: str) -> list[str]:
232
- """Split a comma-separated steps argument into a trimmed, non-empty list.
233
-
234
- Args:
235
- raw_steps: The raw --completed-steps CLI value.
236
-
237
- Returns:
238
- The individual step names with surrounding whitespace removed.
239
- """
240
- return [
241
- each_segment.strip()
242
- for each_segment in raw_steps.split(COMPLETED_STEPS_SEPARATOR)
243
- if each_segment.strip()
244
- ]
245
-
246
-
247
- def parse_arguments(all_argv: list[str]) -> argparse.Namespace:
248
- """Parse command-line arguments.
249
-
250
- Args:
251
- all_argv: Command-line argument list.
252
-
253
- Returns:
254
- Parsed namespace with the handoff fields.
255
- """
256
- parser = argparse.ArgumentParser(description=__doc__)
257
- parser.add_argument("--pr-number", type=int, required=True)
258
- parser.add_argument("--head-ref", required=True)
259
- parser.add_argument("--phase", required=True)
260
- parser.add_argument("--resume-command", required=True)
261
- parser.add_argument("--state-file", type=Path, default=None)
262
- parser.add_argument("--run-id", default=None)
263
- parser.add_argument("--completed-steps", default="")
264
- parser.add_argument("--note", default=None)
265
- return parser.parse_args(all_argv)
266
-
267
-
268
- def _write_handoff_from_arguments(arguments: argparse.Namespace) -> Path:
269
- """Map parsed CLI arguments onto a write_handoff call.
270
-
271
- Args:
272
- arguments: The namespace parse_arguments produced.
273
-
274
- Returns:
275
- Path to the run's durable handoff directory.
276
- """
277
- return write_handoff(
278
- pr_number=arguments.pr_number,
279
- head_ref=arguments.head_ref,
280
- phase=arguments.phase,
281
- resume_command=arguments.resume_command,
282
- state_file=arguments.state_file,
283
- run_id=arguments.run_id,
284
- all_completed_steps=_split_completed_steps(arguments.completed_steps),
285
- note=arguments.note,
286
- )
287
-
288
-
289
- def main(all_arguments: list[str]) -> int:
290
- """Entry point: write the handoff files and print the durable directory.
291
-
292
- Args:
293
- all_arguments: Command-line arguments.
294
-
295
- Returns:
296
- 0 on success, 1 on a state-file read or write failure.
297
- """
298
- arguments = parse_arguments(all_arguments)
299
- try:
300
- handoff_dir = _write_handoff_from_arguments(arguments)
301
- except (OSError, UnicodeDecodeError) as read_or_write_error:
302
- print(f"write_handoff failed: {read_or_write_error}", file=sys.stderr)
303
- return 1
304
- print(handoff_dir.as_posix())
305
- return 0
306
-
307
-
308
- if __name__ == "__main__":
309
- raise SystemExit(main(sys.argv[1:]))
@@ -1,5 +0,0 @@
1
- # State schema
2
-
3
- **Canonical home:**
4
-
5
- @~/.claude/_shared/pr-loop/state-schema.md
@@ -1,5 +0,0 @@
1
- # Worker spawn
2
-
3
- **Canonical home:**
4
-
5
- @~/.claude/_shared/pr-loop/worker-spawn.md
@@ -1 +0,0 @@
1
- @../AGENTS.md
@@ -1 +0,0 @@
1
-