claude-dev-env 2.3.0 → 2.5.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 (290) hide show
  1. package/CLAUDE.md +53 -48
  2. package/_shared/pr-loop/scripts/_claude_permissions_common.py +84 -0
  3. package/_shared/pr-loop/scripts/code_rules_gate.py +4 -2
  4. package/_shared/pr-loop/scripts/grant_project_claude_permissions.py +306 -306
  5. package/_shared/pr-loop/scripts/pr_loop_shared_constants/claude_permissions_constants.py +44 -0
  6. package/_shared/pr-loop/scripts/pr_loop_shared_constants/copilot_quota_constants.py +24 -24
  7. package/_shared/pr-loop/scripts/pr_loop_shared_constants/stale_worktree_rule_sweep_constants.py +107 -107
  8. package/_shared/pr-loop/scripts/revoke_project_claude_permissions.py +290 -48
  9. package/_shared/pr-loop/scripts/tests/test_claude_permissions_common.py +42 -2
  10. package/_shared/pr-loop/scripts/tests/test_claude_permissions_constants.py +36 -0
  11. package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +100 -1
  12. package/_shared/pr-loop/scripts/tests/test_fix_hookspath.py +497 -497
  13. package/_shared/pr-loop/scripts/tests/test_revoke_project_claude_permissions.py +311 -2
  14. package/_shared/pr-loop/scripts/tests/test_stale_worktree_rule_sweep.py +301 -301
  15. package/_shared/pr-loop/scripts/tests/test_stale_worktree_rule_sweep_constants.py +85 -85
  16. package/_shared/pr-loop/worker-spawn.md +1 -1
  17. package/agents/CLAUDE.md +3 -1
  18. package/agents/caveman.md +0 -1
  19. package/agents/clasp-deployment-orchestrator.md +0 -1
  20. package/agents/clean-coder.md +0 -1
  21. package/agents/code-advisor.md +0 -1
  22. package/agents/code-quality-agent.md +1 -2
  23. package/agents/code-verifier.md +3 -4
  24. package/agents/deep-research.md +0 -1
  25. package/agents/docs-agent.md +0 -1
  26. package/agents/git-commit-crafter.md +0 -1
  27. package/agents/issue-tracker.md +42 -0
  28. package/agents/plan-packet-validator.md +0 -1
  29. package/agents/pr-description-writer.md +0 -1
  30. package/agents/skill-writer-agent.md +84 -0
  31. package/agents/test_agent_frontmatter.py +67 -18
  32. package/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md +105 -3
  33. package/audit-rubrics/prompts/category-o-docstring-vs-impl-drift.md +29 -13
  34. package/bin/CLAUDE.md +68 -5
  35. package/bin/ever-shipped-skills.mjs +1 -0
  36. package/bin/install-constants.mjs +88 -0
  37. package/bin/install.mjs +1138 -114
  38. package/bin/install.prune.test.mjs +869 -19
  39. package/bin/install.test.mjs +906 -2
  40. package/commands/implement.md +1 -1
  41. package/commands/right-size.md +1 -1
  42. package/docs/CLAUDE.md +2 -0
  43. package/docs/host-pool-health-monitor.md +102 -0
  44. package/docs/references/CLAUDE.md +5 -2
  45. package/docs/references/advisor-tool.md +13 -0
  46. package/docs/references/code-review-enforcement.md +107 -0
  47. package/docs/references/team-advisor-skill.md +14 -0
  48. package/docs/wsl-docker-cowork-starter-matrix.md +89 -0
  49. package/hooks/blocking/CLAUDE.md +9 -1
  50. package/hooks/blocking/code_review_enforcement_config_bootstrap.py +53 -0
  51. package/hooks/blocking/code_review_gate_deny.py +74 -0
  52. package/hooks/blocking/code_review_pr_create_gate.py +198 -0
  53. package/hooks/blocking/code_review_push_gate.py +145 -0
  54. package/hooks/blocking/code_review_stamp_directory_write_blocker.py +348 -0
  55. package/hooks/blocking/code_review_stamp_store.py +233 -0
  56. package/hooks/blocking/code_review_stamp_write_blocker_parts/__init__.py +7 -0
  57. package/hooks/blocking/code_review_stamp_write_blocker_parts/conftest.py +15 -0
  58. package/hooks/blocking/code_review_stamp_write_blocker_parts/obfuscated_stamp_path_reference.py +212 -0
  59. package/hooks/blocking/code_review_stamp_write_blocker_parts/split_directory_change_into_stamp.py +138 -0
  60. package/hooks/blocking/code_review_stamp_write_blocker_parts/test_obfuscated_stamp_path_reference.py +49 -0
  61. package/hooks/blocking/code_review_stamp_write_blocker_parts/test_split_directory_change_into_stamp.py +38 -0
  62. package/hooks/blocking/code_verifier_spawn_preflight_gate.py +39 -27
  63. package/hooks/blocking/config/__init__.py +5 -5
  64. package/hooks/blocking/config/code_review_enforcement_constants.py +113 -0
  65. package/hooks/blocking/config/test_code_review_enforcement_constants.py +113 -0
  66. package/hooks/blocking/config/verified_commit_constants.py +160 -155
  67. package/hooks/blocking/conftest.py +2 -0
  68. package/hooks/blocking/convergence_gate_blocker.py +112 -23
  69. package/hooks/blocking/destructive_command_blocker.py +19 -6
  70. package/hooks/blocking/orchestrator_refresh_reschedule_gate.py +256 -0
  71. package/hooks/blocking/pr_description_proof_of_work.py +52 -34
  72. package/hooks/blocking/pre_tool_use_dispatcher.py +24 -24
  73. package/hooks/blocking/test_bash_pre_tool_use_dispatcher.py +4 -1
  74. package/hooks/blocking/test_code_review_enforcement_config_bootstrap.py +62 -0
  75. package/hooks/blocking/test_code_review_gate_deny.py +54 -0
  76. package/hooks/blocking/test_code_review_pr_create_gate.py +199 -0
  77. package/hooks/blocking/test_code_review_push_gate.py +205 -0
  78. package/hooks/blocking/test_code_review_stamp_directory_write_blocker.py +199 -0
  79. package/hooks/blocking/test_code_review_stamp_store.py +205 -0
  80. package/hooks/blocking/test_code_verifier_spawn_preflight_gate.py +124 -2
  81. package/hooks/blocking/test_convergence_gate_blocker.py +153 -5
  82. package/hooks/blocking/test_destructive_command_blocker.py +1 -1
  83. package/hooks/blocking/test_destructive_command_blocker_deny_mode.py +45 -0
  84. package/hooks/blocking/test_orchestrator_refresh_reschedule_gate.py +231 -0
  85. package/hooks/blocking/test_pr_description_proof_of_work.py +151 -0
  86. package/hooks/blocking/test_pre_tool_use_dispatcher.py +17 -8
  87. package/hooks/blocking/test_verdict_directory_write_blocker.py +808 -808
  88. package/hooks/blocking/test_verification_verdict_store.py +974 -903
  89. package/hooks/blocking/test_verified_commit_gate.py +581 -581
  90. package/hooks/blocking/test_verified_commit_message_accuracy_blocker.py +131 -131
  91. package/hooks/blocking/test_volatile_path_in_post_blocker.py +114 -2
  92. package/hooks/blocking/verdict_directory_write_blocker.py +687 -687
  93. package/hooks/blocking/verification_verdict_store.py +1039 -1014
  94. package/hooks/blocking/verified_commit_gate_parts/gated_invocations.py +29 -17
  95. package/hooks/blocking/verified_commit_gate_parts/tests/test_gated_invocations.py +35 -0
  96. package/hooks/blocking/verified_commit_message_accuracy_blocker.py +167 -167
  97. package/hooks/blocking/verifier_verdict_minter.py +280 -280
  98. package/hooks/blocking/volatile_path_in_post_blocker.py +69 -8
  99. package/hooks/git-hooks/git_hooks_constants/__init__.py +6 -0
  100. package/hooks/git-hooks/pre_push.py +89 -2
  101. package/hooks/git-hooks/test_pre_push.py +128 -0
  102. package/hooks/hooks.json +26 -1
  103. package/hooks/hooks_constants/CLAUDE.md +3 -1
  104. package/hooks/hooks_constants/bash_pre_tool_use_dispatcher_constants.py +8 -0
  105. package/hooks/hooks_constants/code_rules_path_utils_constants.py +1 -0
  106. package/hooks/hooks_constants/code_verifier_spawn_preflight_gate_constants.py +26 -11
  107. package/hooks/hooks_constants/convergence_gate_blocker_constants.py +20 -3
  108. package/hooks/hooks_constants/destructive_command_segment_constants.py +3 -1
  109. package/hooks/hooks_constants/enter_worktree_prefetch_constants.py +18 -18
  110. package/hooks/hooks_constants/orchestrator_refresh_reschedule_gate_constants.py +48 -0
  111. package/hooks/hooks_constants/pr_description_proof_of_work_constants.py +0 -4
  112. package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +4 -0
  113. package/hooks/hooks_constants/pyproject_config_discovery_constants.py +16 -0
  114. package/hooks/hooks_constants/ruff_integration_constants.py +16 -0
  115. package/hooks/hooks_constants/test_bash_pre_tool_use_dispatcher_constants.py +24 -0
  116. package/hooks/hooks_constants/test_pre_tool_use_dispatcher_constants.py +6 -0
  117. package/hooks/hooks_constants/volatile_path_in_post_blocker_constants.py +8 -1
  118. package/hooks/lifecycle/enter_worktree_origin_prefetch.py +163 -146
  119. package/hooks/lifecycle/test_enter_worktree_origin_prefetch.py +185 -178
  120. package/hooks/pyproject.toml +1 -0
  121. package/hooks/validators/CLAUDE.md +2 -0
  122. package/hooks/validators/config/__init__.py +0 -0
  123. package/hooks/validators/config/directory_exemption_constants.py +183 -0
  124. package/hooks/validators/config/test_directory_exemption_constants.py +21 -0
  125. package/hooks/validators/conftest.py +4 -0
  126. package/hooks/validators/mypy_integration.py +63 -50
  127. package/hooks/validators/pyproject_config_discovery.py +101 -0
  128. package/hooks/validators/ruff_integration.py +257 -25
  129. package/hooks/validators/run_all_validators.py +223 -19
  130. package/hooks/validators/test_directory_exemption_constants.py +185 -0
  131. package/hooks/validators/test_mypy_integration.py +32 -0
  132. package/hooks/validators/test_pyproject_config_discovery.py +94 -0
  133. package/hooks/validators/test_python_antipattern_checks.py +110 -5
  134. package/hooks/validators/test_ruff_integration.py +160 -2
  135. package/hooks/validators/test_run_all_validators.py +140 -68
  136. package/hooks/validators/test_run_all_validators_config_discovery.py +123 -0
  137. package/hooks/validators/test_run_all_validators_pretooluse.py +159 -1
  138. package/package.json +10 -2
  139. package/rules/CLAUDE.md +1 -0
  140. package/rules/docstring-prose-matches-implementation.md +45 -67
  141. package/rules/durable-post-artifacts.md +7 -0
  142. package/rules/state-what-is.md +25 -0
  143. package/rules/verified-commit-gate-skip.md +1 -1
  144. package/scripts/CLAUDE.md +1 -0
  145. package/scripts/Capture-PoolHealth.ps1 +410 -0
  146. package/scripts/_code_review_test_support.py +404 -0
  147. package/scripts/claude_chain_runner.py +141 -1
  148. package/scripts/codec_forwarding_test_support.py +83 -0
  149. package/scripts/conftest.py +23 -0
  150. package/scripts/dev_env_scripts_constants/CLAUDE.md +2 -2
  151. package/scripts/dev_env_scripts_constants/claude_chain_constants.py +53 -1
  152. package/scripts/dev_env_scripts_constants/code_review_constants.py +129 -12
  153. package/scripts/dev_env_scripts_constants/test_code_review_constants.py +55 -0
  154. package/scripts/invoke_code_review.py +550 -38
  155. package/scripts/resolve_worker_spawn.py +626 -619
  156. package/scripts/spawn_grok_batch.py +672 -672
  157. package/scripts/test_claude_chain_runner.py +131 -0
  158. package/scripts/test_invoke_code_review_chain.py +70 -0
  159. package/scripts/test_invoke_code_review_cli.py +192 -0
  160. package/scripts/test_invoke_code_review_codec.py +77 -0
  161. package/scripts/test_invoke_code_review_contract.py +256 -0
  162. package/scripts/test_invoke_code_review_git.py +123 -0
  163. package/scripts/test_invoke_code_review_mode.py +99 -0
  164. package/scripts/test_resolve_worker_spawn.py +1014 -1014
  165. package/scripts/test_resolve_worker_spawn_codec.py +101 -0
  166. package/skills/CLAUDE.md +2 -0
  167. package/skills/auditing-claude-config/SKILL.md +114 -114
  168. package/skills/autoconverge/SKILL.md +427 -421
  169. package/skills/autoconverge/reference/convergence.md +26 -4
  170. package/skills/autoconverge/reference/multi-pr.md +6 -1
  171. package/skills/autoconverge/reference/stop-conditions.md +16 -10
  172. package/skills/autoconverge/workflow/CLAUDE.md +1 -0
  173. package/skills/autoconverge/workflow/converge.clean-audit.test.mjs +4 -4
  174. package/skills/autoconverge/workflow/converge.codex-gate.test.mjs +175 -3
  175. package/skills/autoconverge/workflow/converge.contract.test.mjs +1263 -1244
  176. package/skills/autoconverge/workflow/converge.mjs +191 -8
  177. package/skills/autoconverge/workflow/converge.p2-advance.test.mjs +202 -0
  178. package/skills/autoconverge/workflow/converge_multi.mjs +7 -3
  179. package/skills/autoconverge/workflow/converge_multi.run-input.test.mjs +5 -0
  180. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +2 -2
  181. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +2 -2
  182. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +2 -2
  183. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +2 -2
  184. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +2 -2
  185. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +2 -2
  186. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +2 -2
  187. package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +2 -2
  188. package/skills/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +265 -265
  189. package/skills/closeout/SKILL.md +33 -50
  190. package/skills/codex-review/scripts/codex_review_scripts_constants/run_constants.py +8 -0
  191. package/skills/codex-review/scripts/run_codex_review.py +233 -1
  192. package/skills/codex-review/scripts/test_run_codex_review.py +189 -0
  193. package/skills/condensing-instructions/SKILL.md +81 -0
  194. package/skills/copilot-review/SKILL.md +119 -119
  195. package/skills/e-code-review/SKILL.md +52 -0
  196. package/skills/e-code-review/reference/fix.md +54 -0
  197. package/skills/e-code-review/reference/loop.md +43 -0
  198. package/skills/e-code-review/reference/low.md +57 -0
  199. package/skills/e-code-review/reference/medium.md +153 -0
  200. package/skills/e-code-review/reference/xhigh.md +182 -0
  201. package/skills/e-simplify/SKILL.md +97 -0
  202. package/skills/fresh-branch/CLAUDE.md +2 -0
  203. package/skills/fresh-branch/SKILL.md +2 -0
  204. package/skills/fresh-branch/scripts/create_fresh_branch.py +78 -180
  205. package/skills/fresh-branch/scripts/fresh_branch_git_commands.py +285 -0
  206. package/skills/fresh-branch/scripts/fresh_branch_scripts_constants/fresh_branch_cli_constants.py +1 -0
  207. package/skills/fresh-branch/scripts/pytest.ini +4 -0
  208. package/skills/fresh-branch/scripts/test_create_fresh_branch.py +98 -0
  209. package/skills/fresh-branch/scripts/test_fresh_branch_git_commands.py +310 -0
  210. package/skills/issue-tracker/SKILL.md +92 -0
  211. package/skills/issue-tracker/reference/epic-and-sub-issue-model.md +55 -0
  212. package/skills/issue-tracker/reference/handoff-schema.md +64 -0
  213. package/skills/issue-tracker/reference/operation-matrix.md +41 -0
  214. package/skills/orchestrator/SKILL.md +162 -21
  215. package/skills/orchestrator/scripts/status_gate.py +625 -0
  216. package/skills/orchestrator/scripts/status_gate_constants/__init__.py +1 -0
  217. package/skills/orchestrator/scripts/status_gate_constants/config/__init__.py +1 -0
  218. package/skills/orchestrator/scripts/status_gate_constants/config/constants.py +47 -0
  219. package/skills/orchestrator/scripts/test_status_gate.py +439 -0
  220. package/skills/orchestrator-refresh/SKILL.md +110 -35
  221. package/skills/plan-to-pr/SKILL.md +155 -0
  222. package/skills/plan-to-pr/reference/final-validation-tasks.md +15 -0
  223. package/skills/plan-to-pr/reference/model-routing.md +36 -0
  224. package/skills/plan-to-pr/reference/packet-contract.md +43 -0
  225. package/skills/plan-to-pr/reference/packet-schema.json +57 -0
  226. package/skills/plan-to-pr/reference/process-inventory.md +22 -0
  227. package/skills/plan-to-pr/reference/review-loop.md +33 -0
  228. package/skills/plan-to-pr/reference/run-record.schema.json +27 -0
  229. package/skills/plan-to-pr/reference/self-audit-tasks.md +15 -0
  230. package/skills/plan-to-pr/reference/task-seeds.md +14 -0
  231. package/skills/plan-to-pr/reference/task-ticket.md +38 -0
  232. package/skills/plan-to-pr/scripts/config/__init__.py +1 -0
  233. package/skills/plan-to-pr/scripts/config/constants.py +193 -0
  234. package/skills/plan-to-pr/scripts/create_packet.py +173 -0
  235. package/skills/plan-to-pr/scripts/test_create_packet.py +102 -0
  236. package/skills/plan-to-pr/scripts/test_validate_packet.py +256 -0
  237. package/skills/plan-to-pr/scripts/test_validate_protocol.py +135 -0
  238. package/skills/plan-to-pr/scripts/test_validate_run.py +158 -0
  239. package/skills/plan-to-pr/scripts/validate_packet.py +655 -0
  240. package/skills/plan-to-pr/scripts/validate_protocol.py +622 -0
  241. package/skills/plan-to-pr/scripts/validate_run.py +173 -0
  242. package/skills/plan-to-pr/test_skill_contract.py +207 -0
  243. package/skills/plan-to-pr/test_task_ticket_contract.py +151 -0
  244. package/skills/pr-converge/SKILL.md +472 -469
  245. package/skills/pr-converge/reference/examples.md +3 -3
  246. package/skills/pr-converge/reference/fix-protocol.md +1 -1
  247. package/skills/pr-converge/reference/ground-rules.md +7 -4
  248. package/skills/pr-converge/reference/multi-pr-orchestration.md +4 -1
  249. package/skills/pr-converge/reference/per-tick.md +5 -5
  250. package/skills/pr-converge/reference/progress-checklist.md +1 -1
  251. package/skills/pr-converge/scripts/check_convergence_gates.py +279 -279
  252. package/skills/pr-converge/scripts/test_check_convergence_codex.py +507 -507
  253. package/skills/pr-converge/scripts/test_check_convergence_gates.py +84 -84
  254. package/skills/pr-converge/test_step5_host_branch.py +1 -1
  255. package/skills/pr-fix-protocol/SKILL.md +1 -1
  256. package/skills/privacy-hygiene/SKILL.md +68 -68
  257. package/skills/prototype/SKILL.md +86 -0
  258. package/skills/prototype/reference/honest-limitations.md +23 -0
  259. package/skills/prototype/reference/promotion-tasks.md +23 -0
  260. package/skills/prototype/scripts/build_sandbox_settings.py +249 -0
  261. package/skills/prototype/scripts/conftest.py +15 -0
  262. package/skills/prototype/scripts/launch_sandbox.py +205 -0
  263. package/skills/prototype/scripts/probe_sandbox_safety.py +311 -0
  264. package/skills/prototype/scripts/prototype_scripts_constants/__init__.py +1 -0
  265. package/skills/prototype/scripts/prototype_scripts_constants/config/__init__.py +0 -0
  266. package/skills/prototype/scripts/prototype_scripts_constants/config/build_sandbox_settings_constants.py +41 -0
  267. package/skills/prototype/scripts/prototype_scripts_constants/config/launch_sandbox_constants.py +23 -0
  268. package/skills/prototype/scripts/prototype_scripts_constants/config/probe_sandbox_safety_constants.py +45 -0
  269. package/skills/prototype/scripts/prototype_scripts_constants/config/prototype_common_constants.py +10 -0
  270. package/skills/prototype/scripts/test_build_sandbox_settings.py +275 -0
  271. package/skills/prototype/scripts/test_launch_sandbox.py +303 -0
  272. package/skills/prototype/scripts/test_probe_sandbox_safety.py +284 -0
  273. package/skills/prototype/workflows/promotion.md +27 -0
  274. package/skills/prototype/workflows/sandbox.md +35 -0
  275. package/skills/release-notes-html/SKILL.md +164 -0
  276. package/skills/skill-builder/CLAUDE.md +3 -3
  277. package/skills/skill-builder/SKILL.md +5 -5
  278. package/skills/skill-builder/references/CLAUDE.md +1 -1
  279. package/skills/skill-builder/references/delegation-map.md +3 -3
  280. package/skills/skill-builder/references/description-field.md +1 -1
  281. package/skills/skill-builder/references/skill-modularity.md +2 -3
  282. package/skills/skill-builder/workflows/CLAUDE.md +1 -1
  283. package/skills/skill-builder/workflows/improve-skill.md +1 -1
  284. package/skills/skill-builder/workflows/new-skill.md +2 -2
  285. package/skills/task-build/CLAUDE.md +8 -7
  286. package/skills/task-build/SKILL.md +16 -8
  287. package/skills/task-build/reference/tool-routing.md +19 -0
  288. package/skills/team-advisor/SKILL.md +2 -2
  289. package/scripts/test_invoke_code_review.py +0 -672
  290. package/skills/closeout/reference/issue-body-templates.md +0 -108
