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,81 @@
1
+ ---
2
+ name: condensing-instructions
3
+ description: >-
4
+ Rewrite existing instruction documents or turn first drafts and requirements
5
+ into compact, high-information operational instructions without changing or
6
+ inventing their contract. Use for prompts, skills, policies, runbooks,
7
+ agent-facing documents, reference instructions, token reduction,
8
+ deduplication, restructuring, or concise instruction authoring.
9
+ ---
10
+
11
+ # Condensing Instructions
12
+
13
+ Rewrite an existing instruction document or turn a first draft, notes, or requirements into compact operational instructions. Preserve behavior; reduce length only after the contract is complete and unambiguous.
14
+
15
+ ## Preserve the full contract
16
+
17
+ Treat every execution-relevant detail as binding: required, prohibited, and permitted behavior; safety and authority boundaries; actors, objects, data or resource kinds, and scope; force, negation, and quantifiers; triggers, defaults, conditions, exceptions, thresholds, and precedence; dependencies, prerequisites, order, timing, duration, persistence, and state; failure and recovery behavior; exact strings, names, paths, URLs, identifiers, commands, flags, numbers, placeholders, schemas, and error text; and input, output, formatting, validation, acceptance, and completion requirements.
18
+
19
+ Keep rationale or examples only when they define a decision, boundary, exception, exact value, or required behavior. Preserve required frontmatter, tags, wrappers, templates, schemas, and other machine-read structure.
20
+
21
+ When rewriting, change wording and structure, not behavior. When authoring, supply organization, wording, and conventional editorial choices, but do not invent material obligations, permissions, exceptions, or defaults. Ask one concise blocking question when missing, contradictory, or ambiguous information would materially change behavior, safety, authority, scope, precedence, failure handling, or output. Otherwise proceed.
22
+
23
+ If no instruction material or requirements are provided, respond exactly: `Provide the instructions or draft requirements.`
24
+
25
+ ## Build a requirement ledger first
26
+
27
+ Before deleting, merging, or drafting text, record each atomic commitment internally. Capture its force, actor, trigger, action, object or type, required outcome, scope, timing or persistence, dependencies, defaults, exceptions, precedence, failure behavior, and exact literals when applicable.
28
+
29
+ For an existing document, inventory every behaviorally meaningful statement. Distinguish true duplicates from similar rules that apply to different actors, stages, conditions, or scopes. For a first draft, translate each stated goal into observable behavior or an acceptance condition; mark material gaps instead of silently choosing an answer. Do not promote a preference to a hard rule or average conflicting rules.
30
+
31
+ Do not expose the ledger unless requested.
32
+
33
+ ## Group rules by the decisions they control
34
+
35
+ - Group requirements by function or decision point, not by draft order.
36
+ - Default to this sequence when it fits: purpose and scope; inputs and prerequisites; operating defaults; procedures and branches; constraints and safety; outputs and failures; verification. Override it when dependencies require another sequence.
37
+ - Place a safety rule or other constraint before the first action it governs.
38
+ - Within a group, put prerequisites before actions, general rules before narrow exceptions, and production requirements before their checks.
39
+ - Put each exception beside the rule it modifies. State precedence when rules overlap.
40
+ - Give each rule one authoritative location. State a shared actor, condition, default, or scope once at the narrowest level that covers every affected rule.
41
+ - Let a heading carry scope only when every instruction beneath it clearly inherits that scope. Use the fewest headings that preserve navigation.
42
+
43
+ ## Write direct, dense rules
44
+
45
+ - Use active, imperative language and concrete verbs. Put a condition before its action and an exception immediately after its default.
46
+ - Preserve force and quantifiers. Keep `must`, `never`, `only`, `should`, `may`, `all`, `any`, and exact counts distinct.
47
+ - Combine statements only when their actor, force, scope, trigger, timing, persistence, and exceptions align.
48
+ - Replace true repetition with one rule and a compact list of affected cases. Keep separate statements when repetition protects distinct stages, scopes, or failure modes.
49
+ - Use one sentence per decision. Join clauses only when they form one testable rule.
50
+ - Use paragraphs for cohesive rules and lists for parallel obligations, mappings, or branches. Avoid decorative headings and structural ceremony.
51
+ - Remove non-operative background, history, rationale, transition text, conversational framing, restatement, setup narration, and examples. Remove inventories or folder maps that merely describe the document.
52
+ - Use one term for each concept. Define unfamiliar terms at first use. Do not compress complete sentences into fragments, stacked jargon, or vague shorthand.
53
+ - Preserve operational literals character for character, including spelling, case, punctuation, quoting, and placeholders. Preserve whether a list is exhaustive or illustrative; never replace an exact enumeration with `etc.` or a broader category.
54
+
55
+ ## Imply only what cannot change behavior
56
+
57
+ Rely on ordinary language competence and document conventions only when every reasonable reader would take the same action. State a detail when omitting it could change permission, safety, actor, object or type, scope, force, trigger, sequence, timing, persistence, precedence, failure behavior, exact output, or acceptance.
58
+
59
+ Match detail to fragility. Specify exact steps for brittle, high-risk, or order-dependent work. For flexible work, state the required outcome and constraints, then leave the method open.
60
+
61
+ Never use implication to carry a prohibition, exception, dependency, safety boundary, or exact literal. Do not retain obvious advice that constrains nothing, and do not omit a non-obvious rule because it seems intuitive.
62
+
63
+ ## Pass the quality gate
64
+
65
+ Run these checks silently:
66
+
67
+ 1. **Coverage:** Map every ledger item to a clause in the finished document.
68
+ 2. **Support:** Map every material clause back to a stated or confirmed requirement; remove invented behavior.
69
+ 3. **Fidelity:** Compare force, negation, quantifiers, actor, object or type, scope, conditions, exceptions, dependencies, order, timing, persistence, failure behavior, outputs, and protected literals. Nothing may be weakened, broadened, narrowed, contradicted, or altered character for character where exactness matters.
70
+ 4. **Boundary behavior:** Test the normal case, each branch and exception, prohibited cases, missing dependencies, failures, and acceptance checks when present. Each case must yield the intended action.
71
+ 5. **Clarity:** Resolve ambiguous references, hidden precedence, scattered exceptions, inconsistent terms, and unclear qualifier scope.
72
+ 6. **Density:** Delete any sentence that changes no behavior, safety boundary, interpretation, or validation result. Merge remaining text only when the boundary stays equally clear.
73
+ 7. **Independent use:** Reconstruct the ledger from only the finished document. It must stand alone without background or unstated context.
74
+
75
+ Do not finish until every check passes. If multiple versions pass, prefer fewer words, fewer sections, and lower lookup cost. Shorter text never compensates for lost behavior or precision.
76
+
77
+ ## Deliver the requested artifact
78
+
79
+ Preserve the requested format and required syntactic envelope. If no format is specified, use the leanest clear Markdown structure.
80
+
81
+ For text supplied in the conversation, output only the finished instruction document. For file tasks, write only the requested paths: edit an existing file in place, and create a new file only when requested. Report changed paths with a concise behavior summary. Do not include the ledger or process narration unless requested.
@@ -1,119 +1,119 @@
1
- ---
2
- name: copilot-review
3
- description: >-
4
- Spawns a background subagent that babysits the GitHub Copilot reviewer on the
5
- current PR: each tick it fixes unaddressed findings against HEAD, re-requests
6
- review, and exits on convergence. Triggers: '/copilot-review', 'watch
7
- copilot', 'babysit copilot review', 'keep re-requesting copilot'.
8
- ---
9
-
10
- # Copilot Review
11
-
12
- Delegates Copilot babysitting to a background subagent so the main session stays free. The subagent loops internally and closes itself on convergence.
13
-
14
- ## Transport check (before any GitHub step)
15
-
16
- Run `command -v gh`; when it succeeds, run `gh auth status`; once the PR scope is resolved, run `gh api repos/<owner>/<repo> --jq .permissions.push` and take `true` as the pass. When any check fails, run the `pr-loop-cloud-transport` skill first, route every `gh` operation in this skill through its substitution matrix, and carry the same routing into the subagent prompt so the spawned watcher inherits it.
17
-
18
- ## When this skill applies
19
-
20
- The user is on a PR branch, wants Copilot (the GitHub Copilot reviewer bot) to keep re-reviewing after each push, and wants findings auto-addressed between ticks — but does not want the main conversation consumed by polling.
21
-
22
- ## The Process
23
-
24
- ### Step 0: Opt-out check
25
-
26
- Before any other work, run:
27
-
28
- ```bash
29
- python "$HOME/.claude/_shared/pr-loop/scripts/reviews_disabled.py" --reviewer copilot
30
- ```
31
-
32
- Exit 0 — Copilot reviews are disabled: respond with the literal line
33
- `/copilot-review is disabled via CLAUDE_REVIEWS_DISABLED.` and stop — do not
34
- spawn the subagent, do not call the Copilot reviewer API, do not run any
35
- other step of this skill. Exit 1 — continue. Gate semantics live in the
36
- `reviewer-gates` skill ([../reviewer-gates/SKILL.md](../reviewer-gates/SKILL.md)).
37
-
38
- ### Step 1: Gather PR context
39
-
40
- From the current repo:
41
-
42
- ```bash
43
- # MCP: pull_request_read(method="get") returns {number, url, head.sha, base.ref, head.ref, isDraft}
44
- ```
45
-
46
- Capture `number`, `head.sha`, owner/repo (from `url`), and branch name. Pass these to the subagent so it does not rediscover them.
47
-
48
- ### Step 2: Spawn the background subagent
49
-
50
- Invoke the `Agent` tool with:
51
-
52
- - `subagent_type: "general-purpose"`
53
- - `run_in_background: true`
54
- - `description: "Copilot review loop for PR #<N>"`
55
- - `prompt`: the full instructions in **Step 3 (Subagent prompt template)**, with placeholders filled in from Step 1.
56
-
57
- Record the returned agent ID. Report to the user in one or two lines:
58
-
59
- - The subagent is running in the background.
60
- - It self-terminates on convergence.
61
- - To stop it early, the user says "stop the copilot loop" and you call `TaskStop <agent_id>`.
62
- - The main session stays free; completion arrives as a notification.
63
-
64
- Let the subagent own the cadence. The skill's job in the main session ends once the subagent is spawned and reported.
65
-
66
- ### Step 3: Subagent prompt template
67
-
68
- Pass the prompt in
69
- [`templates/subagent-prompt.md`](templates/subagent-prompt.md) to the subagent
70
- word for word, filling in the bracketed values ([NUMBER], [OWNER], [REPO],
71
- [BRANCH], [HEAD_SHA]) from Step 1. It carries the per-tick work, the escalation
72
- rule (three consecutive no-review ticks), the fix protocol, the stop conditions,
73
- and the 20-tick safety cap.
74
-
75
- ### Step 4: Report back to the user
76
-
77
- After spawning, tell the user in one or two lines: subagent ID, PR URL, that it will notify on convergence or blocker. Nothing else.
78
-
79
- ## Stopping the subagent
80
-
81
- - Convergence → subagent stops itself.
82
- - Blocker → subagent reports and stops.
83
- - User says stop → `TaskStop <agent_id>`.
84
- - User asks what loops are running → `TaskList`.
85
-
86
- ## Ground rules (for the subagent)
87
-
88
- - **Append commits.** Each tick adds one new commit on the existing branch with `git commit` and `git push origin [BRANCH]`.
89
- - **Honor pre-push and pre-commit hooks.** When a hook rejects the change, read its output, fix the underlying issue (the failing test, the missing constant, the broken import), and retry. Solve, do not punt.
90
- - **Respect the PR's current state.** Whatever draft-vs-ready state the PR has when the loop starts is the state the subagent preserves. The user decides when to flip it.
91
- - **One fix commit per tick.** Batch all of the current tick's findings into a single commit; the next tick handles the next review round.
92
- - **Use `copilot-pull-request-reviewer[bot]` with the `[bot]` suffix for the reviewer ID.** That exact spelling is load-bearing — it is the only form the API accepts.
93
-
94
- ## Examples
95
-
96
- <example>
97
- User: `/copilot-review`
98
- Claude: [reads PR context, spawns background subagent with the Step 3 template, reports "subagent X watching PR #123; will notify on convergence"]
99
- </example>
100
-
101
- <example>
102
- User: "babysit copilot on this PR until it's clean"
103
- Claude: [same as above]
104
- </example>
105
-
106
- <example>
107
- Subagent tick fires, latest Copilot review is against an older commit.
108
- Subagent: [re-requests review, schedules next wakeup, returns]
109
- </example>
110
-
111
- <example>
112
- Subagent tick fires, Copilot has 2 unaddressed inline findings on HEAD.
113
- Subagent: [TDD-fixes both, one commit, pushes, replies inline on both threads, resolves both threads, re-requests review, schedules next wakeup]
114
- </example>
115
-
116
- <example>
117
- Subagent tick fires, latest review is clean against HEAD.
118
- Subagent: [reports convergence to parent, terminates — no further wakeups]
119
- </example>
1
+ ---
2
+ name: copilot-review
3
+ description: >-
4
+ Spawns a background subagent that babysits the GitHub Copilot reviewer on the
5
+ current PR: each tick it fixes unaddressed findings against HEAD, re-requests
6
+ review, and exits on convergence. Triggers: '/copilot-review', 'watch
7
+ copilot', 'babysit copilot review', 'keep re-requesting copilot'.
8
+ ---
9
+
10
+ # Copilot Review
11
+
12
+ Delegates Copilot babysitting to a background subagent so the main session stays free. The subagent loops internally and closes itself on convergence.
13
+
14
+ ## Transport check (before any GitHub step)
15
+
16
+ Run `command -v gh`; when it succeeds, run `gh auth status`; once the PR scope is resolved, run `gh api repos/<owner>/<repo> --jq .permissions.push` and take `true` as the pass. When any check fails, run the `pr-loop-cloud-transport` skill first, route every `gh` operation in this skill through its substitution matrix, and carry the same routing into the subagent prompt so the spawned watcher inherits it.
17
+
18
+ ## When this skill applies
19
+
20
+ The user is on a PR branch, wants Copilot (the GitHub Copilot reviewer bot) to keep re-reviewing after each push, and wants findings auto-addressed between ticks — but does not want the main conversation consumed by polling.
21
+
22
+ ## The Process
23
+
24
+ ### Step 0: Opt-out check
25
+
26
+ Before any other work, run:
27
+
28
+ ```bash
29
+ python "$HOME/.claude/_shared/pr-loop/scripts/reviews_disabled.py" --reviewer copilot
30
+ ```
31
+
32
+ Exit 0 — Copilot reviews are disabled: respond with the literal line
33
+ `/copilot-review is disabled via CLAUDE_REVIEWS_DISABLED.` and stop — do not
34
+ spawn the subagent, do not call the Copilot reviewer API, do not run any
35
+ other step of this skill. Exit 1 — continue. Gate semantics live in the
36
+ `reviewer-gates` skill ([../reviewer-gates/SKILL.md](../reviewer-gates/SKILL.md)).
37
+
38
+ ### Step 1: Gather PR context
39
+
40
+ From the current repo:
41
+
42
+ ```bash
43
+ # MCP: pull_request_read(method="get") returns {number, url, head.sha, base.ref, head.ref, isDraft}
44
+ ```
45
+
46
+ Capture `number`, `head.sha`, owner/repo (from `url`), and branch name. Pass these to the subagent so it does not rediscover them.
47
+
48
+ ### Step 2: Spawn the background subagent
49
+
50
+ Invoke the `Agent` tool with:
51
+
52
+ - `subagent_type: "general-purpose"`
53
+ - `run_in_background: true`
54
+ - `description: "Copilot review loop for PR #<N>"`
55
+ - `prompt`: the full instructions in **Step 3 (Subagent prompt template)**, with placeholders filled in from Step 1.
56
+
57
+ Record the returned agent ID. Report to the user in one or two lines:
58
+
59
+ - The subagent is running in the background.
60
+ - It self-terminates on convergence.
61
+ - To stop it early, the user says "stop the copilot loop" and you call `TaskStop <agent_id>`.
62
+ - The main session stays free; completion arrives as a notification.
63
+
64
+ Let the subagent own the cadence. The skill's job in the main session ends once the subagent is spawned and reported.
65
+
66
+ ### Step 3: Subagent prompt template
67
+
68
+ Pass the prompt in
69
+ [`templates/subagent-prompt.md`](templates/subagent-prompt.md) to the subagent
70
+ word for word, filling in the bracketed values ([NUMBER], [OWNER], [REPO],
71
+ [BRANCH], [HEAD_SHA]) from Step 1. It carries the per-tick work, the escalation
72
+ rule (three consecutive no-review ticks), the fix protocol, the stop conditions,
73
+ and the 20-tick safety cap.
74
+
75
+ ### Step 4: Report back to the user
76
+
77
+ After spawning, tell the user in one or two lines: subagent ID, PR URL, that it will notify on convergence or blocker. Nothing else.
78
+
79
+ ## Stopping the subagent
80
+
81
+ - Convergence → subagent stops itself.
82
+ - Blocker → subagent reports and stops.
83
+ - User says stop → `TaskStop <agent_id>`.
84
+ - User asks what loops are running → `TaskList`.
85
+
86
+ ## Ground rules (for the subagent)
87
+
88
+ - **Append commits.** Each tick adds one new commit on the existing branch with `git commit` and `git push origin [BRANCH]`.
89
+ - **Honor pre-push and pre-commit hooks.** When a hook rejects the change, read its output, fix the underlying issue (the failing test, the missing constant, the broken import), and retry. Solve, do not punt.
90
+ - **Respect the PR's current state.** Whatever draft-vs-ready state the PR has when the loop starts is the state the subagent preserves. The user decides when to flip it.
91
+ - **One fix commit per tick.** Batch all of the current tick's findings into a single commit; the next tick handles the next review round.
92
+ - **Use `copilot-pull-request-reviewer[bot]` with the `[bot]` suffix for the reviewer ID.** That exact spelling is load-bearing — it is the only form the API accepts.
93
+
94
+ ## Examples
95
+
96
+ <example>
97
+ User: `/copilot-review`
98
+ Claude: [reads PR context, spawns background subagent with the Step 3 template, reports "subagent X watching PR #123; will notify on convergence"]
99
+ </example>
100
+
101
+ <example>
102
+ User: "babysit copilot on this PR until it's clean"
103
+ Claude: [same as above]
104
+ </example>
105
+
106
+ <example>
107
+ Subagent tick fires, latest Copilot review is against an older commit.
108
+ Subagent: [re-requests review, schedules next wakeup, returns]
109
+ </example>
110
+
111
+ <example>
112
+ Subagent tick fires, Copilot has 2 unaddressed inline findings on HEAD.
113
+ Subagent: [TDD-fixes both, one commit, pushes, replies inline on both threads, resolves both threads, re-requests review, schedules next wakeup]
114
+ </example>
115
+
116
+ <example>
117
+ Subagent tick fires, latest review is clean against HEAD.
118
+ Subagent: [reports convergence to parent, terminates — no further wakeups]
119
+ </example>
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: e-code-review
3
+ description: >-
4
+ Max-recall code review at a selectable effort level (low, medium, xhigh), with
5
+ optional auto-fix and an auto-execute loop for any level. Triggers:
6
+ /e-code-review, /e-code-review low, /e-code-review medium, /e-code-review
7
+ xhigh, /e-code-review <level> --fix, /e-code-review <level> loop.
8
+ ---
9
+
10
+ # e-code-review
11
+
12
+ **Pick a level, run that review, optionally fix and loop.** Each level has its own procedure file. Fix application lives in `reference/fix.md`; repeat-until-clean lives in `reference/loop.md`.
13
+
14
+ ## Gotchas
15
+
16
+ - **`low` stays single-pass.** Do not spawn subagents. One diff read, one findings pass.
17
+ - **`medium` favors precision, `xhigh` favors recall.** At `medium` (8 angles) surface only findings a maintainer would act on. At `xhigh` (10 angles plus a gap sweep) a single non-REFUTED vote carries the finding; do not drop on uncertainty.
18
+ - **`--fix` applies findings once.** Load `reference/fix.md` and follow it — it owns the fix agent, the commit gate, skip logging, and outcome reporting.
19
+ - **`loop` never asks.** After findings, fix nits or stop on bugs. Load `reference/loop.md` and follow it.
20
+ - **`--fix` and `loop` combine.** With both, each loop round runs the level file, then `reference/fix.md`, then re-reviews.
21
+
22
+ ## When this skill applies
23
+
24
+ Triggers: `/e-code-review <level> [--fix] [loop]`. `<level>` is `low`, `medium`, or `xhigh`. `--fix` and `loop` are each optional and may be used together.
25
+
26
+ **Refusal — first match wins:**
27
+
28
+ - **No level, or an unknown level.** Respond exactly: `Which effort level — low, medium, or xhigh?`
29
+
30
+ ## The process
31
+
32
+ 1. Read `<level>` and the optional `--fix` and `loop` flags. Apply the refusal first.
33
+ 2. Load `reference/low.md`, `reference/medium.md`, or `reference/xhigh.md`. Run that file as one review cycle, ending in its structured findings report.
34
+ 3. If `--fix` is set, load `reference/fix.md` and apply it to that cycle's findings.
35
+ 4. If `loop` is set, load `reference/loop.md` and follow it. Each round re-runs the same level file from step 2, plus step 3 when `--fix` is set.
36
+ 5. Without `--fix` or `loop`, return the cycle findings and stop.
37
+
38
+ ## File index
39
+
40
+ | File | Purpose |
41
+ |---|---|
42
+ | `SKILL.md` | Route by level; dispatch `--fix` and `loop` |
43
+ | `reference/low.md` | low review procedure — 1 diff pass, no verify |
44
+ | `reference/medium.md` | medium review procedure — 8 angles, 1-vote verify |
45
+ | `reference/xhigh.md` | xhigh review procedure — 10 angles, 1-vote verify, gap sweep |
46
+ | `reference/fix.md` | Fix application, commit gate, skip logging, outcome reporting |
47
+ | `reference/loop.md` | Repeat review/fix rounds until clean |
48
+
49
+ ## Folder map
50
+
51
+ - `SKILL.md` — route and dispatch.
52
+ - `reference/` — one procedure per level, plus `fix.md` and `loop.md`.
@@ -0,0 +1,54 @@
1
+ # Fix Behavior (--fix)
2
+
3
+ When `--fix` is passed, apply the reviewed findings to the working tree.
4
+
5
+ ## Resume the finding agent
6
+
7
+ For each finding, resume the same Agent-tool agent instance that originally
8
+ surfaced it. That agent applies all relevant fixes, which you provide guidance
9
+ on in your resume prompt.
10
+
11
+ At `low` — and any time the Agent tool is unavailable — no finder agent exists
12
+ to resume. Apply the fixes yourself, sequentially, in this context, holding to
13
+ every rule below.
14
+
15
+ ## Commit gate
16
+
17
+ Before returning, the resumed agent attempts a commit on its own change:
18
+
19
+ 1. Run `~/.claude/_shared/pr-loop/scripts/code_rules_gate.py --repo-root <repo
20
+ root> <changed/added files>` against every file it changed or added.
21
+ 2. If the gate reports violations, fix them and re-run the exact same command.
22
+ 3. Repeat until the gate returns clean.
23
+ 4. Only after a clean gate result does the agent return control and report
24
+ its outcome.
25
+
26
+ ## Skip candidates
27
+
28
+ Skip a finding when fixing it would change intended behavior, require changes
29
+ well outside the reviewed diff, or the finding itself is judged a false
30
+ positive.
31
+
32
+ Every logged skip surfaces exactly once, batched together, in a single
33
+ consolidated list presented to the user at the very end of the fix pass
34
+ — after every other finding has been fixed, marked not-needed, or skipped,
35
+ and never before.
36
+
37
+ ## Reporting outcomes
38
+
39
+ After fixes land, report the same findings list again through the structured
40
+ findings-report call — the mechanism that renders this review's results as a
41
+ typed list in the host UI — with each finding now carrying an `outcome`:
42
+ `fixed`, `no_change_needed` (the finding was wrong or already handled), or
43
+ `skipped` (real but not applied). Do not repeat the findings as text in the
44
+ response body; the structured call is the record the host UI reads, and the
45
+ batched skip list from above goes in the prose that follows it.
46
+
47
+ ## If findings are fixed later
48
+
49
+ Whenever a reported finding is fixed later in the session — the user asks for
50
+ the fix, or later work fixes it incidentally — call the structured
51
+ findings-report call again with the same findings, each carrying an
52
+ `outcome` (`fixed`, `no_change_needed`, or `skipped`). Do not repeat the
53
+ findings as text. Make that call immediately after the fixes land, before any
54
+ prose summary.
@@ -0,0 +1,43 @@
1
+ # Loop until clean
2
+
3
+ ## Act
4
+
5
+ `loop` on the hub command authorizes the full cycle. After the effort level procedure returns findings, take the matching branch below immediately.
6
+
7
+ Do not ask whether to fix, which nits to keep, whether to commit or push, or whether to re-review. Do not open a plan fork. Do not end the turn on a recommendation.
8
+
9
+ Report progress while you work. Stop for the user only on a terminal outcome below.
10
+
11
+ ## Where fixes come from
12
+
13
+ When `--fix` is also set, each round's fix pass runs `reference\fix.md`
14
+ (relative to this skill's folder) — it owns which agent applies each fix, the
15
+ commit gate, skip logging, and outcome reporting. Apply the branch rules below
16
+ on top of it: they decide whether a round fixes, commits, pushes, and
17
+ re-reviews.
18
+
19
+ ## Scope stays narrow
20
+
21
+ Auto-fix only verified findings on the review target. Leave deferred PR-body follow-ups and unrelated refactors alone.
22
+
23
+ ## How to class each finding
24
+
25
+ Use the finding's verified `severity` when the level emits one.
26
+
27
+ A finding is a `nit` only when that severity is `nit`. Runtime-correctness, security, data-loss, compatibility, and every other non-nit finding is a `bug`.
28
+
29
+ If the level emits no severity (for example untagged `low` lines), consult your advisor to determine classification.
30
+
31
+ ## Required checks
32
+
33
+ "Run required checks" means: run `~/.claude/_shared/pr-loop/scripts/code_rules_gate.py --repo-root <repo root> <changed/added files>` against every file changed or added in the round. On any violation, fix it and re-run the exact same command again — repeat until it reports clean.
34
+
35
+ ## Terminal outcomes
36
+
37
+ Repeat the same-level review/fix cycle until one of these holds:
38
+
39
+ - **Clean.** Findings are `[]` or `(none)`. Post the proof-of-work PR comment when the target is a PR. Run `gh pr ready` for a draft PR; otherwise state ready.
40
+ - **Nits only.** Every surviving finding is severity `nit`. Fix all of them on the review target. Run required checks. Commit once per loop round. Push. Consider this clean — post the proof-of-work PR comment and mark ready as in the Clean branch above.
41
+ - **Any bug.** Validate each bug-severity finding with an advisor before touching code — confirm it's real and confirm the intended fix. Then fix all validated findings (bugs and nits) on the review target. Run required checks. Commit once per loop round. Push. Run the same effort level on the new head. Repeat until clean, then mark ready as above.
42
+
43
+ Do not drop findings to force ready. Without `loop`, run one review at the selected level, fix, and return every validated finding.
@@ -0,0 +1,57 @@
1
+ `low effort → 1 diff pass → no verify → ≥min(files,4) findings`
2
+
3
+ ## Turn 1 — read
4
+
5
+ One tool call: read the unified diff (`git diff @{upstream}...HEAD; git diff HEAD`
6
+ to cover both committed and uncommitted changes, or `git diff main...HEAD` /
7
+ the target passed as an argument). Skip test/fixture
8
+ hunks (`test/`, `spec/`, `__tests__/`, `*_test.*`, `*.test.*`,
9
+ `fixtures/`, `testdata/`) — test-file changes are not reviewed at this level.
10
+ No subagents, no full-file reads.
11
+
12
+ ## Turn 2 — findings
13
+
14
+ Flag runtime-correctness bugs visible from the hunk alone: inverted/wrong
15
+ condition, off-by-one, null/undefined deref where adjacent lines show the value
16
+ can be absent, removed guard, falsy-zero check, missing `await`,
17
+ wrong-variable copy-paste, error swallowed in a catch that should propagate.
18
+ Also flag — still from the hunk alone — new code that duplicates an existing
19
+ helper visible in the diff context, and dead code the diff leaves behind.
20
+
21
+ Do **not** flag style, naming, perf, missing tests, or anything outside the
22
+ hunk.
23
+
24
+ Target **min(files_changed, 4) findings**, most-severe first, reported in one
25
+ call to the structured findings-report call — the mechanism that renders
26
+ findings as a typed list in the host UI — with `{level, findings}`; each
27
+ entry has `file`, `line`, `summary`, `short_summary` (≤60 characters), and
28
+ `failure_scenario`. If you have fewer, do one more pass focused on the largest
29
+ changed file and on any **removed** code blocks. Make that call with an empty
30
+ findings array only if the diff is trivially correct after that pass. Do not
31
+ also print the findings as text.
32
+
33
+ ## Applying fixes (--fix)
34
+
35
+ The `--fix` flag was passed. Follow `reference\fix.md` (relative to this
36
+ skill's folder) for the exact fix, commit-gate, and skip-handling behavior —
37
+ it governs which agent applies each fix, how a fix gets committed, how a skip
38
+ is logged, and how outcomes get reported. Do not repeat the findings as text;
39
+ follow that document's reporting rules once fixes land.
40
+
41
+ ## If findings are fixed later
42
+
43
+ Whenever a reported finding is fixed later in this session — the user asks you
44
+ to fix it, or later work fixes it incidentally — follow `reference\fix.md`'s
45
+ reporting rules again: report the same findings through the structured
46
+ findings-report call, each carrying an `outcome`. Do not repeat the findings
47
+ as text. Make that call immediately after the fixes land, before any prose
48
+ summary; the host UI's per-finding status updates only from that call.
49
+
50
+ ## Looping (`loop`)
51
+
52
+ The `loop` arg was passed. Follow `reference\loop.md` (relative to this
53
+ skill's folder) for how to re-run Turn 1 (read), Turn 2 (findings), and (if
54
+ `--fix` is also present) `reference\fix.md`'s fix pass, repeatedly —
55
+ including its exit condition, iteration cap, and re-invocation rules. Do not
56
+ treat a single pass through this document as complete while `loop` is active;
57
+ hand control to that document instead of stopping at Turn 2.