claude-dev-env 2.4.0 → 2.7.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.
- package/CLAUDE.md +26 -59
- package/_shared/pr-loop/scripts/_claude_permissions_common.py +84 -0
- package/_shared/pr-loop/scripts/code_rules_gate.py +6 -3
- package/_shared/pr-loop/scripts/code_rules_gate_parts/CLAUDE.md +12 -2
- package/_shared/pr-loop/scripts/code_rules_gate_parts/baseline_import_isolation.py +309 -0
- package/_shared/pr-loop/scripts/code_rules_gate_parts/staged_test_regression.py +540 -0
- package/_shared/pr-loop/scripts/code_rules_gate_parts/staged_test_running.py +206 -70
- package/_shared/pr-loop/scripts/code_rules_gate_parts/tests/__init__.py +1 -0
- package/_shared/pr-loop/scripts/code_rules_gate_parts/tests/_repo_test_helpers.py +76 -0
- package/_shared/pr-loop/scripts/code_rules_gate_parts/tests/test_baseline_import_isolation.py +248 -0
- package/_shared/pr-loop/scripts/code_rules_gate_parts/tests/test_staged_test_regression.py +309 -0
- package/_shared/pr-loop/scripts/code_rules_gate_parts/tests/test_staged_test_running.py +91 -58
- package/_shared/pr-loop/scripts/grant_project_claude_permissions.py +306 -306
- package/_shared/pr-loop/scripts/pr_loop_shared_constants/claude_permissions_constants.py +44 -0
- package/_shared/pr-loop/scripts/pr_loop_shared_constants/code_rules_gate_constants.py +202 -0
- package/_shared/pr-loop/scripts/pr_loop_shared_constants/copilot_quota_constants.py +24 -24
- package/_shared/pr-loop/scripts/pr_loop_shared_constants/stale_worktree_rule_sweep_constants.py +107 -107
- package/_shared/pr-loop/scripts/revoke_project_claude_permissions.py +290 -48
- package/_shared/pr-loop/scripts/tests/test_claude_permissions_common.py +42 -2
- package/_shared/pr-loop/scripts/tests/test_claude_permissions_constants.py +36 -0
- package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +100 -1
- package/_shared/pr-loop/scripts/tests/test_fix_hookspath.py +497 -497
- package/_shared/pr-loop/scripts/tests/test_revoke_project_claude_permissions.py +311 -2
- package/_shared/pr-loop/scripts/tests/test_stale_worktree_rule_sweep.py +301 -301
- package/_shared/pr-loop/scripts/tests/test_stale_worktree_rule_sweep_constants.py +85 -85
- package/_shared/pr-loop/worker-spawn.md +1 -1
- package/agents/CLAUDE.md +3 -2
- package/agents/caveman.md +0 -1
- package/agents/clasp-deployment-orchestrator.md +0 -1
- package/agents/clean-coder.md +0 -1
- package/agents/code-advisor.md +0 -1
- package/agents/code-quality-agent.md +1 -2
- package/agents/code-verifier.md +36 -8
- package/agents/deep-research.md +0 -1
- package/agents/docs-agent.md +0 -1
- package/agents/git-commit-crafter.md +0 -1
- package/agents/issue-tracker.md +42 -0
- package/agents/plan-packet-validator.md +0 -1
- package/agents/pr-description-writer.md +0 -1
- package/agents/test_agent_frontmatter.py +67 -18
- package/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md +143 -141
- package/bin/CLAUDE.md +68 -5
- package/bin/codex-compat.mjs +104 -0
- package/bin/codex-compat.test.mjs +51 -0
- package/bin/ever-shipped-skills.mjs +1 -0
- package/bin/install-constants.mjs +88 -0
- package/bin/install.mjs +1138 -114
- package/bin/install.prune.test.mjs +869 -19
- package/bin/install.test.mjs +906 -2
- package/codex-capability-map.json +13 -0
- package/commands/implement.md +1 -1
- package/commands/right-size.md +1 -1
- package/docs/CLAUDE.md +1 -0
- package/docs/CODE_RULES.md +2 -0
- package/docs/codex-compatibility.md +25 -0
- package/docs/host-pool-health-monitor.md +102 -0
- package/docs/nas-ssh-invocation.md +96 -12
- package/docs/references/CLAUDE.md +4 -2
- package/docs/references/advisor-tool.md +13 -0
- package/docs/references/code-review-enforcement.md +35 -0
- package/docs/references/team-advisor-skill.md +14 -0
- package/hooks/blocking/CLAUDE.md +4 -0
- package/hooks/blocking/code_review_pr_create_gate.py +7 -3
- package/hooks/blocking/code_review_push_gate.py +9 -4
- package/hooks/blocking/code_review_stamp_directory_write_blocker.py +8 -0
- package/hooks/blocking/config/__init__.py +5 -5
- package/hooks/blocking/config/code_review_enforcement_constants.py +40 -7
- package/hooks/blocking/config/test_code_review_enforcement_constants.py +58 -0
- package/hooks/blocking/config/verified_commit_constants.py +160 -159
- package/hooks/blocking/eli11_reply_enforcer.py +479 -0
- package/hooks/blocking/gh_body_arg_blocker.py +1 -1
- package/hooks/blocking/nas_ssh_binary_enforcer.py +8 -46
- package/hooks/blocking/orchestrator_refresh_reschedule_gate.py +256 -0
- package/hooks/blocking/pre_tool_use_dispatcher.py +24 -24
- package/hooks/blocking/shell_substitution_blocker.py +129 -0
- package/hooks/blocking/state_description_blocker.py +1 -1
- package/hooks/blocking/stop_dispatcher.py +1 -1
- package/hooks/blocking/test_bash_pre_tool_use_dispatcher.py +2 -3
- package/hooks/blocking/test_code_review_pr_create_gate.py +14 -0
- package/hooks/blocking/test_code_review_push_gate.py +16 -0
- package/hooks/blocking/test_code_review_stamp_directory_write_blocker.py +19 -0
- package/hooks/blocking/test_eli11_reply_enforcer.py +457 -0
- package/hooks/blocking/test_orchestrator_refresh_reschedule_gate.py +231 -0
- package/hooks/blocking/test_pre_tool_use_dispatcher.py +10 -1
- package/hooks/blocking/test_shell_substitution_blocker.py +124 -0
- package/hooks/blocking/test_stop_dispatcher.py +23 -0
- package/hooks/blocking/test_unscoped_search_blocker.py +102 -0
- package/hooks/blocking/test_verdict_directory_write_blocker.py +804 -808
- package/hooks/blocking/test_verification_verdict_store.py +54 -0
- package/hooks/blocking/test_verified_commit_gate.py +581 -581
- package/hooks/blocking/test_verified_commit_message_accuracy_blocker.py +131 -131
- package/hooks/blocking/unscoped_search_blocker.py +391 -0
- package/hooks/blocking/verdict_directory_write_blocker.py +687 -687
- package/hooks/blocking/verification_verdict_store.py +1039 -1036
- package/hooks/blocking/verified_commit_message_accuracy_blocker.py +167 -167
- package/hooks/blocking/verifier_verdict_minter.py +280 -280
- package/hooks/git-hooks/CLAUDE.md +3 -0
- package/hooks/git-hooks/conftest.py +30 -0
- package/hooks/git-hooks/gate_utils.py +2 -2
- package/hooks/git-hooks/git_hooks_constants/__init__.py +41 -2
- package/hooks/git-hooks/pre_push.py +75 -4
- package/hooks/git-hooks/pre_push_base_reference.py +166 -0
- package/hooks/git-hooks/test_config.py +0 -15
- package/hooks/git-hooks/test_gate_utils.py +3 -15
- package/hooks/git-hooks/test_pre_commit.py +1 -15
- package/hooks/git-hooks/test_pre_push.py +257 -23
- package/hooks/git-hooks/test_pre_push_base_reference.py +339 -0
- package/hooks/hooks.json +10 -12
- package/hooks/hooks_constants/CLAUDE.md +7 -2
- package/hooks/hooks_constants/bash_pre_tool_use_dispatcher_constants.py +4 -4
- package/hooks/hooks_constants/eli11_reply_enforcer_constants.py +101 -0
- package/hooks/hooks_constants/enter_worktree_prefetch_constants.py +18 -18
- package/hooks/hooks_constants/nas_ssh_binary_enforcer_constants.py +2 -8
- package/hooks/hooks_constants/orchestrator_refresh_reschedule_gate_constants.py +48 -0
- package/hooks/hooks_constants/ruff_integration_constants.py +16 -0
- package/hooks/hooks_constants/shell_command_segments.py +82 -0
- package/hooks/hooks_constants/shell_substitution_blocker_constants.py +67 -0
- package/hooks/hooks_constants/stop_dispatcher_constants.py +1 -0
- package/hooks/hooks_constants/test_bash_pre_tool_use_dispatcher_constants.py +5 -6
- package/hooks/hooks_constants/test_stop_dispatcher_constants.py +1 -0
- package/hooks/hooks_constants/unscoped_search_blocker_constants.py +153 -0
- package/hooks/lifecycle/enter_worktree_origin_prefetch.py +163 -146
- package/hooks/lifecycle/test_enter_worktree_origin_prefetch.py +185 -178
- package/hooks/pyproject.toml +1 -0
- package/hooks/validators/CLAUDE.md +1 -0
- package/hooks/validators/config/__init__.py +0 -0
- package/hooks/validators/config/directory_exemption_constants.py +183 -0
- package/hooks/validators/config/test_directory_exemption_constants.py +21 -0
- package/hooks/validators/conftest.py +4 -0
- package/hooks/validators/ruff_integration.py +49 -5
- package/hooks/validators/run_all_validators.py +206 -9
- package/hooks/validators/test_directory_exemption_constants.py +185 -0
- package/hooks/validators/test_python_antipattern_checks.py +110 -5
- package/hooks/validators/test_ruff_integration.py +92 -1
- package/hooks/validators/test_run_all_validators.py +115 -68
- package/hooks/validators/test_run_all_validators_pretooluse.py +159 -1
- package/package.json +13 -3
- package/rules/CLAUDE.md +17 -22
- package/rules/agent-spawn-protocol.md +6 -6
- package/rules/anti-corollary-tests.md +1 -1
- package/rules/bdd.md +1 -1
- package/rules/cleanup-temp-files.md +10 -4
- package/rules/code-standards.md +7 -0
- package/rules/conservative-action.md +1 -5
- package/rules/context7.md +0 -4
- package/rules/destructive-commands.md +47 -0
- package/rules/doc-inventory-integrity.md +48 -0
- package/rules/doc-prose-cuts.md +58 -0
- package/rules/docstring-prose-matches-implementation.md +53 -44
- package/rules/durable-post-artifacts.md +0 -4
- package/rules/eli11-replies.md +31 -0
- package/rules/explore-thoroughly.md +4 -4
- package/rules/falsify-before-green.md +68 -0
- package/rules/file-global-constants.md +1 -1
- package/rules/filesystem-search.md +51 -0
- package/rules/gh-cli-conventions.md +27 -0
- package/rules/git-workflow.md +26 -0
- package/rules/hedging-claims.md +9 -0
- package/rules/long-horizon-autonomy.md +0 -4
- package/rules/measurement-denominators.md +48 -0
- package/rules/nas-ssh-invocation.md +23 -5
- package/rules/parallel-tools.md +2 -2
- package/rules/plain-illustrative-docstrings.md +3 -7
- package/rules/plain-language.md +2 -0
- package/rules/proof-of-work-pr-comments.md +0 -4
- package/rules/re-stage-before-commit.md +2 -0
- package/rules/research-mode.md +10 -0
- package/rules/shell-invocation.md +21 -0
- package/rules/testing.md +4 -0
- package/rules/verified-commit-gate-skip.md +3 -27
- package/rules/verify-before-asking.md +5 -0
- package/rules/windows-filesystem-safe.md +1 -1
- package/rules/workers-done-before-complete.md +4 -0
- package/scripts/CLAUDE.md +1 -0
- package/scripts/Capture-PoolHealth.ps1 +410 -0
- package/scripts/Migrate-ShellPolicy.ps1 +1 -1
- package/scripts/_code_review_test_support.py +404 -0
- package/scripts/claude_chain_runner.py +141 -1
- package/scripts/codex_capability_bridge.py +171 -0
- package/scripts/codex_compat_materializer.py +1087 -0
- package/scripts/codex_compat_watcher.py +502 -0
- package/scripts/conftest.py +16 -1
- package/scripts/dev_env_scripts_constants/CLAUDE.md +1 -1
- package/scripts/dev_env_scripts_constants/claude_chain_constants.py +9 -0
- package/scripts/dev_env_scripts_constants/code_review_constants.py +37 -0
- package/scripts/invoke_code_review.py +11 -4
- package/scripts/resolve_worker_spawn.py +626 -626
- package/scripts/spawn_grok_batch.py +672 -672
- package/scripts/sync_to_cursor/rules.py +0 -10
- package/scripts/test_claude_chain_runner.py +131 -0
- package/scripts/test_invoke_code_review.py +85 -908
- package/scripts/test_invoke_code_review_chain.py +70 -0
- package/scripts/test_invoke_code_review_cli.py +192 -0
- package/scripts/test_invoke_code_review_contract.py +256 -0
- package/scripts/test_invoke_code_review_git.py +123 -0
- package/scripts/test_invoke_code_review_mode.py +99 -0
- package/scripts/test_resolve_worker_spawn.py +1014 -1014
- package/scripts/tests/test_code_review_constants.py +80 -0
- package/scripts/tests/test_codex_capability_bridge.py +91 -0
- package/scripts/tests/test_codex_compat_materializer.py +632 -0
- package/scripts/tests/test_codex_compat_watcher.py +599 -0
- package/scripts/tests/test_sync_to_cursor.py +0 -1
- package/skills/CLAUDE.md +2 -0
- package/skills/auditing-claude-config/SKILL.md +114 -114
- package/skills/autoconverge/SKILL.md +427 -427
- package/skills/autoconverge/reference/convergence.md +24 -3
- package/skills/autoconverge/workflow/CLAUDE.md +1 -0
- package/skills/autoconverge/workflow/converge.clean-audit.test.mjs +3 -3
- package/skills/autoconverge/workflow/converge.contract.test.mjs +1263 -1263
- package/skills/autoconverge/workflow/converge.mjs +168 -1
- package/skills/autoconverge/workflow/converge.p2-advance.test.mjs +202 -0
- package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +2 -2
- package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +2 -2
- package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +2 -2
- package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +2 -2
- package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +2 -2
- package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +2 -2
- package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +2 -2
- package/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +2 -2
- package/skills/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +265 -265
- package/skills/bugteam/reference/copilot-gap-analysis.md +1 -1
- package/skills/closeout/SKILL.md +33 -50
- package/skills/codex-review/scripts/codex_review_scripts_constants/run_constants.py +8 -0
- package/skills/codex-review/scripts/run_codex_review.py +233 -1
- package/skills/codex-review/scripts/test_run_codex_review.py +189 -0
- package/skills/condensing-instructions/SKILL.md +72 -0
- package/skills/copilot-review/SKILL.md +119 -119
- package/skills/e-code-review/SKILL.md +52 -0
- package/skills/e-code-review/reference/fix.md +54 -0
- package/skills/e-code-review/reference/loop.md +43 -0
- package/skills/e-code-review/reference/low.md +57 -0
- package/skills/e-code-review/reference/medium.md +153 -0
- package/skills/e-code-review/reference/xhigh.md +182 -0
- package/skills/e-simplify/SKILL.md +97 -0
- package/skills/fresh-branch/CLAUDE.md +1 -1
- package/skills/fresh-branch/SKILL.md +5 -6
- package/skills/fresh-branch/scripts/create_fresh_branch.py +42 -24
- package/skills/fresh-branch/scripts/fresh_branch_scripts_constants/fresh_branch_cli_constants.py +1 -3
- package/skills/fresh-branch/scripts/test_create_fresh_branch.py +30 -126
- package/skills/issue-tracker/SKILL.md +92 -0
- package/skills/issue-tracker/reference/epic-and-sub-issue-model.md +55 -0
- package/skills/issue-tracker/reference/handoff-schema.md +64 -0
- package/skills/issue-tracker/reference/operation-matrix.md +41 -0
- package/skills/orchestrator/SKILL.md +177 -22
- package/skills/orchestrator/scripts/status_gate.py +625 -0
- package/skills/orchestrator/scripts/status_gate_constants/__init__.py +1 -0
- package/skills/orchestrator/scripts/status_gate_constants/config/__init__.py +1 -0
- package/skills/orchestrator/scripts/status_gate_constants/config/constants.py +47 -0
- package/skills/orchestrator/scripts/test_status_gate.py +439 -0
- package/skills/orchestrator-refresh/SKILL.md +129 -35
- package/skills/plan-to-pr/SKILL.md +155 -0
- package/skills/plan-to-pr/reference/final-validation-tasks.md +15 -0
- package/skills/plan-to-pr/reference/model-routing.md +36 -0
- package/skills/plan-to-pr/reference/packet-contract.md +43 -0
- package/skills/plan-to-pr/reference/packet-schema.json +57 -0
- package/skills/plan-to-pr/reference/process-inventory.md +22 -0
- package/skills/plan-to-pr/reference/review-loop.md +33 -0
- package/skills/plan-to-pr/reference/run-record.schema.json +27 -0
- package/skills/plan-to-pr/reference/self-audit-tasks.md +15 -0
- package/skills/plan-to-pr/reference/task-seeds.md +14 -0
- package/skills/plan-to-pr/reference/task-ticket.md +38 -0
- package/skills/plan-to-pr/scripts/config/__init__.py +1 -0
- package/skills/plan-to-pr/scripts/config/constants.py +193 -0
- package/skills/plan-to-pr/scripts/create_packet.py +173 -0
- package/skills/plan-to-pr/scripts/test_create_packet.py +102 -0
- package/skills/plan-to-pr/scripts/test_validate_packet.py +256 -0
- package/skills/plan-to-pr/scripts/test_validate_protocol.py +135 -0
- package/skills/plan-to-pr/scripts/test_validate_run.py +158 -0
- package/skills/plan-to-pr/scripts/validate_packet.py +655 -0
- package/skills/plan-to-pr/scripts/validate_protocol.py +622 -0
- package/skills/plan-to-pr/scripts/validate_run.py +173 -0
- package/skills/plan-to-pr/test_skill_contract.py +207 -0
- package/skills/plan-to-pr/test_task_ticket_contract.py +151 -0
- package/skills/pr-converge/SKILL.md +472 -469
- package/skills/pr-converge/reference/examples.md +3 -3
- package/skills/pr-converge/reference/fix-protocol.md +1 -1
- package/skills/pr-converge/reference/ground-rules.md +7 -4
- package/skills/pr-converge/reference/multi-pr-orchestration.md +4 -1
- package/skills/pr-converge/reference/per-tick.md +5 -5
- package/skills/pr-converge/reference/progress-checklist.md +1 -1
- package/skills/pr-converge/scripts/check_convergence_gates.py +279 -279
- package/skills/pr-converge/scripts/test_check_convergence_codex.py +507 -507
- package/skills/pr-converge/scripts/test_check_convergence_gates.py +84 -84
- package/skills/pr-converge/test_step5_host_branch.py +1 -1
- package/skills/pr-fix-protocol/SKILL.md +1 -1
- package/skills/privacy-hygiene/SKILL.md +68 -68
- package/skills/privacy-hygiene/reference/sweep-procedure.md +1 -1
- package/skills/prototype/workflows/promotion.md +1 -1
- package/skills/release-notes-html/SKILL.md +164 -0
- package/skills/session-log/SKILL.md +1 -1
- package/skills/task-build/CLAUDE.md +8 -7
- package/skills/task-build/SKILL.md +16 -8
- package/skills/task-build/reference/tool-routing.md +19 -0
- package/rules/claude-md-orphan-file.md +0 -28
- package/rules/cleanup-command-forms.md +0 -23
- package/rules/code-reviews.md +0 -11
- package/rules/env-var-table-code-drift.md +0 -10
- package/rules/gh-body-file.md +0 -5
- package/rules/gh-paginate.md +0 -3
- package/rules/hook-prose-matches-detector.md +0 -15
- package/rules/no-historical-clutter.md +0 -26
- package/rules/no-inline-destructive-literals.md +0 -9
- package/rules/no-justification-noise.md +0 -61
- package/rules/package-inventory-stale-entry.md +0 -25
- package/rules/right-sized-engineering.md +0 -28
- package/rules/self-contained-docs.md +0 -17
- package/rules/shell-invocation-policy.md +0 -5
- package/rules/tdd.md +0 -7
- package/skills/closeout/reference/issue-body-templates.md +0 -108
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: condensing-instructions
|
|
3
|
+
description: >-
|
|
4
|
+
Refine an instruction document for Claude 5 generation models: cut rules the
|
|
5
|
+
model's judgment already covers, move detail behind progressive disclosure,
|
|
6
|
+
and route each remaining piece to the system prompt, CLAUDE.md, a skill, or a
|
|
7
|
+
reference. Use for system prompts, CLAUDE.md files, skills, tool
|
|
8
|
+
descriptions, agent instructions, context engineering, prompt slimming, and
|
|
9
|
+
token reduction.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Condensing Instructions
|
|
13
|
+
|
|
14
|
+
Cut an instruction document to what a Claude 5 generation model needs, and move the rest to the surface that loads it on demand. Over 80% of Claude Code's system prompt came out for Claude Opus 5 and Claude Fable 5 with no measurable drop in performance, so treat a long instruction document as a place with room to cut.
|
|
15
|
+
|
|
16
|
+
## Clear the conflicts first
|
|
17
|
+
|
|
18
|
+
Read the system prompt, the CLAUDE.md, and the skills as one body of text and find the lines that pull against each other — "leave documentation as appropriate" sitting beside "DO NOT add comments". A conflict makes the model deliberate at length before it acts. Resolve each pair into one statement, or delete both when neither changes what the model does.
|
|
19
|
+
|
|
20
|
+
## Trade rules for judgment
|
|
21
|
+
|
|
22
|
+
Delete a rule written to block a worst case, such as file deletion. Claude 5 generation models read the surrounding context and decide well without it, and a rigid rule blocks the user who has a real reason to want the behavior it forbids.
|
|
23
|
+
|
|
24
|
+
State the outcome and the signal the model should read:
|
|
25
|
+
|
|
26
|
+
- Cut: "Default to writing no comments. Never write multi-paragraph docstrings or multi-line comment blocks — one short line max. Don't create planning, decision, or analysis documents unless the user asks for them."
|
|
27
|
+
- Keep: "Write code that reads like the surrounding code: match its comment density, naming, and idiom."
|
|
28
|
+
|
|
29
|
+
## Design the interface in place of examples
|
|
30
|
+
|
|
31
|
+
Examples constrain exploration. Carry usage in the tool's own shape: expressive names, expressive parameters, and types that signal intent. A status parameter enumerated as `pending`, `in_progress`, `completed` shows correct use with no example attached.
|
|
32
|
+
|
|
33
|
+
## Load detail at the point of use
|
|
34
|
+
|
|
35
|
+
Move detail out of always-on text and into a surface the model reaches for:
|
|
36
|
+
|
|
37
|
+
- A skill the model calls when the task calls for it. Code review and verification detail belongs here.
|
|
38
|
+
- A linked file the model opens on demand.
|
|
39
|
+
- A tool with deferred loading, where the model searches for the definition before it uses the tool.
|
|
40
|
+
|
|
41
|
+
Keep the always-on context lean and let the model pull the rest.
|
|
42
|
+
|
|
43
|
+
## Say each thing once
|
|
44
|
+
|
|
45
|
+
Put tool usage guidance in the tool description alone. Delete the copy that repeats it in the system prompt.
|
|
46
|
+
|
|
47
|
+
## Let memory carry session facts
|
|
48
|
+
|
|
49
|
+
Claude's automatic memory captures relevant context and carries it across sessions. Delete hand-written memory notes from CLAUDE.md when memory already holds them.
|
|
50
|
+
|
|
51
|
+
## Point at rich references
|
|
52
|
+
|
|
53
|
+
Include files as references with @mentions. Prefer a reference the model can read with no ambiguity, in this order:
|
|
54
|
+
|
|
55
|
+
1. Code from this or another codebase — the highest fidelity specification available.
|
|
56
|
+
2. A test suite that pins the behavior.
|
|
57
|
+
3. An HTML artifact or a mockup.
|
|
58
|
+
4. A rubric, which lets a verification agent score work against a quality standard.
|
|
59
|
+
5. Prose description or a screenshot.
|
|
60
|
+
|
|
61
|
+
## Route what remains
|
|
62
|
+
|
|
63
|
+
| Surface | What belongs there |
|
|
64
|
+
|---|---|
|
|
65
|
+
| System prompt | The product Claude works within and the role it plays. For a custom agent, spend real effort here. |
|
|
66
|
+
| CLAUDE.md | A short line on what the repository is, then the gotchas found inside the codebase. Drop anything the model can read off the file structure. Link to skills for the detail. |
|
|
67
|
+
| Skills | Opinions, knowledge, and practices particular to your team or product, written as a guide the model consults. Split a long skill into several files. Constrain only where it matters. |
|
|
68
|
+
| References | Specs, mockups, and codebases pulled in by @mention. |
|
|
69
|
+
|
|
70
|
+
## Deliver
|
|
71
|
+
|
|
72
|
+
Rewrite the document in place and report what moved to which surface. Offer `claude doctor` as a follow-up pass — it rightsizes skills and CLAUDE.md files against these same rules.
|
|
@@ -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.
|