claude-dev-env 2.12.0 → 2.14.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/AGENTS.md +61 -0
- package/CLAUDE.md +1 -57
- package/_shared/AGENTS.md +15 -0
- package/_shared/CLAUDE.md +1 -15
- package/_shared/advisor/AGENTS.md +22 -0
- package/_shared/advisor/CLAUDE.md +1 -22
- package/_shared/pr-loop/AGENTS.md +27 -0
- package/_shared/pr-loop/CLAUDE.md +1 -27
- package/_shared/pr-loop/scripts/AGENTS.md +35 -0
- package/_shared/pr-loop/scripts/CLAUDE.md +1 -35
- package/_shared/pr-loop/scripts/code_rules_gate.py +2 -3
- package/_shared/pr-loop/scripts/code_rules_gate_parts/AGENTS.md +42 -0
- package/_shared/pr-loop/scripts/code_rules_gate_parts/CLAUDE.md +1 -42
- package/_shared/pr-loop/scripts/pr_loop_shared_constants/AGENTS.md +26 -0
- package/_shared/pr-loop/scripts/pr_loop_shared_constants/CLAUDE.md +1 -26
- package/_shared/pr-loop/scripts/test_code_rules_gate.py +0 -26
- package/_shared/pr-loop/scripts/tests/AGENTS.md +44 -0
- package/_shared/pr-loop/scripts/tests/CLAUDE.md +1 -44
- package/_shared/process-tree/AGENTS.md +41 -0
- package/_shared/process-tree/CLAUDE.md +1 -41
- package/agents/AGENTS.md +31 -0
- package/agents/CLAUDE.md +1 -32
- package/agents/clean-coder.md +6 -6
- package/agents/pr-description-writer.md +11 -81
- package/agents/test_agent_frontmatter.py +4 -4
- package/audit-rubrics/AGENTS.md +43 -0
- package/audit-rubrics/CLAUDE.md +1 -43
- package/audit-rubrics/category_rubrics/AGENTS.md +37 -0
- package/audit-rubrics/category_rubrics/CLAUDE.md +1 -37
- package/audit-rubrics/prompts/AGENTS.md +37 -0
- package/audit-rubrics/prompts/CLAUDE.md +1 -37
- package/bin/AGENTS.md +112 -0
- package/bin/CLAUDE.md +1 -112
- package/bin/ever-shipped-skills.mjs +1 -0
- package/bin/install-constants.mjs +6 -7
- package/bin/install.mjs +71 -13
- package/bin/install.prune.test.mjs +26 -0
- package/bin/install.settings-defaults.test.mjs +60 -33
- package/bin/install.test.mjs +36 -4
- package/commands/AGENTS.md +23 -0
- package/commands/CLAUDE.md +1 -23
- package/commands/hook-log-extract.md +3 -3
- package/commands/sr-loop.md +9 -5
- package/docs/AGENTS.md +32 -0
- package/docs/CLAUDE.md +1 -33
- package/docs/CODE_RULES.md +1 -1
- package/docs/imagegen.md +22 -0
- package/docs/references/AGENTS.md +17 -0
- package/docs/references/CLAUDE.md +1 -18
- package/hooks/AGENTS.md +31 -0
- package/hooks/CLAUDE.md +1 -31
- package/hooks/_gh_pr_author_swap_utils.py +14 -0
- package/hooks/advisory/AGENTS.md +16 -0
- package/hooks/advisory/CLAUDE.md +1 -16
- package/hooks/blocking/AGENTS.md +123 -0
- package/hooks/blocking/CLAUDE.md +1 -148
- package/hooks/blocking/claude_md_orphan_file_blocker_parts/AGENTS.md +28 -0
- package/hooks/blocking/claude_md_orphan_file_blocker_parts/CLAUDE.md +1 -28
- package/hooks/blocking/code_rules_banned_identifiers.py +1 -1
- package/hooks/blocking/code_rules_dead_module_constant.py +149 -37
- package/hooks/blocking/code_rules_probe_chains.py +6 -2
- package/hooks/blocking/config/AGENTS.md +10 -0
- package/hooks/blocking/config/CLAUDE.md +1 -22
- package/hooks/blocking/conventional_pr_title_gate.py +1 -2
- package/hooks/blocking/gh_pr_author_restore.py +7 -2
- package/hooks/blocking/intent_only_ending_blocker.py +11 -16
- package/hooks/blocking/inventory_intent_records/AGENTS.md +26 -0
- package/hooks/blocking/inventory_intent_records/CLAUDE.md +1 -26
- package/hooks/blocking/package_inventory_stale_blocker_parts/AGENTS.md +26 -0
- package/hooks/blocking/package_inventory_stale_blocker_parts/CLAUDE.md +1 -26
- package/hooks/blocking/pii_prevention_blocker_parts/AGENTS.md +24 -0
- package/hooks/blocking/pii_prevention_blocker_parts/CLAUDE.md +1 -24
- package/hooks/blocking/send_user_file_open_locally_blocker.py +1 -1
- package/hooks/blocking/stop_dispatcher.py +4 -4
- package/hooks/blocking/tdd_enforcer_parts/AGENTS.md +30 -0
- package/hooks/blocking/tdd_enforcer_parts/CLAUDE.md +1 -30
- package/hooks/blocking/test_bash_pre_tool_use_dispatcher.py +0 -3
- package/hooks/blocking/test_code_rules_enforcer_banned_prefixes.py +1 -1
- package/hooks/blocking/test_code_rules_enforcer_dead_module_constant.py +171 -0
- package/hooks/blocking/test_code_rules_enforcer_magic_allowlist.py +1 -1
- package/hooks/blocking/test_gh_pr_author_restore.py +2 -1
- package/hooks/blocking/test_intent_only_ending_blocker.py +4 -0
- package/hooks/blocking/test_pre_tool_use_dispatcher.py +6 -7
- package/hooks/blocking/test_send_user_file_open_locally_blocker.py +4 -3
- package/hooks/blocking/test_shared_stdin_adoption.py +0 -2
- package/hooks/diagnostic/AGENTS.md +43 -0
- package/hooks/diagnostic/CLAUDE.md +1 -43
- package/hooks/diagnostic/hook_log_extractor.py +4 -38
- package/hooks/diagnostic/hook_log_stop_wrapper.py +6 -155
- package/hooks/diagnostic/migrations/AGENTS.md +16 -0
- package/hooks/diagnostic/migrations/CLAUDE.md +1 -16
- package/hooks/diagnostic/queries/AGENTS.md +19 -0
- package/hooks/diagnostic/queries/CLAUDE.md +1 -19
- package/hooks/diagnostic/test_hook_log_extractor.py +10 -23
- package/hooks/diagnostic/test_hook_log_stop_wrapper.py +3 -331
- package/hooks/git-hooks/AGENTS.md +31 -0
- package/hooks/git-hooks/CLAUDE.md +1 -31
- package/hooks/git-hooks/git_hooks_constants/AGENTS.md +21 -0
- package/hooks/git-hooks/git_hooks_constants/CLAUDE.md +1 -21
- package/hooks/git-hooks/git_hooks_constants/__init__.py +4 -12
- package/hooks/git-hooks/pre_push.py +49 -118
- package/hooks/git-hooks/test_pre_push.py +111 -137
- package/hooks/hooks.json +0 -35
- package/hooks/hooks_constants/AGENTS.md +104 -0
- package/hooks/hooks_constants/CLAUDE.md +1 -113
- package/hooks/hooks_constants/bash_pre_tool_use_dispatcher_constants.py +0 -11
- package/hooks/hooks_constants/convergence_branch_constants.py +0 -1
- package/hooks/hooks_constants/fable_spawn_gate_constants.py +3 -4
- package/hooks/hooks_constants/hook_log_extractor_constants.py +1 -2
- package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +0 -8
- package/hooks/hooks_constants/send_user_file_open_locally_blocker_constants.py +1 -6
- package/hooks/hooks_constants/stop_dispatcher_constants.py +0 -1
- package/hooks/hooks_constants/task_list_loop_starter_constants.py +4 -3
- package/hooks/hooks_constants/test_bash_pre_tool_use_dispatcher_constants.py +1 -26
- package/hooks/hooks_constants/test_pre_tool_use_dispatcher_constants.py +0 -5
- package/hooks/hooks_constants/test_stop_dispatcher_constants.py +0 -1
- package/hooks/hooks_constants/working_style_prompt_constants.py +29 -20
- package/hooks/lifecycle/AGENTS.md +18 -0
- package/hooks/lifecycle/CLAUDE.md +1 -20
- package/hooks/observability/AGENTS.md +20 -0
- package/hooks/observability/CLAUDE.md +1 -20
- package/hooks/session/AGENTS.md +33 -0
- package/hooks/session/CLAUDE.md +1 -33
- package/hooks/session/gh_pr_author_session_cleanup.py +7 -2
- package/hooks/session/task_list_loop_starter.py +3 -3
- package/hooks/session/test_gh_pr_author_session_cleanup.py +2 -1
- package/hooks/session/test_task_list_loop_starter.py +10 -2
- package/hooks/session/test_working_style_prompt.py +9 -4
- package/hooks/validation/AGENTS.md +20 -0
- package/hooks/validation/CLAUDE.md +1 -20
- package/hooks/validators/AGENTS.md +51 -0
- package/hooks/validators/CLAUDE.md +1 -51
- package/hooks/validators/health_check.py +52 -19
- package/hooks/validators/python_style_checks.py +1 -1
- package/hooks/validators/test_health_check.py +112 -27
- package/hooks/workflow/AGENTS.md +16 -0
- package/hooks/workflow/CLAUDE.md +1 -16
- package/installable-surfaces.manifest.json +1 -0
- package/output-styles/AGENTS.md +15 -0
- package/output-styles/CLAUDE.md +1 -15
- package/package.json +2 -1
- package/rules/AGENTS.md +61 -0
- package/rules/CLAUDE.md +1 -63
- package/rules/code-standards.md +5 -9
- package/rules/doc-prose-cuts.md +1 -1
- package/rules/gh-cli-conventions.md +0 -1
- package/rules/git-workflow.md +1 -3
- package/scripts/AGENTS.md +62 -0
- package/scripts/CLAUDE.md +1 -63
- package/scripts/_code_review_test_support.py +0 -95
- package/scripts/codex_compat_materializer.py +4 -0
- package/scripts/dev_env_scripts_constants/AGENTS.md +21 -0
- package/scripts/dev_env_scripts_constants/CLAUDE.md +1 -21
- package/scripts/dev_env_scripts_constants/code_review_constants.py +9 -98
- package/scripts/dev_env_scripts_constants/test_code_review_constants.py +1 -44
- package/scripts/invoke_code_review.py +8 -451
- package/scripts/sync_to_cursor/AGENTS.md +23 -0
- package/scripts/sync_to_cursor/CLAUDE.md +1 -23
- package/scripts/test_invoke_code_review.py +5 -61
- package/scripts/test_invoke_code_review_cli.py +1 -45
- package/scripts/test_invoke_code_review_contract.py +1 -118
- package/scripts/test_validate_instruction_pairs.py +90 -0
- package/scripts/test_verify_installable_package.py +5 -1
- package/scripts/tests/AGENTS.md +33 -0
- package/scripts/tests/CLAUDE.md +1 -33
- package/scripts/tests/test_codex_compat_materializer.py +36 -1
- package/scripts/validate_instruction_pairs.py +183 -0
- package/settings.json +1 -10
- package/skills/AGENTS.md +72 -0
- package/skills/CLAUDE.md +1 -64
- package/skills/_shared/AGENTS.md +44 -0
- package/skills/_shared/CLAUDE.md +1 -44
- package/skills/_shared/advisor/AGENTS.md +9 -0
- package/skills/_shared/advisor/CLAUDE.md +1 -9
- package/skills/_shared/pr-loop/AGENTS.md +50 -0
- package/skills/_shared/pr-loop/CLAUDE.md +1 -50
- package/skills/_shared/pr-loop/prompts/AGENTS.md +9 -0
- package/skills/_shared/pr-loop/prompts/CLAUDE.md +1 -9
- package/skills/_shared/pr-loop/scripts/AGENTS.md +35 -0
- package/skills/_shared/pr-loop/scripts/CLAUDE.md +1 -35
- package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/AGENTS.md +24 -0
- package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/CLAUDE.md +1 -24
- package/skills/anthropic-plan/AGENTS.md +34 -0
- package/skills/anthropic-plan/CLAUDE.md +1 -34
- package/skills/anthropic-plan/scripts/AGENTS.md +11 -0
- package/skills/anthropic-plan/scripts/CLAUDE.md +1 -11
- package/skills/anthropic-plan/scripts/anthropic_plan_scripts_constants/AGENTS.md +16 -0
- package/skills/anthropic-plan/scripts/anthropic_plan_scripts_constants/CLAUDE.md +1 -16
- package/skills/anthropic-plan/templates/AGENTS.md +13 -0
- package/skills/anthropic-plan/templates/CLAUDE.md +1 -13
- package/skills/anthropic-plan/workflow/AGENTS.md +14 -0
- package/skills/anthropic-plan/workflow/CLAUDE.md +1 -14
- package/skills/auditing-claude-config/AGENTS.md +21 -0
- package/skills/auditing-claude-config/CLAUDE.md +1 -21
- package/skills/autoconverge/AGENTS.md +36 -0
- package/skills/autoconverge/CLAUDE.md +1 -36
- package/skills/autoconverge/reference/AGENTS.md +16 -0
- package/skills/autoconverge/reference/CLAUDE.md +1 -16
- package/skills/autoconverge/reference/convergence.md +7 -7
- package/skills/autoconverge/reference/gotchas.md +3 -10
- package/skills/autoconverge/workflow/AGENTS.md +26 -0
- package/skills/autoconverge/workflow/CLAUDE.md +1 -26
- package/skills/autoconverge/workflow/autoconverge_report_constants/AGENTS.md +16 -0
- package/skills/autoconverge/workflow/autoconverge_report_constants/CLAUDE.md +1 -16
- package/skills/autoconverge/workflow/converge.contract.test.mjs +53 -1388
- package/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +4 -3
- package/skills/autoconverge/workflow/converge.fix-recovery.test.mjs +33 -493
- package/skills/autoconverge/workflow/converge.merge-conflict.test.mjs +15 -97
- package/skills/autoconverge/workflow/converge.mjs +201 -238
- package/skills/autoconverge/workflow/converge.precatch.test.mjs +1 -1
- package/skills/bugteam/AGENTS.md +30 -0
- package/skills/bugteam/CLAUDE.md +1 -30
- package/skills/bugteam/CONSTRAINTS.md +1 -1
- package/skills/bugteam/SKILL.md +9 -0
- package/skills/bugteam/reference/AGENTS.md +20 -0
- package/skills/bugteam/reference/CLAUDE.md +1 -20
- package/skills/bugteam/reference/audit-and-teammates.md +10 -6
- package/skills/bugteam/reference/obstacles/AGENTS.md +24 -0
- package/skills/bugteam/reference/obstacles/CLAUDE.md +1 -24
- package/skills/bugteam/scripts/AGENTS.md +30 -0
- package/skills/bugteam/scripts/CLAUDE.md +1 -30
- package/skills/bugteam/scripts/bugteam_scripts_constants/AGENTS.md +18 -0
- package/skills/bugteam/scripts/bugteam_scripts_constants/CLAUDE.md +1 -18
- package/skills/bugteam/test_skill_additions.py +9 -0
- package/skills/closeout/reference/handoff-prompt-template.md +1 -1
- package/skills/codex-review/AGENTS.md +46 -0
- package/skills/codex-review/CLAUDE.md +1 -46
- package/skills/codex-review/reference/AGENTS.md +15 -0
- package/skills/codex-review/reference/CLAUDE.md +1 -15
- package/skills/codex-review/scripts/codex_review_scripts_constants/AGENTS.md +18 -0
- package/skills/codex-review/scripts/codex_review_scripts_constants/CLAUDE.md +1 -18
- package/skills/codex-review/test_skill_scaffold.py +3 -3
- package/skills/comments/SKILL.md +65 -0
- package/skills/copilot-review/AGENTS.md +18 -0
- package/skills/copilot-review/CLAUDE.md +1 -18
- package/skills/descriptions/SKILL.md +51 -0
- package/skills/emergencies/SKILL.md +42 -0
- package/skills/everything-search/AGENTS.md +17 -0
- package/skills/everything-search/CLAUDE.md +1 -17
- package/skills/fresh-branch/AGENTS.md +14 -0
- package/skills/fresh-branch/CLAUDE.md +1 -14
- package/skills/grok-spawn/AGENTS.md +28 -0
- package/skills/grok-spawn/CLAUDE.md +1 -28
- package/skills/orchestrator/SKILL.md +2 -4
- package/skills/plan-to-pr/SKILL.md +6 -7
- package/skills/plan-to-pr/reference/final-validation-tasks.md +1 -1
- package/skills/plan-to-pr/reference/process-inventory.md +2 -2
- package/skills/plan-to-pr/reference/review-loop.md +2 -2
- package/skills/plan-to-pr/reference/run-record.schema.json +1 -1
- package/skills/plan-to-pr/reference/task-seeds.md +1 -1
- package/skills/plan-to-pr/reference/task-ticket.md +3 -4
- package/skills/plan-to-pr/scripts/config/constants.py +1 -2
- package/skills/plan-to-pr/scripts/test_validate_protocol.py +1 -1
- package/skills/plan-to-pr/test_skill_contract.py +2 -2
- package/skills/pr-converge/AGENTS.md +32 -0
- package/skills/pr-converge/CLAUDE.md +1 -32
- package/skills/pr-converge/SKILL.md +13 -16
- package/skills/pr-converge/pr_converge_skill_constants/AGENTS.md +26 -0
- package/skills/pr-converge/pr_converge_skill_constants/CLAUDE.md +1 -26
- package/skills/pr-converge/reference/AGENTS.md +28 -0
- package/skills/pr-converge/reference/CLAUDE.md +1 -28
- package/skills/pr-converge/reference/obstacles/AGENTS.md +23 -0
- package/skills/pr-converge/reference/obstacles/CLAUDE.md +1 -23
- package/skills/pr-converge/reference/progress-checklist.md +6 -5
- package/skills/pr-converge/reference/state-schema.md +1 -27
- package/skills/pr-converge/scripts/AGENTS.md +46 -0
- package/skills/pr-converge/scripts/CLAUDE.md +1 -46
- package/skills/pr-converge/scripts/pr_converge_scripts_constants/AGENTS.md +18 -0
- package/skills/pr-converge/scripts/pr_converge_scripts_constants/CLAUDE.md +1 -18
- package/skills/pr-converge/workflows/AGENTS.md +16 -0
- package/skills/pr-converge/workflows/CLAUDE.md +1 -16
- package/skills/pr-loop-cloud-transport/SKILL.md +1 -1
- package/skills/pr-loop-cloud-transport/reference/identity-and-hooks.md +3 -3
- package/skills/pr-loop-lifecycle/SKILL.md +1 -1
- package/skills/pr-loop-lifecycle/reference/teardown-publish-permissions.md +1 -1
- package/skills/prototype/SKILL.md +4 -4
- package/skills/prototype/reference/honest-limitations.md +5 -5
- package/skills/prototype/reference/promotion-tasks.md +2 -2
- package/skills/prototype/workflows/promotion.md +4 -6
- package/skills/rebase/AGENTS.md +32 -0
- package/skills/rebase/CLAUDE.md +1 -32
- package/skills/recall/AGENTS.md +30 -0
- package/skills/recall/CLAUDE.md +1 -30
- package/skills/remember/AGENTS.md +31 -0
- package/skills/remember/CLAUDE.md +1 -31
- package/skills/reviews/SKILL.md +85 -0
- package/skills/session-log/AGENTS.md +32 -0
- package/skills/session-log/CLAUDE.md +1 -32
- package/skills/session-tidy/AGENTS.md +36 -0
- package/skills/session-tidy/CLAUDE.md +1 -36
- package/skills/skill-builder/AGENTS.md +49 -0
- package/skills/skill-builder/CLAUDE.md +1 -49
- package/skills/skill-builder/references/AGENTS.md +25 -0
- package/skills/skill-builder/references/CLAUDE.md +1 -25
- package/skills/skill-builder/references/deterministic-elements.md +1 -1
- package/skills/skill-builder/templates/AGENTS.md +14 -0
- package/skills/skill-builder/templates/CLAUDE.md +1 -14
- package/skills/skill-builder/workflows/AGENTS.md +19 -0
- package/skills/skill-builder/workflows/CLAUDE.md +1 -19
- package/skills/small-cl/SKILL.md +52 -0
- package/skills/task-build/AGENTS.md +29 -0
- package/skills/task-build/CLAUDE.md +1 -29
- package/skills/update/AGENTS.md +38 -0
- package/skills/update/CLAUDE.md +1 -38
- package/system-prompts/AGENTS.md +17 -0
- package/system-prompts/CLAUDE.md +1 -17
- package/system-prompts/software-engineer.xml +3 -3
- package/agents/code-verifier.md +0 -74
- package/docs/PR_DESCRIPTION_GUIDE.md +0 -157
- package/docs/references/code-review-enforcement.md +0 -132
- package/hooks/blocking/code_review_enforcement_config_bootstrap.py +0 -53
- package/hooks/blocking/code_review_gate_deny.py +0 -74
- package/hooks/blocking/code_review_pr_create_gate.py +0 -198
- package/hooks/blocking/code_review_push_gate.py +0 -145
- package/hooks/blocking/code_review_stamp_directory_write_blocker.py +0 -348
- package/hooks/blocking/code_review_stamp_store.py +0 -233
- package/hooks/blocking/code_review_stamp_write_blocker_parts/__init__.py +0 -7
- package/hooks/blocking/code_review_stamp_write_blocker_parts/conftest.py +0 -15
- package/hooks/blocking/code_review_stamp_write_blocker_parts/obfuscated_stamp_path_reference.py +0 -212
- package/hooks/blocking/code_review_stamp_write_blocker_parts/split_directory_change_into_stamp.py +0 -138
- package/hooks/blocking/code_review_stamp_write_blocker_parts/test_obfuscated_stamp_path_reference.py +0 -49
- package/hooks/blocking/code_review_stamp_write_blocker_parts/test_split_directory_change_into_stamp.py +0 -38
- package/hooks/blocking/code_verifier_spawn_preflight_gate.py +0 -483
- package/hooks/blocking/config/code_review_enforcement_constants.py +0 -143
- package/hooks/blocking/config/test_code_review_enforcement_constants.py +0 -166
- package/hooks/blocking/config/verified_commit_constants.py +0 -160
- package/hooks/blocking/config/verified_commit_context_constants.py +0 -21
- package/hooks/blocking/config/verified_commit_gate_output_constants.py +0 -14
- package/hooks/blocking/conftest.py +0 -123
- package/hooks/blocking/convergence_gate_blocker.py +0 -310
- package/hooks/blocking/pr_converge_bugteam_enforcer.py +0 -170
- package/hooks/blocking/pr_description_body_audit.py +0 -148
- package/hooks/blocking/pr_description_command_parser.py +0 -237
- package/hooks/blocking/pr_description_enforcer.py +0 -227
- package/hooks/blocking/pr_description_pr_number.py +0 -155
- package/hooks/blocking/pr_description_proof_of_work.py +0 -385
- package/hooks/blocking/pr_description_readability.py +0 -364
- package/hooks/blocking/reviewer_spawn_gate.py +0 -182
- package/hooks/blocking/test_code_review_enforcement_config_bootstrap.py +0 -62
- package/hooks/blocking/test_code_review_gate_deny.py +0 -54
- package/hooks/blocking/test_code_review_pr_create_gate.py +0 -199
- package/hooks/blocking/test_code_review_push_gate.py +0 -205
- package/hooks/blocking/test_code_review_stamp_directory_write_blocker.py +0 -199
- package/hooks/blocking/test_code_review_stamp_store.py +0 -205
- package/hooks/blocking/test_code_verifier_spawn_preflight_gate.py +0 -710
- package/hooks/blocking/test_code_verifier_tools_contract.py +0 -28
- package/hooks/blocking/test_convergence_gate_blocker.py +0 -428
- package/hooks/blocking/test_pr_converge_bugteam_enforcer.py +0 -311
- package/hooks/blocking/test_pr_converge_bugteam_enforcer_state_tolerance.py +0 -184
- package/hooks/blocking/test_pr_description_enforcer.py +0 -221
- package/hooks/blocking/test_pr_description_enforcer_body_audit.py +0 -247
- package/hooks/blocking/test_pr_description_enforcer_body_rules.py +0 -493
- package/hooks/blocking/test_pr_description_enforcer_command_parser.py +0 -366
- package/hooks/blocking/test_pr_description_enforcer_pr_number.py +0 -159
- package/hooks/blocking/test_pr_description_enforcer_proof_gate.py +0 -175
- package/hooks/blocking/test_pr_description_enforcer_readability.py +0 -443
- package/hooks/blocking/test_pr_description_proof_of_work.py +0 -313
- package/hooks/blocking/test_reviewer_spawn_gate.py +0 -230
- package/hooks/blocking/test_verdict_directory_write_blocker.py +0 -804
- package/hooks/blocking/test_verification_verdict_store.py +0 -974
- package/hooks/blocking/test_verified_commit_config_bootstrap.py +0 -67
- package/hooks/blocking/test_verified_commit_docs_delta.py +0 -176
- package/hooks/blocking/test_verified_commit_gate.py +0 -581
- package/hooks/blocking/test_verified_commit_gate_additional_context.py +0 -134
- package/hooks/blocking/test_verified_commit_message_accuracy_blocker.py +0 -131
- package/hooks/blocking/test_verifier_verdict_minter.py +0 -299
- package/hooks/blocking/tests/test_verified_commit_gate.py +0 -41
- package/hooks/blocking/verdict_directory_write_blocker.py +0 -687
- package/hooks/blocking/verification_verdict_store.py +0 -1039
- package/hooks/blocking/verified_commit_config_bootstrap.py +0 -63
- package/hooks/blocking/verified_commit_gate.py +0 -113
- package/hooks/blocking/verified_commit_gate_parts/CLAUDE.md +0 -28
- package/hooks/blocking/verified_commit_gate_parts/__init__.py +0 -1
- package/hooks/blocking/verified_commit_gate_parts/command_tokenization.py +0 -174
- package/hooks/blocking/verified_commit_gate_parts/deny_payload.py +0 -53
- package/hooks/blocking/verified_commit_gate_parts/deny_reason.py +0 -80
- package/hooks/blocking/verified_commit_gate_parts/directory_resolution.py +0 -170
- package/hooks/blocking/verified_commit_gate_parts/gated_invocations.py +0 -217
- package/hooks/blocking/verified_commit_gate_parts/tests/conftest.py +0 -10
- package/hooks/blocking/verified_commit_gate_parts/tests/test_command_tokenization.py +0 -94
- package/hooks/blocking/verified_commit_gate_parts/tests/test_deny_payload.py +0 -17
- package/hooks/blocking/verified_commit_gate_parts/tests/test_deny_reason.py +0 -38
- package/hooks/blocking/verified_commit_gate_parts/tests/test_directory_resolution.py +0 -71
- package/hooks/blocking/verified_commit_gate_parts/tests/test_gated_invocations.py +0 -96
- package/hooks/blocking/verified_commit_message_accuracy_blocker.py +0 -167
- package/hooks/blocking/verifier_verdict_minter.py +0 -280
- package/hooks/hooks_constants/code_verifier_spawn_preflight_gate_constants.py +0 -64
- package/hooks/hooks_constants/convergence_gate_blocker_constants.py +0 -53
- package/hooks/hooks_constants/pr_converge_bugteam_enforcer_constants.py +0 -55
- package/hooks/hooks_constants/pr_converge_bugteam_enforcer_state.py +0 -67
- package/hooks/hooks_constants/pr_description_enforcer_constants.py +0 -167
- package/hooks/hooks_constants/pr_description_proof_of_work_constants.py +0 -107
- package/hooks/hooks_constants/reviewer_spawn_gate_constants.py +0 -41
- package/hooks/hooks_constants/test_pr_description_enforcer_constants.py +0 -292
- package/hooks/lifecycle/pr_converge_bugteam_skill_tracker.py +0 -198
- package/hooks/lifecycle/test_pr_converge_bugteam_skill_tracker.py +0 -283
- package/rules/proof-of-work-pr-comments.md +0 -22
- package/rules/verified-commit-gate-skip.md +0 -4
- package/scripts/Show-Asset.ps1 +0 -106
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# pr_converge_skill_constants
|
|
2
|
+
|
|
3
|
+
Importable Python constants module for the `pr-converge` skill. Script-specific constants (CLI args, markdown patterns, reflow settings) live in `scripts/pr_converge_scripts_constants/` and import from here.
|
|
4
|
+
|
|
5
|
+
## Key files
|
|
6
|
+
|
|
7
|
+
| File | Purpose |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `__init__.py` | Package marker |
|
|
10
|
+
| `constants.py` | All runtime and API constants: bot logins, review states, GH API path templates, bugbot/bugteam detection patterns, exit codes |
|
|
11
|
+
|
|
12
|
+
## Exported constants (selected)
|
|
13
|
+
|
|
14
|
+
| Constant | Purpose |
|
|
15
|
+
|---|---|
|
|
16
|
+
| `CURSOR_BOT_LOGIN` | Login string for the Cursor bugbot reviewer |
|
|
17
|
+
| `COPILOT_REVIEWER_LOGIN` | Login string for the Copilot reviewer bot |
|
|
18
|
+
| `ALL_COPILOT_CLEAN_REVIEW_STATES` | Tuple of review states that count as clean for Copilot |
|
|
19
|
+
| `BUGBOT_DIRTY_BODY_REGEX` | Regex that matches a bugbot review body reporting findings |
|
|
20
|
+
| `GH_REVIEWS_PATH_TEMPLATE` | `gh api` path template for PR reviews |
|
|
21
|
+
| `GH_INLINE_COMMENTS_PATH_TEMPLATE` | `gh api` path template for PR inline comments |
|
|
22
|
+
|
|
23
|
+
## Conventions
|
|
24
|
+
|
|
25
|
+
- All path templates use `str.format(**kwargs)` with keys `owner`, `repo`, `number`.
|
|
26
|
+
- `packages/claude-dev-env/skills/pr-converge/scripts/pr_converge_scripts_constants/pr_converge_constants.py` re-exports everything here via `from pr_converge_skill_constants.constants import ...` so scripts can import from either location.
|
|
@@ -1,26 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Importable Python constants module for the `pr-converge` skill. Script-specific constants (CLI args, markdown patterns, reflow settings) live in `scripts/pr_converge_scripts_constants/` and import from here.
|
|
4
|
-
|
|
5
|
-
## Key files
|
|
6
|
-
|
|
7
|
-
| File | Purpose |
|
|
8
|
-
|---|---|
|
|
9
|
-
| `__init__.py` | Package marker |
|
|
10
|
-
| `constants.py` | All runtime and API constants: bot logins, review states, GH API path templates, bugbot/bugteam detection patterns, exit codes |
|
|
11
|
-
|
|
12
|
-
## Exported constants (selected)
|
|
13
|
-
|
|
14
|
-
| Constant | Purpose |
|
|
15
|
-
|---|---|
|
|
16
|
-
| `CURSOR_BOT_LOGIN` | Login string for the Cursor bugbot reviewer |
|
|
17
|
-
| `COPILOT_REVIEWER_LOGIN` | Login string for the Copilot reviewer bot |
|
|
18
|
-
| `ALL_COPILOT_CLEAN_REVIEW_STATES` | Tuple of review states that count as clean for Copilot |
|
|
19
|
-
| `BUGBOT_DIRTY_BODY_REGEX` | Regex that matches a bugbot review body reporting findings |
|
|
20
|
-
| `GH_REVIEWS_PATH_TEMPLATE` | `gh api` path template for PR reviews |
|
|
21
|
-
| `GH_INLINE_COMMENTS_PATH_TEMPLATE` | `gh api` path template for PR inline comments |
|
|
22
|
-
|
|
23
|
-
## Conventions
|
|
24
|
-
|
|
25
|
-
- All path templates use `str.format(**kwargs)` with keys `owner`, `repo`, `number`.
|
|
26
|
-
- `packages/claude-dev-env/skills/pr-converge/scripts/pr_converge_scripts_constants/pr_converge_constants.py` re-exports everything here via `from pr_converge_skill_constants.constants import ...` so scripts can import from either location.
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# pr-converge/reference
|
|
2
|
+
|
|
3
|
+
Reference documents for the `pr-converge` skill. These files define the per-tick step sequence, convergence gates, fix protocol, stop conditions, state schema, multi-PR orchestration, and examples.
|
|
4
|
+
|
|
5
|
+
## Key files
|
|
6
|
+
|
|
7
|
+
| File | Purpose |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `progress-checklist.md` | The per-tick eleven-step checklist (Step 0 open → Step 11 report), each step pointing to its spoke file |
|
|
10
|
+
| `per-tick.md` | Step-by-step procedure for one tick (resolve HEAD, run the internal CODE_REVIEW and BUGTEAM phases, then the terminal BUGBOT and COPILOT_WAIT gates, schedule next wakeup) |
|
|
11
|
+
| `convergence-gates.md` | Six gates that must all pass before the PR is marked ready for review |
|
|
12
|
+
| `fix-protocol.md` | pr-converge deltas on the `pr-fix-protocol` skill: multi-PR teammate obligations and the same-tick bugbot re-trigger rule |
|
|
13
|
+
| `ground-rules.md` | Non-negotiable constraints for the convergence loop |
|
|
14
|
+
| `stop-conditions.md` | Conditions that end the loop without convergence (cap reached, stuck, user stop) |
|
|
15
|
+
| `state-schema.md` | Fields in `pr-converge-state.json` and their meanings |
|
|
16
|
+
| `multi-pr-orchestration.md` | How to run the loop across multiple PRs in parallel |
|
|
17
|
+
| `examples.md` | Worked examples of tick sequences |
|
|
18
|
+
|
|
19
|
+
## Subdirectories
|
|
20
|
+
|
|
21
|
+
| Directory | Role |
|
|
22
|
+
|---|---|
|
|
23
|
+
| `obstacles/` | Per-obstacle runbooks for known failure modes in the convergence loop |
|
|
24
|
+
|
|
25
|
+
## Conventions
|
|
26
|
+
|
|
27
|
+
- `per-tick.md` is the primary reference loaded during each tick. The pacing workflow lives in `../workflows/schedule-wakeup-loop.md`.
|
|
28
|
+
- Every gate in `convergence-gates.md` must produce evidence before the next gate runs.
|
|
@@ -1,28 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Reference documents for the `pr-converge` skill. These files define the per-tick step sequence, convergence gates, fix protocol, stop conditions, state schema, multi-PR orchestration, and examples.
|
|
4
|
-
|
|
5
|
-
## Key files
|
|
6
|
-
|
|
7
|
-
| File | Purpose |
|
|
8
|
-
|---|---|
|
|
9
|
-
| `progress-checklist.md` | The per-tick eleven-step checklist (Step 0 open → Step 11 report), each step pointing to its spoke file |
|
|
10
|
-
| `per-tick.md` | Step-by-step procedure for one tick (resolve HEAD, run the internal CODE_REVIEW and BUGTEAM phases, then the terminal BUGBOT and COPILOT_WAIT gates, schedule next wakeup) |
|
|
11
|
-
| `convergence-gates.md` | Six gates that must all pass before the PR is marked ready for review |
|
|
12
|
-
| `fix-protocol.md` | pr-converge deltas on the `pr-fix-protocol` skill: multi-PR teammate obligations and the same-tick bugbot re-trigger rule |
|
|
13
|
-
| `ground-rules.md` | Non-negotiable constraints for the convergence loop |
|
|
14
|
-
| `stop-conditions.md` | Conditions that end the loop without convergence (cap reached, stuck, user stop) |
|
|
15
|
-
| `state-schema.md` | Fields in `pr-converge-state.json` and their meanings |
|
|
16
|
-
| `multi-pr-orchestration.md` | How to run the loop across multiple PRs in parallel |
|
|
17
|
-
| `examples.md` | Worked examples of tick sequences |
|
|
18
|
-
|
|
19
|
-
## Subdirectories
|
|
20
|
-
|
|
21
|
-
| Directory | Role |
|
|
22
|
-
|---|---|
|
|
23
|
-
| `obstacles/` | Per-obstacle runbooks for known failure modes in the convergence loop |
|
|
24
|
-
|
|
25
|
-
## Conventions
|
|
26
|
-
|
|
27
|
-
- `per-tick.md` is the primary reference loaded during each tick. The pacing workflow lives in `../workflows/schedule-wakeup-loop.md`.
|
|
28
|
-
- Every gate in `convergence-gates.md` must produce evidence before the next gate runs.
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# pr-converge/reference/obstacles
|
|
2
|
+
|
|
3
|
+
Per-obstacle runbooks for known failure modes in the `pr-converge` convergence loop. Each file covers one specific obstacle: what causes it, how to detect it, and how to recover.
|
|
4
|
+
|
|
5
|
+
## Files
|
|
6
|
+
|
|
7
|
+
| File | Obstacle |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `fix-post-replies.md` | Posting inline review replies fails or posts to the wrong thread |
|
|
10
|
+
| `fix-publish-summary.md` | Publishing the bugteam summary comment fails |
|
|
11
|
+
| `fix-push.md` | `git push` fails during a fix commit |
|
|
12
|
+
| `fix-read-filelines.md` | Reading file line ranges for a fix fails |
|
|
13
|
+
| `fix-reset-state.md` | State JSON becomes corrupt or inconsistent between ticks |
|
|
14
|
+
| `fix-resolve-threads.md` | Resolving inline comment threads via GraphQL fails |
|
|
15
|
+
| `fix-spawn-clean-coder.md` | Spawning the `clean-coder` subagent fails or produces no output |
|
|
16
|
+
| `fix-stage-commit.md` | Staging or committing a fix fails |
|
|
17
|
+
| `fix-trigger-bugbot.md` | Triggering Cursor Bugbot via an issue comment fails |
|
|
18
|
+
| `fix-write-test.md` | Writing a failing test before a fix fails |
|
|
19
|
+
|
|
20
|
+
## Conventions
|
|
21
|
+
|
|
22
|
+
- Each runbook is loaded on demand when the convergence loop hits that specific obstacle.
|
|
23
|
+
- Runbooks do not overlap with `per-tick.md`; they cover edge cases and recovery paths that fall outside the normal tick flow.
|
|
@@ -1,23 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Per-obstacle runbooks for known failure modes in the `pr-converge` convergence loop. Each file covers one specific obstacle: what causes it, how to detect it, and how to recover.
|
|
4
|
-
|
|
5
|
-
## Files
|
|
6
|
-
|
|
7
|
-
| File | Obstacle |
|
|
8
|
-
|---|---|
|
|
9
|
-
| `fix-post-replies.md` | Posting inline review replies fails or posts to the wrong thread |
|
|
10
|
-
| `fix-publish-summary.md` | Publishing the bugteam summary comment fails |
|
|
11
|
-
| `fix-push.md` | `git push` fails during a fix commit |
|
|
12
|
-
| `fix-read-filelines.md` | Reading file line ranges for a fix fails |
|
|
13
|
-
| `fix-reset-state.md` | State JSON becomes corrupt or inconsistent between ticks |
|
|
14
|
-
| `fix-resolve-threads.md` | Resolving inline comment threads via GraphQL fails |
|
|
15
|
-
| `fix-spawn-clean-coder.md` | Spawning the `clean-coder` subagent fails or produces no output |
|
|
16
|
-
| `fix-stage-commit.md` | Staging or committing a fix fails |
|
|
17
|
-
| `fix-trigger-bugbot.md` | Triggering Cursor Bugbot via an issue comment fails |
|
|
18
|
-
| `fix-write-test.md` | Writing a failing test before a fix fails |
|
|
19
|
-
|
|
20
|
-
## Conventions
|
|
21
|
-
|
|
22
|
-
- Each runbook is loaded on demand when the convergence loop hits that specific obstacle.
|
|
23
|
-
- Runbooks do not overlap with `per-tick.md`; they cover edge cases and recovery paths that fall outside the normal tick flow.
|
|
1
|
+
@AGENTS.md
|
|
@@ -70,7 +70,7 @@ round as converged. This rule holds every tick, every loop, every PR.
|
|
|
70
70
|
- [ ] **clean on `current_head`** → zero unresolved threads (else fix + resolve first)
|
|
71
71
|
→ `bugbot_clean_at = current_head` → Step 7
|
|
72
72
|
- [ ] **no review / commit_id mismatch** → `reviewer-gates` Bugbot flow (Gate 3):
|
|
73
|
-
silent pass →
|
|
73
|
+
silent pass → Step 7; queued/triggered → 360s wakeup → Step 4;
|
|
74
74
|
down → `bugbot_down = true` → Step 7
|
|
75
75
|
|
|
76
76
|
- [ ] **Step 5: CODE-REVIEW — static sweep, review, fix, advance**
|
|
@@ -110,9 +110,10 @@ round as converged. This rule holds every tick, every loop, every PR.
|
|
|
110
110
|
See: [`per-tick.md` § Step 2 BUGTEAM](per-tick.md);
|
|
111
111
|
[`../../bugteam/SKILL.md`](../../bugteam/SKILL.md).
|
|
112
112
|
Pre-condition: `code_review_clean_at == current_head`.
|
|
113
|
-
Mandatory: `Skill({skill: "bugteam", args: "<PR URL>"})` this tick
|
|
114
|
-
|
|
115
|
-
`origin/main...HEAD`
|
|
113
|
+
Mandatory: `Skill({skill: "bugteam", args: "<PR URL>"})` this tick.
|
|
114
|
+
Use the [review guide](../../reviews/SKILL.md#review-workflow) for its
|
|
115
|
+
judgment. `qbug` is not a substitute. Scope: FULL `origin/main...HEAD`
|
|
116
|
+
diff. Re-resolve HEAD after bugteam.
|
|
116
117
|
|
|
117
118
|
- [ ] **bugteam pushed** → verify threads replied + resolved → reset markers
|
|
118
119
|
→ `phase = CODE_REVIEW` → 360s wakeup → Step 5
|
|
@@ -129,7 +130,7 @@ round as converged. This rule holds every tick, every loop, every PR.
|
|
|
129
130
|
before these gates run. Count unresolved threads before each gate.
|
|
130
131
|
Every gate records evidence; gate (f) cites evidence from (a)–(e).
|
|
131
132
|
|
|
132
|
-
- [ ] **(a) Copilot findings** — fetch Copilot on `current_head`; dirty → fix + return to Step 5; clean →
|
|
133
|
+
- [ ] **(a) Copilot findings** — fetch Copilot on `current_head`; dirty → fix + return to Step 5; clean → record `copilot_clean_at`; absent → continue; when `copilot_down`, skip
|
|
133
134
|
- [ ] **(b) Claude reviewer** — fetch Claude on `current_head`; dirty → fix + return to Step 5; clean or absent → continue
|
|
134
135
|
- [ ] **(c) Mergeability** — `mergeable_state == "clean"` and `mergeable == true`; dirty → rebase + return to Step 1; blocked/behind/unknown/unstable → hard blocker
|
|
135
136
|
- [ ] **(d) Post-convergence Copilot request** — request Copilot when not pending and not `copilot_down`; enter `COPILOT_WAIT` (Step 7a); when `copilot_down`, skip to (e)
|
|
@@ -13,10 +13,7 @@ Single-PR `/pr-converge` writes loop state to
|
|
|
13
13
|
`$CLAUDE_JOB_DIR/pr-converge-state.json`; that file is the source of truth
|
|
14
14
|
for `phase`, heads, counters, status. Multi-PR mode additionally maintains
|
|
15
15
|
`<TMPDIR>/pr-converge-<session_id>/state.json` for orchestrator coordination
|
|
16
|
-
across PRs. Both files share
|
|
17
|
-
`bugteam_skill_invoked_at_head` and `bugteam_skill_invoked_at_tick` fields
|
|
18
|
-
live ONLY in the single-PR `$CLAUDE_JOB_DIR/pr-converge-state.json` file
|
|
19
|
-
(see those field entries below for details).
|
|
16
|
+
across PRs. Both files share the fields below.
|
|
20
17
|
|
|
21
18
|
## Fields
|
|
22
19
|
|
|
@@ -94,29 +91,6 @@ live ONLY in the single-PR `$CLAUDE_JOB_DIR/pr-converge-state.json` file
|
|
|
94
91
|
(c) reads this field to decide between "schedule next wakeup" and
|
|
95
92
|
"escalate to bugbot-down".
|
|
96
93
|
- `tick_count`: integer, init `0`. Increment every tick.
|
|
97
|
-
- `bugteam_skill_invoked_at_head`: HEAD SHA (string) at which the formal
|
|
98
|
-
`Skill({skill: "bugteam"})` was last invoked, or `null`. Stamped by the
|
|
99
|
-
`pr_converge_bugteam_skill_tracker` hook on every formal bugteam Skill
|
|
100
|
-
invocation. **On-disk location:** the tracker writes this field to
|
|
101
|
-
`$CLAUDE_JOB_DIR/pr-converge-state.json` (single-PR mode); it is NOT
|
|
102
|
-
mirrored into the multi-PR `<TMPDIR>/pr-converge-<session_id>/state.json`
|
|
103
|
-
file. Operators inspecting these stamps must read the single-PR
|
|
104
|
-
`pr-converge-state.json` under `$CLAUDE_JOB_DIR`. Reset by overwrite on
|
|
105
|
-
the next bugteam Skill invocation; staleness is detected by the head/tick
|
|
106
|
-
equality check rather than by explicit reset. The
|
|
107
|
-
`pr_converge_bugteam_enforcer` hook reads this field together with
|
|
108
|
-
`current_head` to confirm the formal Skill registered at the current HEAD
|
|
109
|
-
before allowing follow-on clean-coder audit-shaped Agent spawns. `qbug`
|
|
110
|
-
invocations deliberately do NOT update this field.
|
|
111
|
-
- `bugteam_skill_invoked_at_tick`: integer tick number at which the formal
|
|
112
|
-
bugteam Skill was last invoked, or `null`. Companion to
|
|
113
|
-
`bugteam_skill_invoked_at_head` and persisted to the same
|
|
114
|
-
`$CLAUDE_JOB_DIR/pr-converge-state.json` file (single-PR mode only).
|
|
115
|
-
Reset by overwrite on the next bugteam Skill invocation; staleness is
|
|
116
|
-
detected by the head/tick equality check rather than by explicit reset.
|
|
117
|
-
The enforcer requires this value to equal the current `tick_count` so a
|
|
118
|
-
Skill invocation from a prior tick cannot wave through clean-coder
|
|
119
|
-
audit-shaped Agent spawns on a later tick at the same HEAD.
|
|
120
94
|
- `agents_session_id`: string or `null`, init `null`. The session id that
|
|
121
95
|
spawned the persistent per-step agents recorded in `persistent_agents`.
|
|
122
96
|
On tick entry, compare it to the current session id: when they differ,
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# pr-converge/scripts
|
|
2
|
+
|
|
3
|
+
Python helper scripts for the `pr-converge` skill, plus their tests and a PowerShell/AutoHotkey toolset for advancing Cursor agents.
|
|
4
|
+
|
|
5
|
+
## Key files
|
|
6
|
+
|
|
7
|
+
| File | Purpose |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `check_bugbot_ci.py` | Checks bugbot CI check-run status on a given SHA |
|
|
10
|
+
| `check_convergence.py` | Evaluates whether all convergence gates pass on the current HEAD |
|
|
11
|
+
| `check_convergence_availability.py` | Resolves reviewer waivers from flag, disk-authoritative settings (env fallback), and the availability/quota probe, with waived / enforced / probe_error_reason states |
|
|
12
|
+
| `check_convergence_gates.py` | GitHub REST leaf checks (review and Bugbot) the convergence gates call |
|
|
13
|
+
| `check_convergence_thread_gates.py` | GitHub GraphQL and REST leaf checks (review threads and pending reviewers) the convergence gates call |
|
|
14
|
+
| `check_pending_reviews.py` | Fetches pending review requests and reviewer states |
|
|
15
|
+
| `fetch_copilot_reviews.py` | Fetches Copilot reviewer reviews filtered to the current HEAD |
|
|
16
|
+
| `post_fix_reply.py` | Posts an inline reply to a review comment thread |
|
|
17
|
+
| `reflow_skill_md.py` | Reformats `SKILL.md` to enforce a line width limit |
|
|
18
|
+
| `README.md` | MCP tool reference for PR operations used by the scripts |
|
|
19
|
+
| `_pr_converge_path_setup.py` | Adds the scripts directory to `sys.path` for direct script imports |
|
|
20
|
+
| `conftest.py` | Puts the scripts directory on `sys.path` so pytest collects the suite |
|
|
21
|
+
| `test_check_bugbot_ci.py` | Tests for `check_bugbot_ci.py` |
|
|
22
|
+
| `test_check_convergence.py` | Tests for `check_convergence.py` |
|
|
23
|
+
| `test_check_convergence_availability.py` | Tests for `check_convergence_availability.py` |
|
|
24
|
+
| `test_check_convergence_contract.py` | Contract pins for `check_convergence.py` gate wiring |
|
|
25
|
+
| `test_check_convergence_gates.py` | Tests for `check_convergence_gates.py` |
|
|
26
|
+
| `test_check_convergence_thread_gates.py` | Tests for `check_convergence_thread_gates.py` |
|
|
27
|
+
| `test__pr_converge_path_setup.py` | Tests for `_pr_converge_path_setup.py` |
|
|
28
|
+
| `test_cursor_agents_continue.py` | Tests for the cursor-agents-continue toolset |
|
|
29
|
+
| `test_reflow_skill_md.py` | Tests for `reflow_skill_md.py` |
|
|
30
|
+
| `caller-window-pid.ps1` | Gets the PID of the calling terminal window |
|
|
31
|
+
| `cursor-agents-continue.ahk` | AutoHotkey script to advance Cursor agent prompts |
|
|
32
|
+
| `cursor-agents-continue.cmd` | CMD wrapper for the AHK script |
|
|
33
|
+
| `cursor-agents-continue-stop-others.ps1` | Stops other Cursor agents before advancing one |
|
|
34
|
+
| `cursor-agents-continue-caller.cmd` | Caller-side CMD wrapper |
|
|
35
|
+
|
|
36
|
+
## Subdirectories
|
|
37
|
+
|
|
38
|
+
| Directory | Role |
|
|
39
|
+
|---|---|
|
|
40
|
+
| `pr_converge_scripts_constants/` | Script-specific constants (re-exports skill constants plus adds reflow/CLI constants) |
|
|
41
|
+
|
|
42
|
+
## Conventions
|
|
43
|
+
|
|
44
|
+
- Scripts import constants from `pr_converge_scripts_constants.pr_converge_constants`, which re-exports everything from `pr_converge_skill_constants.constants`.
|
|
45
|
+
- Run scripts as `python ~/.claude/skills/pr-converge/scripts/<script>.py --owner <O> --repo <R> --pr-number <N>`.
|
|
46
|
+
- The `reflow_skill_md.py` script targets `SKILL.md` in the parent skill directory (resolved via `TARGET_SKILL_PATH` in `pr_converge_scripts_constants/reflow_skill_md_constants.py`).
|
|
@@ -1,46 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Python helper scripts for the `pr-converge` skill, plus their tests and a PowerShell/AutoHotkey toolset for advancing Cursor agents.
|
|
4
|
-
|
|
5
|
-
## Key files
|
|
6
|
-
|
|
7
|
-
| File | Purpose |
|
|
8
|
-
|---|---|
|
|
9
|
-
| `check_bugbot_ci.py` | Checks bugbot CI check-run status on a given SHA |
|
|
10
|
-
| `check_convergence.py` | Evaluates whether all convergence gates pass on the current HEAD |
|
|
11
|
-
| `check_convergence_availability.py` | Resolves reviewer waivers from flag, disk-authoritative settings (env fallback), and the availability/quota probe, with waived / enforced / probe_error_reason states |
|
|
12
|
-
| `check_convergence_gates.py` | GitHub REST leaf checks (review and Bugbot) the convergence gates call |
|
|
13
|
-
| `check_convergence_thread_gates.py` | GitHub GraphQL and REST leaf checks (review threads and pending reviewers) the convergence gates call |
|
|
14
|
-
| `check_pending_reviews.py` | Fetches pending review requests and reviewer states |
|
|
15
|
-
| `fetch_copilot_reviews.py` | Fetches Copilot reviewer reviews filtered to the current HEAD |
|
|
16
|
-
| `post_fix_reply.py` | Posts an inline reply to a review comment thread |
|
|
17
|
-
| `reflow_skill_md.py` | Reformats `SKILL.md` to enforce a line width limit |
|
|
18
|
-
| `README.md` | MCP tool reference for PR operations used by the scripts |
|
|
19
|
-
| `_pr_converge_path_setup.py` | Adds the scripts directory to `sys.path` for direct script imports |
|
|
20
|
-
| `conftest.py` | Puts the scripts directory on `sys.path` so pytest collects the suite |
|
|
21
|
-
| `test_check_bugbot_ci.py` | Tests for `check_bugbot_ci.py` |
|
|
22
|
-
| `test_check_convergence.py` | Tests for `check_convergence.py` |
|
|
23
|
-
| `test_check_convergence_availability.py` | Tests for `check_convergence_availability.py` |
|
|
24
|
-
| `test_check_convergence_contract.py` | Contract pins for `check_convergence.py` gate wiring |
|
|
25
|
-
| `test_check_convergence_gates.py` | Tests for `check_convergence_gates.py` |
|
|
26
|
-
| `test_check_convergence_thread_gates.py` | Tests for `check_convergence_thread_gates.py` |
|
|
27
|
-
| `test__pr_converge_path_setup.py` | Tests for `_pr_converge_path_setup.py` |
|
|
28
|
-
| `test_cursor_agents_continue.py` | Tests for the cursor-agents-continue toolset |
|
|
29
|
-
| `test_reflow_skill_md.py` | Tests for `reflow_skill_md.py` |
|
|
30
|
-
| `caller-window-pid.ps1` | Gets the PID of the calling terminal window |
|
|
31
|
-
| `cursor-agents-continue.ahk` | AutoHotkey script to advance Cursor agent prompts |
|
|
32
|
-
| `cursor-agents-continue.cmd` | CMD wrapper for the AHK script |
|
|
33
|
-
| `cursor-agents-continue-stop-others.ps1` | Stops other Cursor agents before advancing one |
|
|
34
|
-
| `cursor-agents-continue-caller.cmd` | Caller-side CMD wrapper |
|
|
35
|
-
|
|
36
|
-
## Subdirectories
|
|
37
|
-
|
|
38
|
-
| Directory | Role |
|
|
39
|
-
|---|---|
|
|
40
|
-
| `pr_converge_scripts_constants/` | Script-specific constants (re-exports skill constants plus adds reflow/CLI constants) |
|
|
41
|
-
|
|
42
|
-
## Conventions
|
|
43
|
-
|
|
44
|
-
- Scripts import constants from `pr_converge_scripts_constants.pr_converge_constants`, which re-exports everything from `pr_converge_skill_constants.constants`.
|
|
45
|
-
- Run scripts as `python ~/.claude/skills/pr-converge/scripts/<script>.py --owner <O> --repo <R> --pr-number <N>`.
|
|
46
|
-
- The `reflow_skill_md.py` script targets `SKILL.md` in the parent skill directory (resolved via `TARGET_SKILL_PATH` in `pr_converge_scripts_constants/reflow_skill_md_constants.py`).
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# pr_converge_scripts_constants
|
|
2
|
+
|
|
3
|
+
Constants module for the `pr-converge` skill's Python scripts. Re-exports all runtime/API constants from the skill-level module and adds script-specific constants for CLI arguments, markdown patterns, and reflow settings.
|
|
4
|
+
|
|
5
|
+
## Key files
|
|
6
|
+
|
|
7
|
+
| File | Purpose |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `__init__.py` | Package marker |
|
|
10
|
+
| `pr_converge_constants.py` | Re-exports all constants from `pr_converge_skill_constants.constants` plus adds script-specific values |
|
|
11
|
+
| `reflow_skill_md_constants.py` | Constants for `reflow_skill_md.py`: line width limit, list item patterns, `TARGET_SKILL_PATH` |
|
|
12
|
+
| `convergence_gate_constants.py` | Constants for `check_convergence_gates.py`: short-SHA length, join separators, and the review-threads GraphQL query |
|
|
13
|
+
|
|
14
|
+
## Conventions
|
|
15
|
+
|
|
16
|
+
- `pr_converge_constants.py` uses `from pr_converge_skill_constants.constants import ...` (with `# noqa: F401`) to re-export everything so script files can import from one location.
|
|
17
|
+
- `reflow_skill_md_constants.py` resolves `TARGET_SKILL_PATH` from its own `__file__` path, pointing to `SKILL.md` three directories up.
|
|
18
|
+
- Script-specific regex patterns (ordered list items, bullet list items, unfinished markdown link targets, markdown reference definitions) live in `reflow_skill_md_constants.py`.
|
|
@@ -1,18 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Constants module for the `pr-converge` skill's Python scripts. Re-exports all runtime/API constants from the skill-level module and adds script-specific constants for CLI arguments, markdown patterns, and reflow settings.
|
|
4
|
-
|
|
5
|
-
## Key files
|
|
6
|
-
|
|
7
|
-
| File | Purpose |
|
|
8
|
-
|---|---|
|
|
9
|
-
| `__init__.py` | Package marker |
|
|
10
|
-
| `pr_converge_constants.py` | Re-exports all constants from `pr_converge_skill_constants.constants` plus adds script-specific values |
|
|
11
|
-
| `reflow_skill_md_constants.py` | Constants for `reflow_skill_md.py`: line width limit, list item patterns, `TARGET_SKILL_PATH` |
|
|
12
|
-
| `convergence_gate_constants.py` | Constants for `check_convergence_gates.py`: short-SHA length, join separators, and the review-threads GraphQL query |
|
|
13
|
-
|
|
14
|
-
## Conventions
|
|
15
|
-
|
|
16
|
-
- `pr_converge_constants.py` uses `from pr_converge_skill_constants.constants import ...` (with `# noqa: F401`) to re-export everything so script files can import from one location.
|
|
17
|
-
- `reflow_skill_md_constants.py` resolves `TARGET_SKILL_PATH` from its own `__file__` path, pointing to `SKILL.md` three directories up.
|
|
18
|
-
- Script-specific regex patterns (ordered list items, bullet list items, unfinished markdown link targets, markdown reference definitions) live in `reflow_skill_md_constants.py`.
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# pr-converge/workflows
|
|
2
|
+
|
|
3
|
+
Pacing workflow specification for the `pr-converge` loop.
|
|
4
|
+
|
|
5
|
+
## Key files
|
|
6
|
+
|
|
7
|
+
| File | Purpose |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `schedule-wakeup-loop.md` | Specifies `ScheduleWakeup` call parameters, delays, and stop/convergence conditions for each tick |
|
|
10
|
+
|
|
11
|
+
## Conventions
|
|
12
|
+
|
|
13
|
+
- `per-tick.md` (in `../reference/`) references this file for Step 4 (schedule next wakeup). Read it before running Step 4.
|
|
14
|
+
- Default delay: `delaySeconds: 360`. Exception: BUGBOT inline-lag branch uses `delaySeconds: 90`.
|
|
15
|
+
- On convergence or a hard stop condition, omit the `ScheduleWakeup` call entirely.
|
|
16
|
+
- The `reason` field in each `ScheduleWakeup` call names what is being awaited, including the current `phase` and `bugbot_clean_at` SHA when set.
|
|
@@ -1,16 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Pacing workflow specification for the `pr-converge` loop.
|
|
4
|
-
|
|
5
|
-
## Key files
|
|
6
|
-
|
|
7
|
-
| File | Purpose |
|
|
8
|
-
|---|---|
|
|
9
|
-
| `schedule-wakeup-loop.md` | Specifies `ScheduleWakeup` call parameters, delays, and stop/convergence conditions for each tick |
|
|
10
|
-
|
|
11
|
-
## Conventions
|
|
12
|
-
|
|
13
|
-
- `per-tick.md` (in `../reference/`) references this file for Step 4 (schedule next wakeup). Read it before running Step 4.
|
|
14
|
-
- Default delay: `delaySeconds: 360`. Exception: BUGBOT inline-lag branch uses `delaySeconds: 90`.
|
|
15
|
-
- On convergence or a hard stop condition, omit the `ScheduleWakeup` call entirely.
|
|
16
|
-
- The `reason` field in each `ScheduleWakeup` call names what is being awaited, including the current `phase` and `bugbot_clean_at` SHA when set.
|
|
1
|
+
@AGENTS.md
|
|
@@ -89,7 +89,7 @@ Skip the `gh api copilot_internal/user` quota read; treat Copilot quota as unkno
|
|
|
89
89
|
The `gh`-text hooks read risk from literal `gh ...` command text, and an MCP post carries none, so those checks go quiet in cloud. Before each MCP post, check by hand:
|
|
90
90
|
|
|
91
91
|
- No volatile scratch path in a post body (job dirs, temp roots, worktrees).
|
|
92
|
-
-
|
|
92
|
+
- Review comments follow the [comment guide](../comments/SKILL.md#writing-useful-review-comments).
|
|
93
93
|
- A PR title follows Conventional Commits.
|
|
94
94
|
- Markdown bodies go through the structured `body` parameter so backticks show as formatting.
|
|
95
95
|
|
|
@@ -26,14 +26,14 @@ Author-keyed logic accounts for the split: a self-PR check keys on the login tha
|
|
|
26
26
|
|
|
27
27
|
## Hooks that still gate a cloud run
|
|
28
28
|
|
|
29
|
-
The commit and push gates read git commands, which a cloud run still issues through Bash, so they fire normally and the run follows them: `
|
|
29
|
+
The commit and push gates read git commands, which a cloud run still issues through Bash, so they fire normally and the run follows them: `session_edit_stage_gate`, `block_main_commit`, `precommit_code_rules_gate`, `test_preflight_check`, and the pre-push base-ref check that needs `origin/HEAD` set (SKILL.md Step 2).
|
|
30
30
|
|
|
31
31
|
## Hooks that go quiet on the MCP path
|
|
32
32
|
|
|
33
|
-
The `gh`-text hooks read risk from literal `gh ...` command text: `
|
|
33
|
+
The `gh`-text hooks read risk from literal `gh ...` command text: `gh_body_arg_blocker`, `conventional_pr_title_gate`, `gh_pr_author_enforcer`, and the `gh` branch of `volatile_path_in_post_blocker`. An MCP post carries no `gh` text, so these checks see nothing to gate while the settings matchers name only the local tool prefix. The run covers the gap by hand before each MCP post — the Step 6 self-check in SKILL.md:
|
|
34
34
|
|
|
35
35
|
- No volatile scratch path in a post body (job dirs, temp roots, worktrees).
|
|
36
|
-
-
|
|
36
|
+
- Review comments follow the [review guide](../../reviews/SKILL.md#review-workflow).
|
|
37
37
|
- A PR title follows Conventional Commits.
|
|
38
38
|
- Markdown bodies go through the structured `body` parameter so backticks show as formatting.
|
|
39
39
|
|
|
@@ -44,7 +44,7 @@ Run these in order from the lead session on EVERY exit — converged, cap reache
|
|
|
44
44
|
```
|
|
45
45
|
Tolerates already-removed worktrees and missing directories; removal is Windows-safe per `~/.claude/rules/windows-filesystem-safe.md`.
|
|
46
46
|
3. **Clean the working tree.** Return to the session worktree, remove run-scoped scratch files, and leave `git status` clean of run artifacts.
|
|
47
|
-
4. **
|
|
47
|
+
4. **Update the PR description.** Follow [`reference/teardown-publish-permissions.md` § Publish the final PR description](reference/teardown-publish-permissions.md): capture the cumulative diff and original body, compose it against the [description guide](../descriptions/SKILL.md#required-content), publish via `update_pull_request`, then remove the scratch files.
|
|
48
48
|
5. **Revoke project permissions (always):**
|
|
49
49
|
`python "$HOME/.claude/_shared/pr-loop/scripts/revoke_project_claude_permissions.py"`
|
|
50
50
|
Non-negotiable, including on error exits: leaving the grant in place lets future sessions inherit elevated `.claude/**` access without an explicit opt-in. Run revoke even when earlier close steps partially failed; log cleanup errors separately.
|
|
@@ -35,7 +35,7 @@ When the run exits (any reason), run these steps in order from **this** session
|
|
|
35
35
|
|
|
36
36
|
After teardown and before permission revoke, the lead rewrites the PR body to the PR's **final cumulative state** — what the change delivers, not the loop's process. This is the **only** PR-write the lead performs (audit and fix comments stay with the agents that produced them).
|
|
37
37
|
|
|
38
|
-
The lead composes the body
|
|
38
|
+
The lead composes the body against the [description guide](../../descriptions/SKILL.md#required-content) and publishes it through the GitHub client.
|
|
39
39
|
|
|
40
40
|
**Steps:**
|
|
41
41
|
|
|
@@ -10,8 +10,8 @@ description: >-
|
|
|
10
10
|
|
|
11
11
|
Give a build the freedom to move fast, then make it earn the right to ship. Two phases, one hard wall between them:
|
|
12
12
|
|
|
13
|
-
- **Sandbox** — an isolated worktree where an agent runs under `claude --bare`, so
|
|
14
|
-
- **Promotion** — back in the normal, fully-hooked session, the successful POC
|
|
13
|
+
- **Sandbox** — an isolated worktree where an agent runs under `claude --bare`, so the normal TDD, code-rules, plain-language, and stage hooks do not run. The agent builds a proof-of-concept with zero friction.
|
|
14
|
+
- **Promotion** — back in the normal, fully-hooked session, the successful POC receives clean-room review and verification under the [review guide](../reviews/SKILL.md#review-workflow) before it becomes a commit and a pull request.
|
|
15
15
|
|
|
16
16
|
Two safety gates stay live even in the sandbox: personal-data blocking and destructive-command blocking. A worktree shares the real repo's `.git` store and `rm` reaches the whole disk, so these are containment, not the "delays" the sandbox is meant to shed.
|
|
17
17
|
|
|
@@ -45,7 +45,7 @@ Follow `workflows/sandbox.md`. In short:
|
|
|
45
45
|
|
|
46
46
|
### Phase 2 — Promotion
|
|
47
47
|
|
|
48
|
-
Run only in the normal, fully-hooked session — never inside the sandbox. Follow `workflows/promotion.md`, which drives the clean-room task seeds in `reference/promotion-tasks.md`: fresh branch off live `origin/main`, POC content as an uncommitted diff, cleanup and privacy sweep,
|
|
48
|
+
Run only in the normal, fully-hooked session — never inside the sandbox. Follow `workflows/promotion.md`, which drives the clean-room task seeds in `reference/promotion-tasks.md`: fresh branch off live `origin/main`, POC content as an uncommitted diff, cleanup and privacy sweep, review and verification under the [review guide](../reviews/SKILL.md#review-workflow), then `/commit` and a draft PR handed to a PR-loop skill. State the two honest limitations from `reference/honest-limitations.md`.
|
|
49
49
|
|
|
50
50
|
## Task seeding
|
|
51
51
|
|
|
@@ -57,7 +57,7 @@ At the start of Phase 2, register every item in `reference/promotion-tasks.md` a
|
|
|
57
57
|
|---|---|---|---|
|
|
58
58
|
| `fresh-branch` | Sandbox step 1; Promotion step 2 | isolated worktree JSON (`worktree_path`, `base_commit`, `repo_root`) | Refuse — see refusal cases |
|
|
59
59
|
| `privacy-hygiene` | Promotion step 5 | personal-data and secret sweep of the diff | Warn; do a manual review before continuing |
|
|
60
|
-
|
|
|
60
|
+
| [Review guide](../reviews/SKILL.md#review-workflow) | Promotion step 6 | review and verification of the real diff | Stop and report the incomplete promotion |
|
|
61
61
|
| `/commit` (command) | Promotion step 7 | conventional commit + push | Commit and push by hand per `git-workflow` |
|
|
62
62
|
| `autoconverge` (default; `pr-converge` or `bugteam` as alternatives) | Promotion step 9 | the PR converged to ready | Stop after the draft PR; tell the user to converge manually |
|
|
63
63
|
|
|
@@ -6,11 +6,11 @@ State both of these to the user, in these terms, whenever a proof-of-concept is
|
|
|
6
6
|
|
|
7
7
|
`code_rules_enforcer` is a Write/Edit gate: it checks content as it is written. Prototype code is built under `--bare`, so that gate never fired, and content brought into promotion as a git diff (apply, checkout, cherry-pick) does not pass through it either.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Promotion records the controls applied to the real diff:
|
|
10
10
|
|
|
11
|
-
-
|
|
11
|
+
- review and verification under the [review guide](../../reviews/SKILL.md#review-workflow);
|
|
12
12
|
- the `privacy-hygiene` sweep for personal data and secrets;
|
|
13
|
-
- the pull-request review
|
|
13
|
+
- the pull-request review criteria and any PR-loop reviewers.
|
|
14
14
|
|
|
15
15
|
Say plainly: the write-time rule engine did not see this code; the verifier and review are what cover it.
|
|
16
16
|
|
|
@@ -18,6 +18,6 @@ Say plainly: the write-time rule engine did not see this code; the verifier and
|
|
|
18
18
|
|
|
19
19
|
The sandbox agent wrote code first and tests, if any, after. Red-green-refactor ordering did not happen. So the honest claim on promoted prototype code is exactly this, and nothing more:
|
|
20
20
|
|
|
21
|
-
>
|
|
21
|
+
> Review and verification completed, privacy swept — TDD ordering waived.
|
|
22
22
|
|
|
23
|
-
Do not claim red-green compliance on these lines. A prototype is a reference build, not a test-first build.
|
|
23
|
+
Do not claim red-green compliance on these lines. A prototype is a reference build, not a test-first build. Promotion reviews and verifies the code against the current standards.
|
|
@@ -14,9 +14,9 @@ Promotion runs in the **normal, fully-hooked session** — never inside the `--b
|
|
|
14
14
|
|
|
15
15
|
5. **Privacy sweep.** Run the `privacy-hygiene` skill over the full applied working tree, not only the diff — a POC that pulled live data can leave a secret in a file the diff view hides. Evidence: its clean report, or the leak it found and how it was removed. If the skill is missing, do a manual PII and secret review and say so.
|
|
16
16
|
|
|
17
|
-
6. **
|
|
17
|
+
6. **Review and verify the real diff.** Apply the [review guide](../../reviews/SKILL.md#review-workflow). Evidence: the checks run and each required finding repaired. Do not rely on sandbox testing as promotion evidence.
|
|
18
18
|
|
|
19
|
-
7. **Commit and open a draft PR.**
|
|
19
|
+
7. **Commit and open a draft PR.** After the review and verification record is complete, run `/commit`, then open a draft PR per the `git-workflow` rule. Evidence: the commit hash and the PR URL.
|
|
20
20
|
|
|
21
21
|
8. **State the honest limitations.** Post the two statements from `reference/honest-limitations.md` — write-time rules never ran; TDD ordering waived — in the PR body or to the user. Evidence: the text was included.
|
|
22
22
|
|
|
@@ -4,7 +4,7 @@ Turn a successful proof-of-concept into a real, verified change. Run every step
|
|
|
4
4
|
|
|
5
5
|
## Seed the task list first
|
|
6
6
|
|
|
7
|
-
Register every item in `reference/promotion-tasks.md` as a session task (`TaskCreate`, or `TodoWrite` if that is the host tool). Work only from the task list. Mark each complete with evidence — a command result, a path, a
|
|
7
|
+
Register every item in `reference/promotion-tasks.md` as a session task (`TaskCreate`, or `TodoWrite` if that is the host tool). Work only from the task list. Mark each complete with evidence — a command result, a path, a review record, or a skill's return.
|
|
8
8
|
|
|
9
9
|
## The clean-room protocol
|
|
10
10
|
|
|
@@ -15,13 +15,11 @@ The task seeds carry the full ordered detail. The shape:
|
|
|
15
15
|
3. **Bring content as an uncommitted diff.** Copy the POC's file changes into the new branch's working tree. Do not cherry-pick or merge the sandbox commits; the sandbox history stays behind.
|
|
16
16
|
4. **Cleanup.** Remove scratch files, debug dumps, and temp helpers the POC created (`cleanup-temp-files` rule).
|
|
17
17
|
5. **Privacy sweep** via `privacy-hygiene` over the diff.
|
|
18
|
-
6. **
|
|
19
|
-
7. **Commit and PR.**
|
|
18
|
+
6. **Review and verify** the real diff against the [review guide](../../reviews/SKILL.md#review-workflow). Record the checks run and repair every required finding.
|
|
19
|
+
7. **Commit and PR.** After the review and verification record is complete, run `/commit`, then open a draft PR per the `git-workflow` rule.
|
|
20
20
|
8. **State the honest limitations** from `reference/honest-limitations.md` in the PR body or to the user.
|
|
21
21
|
9. **Converge** by handing the PR to `autoconverge` by default; use `pr-converge` for paced ticks or `bugteam` for an open-loop audit.
|
|
22
22
|
|
|
23
23
|
## Why the clean room, not a push
|
|
24
24
|
|
|
25
|
-
`code_rules_enforcer` is a write-time Write/Edit gate. Content that lands through `git apply`, `git checkout`, or cherry-pick
|
|
26
|
-
|
|
27
|
-
The `verified_commit_gate` hook is the backstop under all of this — it refuses a commit or push with no minted verdict — but the clean-room steps are the mechanism, not the gate firing.
|
|
25
|
+
`code_rules_enforcer` is a write-time Write/Edit gate. Content that lands through `git apply`, `git checkout`, or cherry-pick receives the clean-room controls in steps 4–6: cleanup, privacy review, and review and verification under the [review guide](../../reviews/SKILL.md#review-workflow). The promotion record states the checks run and the remaining TDD limitation.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# rebase
|
|
2
|
+
|
|
3
|
+
Rebase a branch onto its base ref with verification gates that catch logically broken results before pushing.
|
|
4
|
+
|
|
5
|
+
**Trigger:** `/rebase`, "rebase this branch", "PR has merge conflicts", "rebase onto main", force-push to update remote branch history.
|
|
6
|
+
|
|
7
|
+
## Purpose
|
|
8
|
+
|
|
9
|
+
The default failure mode for a rebase is shipping code that compiled but does not run. This skill prevents that by running real import checks, test collection, and symbol scans after every rebase — not just syntax validation.
|
|
10
|
+
|
|
11
|
+
## Key files
|
|
12
|
+
|
|
13
|
+
| File | Purpose |
|
|
14
|
+
|---|---|
|
|
15
|
+
| `SKILL.md` | The complete skill — four phases (pre-rebase analysis, during rebase, verification gates, push). No companion files. |
|
|
16
|
+
|
|
17
|
+
## Four phases
|
|
18
|
+
|
|
19
|
+
| Phase | Key actions |
|
|
20
|
+
|---|---|
|
|
21
|
+
| 1 — Pre-rebase analysis | Resolve base via `gh pr view`, classify scenario (stacked/squash/long-lived), fetch fresh, scan commit messages for deleted/renamed symbols |
|
|
22
|
+
| 2 — During rebase | Verify `--skip` with a diff, audit auto-merged files with `git diff --name-only --diff-filter=M ORIG_HEAD` |
|
|
23
|
+
| 3 — Verification gates | `python -m compileall`, `pytest --collect-only -q`, targeted test run, reference scan for removals |
|
|
24
|
+
| 4 — Push | Explicit authorization required; `--force-with-lease=<branch>:<sha>` only; verify mergeability after push |
|
|
25
|
+
|
|
26
|
+
## Conventions
|
|
27
|
+
|
|
28
|
+
- Force-push requires explicit operator authorization every time — auto mode does not bypass this.
|
|
29
|
+
- `--force-with-lease=<branch>:<sha>` only; bare `--force` is refused.
|
|
30
|
+
- Never force-push `main`, `master`, `release/*`, `production`, or any multi-author branch.
|
|
31
|
+
- Symbol scans prefer Serena (`find_referencing_symbols`) then the Grep tool, then shell grep as a last resort.
|
|
32
|
+
- `ORIG_HEAD` is the correct ref for auto-merged file audits mid-rebase; `HEAD@{1}` shifts per step.
|