@@ -0,0 +1,153 @@
1
+ `medium effort → 3+5 angles → 1-vote verify`
2
+
3
+ You are reviewing for **precision** at medium effort: every finding you surface
4
+ should be one a maintainer would act on.
5
+
6
+ ## Phase 0 — Gather the diff
7
+
8
+ Run `git diff @{upstream}...HEAD` (or `git diff main...HEAD` / `git diff HEAD~1`
9
+ if there's no upstream) to get the unified diff under review. If there are
10
+ uncommitted changes, or the range diff is empty, also run `git diff HEAD` and
11
+ include the working-tree changes in scope — the review often runs before the
12
+ commit. If a PR number, branch name, or file path was passed as an argument,
13
+ review that target instead. Treat this diff as the review scope.
14
+
15
+ ## Phase 1 — Find candidates (3 correctness angles + 3 cleanup angles + 1 altitude angle + 1 conventions angle)
16
+
17
+ Run **8 independent finder angles** via the Agent tool. Each surfaces
18
+ candidate findings with `file`, `line`, a one-line `summary`, and a concrete
19
+ `failure_scenario`. If the Agent tool is not available in your current tool
20
+ set, do not error — perform each angle (and each verification) yourself,
21
+ sequentially, in this context.
22
+
23
+ ### Angle A — line-by-line diff scan
24
+
25
+ Read every hunk in the diff, line by line. Then Read the enclosing function for
26
+ each hunk — bugs in unchanged lines of a touched function are in scope (the PR
27
+ re-exposes or fails to fix them). For every line ask: what input, state, timing,
28
+ or platform makes this line wrong? Look for inverted/wrong conditions,
29
+ off-by-one, null/undefined deref, missing `await`, falsy-zero checks,
30
+ wrong-variable copy-paste, error swallowed in catch, unescaped regex metachars.
31
+
32
+ ### Angle B — removed-behavior auditor
33
+
34
+ For every line the diff DELETES or replaces, name the invariant or behavior it
35
+ enforced, then search the new code for where that invariant is re-established.
36
+ If you can't find it, that's a candidate: a removed guard, a dropped error
37
+ path, a narrowed validation, a deleted test that was covering a real case.
38
+
39
+ ### Angle C — cross-file tracer
40
+
41
+ For each function the diff changes, find its callers (Grep for the symbol) and
42
+ check whether the change breaks any call site: a new precondition, a changed
43
+ return shape, a new exception, a timing/ordering dependency. Also check callees:
44
+ does a parallel change in the same PR make a call unsafe?
45
+
46
+ ### Reuse
47
+
48
+ The angles above hunt for bugs; this one and the next two hunt for cleanup in
49
+ the changed code. Flag new code that re-implements something the codebase
50
+ already has — Grep shared/utility modules and files adjacent to the change,
51
+ and name the existing helper to call instead.
52
+
53
+ ### Simplification
54
+
55
+ Flag unnecessary complexity the diff adds: redundant or derivable state,
56
+ copy-paste with slight variation, deep nesting, dead code left behind. Name
57
+ the simpler form that does the same job.
58
+
59
+ ### Efficiency
60
+
61
+ Flag wasted work the diff introduces: redundant computation or repeated I/O,
62
+ independent operations run sequentially, blocking work added to startup or
63
+ hot paths. Also flag long-lived objects built from closures or captured
64
+ environments — they keep the entire enclosing scope alive for the object's
65
+ lifetime (a memory leak when that scope holds large values); prefer a
66
+ class/struct that copies only the fields it needs. Name the cheaper
67
+ alternative.
68
+
69
+ ### Altitude
70
+
71
+ Check that each change is implemented at the right depth, not as a fragile
72
+ bandaid. Special cases layered on shared infrastructure are a sign the fix
73
+ isn't deep enough — prefer generalizing the underlying mechanism over adding
74
+ special cases.
75
+
76
+ ### Conventions (CLAUDE.md)
77
+
78
+ Find the CLAUDE.md files that govern the changed code: the user-level
79
+ ~/.claude/CLAUDE.md, the repo-root CLAUDE.md, plus any CLAUDE.md or
80
+ CLAUDE.local.md in a directory that is an ancestor of a changed file (a
81
+ directory's CLAUDE.md only applies to files at or below it). Read each one
82
+ that exists, then check the diff for clear violations of the rules they state.
83
+
84
+ Only flag a violation when you can quote the exact rule and the exact line
85
+ that breaks it — no style preferences, no vague "spirit of the doc"
86
+ inferences. In the finding, name the CLAUDE.md path and quote the rule so the
87
+ report can cite it. If no CLAUDE.md applies, return nothing for this angle.
88
+
89
+ Cleanup, altitude, and conventions candidates use the same
90
+ `file`/`line`/`summary` shape; in `failure_scenario`, state the concrete
91
+ cost (what is duplicated, wasted, harder to maintain, or which CLAUDE.md rule
92
+ is broken) instead of a crash. Correctness bugs always outrank cleanup,
93
+ altitude, and conventions findings.
94
+
95
+ Pass every candidate with a nameable failure scenario through — finders that
96
+ silently drop half-believed candidates bypass the verify step and are the
97
+ dominant cause of misses.
98
+
99
+ ## Phase 2 — Verify (1-vote, 3-state)
100
+
101
+ Dedup candidates that point at the same line/mechanism, keeping the one with
102
+ the most concrete failure scenario. For each remaining candidate, run **one
103
+ verifier** via the Agent tool: give it the diff, the relevant
104
+ file(s), and the candidate, and have it return exactly one of:
105
+
106
+ - **CONFIRMED** — can name the inputs/state that trigger it and the wrong
107
+ output or crash. Quote the line.
108
+ - **PLAUSIBLE** — mechanism is real, trigger is uncertain (timing, env,
109
+ config). State what would confirm it.
110
+ - **REFUTED** — factually wrong (code doesn't say that) or guarded elsewhere.
111
+ Quote the line that proves it.
112
+
113
+ Keep candidates where the vote is CONFIRMED or PLAUSIBLE.
114
+
115
+ ## Output
116
+
117
+ Report this review's results — `{level, findings}` — through the structured
118
+ findings-report call: the mechanism that renders a review's results as a typed
119
+ list in the host UI, ranked most-severe first. Each entry has `file`, `line`,
120
+ `summary`, `short_summary` — the claim compressed to ≤60 characters, no
121
+ rationale or consequence clause — `failure_scenario`, and `category` — a short
122
+ kebab-case slug for the angle that produced it (`correctness`,
123
+ `simplification`, `efficiency`, `reuse`, `altitude`, `conventions`, or a more
124
+ specific slug like `test-coverage` when one fits better) — plus `verdict` when
125
+ a verify pass produced one. If nothing survives verification, make that call
126
+ with an empty array. Do not also print the findings as text, and do not create
127
+ or publish an artifact of the review — the structured call is the report.
128
+
129
+ ## Applying fixes (--fix)
130
+
131
+ The `--fix` flag was passed. Follow `reference\fix.md` (relative to this
132
+ skill's folder) for the exact fix, commit-gate, and skip-handling behavior —
133
+ it governs which agent applies each fix, how a fix gets committed, how a skip
134
+ is logged, and how outcomes get reported. Do not repeat the findings as text;
135
+ follow that document's reporting rules once fixes land.
136
+
137
+ ## If findings are fixed later
138
+
139
+ Whenever a reported finding is fixed later in this session — the user asks you
140
+ to fix it, or later work fixes it incidentally — follow `reference\fix.md`'s
141
+ reporting rules again: report the same findings through the structured
142
+ findings-report call, each carrying an `outcome`. Do not repeat the findings
143
+ as text. Make that call immediately after the fixes land, before any prose
144
+ summary; the host UI's per-finding status updates only from that call.
145
+
146
+ ## Looping (`loop`)
147
+
148
+ The `loop` arg was passed. Follow `reference\loop.md` (relative to this
149
+ skill's folder) for how to re-run Phases 0–2, Output, and (if `--fix` is also
150
+ present) `reference\fix.md`'s fix pass, repeatedly — including its exit
151
+ condition, iteration cap, and re-invocation rules. Do not treat a single pass
152
+ through this document as complete while `loop` is active; hand control to that
153
+ document instead of stopping at Output.
@@ -0,0 +1,182 @@
1
+ `xhigh effort → 5+5 angles → 1-vote verify → sweep`
2
+
3
+ You are reviewing for **recall** at extra-high effort: catch every real bug. At
4
+ this level, catching real bugs matters more than avoiding false positives — a
5
+ missed bug ships. Err on the side of surfacing.
6
+
7
+ ## Phase 0 — Gather the diff
8
+
9
+ Run `git diff @{upstream}...HEAD` (or `git diff main...HEAD` / `git diff HEAD~1`
10
+ if there's no upstream) to get the unified diff under review. If there are
11
+ uncommitted changes, or the range diff is empty, also run `git diff HEAD` and
12
+ include the working-tree changes in scope — the review often runs before the
13
+ commit. If a PR number, branch name, or file path was passed as an argument,
14
+ review that target instead. Treat this diff as the review scope.
15
+
16
+ ## Phase 1 — Find candidates (5 correctness angles + 3 cleanup angles + 1 altitude angle + 1 conventions angle)
17
+
18
+ Run **10 independent finder angles** via the Agent tool. Each surfaces
19
+ candidate findings. Do NOT let one angle's conclusions suppress another's — if
20
+ two angles flag the same line for different reasons, record both. If the Agent
21
+ tool is not available in your current tool set, do not error — perform each
22
+ angle (and each verification) yourself, sequentially, in this context.
23
+
24
+ ### Angle A — line-by-line diff scan
25
+
26
+ Read every hunk in the diff, line by line. Then Read the enclosing function for
27
+ each hunk — bugs in unchanged lines of a touched function are in scope (the PR
28
+ re-exposes or fails to fix them). For every line ask: what input, state, timing,
29
+ or platform makes this line wrong? Look for inverted/wrong conditions,
30
+ off-by-one, null/undefined deref, missing `await`, falsy-zero checks,
31
+ wrong-variable copy-paste, error swallowed in catch, unescaped regex metachars.
32
+
33
+ ### Angle B — removed-behavior auditor
34
+
35
+ For every line the diff DELETES or replaces, name the invariant or behavior it
36
+ enforced, then search the new code for where that invariant is re-established.
37
+ If you can't find it, that's a candidate: a removed guard, a dropped error
38
+ path, a narrowed validation, a deleted test that was covering a real case.
39
+
40
+ ### Angle C — cross-file tracer
41
+
42
+ For each function the diff changes, find its callers (Grep for the symbol) and
43
+ check whether the change breaks any call site: a new precondition, a changed
44
+ return shape, a new exception, a timing/ordering dependency. Also check callees:
45
+ does a parallel change in the same PR make a call unsafe?
46
+
47
+ ### Angle D — language-pitfall specialist
48
+
49
+ Scan for the classic pitfalls of the diff's language/framework — for example:
50
+ JS falsy-zero, `==` coercion, closure-captured loop var; Python mutable default
51
+ args, late-binding closures; Go nil-map write, range-var capture; SQL injection;
52
+ timezone/DST drift; float equality. Flag any instance the diff introduces.
53
+
54
+ ### Angle E — wrapper/proxy correctness
55
+
56
+ When the PR adds or modifies a type that wraps another (cache, proxy, decorator,
57
+ adapter): check that every method routes to the wrapped instance and not back
58
+ through a registry/session/global — e.g. a caching provider holding a
59
+ `delegate` field that resolves IDs via `session.get(...)` instead of
60
+ `delegate.get(...)` will re-enter the cache or recurse. Also check that the
61
+ wrapper forwards all the methods the callers actually use.
62
+
63
+ ### Reuse
64
+
65
+ The angles above hunt for bugs; this one and the next two hunt for cleanup in
66
+ the changed code. Flag new code that re-implements something the codebase
67
+ already has — Grep shared/utility modules and files adjacent to the change,
68
+ and name the existing helper to call instead.
69
+
70
+ ### Simplification
71
+
72
+ Flag unnecessary complexity the diff adds: redundant or derivable state,
73
+ copy-paste with slight variation, deep nesting, dead code left behind. Name
74
+ the simpler form that does the same job.
75
+
76
+ ### Efficiency
77
+
78
+ Flag wasted work the diff introduces: redundant computation or repeated I/O,
79
+ independent operations run sequentially, blocking work added to startup or
80
+ hot paths. Also flag long-lived objects built from closures or captured
81
+ environments — they keep the entire enclosing scope alive for the object's
82
+ lifetime (a memory leak when that scope holds large values); prefer a
83
+ class/struct that copies only the fields it needs. Name the cheaper
84
+ alternative.
85
+
86
+ ### Altitude
87
+
88
+ Check that each change is implemented at the right depth, not as a fragile
89
+ bandaid. Special cases layered on shared infrastructure are a sign the fix
90
+ isn't deep enough — prefer generalizing the underlying mechanism over adding
91
+ special cases.
92
+
93
+ ### Conventions (CLAUDE.md)
94
+
95
+ Find the CLAUDE.md files that govern the changed code: the user-level
96
+ ~/.claude/CLAUDE.md, the repo-root CLAUDE.md, plus any CLAUDE.md or
97
+ CLAUDE.local.md in a directory that is an ancestor of a changed file (a
98
+ directory's CLAUDE.md only applies to files at or below it). Read each one
99
+ that exists, then check the diff for clear violations of the rules they state.
100
+
101
+ Only flag a violation when you can quote the exact rule and the exact line
102
+ that breaks it — no style preferences, no vague "spirit of the doc"
103
+ inferences. In the finding, name the CLAUDE.md path and quote the rule so the
104
+ report can cite it. If no CLAUDE.md applies, return nothing for this angle.
105
+
106
+ Cleanup, altitude, and conventions candidates use the same
107
+ `file`/`line`/`summary` shape; in `failure_scenario`, state the concrete
108
+ cost (what is duplicated, wasted, harder to maintain, or which CLAUDE.md rule
109
+ is broken) instead of a crash. Correctness bugs always outrank cleanup,
110
+ altitude, and conventions findings.
111
+
112
+ ## Phase 2 — Verify (1-vote, 3-state)
113
+
114
+ Dedup candidates that point at the same line/mechanism, keeping the one with
115
+ the most concrete failure scenario. For each remaining candidate, run **one
116
+ verifier** via the Agent tool: give it the diff, the relevant
117
+ file(s), and the candidate, and have it return exactly one of:
118
+
119
+ - **CONFIRMED** — can name the inputs/state that trigger it and the wrong
120
+ output or crash. Quote the line.
121
+ - **PLAUSIBLE** — mechanism is real, trigger is uncertain (timing, env,
122
+ config). State what would confirm it.
123
+ - **REFUTED** — factually wrong (code doesn't say that) or guarded elsewhere.
124
+ Quote the line that proves it.
125
+
126
+ Keep candidates where the vote is CONFIRMED or PLAUSIBLE.
127
+
128
+ This is recall mode — a single non-REFUTED vote carries the finding. Do NOT
129
+ drop on uncertainty.
130
+
131
+ ## Phase 3 — Sweep for gaps
132
+
133
+ Run **one more finder** as a fresh reviewer who has the verified list. Re-read
134
+ the diff and enclosing functions looking ONLY for defects not already listed.
135
+ Do not re-derive or re-confirm anything already there — the job is gaps. Focus
136
+ on what the first pass tends to miss: moved/extracted code that dropped a guard
137
+ or anchor; second-tier footguns (dataclass default evaluated once, `hash()`
138
+ non-determinism, lock-scope shrink, predicate methods with side effects);
139
+ setup/teardown asymmetry in tests; config defaults flipped.
140
+
141
+ Surface additional candidates, each naming a defect not already on the list.
142
+ If nothing new, return an empty sweep — do not pad.
143
+
144
+ ## Output
145
+
146
+ Report this review's results — `{level, findings}` — through the structured
147
+ findings-report call: the mechanism that renders a review's results as a typed
148
+ list in the host UI, ranked most-severe first. Each entry has `file`, `line`,
149
+ `summary`, `short_summary` — the claim compressed to ≤60 characters, no
150
+ rationale or consequence clause — `failure_scenario`, and `category` — a short
151
+ kebab-case slug for the angle that produced it (`correctness`,
152
+ `simplification`, `efficiency`, `reuse`, `altitude`, `conventions`, or a more
153
+ specific slug like `test-coverage` when one fits better) — plus `verdict` when
154
+ a verify pass produced one. If nothing survives verification, make that call
155
+ with an empty array. Do not also print the findings as text, and do not create
156
+ or publish an artifact of the review — the structured call is the report.
157
+
158
+ ## Applying fixes (--fix)
159
+
160
+ The `--fix` flag was passed. Follow `reference\fix.md` (relative to this
161
+ skill's folder) for the exact fix, commit-gate, and skip-handling behavior —
162
+ it governs which agent applies each fix, how a fix gets committed, how a skip
163
+ is logged, and how outcomes get reported. Do not repeat the findings as text;
164
+ follow that document's reporting rules once fixes land.
165
+
166
+ ## If findings are fixed later
167
+
168
+ Whenever a reported finding is fixed later in this session — the user asks you
169
+ to fix it, or later work fixes it incidentally — follow `reference\fix.md`'s
170
+ reporting rules again: report the same findings through the structured
171
+ findings-report call, each carrying an `outcome`. Do not repeat the findings
172
+ as text. Make that call immediately after the fixes land, before any prose
173
+ summary; the host UI's per-finding status updates only from that call.
174
+
175
+ ## Looping (`loop`)
176
+
177
+ The `loop` arg was passed. Follow `reference\loop.md` (relative to this
178
+ skill's folder) for how to re-run Phases 0–3, Output, and (if `--fix` is also
179
+ present) `reference\fix.md`'s fix pass, repeatedly — including its exit
180
+ condition, iteration cap, and re-invocation rules. Do not treat a single pass
181
+ through this document as complete while `loop` is active; hand control to that
182
+ document instead of stopping at Output.
@@ -0,0 +1,97 @@
1
+ ---
2
+ name: e-simplify
3
+ description: >-
4
+ Cleanup-only pass on the current diff — reuse, simplification, efficiency,
5
+ altitude — that fixes what it finds directly; no correctness-bug hunting.
6
+ Triggers: /e-simplify.
7
+ ---
8
+
9
+ # e-simplify
10
+
11
+ **Core principle:** Four parallel cleanup angles (reuse, simplification, efficiency, altitude) over the current diff, applied directly — not a bug hunt, and not a report.
12
+
13
+ ## Gotchas
14
+
15
+ - This skill fixes code quality, not correctness. A request for bug-hunting belongs to `/e-code-review`, not here — see the refusal case below.
16
+ - Applying a fix that changes intended behavior, or that reaches well outside the reviewed diff, is worse than leaving a flagged item unfixed — skip and note it instead of stretching the fix to cover it.
17
+
18
+ ## When this skill applies
19
+
20
+ Triggers: `/e-simplify` on the current diff (or a PR/branch/path passed as an argument).
21
+
22
+ **Refusal cases — first match wins:**
23
+
24
+ - **Asked to find correctness bugs (crashes, wrong output, security issues) rather than cleanup.** Respond exactly: `That's a correctness review — use /e-code-review, not this skill.`
25
+
26
+ ## The process
27
+
28
+ `/simplify → 4 cleanup agents in parallel → apply the fixes`
29
+
30
+ You are improving the quality of the changed code, not hunting for bugs. Review
31
+ it for reuse, simplification, efficiency, and altitude issues, then fix what you
32
+ find. Do not look for correctness bugs — that is what `/code-review` is for.
33
+
34
+ ### Phase 0 — Gather the diff
35
+
36
+ Run `git diff @{upstream}...HEAD` (or `git diff main...HEAD` / `git diff HEAD~1`
37
+ if there's no upstream) to get the unified diff under review. If there are
38
+ uncommitted changes, or the range diff is empty, also run `git diff HEAD` and
39
+ include the working-tree changes in scope — the review often runs before the
40
+ commit. If a PR number, branch name, or file path was passed as an argument,
41
+ review that target instead. Treat this diff as the review scope.
42
+
43
+ ### Phase 1 — Review (4 cleanup agents in parallel)
44
+
45
+ Launch **4 independent review agents** via the Agent tool, all in a
46
+ single message so they run concurrently. Pass each agent the diff and one of
47
+ the four angles below. Each returns its findings with `file`, `line`, a
48
+ one-line `summary`, and the concrete cost (what is duplicated, wasted, or
49
+ harder to maintain).
50
+
51
+ #### Reuse
52
+
53
+ Flag new code that re-implements something the codebase
54
+ already has — Grep shared/utility modules and files adjacent to the change,
55
+ and name the existing helper to call instead.
56
+
57
+ #### Simplification
58
+
59
+ Flag unnecessary complexity the diff adds: redundant or derivable state,
60
+ copy-paste with slight variation, deep nesting, dead code left behind. Name
61
+ the simpler form that does the same job.
62
+
63
+ #### Efficiency
64
+
65
+ Flag wasted work the diff introduces: redundant computation or repeated I/O,
66
+ independent operations run sequentially, blocking work added to startup or
67
+ hot paths. Also flag long-lived objects built from closures or captured
68
+ environments — they keep the entire enclosing scope alive for the object's
69
+ lifetime (a memory leak when that scope holds large values); prefer a
70
+ class/struct that copies only the fields it needs. Name the cheaper
71
+ alternative.
72
+
73
+ #### Altitude
74
+
75
+ Check that each change is implemented at the right depth, not as a fragile
76
+ bandaid. Special cases layered on shared infrastructure are a sign the fix
77
+ isn't deep enough — prefer generalizing the underlying mechanism over adding
78
+ special cases.
79
+
80
+ ### Phase 2 — Apply the fixes
81
+
82
+ Wait for all four agents to complete, dedup findings that point at the same
83
+ line or mechanism, and fix each remaining one directly. Skip any finding whose
84
+ fix would change intended behavior, require changes well outside the reviewed
85
+ diff, or that you judge to be a false positive — note the skip rather than
86
+ arguing with it. Finish with a brief summary of what was fixed and what was
87
+ skipped (or confirm the code was already clean).
88
+
89
+ ## File index
90
+
91
+ | File | Purpose |
92
+ |---|---|
93
+ | `SKILL.md` | This hub — the full cleanup procedure, refusal case |
94
+
95
+ ## Folder map
96
+
97
+ - `SKILL.md` — hub: full procedure, refusal case.
@@ -8,5 +8,7 @@ Creates a new branch from fresh-fetched `origin/main` inside an isolated worktre
8
8
  |---|---|
9
9
  | `SKILL.md` | Phases, checklist, execute-vs-read for the CLI, gotchas |
10
10
  | `scripts/create_fresh_branch.py` | Deterministic CLI: fetch base, `git worktree add -b`, JSON stdout |
11
+ | `scripts/fresh_branch_git_commands.py` | Git command helpers: fetch, ref checks, `git worktree add -b --no-track` |
11
12
  | `scripts/test_create_fresh_branch.py` | Behavioral tests with temporary git repos |
13
+ | `scripts/test_fresh_branch_git_commands.py` | Behavioral tests for the git command helpers |
12
14
  | `scripts/fresh_branch_scripts_constants/` | Constants package (`fresh_branch_cli_constants`) for the CLI |
@@ -113,7 +113,9 @@ Further edits for the new branch belong in `worktree_path`, not in the caller's
113
113
  | `SKILL.md` | This hub: phases, checklist, constraints, gotchas |
114
114
  | `CLAUDE.md` | Package map for agents browsing the skill folder |
115
115
  | `scripts/create_fresh_branch.py` | **Execute** — deterministic fetch + worktree branch CLI |
116
+ | `scripts/fresh_branch_git_commands.py` | Git command helpers behind the CLI (fetch, ref checks, worktree add) |
116
117
  | `scripts/test_create_fresh_branch.py` | Real-repo tests for agent/path/CLI behavior |
118
+ | `scripts/test_fresh_branch_git_commands.py` | Real-repo tests for the git command helpers |
117
119
  | `scripts/fresh_branch_scripts_constants/` | Named constants for the CLI |
118
120
 
119
121
  ## Folder map