claude-dev-env 2.15.1 → 2.17.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/agents/.claude/CLAUDE.md +1 -0
- package/{agents → .agents/agents}/AGENTS.md +8 -2
- package/{agents → .agents/agents}/test_agent_frontmatter.py +1 -1
- package/.agents/skills/.claude/CLAUDE.md +1 -0
- package/.agents/skills/AGENTS.md +71 -0
- package/.agents/skills/_shared/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/_shared/AGENTS.md +2 -2
- package/.agents/skills/_shared/advisor/.claude/CLAUDE.md +1 -0
- package/.agents/skills/_shared/pr-loop/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/_shared/pr-loop/AGENTS.md +22 -15
- package/{skills → .agents/skills}/_shared/pr-loop/portable-driver.md +6 -7
- package/.agents/skills/_shared/pr-loop/prompts/.claude/CLAUDE.md +1 -0
- package/.agents/skills/_shared/pr-loop/prompts/AGENTS.md +9 -0
- package/.agents/skills/_shared/pr-loop/scripts/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/AGENTS.md +1 -1
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/portable_converge_driver.py +25 -16
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/audit_category_schema_constants.py +6 -1
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +1 -5
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_audit_prompt.py +9 -3
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_audit_outcomes.py +1 -1
- package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_fix_outcomes.py +1 -1
- package/.agents/skills/autoconverge/.claude/CLAUDE.md +1 -0
- package/.agents/skills/autoconverge/reference/.claude/CLAUDE.md +1 -0
- package/.agents/skills/autoconverge/reference/convergence-gates.md +31 -0
- package/{skills → .agents/skills}/autoconverge/reference/convergence.md +8 -10
- package/{skills → .agents/skills}/autoconverge/reference/gotchas.md +1 -1
- package/{skills → .agents/skills}/autoconverge/reference/stop-conditions.md +1 -1
- package/.agents/skills/autoconverge/workflow/.claude/CLAUDE.md +1 -0
- package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/autoconverge/workflow/converge.codex-gate.test.mjs +1 -1
- package/{skills → .agents/skills}/autoconverge/workflow/converge.contract.test.mjs +1 -1
- package/{skills → .agents/skills}/autoconverge/workflow/converge.mjs +3 -3
- package/.agents/skills/cert-classification-rule/SKILL.md +224 -0
- package/.agents/skills/cert-classification-rule/scripts/resort_cert_folders.py +158 -0
- package/{skills → .agents/skills}/e-code-review/reference/effort-evaluation.md +1 -1
- package/.agents/skills/eli5/SKILL.md +128 -0
- package/.agents/skills/eli5/reference/task-seeds.md +11 -0
- package/.agents/skills/everything-search/.claude/CLAUDE.md +1 -0
- package/.agents/skills/fresh-branch/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/fresh-branch/scripts/test_create_fresh_branch.py +2 -3
- package/.agents/skills/grok-spawn/.claude/CLAUDE.md +1 -0
- package/.agents/skills/name-by-capability-audit/SKILL.md +67 -0
- package/.agents/skills/name-by-capability-audit/reference/fetch-commands.md +29 -0
- package/.agents/skills/name-by-capability-audit/reference/offense-examples.md +32 -0
- package/.agents/skills/name-by-capability-audit/reference/report-template.md +29 -0
- package/.agents/skills/name-by-capability-audit/reference/rule-checklist.md +38 -0
- package/.agents/skills/name-by-capability-audit/reference/task-seeds.md +9 -0
- package/.agents/skills/pr-cleanup/SKILL.md +99 -0
- package/{skills → .agents/skills}/prototype/reference/honest-limitations.md +1 -1
- package/{skills → .agents/skills}/prototype/reference/promotion-tasks.md +1 -1
- package/{skills → .agents/skills}/prototype/scripts/test_build_sandbox_settings.py +2 -2
- package/{skills → .agents/skills}/prototype/scripts/test_probe_sandbox_safety.py +1 -1
- package/{skills → .agents/skills}/prototype/workflows/promotion.md +2 -2
- package/.agents/skills/rebase/.claude/CLAUDE.md +1 -0
- package/.agents/skills/review-router/SKILL.md +51 -0
- package/.agents/skills/review-router/reference/route-policy.json +7 -0
- package/.agents/skills/review-router/reference/task-seeds.md +1 -0
- package/.agents/skills/review-router/scripts/conftest.py +4 -0
- package/.agents/skills/review-router/scripts/review_router.py +50 -0
- package/.agents/skills/review-router/scripts/review_router_cli.py +211 -0
- package/.agents/skills/review-router/scripts/review_router_constants/__init__.py +1 -0
- package/.agents/skills/review-router/scripts/review_router_constants/config/__init__.py +0 -0
- package/.agents/skills/review-router/scripts/review_router_constants/config/constants.py +13 -0
- package/.agents/skills/review-router/scripts/test_review_router.py +23 -0
- package/.agents/skills/review-router/scripts/test_review_router_cli.py +47 -0
- package/.agents/skills/review-tier/SKILL.md +56 -0
- package/.agents/skills/review-tier/reference/task-seeds.md +1 -0
- package/.agents/skills/review-tier/reference/tier-policy.json +9 -0
- package/.agents/skills/review-tier/scripts/conftest.py +4 -0
- package/.agents/skills/review-tier/scripts/review_tier.py +332 -0
- package/.agents/skills/review-tier/scripts/review_tier_constants/__init__.py +1 -0
- package/.agents/skills/review-tier/scripts/review_tier_constants/config/__init__.py +0 -0
- package/.agents/skills/review-tier/scripts/review_tier_constants/config/constants.py +29 -0
- package/.agents/skills/review-tier/scripts/test_generation.py +171 -0
- package/.agents/skills/review-tier/scripts/test_review_tier.py +33 -0
- package/.agents/skills/run-claude-dev-env/SKILL.md +84 -0
- package/.agents/skills/run-claude-dev-env/driver.mjs +239 -0
- package/.agents/skills/session-log/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/session-log/SKILL.md +1 -1
- package/.agents/skills/session-tidy/.claude/CLAUDE.md +1 -0
- package/.agents/skills/shared-extraction-audit/SKILL.md +160 -0
- package/.agents/skills/shared-extraction-audit/reference/examples.md +46 -0
- package/.agents/skills/shared-extraction-audit/reference/offense-taxonomy.md +100 -0
- package/.agents/skills/skill-builder/.claude/CLAUDE.md +1 -0
- package/.agents/skills/skill-builder/references/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills}/skill-builder/references/deterministic-elements.md +1 -1
- package/.agents/skills/skill-builder/templates/.claude/CLAUDE.md +1 -0
- package/.agents/skills/skill-builder/workflows/.claude/CLAUDE.md +1 -0
- package/.agents/skills/source-command-logifix/SKILL.md +29 -0
- package/.agents/skills/source-command-sr-loop/SKILL.md +58 -0
- package/.agents/skills/task-build/.claude/CLAUDE.md +1 -0
- package/.agents/skills/update/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/AGENTS.md +45 -0
- package/.agents/skills-archived/anthropic-plan/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/anthropic-plan/AGENTS.md +1 -1
- package/.agents/skills-archived/anthropic-plan/scripts/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/anthropic-plan/scripts/anthropic_plan_scripts_constants/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/anthropic-plan/templates/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/anthropic-plan/test_skill_contract.py +4 -4
- package/.agents/skills-archived/anthropic-plan/workflow/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/auditing-claude-config/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/bugteam/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/bugteam/reference/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/bugteam/reference/obstacles/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/bugteam/scripts/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_code_rules_gate.py +11 -1
- package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_fix_hookspath.py +11 -1
- package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_preflight.py +11 -1
- package/.agents/skills-archived/bugteam/scripts/bugteam_scripts_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/bugteam/scripts/reflow_skill_md.py +3 -3
- package/.agents/skills-archived/codex-review/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/codex-review/reference/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/codex-review/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/codex-review/scripts/codex_usage_probe.py +11 -1
- package/{skills → .agents/skills-archived}/codex-review/scripts/run_codex_review.py +11 -1
- package/{skills → .agents/skills-archived}/codex-review/test_skill_scaffold.py +4 -4
- package/{skills → .agents/skills-archived}/copilot-finding-triage/SKILL.md +1 -1
- package/.agents/skills-archived/copilot-review/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/pr-converge/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/SKILL.md +6 -6
- package/.agents/skills-archived/pr-converge/pr_converge_skill_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/pr_converge_skill_constants/AGENTS.md +1 -1
- package/{skills → .agents/skills-archived}/pr-converge/pr_converge_skill_constants/constants.py +1 -1
- package/.agents/skills-archived/pr-converge/reference/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/reference/multi-pr-orchestration.md +1 -1
- package/.agents/skills-archived/pr-converge/reference/obstacles/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/reference/per-tick.md +3 -3
- package/.agents/skills-archived/pr-converge/scripts/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/scripts/_pr_converge_path_setup.py +17 -2
- package/.agents/skills-archived/pr-converge/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/scripts/reflow_skill_md.py +2 -2
- package/{skills → .agents/skills-archived}/pr-converge/scripts/test__pr_converge_path_setup.py +7 -4
- package/{skills → .agents/skills-archived}/pr-converge/test_portable_pacer_gate.py +6 -2
- package/.agents/skills-archived/pr-converge/workflows/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/pr-converge/workflows/schedule-wakeup-loop.md +1 -1
- package/.agents/skills-archived/recall/.claude/CLAUDE.md +1 -0
- package/.agents/skills-archived/remember/.claude/CLAUDE.md +1 -0
- package/{skills → .agents/skills-archived}/split-pr/reference/proposal-format.md +1 -1
- package/.claude/CLAUDE.md +1 -0
- package/AGENTS.md +34 -58
- package/_shared/AGENTS.md +2 -0
- package/_shared/advisor/reference/sol-rung.md +2 -2
- package/_shared/advisor/reference/third-party-bind.md +1 -1
- package/_shared/advisor/scripts/tests/test_codex_sol_advisor.py +1 -1
- package/_shared/pr-loop/audit-reply-template.md +4 -0
- package/_shared/pr-loop/code-rules-gate.md +1 -1
- package/_shared/pr-loop/fix-protocol.md +7 -6
- package/_shared/pr-loop/gh-payloads.md +8 -6
- package/_shared/pr-loop/precatch-rubric.md +6 -5
- package/_shared/pr-loop/scripts/AGENTS.md +15 -0
- package/_shared/pr-loop/scripts/_pr_converge_path_setup.py +38 -0
- package/_shared/pr-loop/scripts/check_bugbot_ci.py +279 -0
- package/_shared/pr-loop/scripts/check_convergence.py +923 -0
- package/_shared/pr-loop/scripts/check_convergence_availability.py +275 -0
- package/_shared/pr-loop/scripts/check_convergence_gates.py +279 -0
- package/_shared/pr-loop/scripts/check_convergence_thread_gates.py +219 -0
- package/_shared/pr-loop/scripts/check_pending_reviews.py +154 -0
- package/_shared/pr-loop/scripts/codex_down_classifier.py +98 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +1 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/AGENTS.md +18 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/__init__.py +1 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/classifier_constants.py +35 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/codex_usage_probe_constants.py +82 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/findings_constants.py +18 -0
- package/_shared/pr-loop/scripts/codex_review_scripts_constants/run_constants.py +53 -0
- package/_shared/pr-loop/scripts/codex_usage_probe.py +570 -0
- package/_shared/pr-loop/scripts/conftest.py +43 -0
- package/_shared/pr-loop/scripts/fetch_copilot_reviews.py +134 -0
- package/_shared/pr-loop/scripts/fixtures/auth_failure_synthetic.txt +1 -0
- package/_shared/pr-loop/scripts/fixtures/config_load_failure_v0.125.0.txt +1 -0
- package/_shared/pr-loop/scripts/fixtures/freeform_findings_v0.144.3.txt +6 -0
- package/_shared/pr-loop/scripts/fixtures/model_rejection_v0.125.0.jsonl +5 -0
- package/_shared/pr-loop/scripts/fixtures/structured_findings.txt +13 -0
- package/_shared/pr-loop/scripts/fixtures/success_stream_v0.144.3.jsonl +6 -0
- package/_shared/pr-loop/scripts/fixtures/unknown_failure_synthetic.txt +1 -0
- package/_shared/pr-loop/scripts/fixtures/usage_limit_synthetic.txt +1 -0
- package/_shared/pr-loop/scripts/parse_codex_findings.py +207 -0
- package/_shared/pr-loop/scripts/post_fix_reply.py +168 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +1 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/AGENTS.md +18 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/__init__.py +0 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +70 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/pr_converge_constants.py +118 -0
- package/_shared/pr-loop/scripts/pr_converge_scripts_constants/reflow_skill_md_constants.py +13 -0
- package/_shared/pr-loop/scripts/pr_converge_skill_constants/.claude/CLAUDE.md +1 -0
- package/_shared/pr-loop/scripts/pr_converge_skill_constants/AGENTS.md +26 -0
- package/_shared/pr-loop/scripts/pr_converge_skill_constants/__init__.py +0 -0
- package/_shared/pr-loop/scripts/pr_converge_skill_constants/constants.py +69 -0
- package/_shared/pr-loop/scripts/run_codex_review.py +609 -0
- package/_shared/pr-loop/scripts/test__pr_converge_path_setup.py +30 -0
- package/_shared/pr-loop/scripts/test_check_bugbot_ci.py +312 -0
- package/_shared/pr-loop/scripts/test_check_convergence.py +438 -0
- package/_shared/pr-loop/scripts/test_check_convergence_availability.py +391 -0
- package/_shared/pr-loop/scripts/test_check_convergence_codex.py +517 -0
- package/_shared/pr-loop/scripts/test_check_convergence_contract.py +400 -0
- package/_shared/pr-loop/scripts/test_check_convergence_fixture.py +179 -0
- package/_shared/pr-loop/scripts/test_check_convergence_gates.py +84 -0
- package/_shared/pr-loop/scripts/test_check_convergence_thread_gates.py +99 -0
- package/_shared/pr-loop/scripts/test_codex_down_classifier.py +143 -0
- package/_shared/pr-loop/scripts/test_codex_usage_probe.py +683 -0
- package/_shared/pr-loop/scripts/test_parse_codex_findings.py +130 -0
- package/_shared/pr-loop/scripts/test_run_codex_review.py +969 -0
- package/_shared/pr-loop/scripts/tests/test_claude_permissions_common.py +1 -1
- package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +1 -1
- package/_shared/pr-loop/scripts/tests/test_fix_hookspath.py +1 -1
- package/_shared/pr-loop/state-schema.md +20 -28
- package/_shared/process-tree/AGENTS.md +3 -3
- package/bin/AGENTS.md +17 -12
- package/bin/ever-shipped-skills.mjs +34 -3
- package/bin/install-constants.mjs +46 -12
- package/bin/install-plan.mjs +6 -1
- package/bin/install.agents-home.test.mjs +199 -0
- package/bin/install.cursor-rules.test.mjs +3 -3
- package/bin/install.mjs +153 -23
- package/bin/install.plan.test.mjs +1 -0
- package/bin/install.profile-root.test.mjs +54 -1
- package/bin/install.prune.test.mjs +23 -204
- package/bin/install.test.mjs +17 -5
- package/bin/publish-directory-pointer.mjs +175 -0
- package/bin/publish-directory-pointer.test.mjs +129 -0
- package/bin/resolve-install-root.mjs +80 -4
- package/bin/resolve-package-managed-directory.mjs +29 -0
- package/bin/resolve-package-managed-directory.test.mjs +97 -0
- package/commands/AGENTS.md +2 -0
- package/commands/sr-loop.md +3 -0
- package/docs/references/prose-style-enforcement.md +3 -7
- package/hooks/AGENTS.md +0 -3
- package/hooks/blocking/AGENTS.md +0 -2
- package/hooks/blocking/ask_user_question_shape_blocker.py +83 -0
- package/hooks/blocking/hedging_language_blocker.py +1 -0
- package/hooks/blocking/orchestrator_refresh_reschedule_gate.py +10 -6
- package/hooks/blocking/pre_tool_use_dispatcher.py +2 -19
- package/hooks/blocking/state_description_blocker.py +1 -1
- package/hooks/blocking/test_ask_user_question_shape.py +69 -0
- package/hooks/blocking/test_code_rules_command_dispatch.py +1 -1
- package/hooks/blocking/test_code_rules_enforcer_magic_slice_bounds.py +1 -1
- package/hooks/blocking/test_code_rules_enforcer_split_annotations_length.py +1 -1
- package/hooks/blocking/test_code_rules_js_conventions.py +1 -1
- package/hooks/blocking/test_code_rules_js_resume_task_enumeration.py +1 -1
- package/hooks/blocking/test_code_rules_js_returns_object_schemaless.py +1 -1
- package/hooks/blocking/test_code_rules_js_sibling_return_object_key_drift.py +1 -1
- package/hooks/blocking/test_duplicate_rmtree_helper_blocker.py +1 -1
- package/hooks/blocking/test_fable_spawn_gate.py +1 -1
- package/hooks/blocking/test_orchestrator_refresh_reschedule_gate.py +1 -1
- package/hooks/blocking/test_pre_tool_use_dispatcher.py +17 -58
- package/hooks/blocking/test_pre_tool_use_dispatcher_native.py +9 -104
- package/hooks/blocking/test_state_description_blocker.py +1 -0
- package/hooks/blocking/test_stop_dispatcher.py +1 -26
- package/hooks/hooks.json +1 -1
- package/hooks/hooks_constants/AGENTS.md +0 -3
- package/hooks/hooks_constants/ask_user_question_shape.py +1 -1
- package/hooks/hooks_constants/ask_user_question_shape_constants.py +73 -0
- package/hooks/hooks_constants/bot_mention_comment_blocker_constants.py +1 -2
- package/hooks/hooks_constants/code_rules_path_utils_constants.py +0 -1
- package/hooks/hooks_constants/orchestrator_refresh_reschedule_gate_constants.py +9 -0
- package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +0 -7
- package/hooks/hooks_constants/stop_dispatcher_constants.py +0 -1
- package/hooks/hooks_constants/test_ask_user_question_shape.py +1 -1
- package/hooks/hooks_constants/test_prose_metrics_parity.py +29 -107
- package/hooks/hooks_constants/test_stop_dispatcher_constants.py +0 -1
- package/hooks/hooks_constants/working_style_prompt_constants.py +9 -10
- package/hooks/session/AGENTS.md +4 -1
- package/hooks/session/test_working_style_prompt.py +8 -4
- package/hooks/session/working_style_prompt.py +4 -2
- package/installable-surfaces.manifest.json +2 -3
- package/package.json +4 -8
- package/rules/AGENTS.md +2 -5
- package/rules/asd-ste100-language.md +39 -0
- package/rules/ask-user-question-required.md +1 -1
- package/rules/long-horizon-autonomy.md +1 -1
- package/scripts/AGENTS.md +1 -0
- package/scripts/Show-Asset.ps1 +106 -0
- package/scripts/active_capability_references.py +38 -8
- package/scripts/claude_chain_usage.py +2 -0
- package/scripts/codex_compat_watcher.py +1 -1
- package/scripts/dev_env_scripts_constants/active_capability_constants.py +5 -2
- package/scripts/dev_env_scripts_constants/claude_chain_usage_constants.py +4 -1
- package/scripts/test_validate_instruction_pairs.py +30 -3
- package/scripts/test_verify_installable_package.py +2 -1
- package/scripts/tests/test_codex_compat_watcher.py +5 -5
- package/scripts/tests/test_engine.py +4 -4
- package/scripts/tests/test_rules.py +5 -5
- package/system-prompts/AGENTS.md +8 -0
- package/system-prompts/software-engineer.xml +8 -3
- package/CLAUDE.md +0 -1
- package/_shared/pr-loop/scripts/README.md +0 -21
- package/agents/CLAUDE.md +0 -1
- package/docs/imagegen.md +0 -22
- package/hooks/blocking/eli11_reply_enforcer.py +0 -436
- package/hooks/blocking/plain_language_blocker.py +0 -758
- package/hooks/blocking/test_eli11_reply_enforcer.py +0 -390
- package/hooks/blocking/test_plain_language_blocker.py +0 -683
- package/hooks/blocking/test_plain_language_blocker_allowlist.py +0 -228
- package/hooks/diagnostic/AGENTS.md +0 -75
- package/hooks/diagnostic/CLAUDE.md +0 -1
- package/hooks/diagnostic/hook_log_extractor.py +0 -875
- package/hooks/diagnostic/hook_log_init.py +0 -202
- package/hooks/diagnostic/hook_log_stop_wrapper.py +0 -26
- package/hooks/diagnostic/migrations/2026-04-25-drop-themes-hook-events.sql +0 -3
- package/hooks/diagnostic/migrations/AGENTS.md +0 -16
- package/hooks/diagnostic/migrations/CLAUDE.md +0 -1
- package/hooks/diagnostic/migrations/README.md +0 -76
- package/hooks/diagnostic/queries/AGENTS.md +0 -19
- package/hooks/diagnostic/queries/CLAUDE.md +0 -1
- package/hooks/diagnostic/queries/block_details_for_hook.sql +0 -26
- package/hooks/diagnostic/queries/blocks_by_category.sql +0 -10
- package/hooks/diagnostic/queries/blocks_by_tool.sql +0 -9
- package/hooks/diagnostic/queries/blocks_last_7_days.sql +0 -11
- package/hooks/diagnostic/queries/top_blockers_last_24_hours.sql +0 -12
- package/hooks/diagnostic/queries/top_blockers_overall.sql +0 -12
- package/hooks/diagnostic/requirements-hook-logs-dev.txt +0 -2
- package/hooks/diagnostic/requirements-hook-logs.txt +0 -1
- package/hooks/diagnostic/schema.sql +0 -51
- package/hooks/diagnostic/test_hook_log_extractor.py +0 -1518
- package/hooks/diagnostic/test_hook_log_init.py +0 -227
- package/hooks/diagnostic/test_hook_log_stop_wrapper.py +0 -17
- package/hooks/hooks_constants/eli11_reply_enforcer_constants.py +0 -94
- package/hooks/hooks_constants/hook_log_extractor_constants.py +0 -233
- package/hooks/hooks_constants/plain_language_blocker_constants.py +0 -366
- package/hooks/hooks_constants/test_hook_log_extractor_constants.py +0 -123
- package/rules/doc-prose-cuts.md +0 -58
- package/rules/eli11-replies.md +0 -36
- package/rules/opus5-communication-contract.md +0 -45
- package/rules/plain-language.md +0 -9
- package/skills/AGENTS.md +0 -72
- package/skills/CLAUDE.md +0 -1
- package/skills/_shared/CLAUDE.md +0 -1
- package/skills/_shared/advisor/CLAUDE.md +0 -1
- package/skills/_shared/pr-loop/CLAUDE.md +0 -1
- package/skills/_shared/pr-loop/prompts/AGENTS.md +0 -9
- package/skills/_shared/pr-loop/prompts/CLAUDE.md +0 -1
- package/skills/_shared/pr-loop/scripts/CLAUDE.md +0 -1
- package/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/CLAUDE.md +0 -1
- package/skills/anthropic-plan/CLAUDE.md +0 -1
- package/skills/anthropic-plan/scripts/CLAUDE.md +0 -1
- package/skills/anthropic-plan/scripts/anthropic_plan_scripts_constants/CLAUDE.md +0 -1
- package/skills/anthropic-plan/templates/CLAUDE.md +0 -1
- package/skills/anthropic-plan/workflow/CLAUDE.md +0 -1
- package/skills/auditing-claude-config/CLAUDE.md +0 -1
- package/skills/autoconverge/CLAUDE.md +0 -1
- package/skills/autoconverge/reference/CLAUDE.md +0 -1
- package/skills/autoconverge/workflow/CLAUDE.md +0 -1
- package/skills/autoconverge/workflow/autoconverge_report_constants/CLAUDE.md +0 -1
- package/skills/bugteam/CLAUDE.md +0 -1
- package/skills/bugteam/reference/CLAUDE.md +0 -1
- package/skills/bugteam/reference/obstacles/CLAUDE.md +0 -1
- package/skills/bugteam/scripts/CLAUDE.md +0 -1
- package/skills/bugteam/scripts/bugteam_scripts_constants/CLAUDE.md +0 -1
- package/skills/codex-review/CLAUDE.md +0 -1
- package/skills/codex-review/reference/CLAUDE.md +0 -1
- package/skills/codex-review/scripts/codex_review_scripts_constants/CLAUDE.md +0 -1
- package/skills/copilot-review/CLAUDE.md +0 -1
- package/skills/everything-search/CLAUDE.md +0 -1
- package/skills/fresh-branch/CLAUDE.md +0 -1
- package/skills/grok-spawn/CLAUDE.md +0 -1
- package/skills/grokify/evals/README.md +0 -72
- package/skills/grokify/evals/parse-payload.test.mjs +0 -171
- package/skills/grokify/evals/run-capability-evals.mjs +0 -545
- package/skills/pr-converge/CLAUDE.md +0 -1
- package/skills/pr-converge/pr_converge_skill_constants/CLAUDE.md +0 -1
- package/skills/pr-converge/reference/CLAUDE.md +0 -1
- package/skills/pr-converge/reference/obstacles/CLAUDE.md +0 -1
- package/skills/pr-converge/scripts/CLAUDE.md +0 -1
- package/skills/pr-converge/scripts/pr_converge_scripts_constants/CLAUDE.md +0 -1
- package/skills/pr-converge/workflows/CLAUDE.md +0 -1
- package/skills/rebase/CLAUDE.md +0 -1
- package/skills/recall/CLAUDE.md +0 -1
- package/skills/remember/CLAUDE.md +0 -1
- package/skills/session-log/CLAUDE.md +0 -1
- package/skills/session-tidy/CLAUDE.md +0 -1
- package/skills/skill-builder/CLAUDE.md +0 -1
- package/skills/skill-builder/references/CLAUDE.md +0 -1
- package/skills/skill-builder/templates/CLAUDE.md +0 -1
- package/skills/skill-builder/workflows/CLAUDE.md +0 -1
- package/skills/task-build/CLAUDE.md +0 -1
- package/skills/update/CLAUDE.md +0 -1
- /package/{agents → .agents/agents}/clean-coder.md +0 -0
- /package/{agents → .agents/agents}/code-quality-agent.md +0 -0
- /package/{agents → .agents/agents}/git-commit-crafter.md +0 -0
- /package/{agents → .agents/agents}/issue-tracker.md +0 -0
- /package/{agents → .agents/agents}/plan-packet-validator.md +0 -0
- /package/{agents → .agents/agents}/pr-description-writer.md +0 -0
- /package/{agents → .agents/agents}/session-advisor.md +0 -0
- /package/{agents → .agents/agents}/skill-writer-agent.md +0 -0
- /package/{skills → .agents/skills}/_shared/advisor/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/_shared/advisor/advisor-protocol.md +0 -0
- /package/{skills → .agents/skills}/_shared/advisor/scripts/README.md +0 -0
- /package/{skills → .agents/skills}/_shared/end-of-run-gotcha-recommendations.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/audit-contract.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/audit-reply-template.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/code-rules-gate.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/fix-protocol.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/gh-payloads.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/post-audit-thread-contract.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/precatch-rubric.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/prompts/pr-consistency-audit.xml +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/RUNTIME_SCRIPTS.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_cli_utils.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_path_resolver.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/_xml_utils.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/audit_category_schema.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_audit_prompt.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_converge_task_list.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/build_fix_prompt.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/init_loop_state.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/preflight_worktree.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/select_converge_pacer.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/AGENTS.md +0 -0
- /package/{skills/pr-converge/pr_converge_skill_constants → .agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/converge_task_list_constants.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/handoff_constants.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/pacer_constants.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/path_resolver_constants.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/skills_pr_loop_constants/preflight_constants.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/teardown_worktrees.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test__path_resolver.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_audit_category_schema.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_converge_task_list.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_build_fix_prompt.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_init_loop_state.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_portable_converge_driver.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_preflight_worktree.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_select_converge_pacer.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_teardown_worktrees.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/test_write_handoff.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/scripts/write_handoff.py +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/state-schema.md +0 -0
- /package/{skills → .agents/skills}/_shared/pr-loop/worker-spawn.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/SKILL.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/closing-report.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/copilot-findings.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/headless-safety.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/multi-pr.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/reference/self-closing-loop.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/test_portable_pacer_gate.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/aggregate_runs.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/autoconverge_report_constants/AGENTS.md +0 -0
- /package/{skills/pr-converge/scripts/pr_converge_scripts_constants → .agents/skills/autoconverge/workflow/autoconverge_report_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.clean-audit.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.copilot-gate.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.fix-progress.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.fix-recovery.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.merge-conflict.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.p2-advance.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.path-aware.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.precatch.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge.run-input.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge_multi.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/converge_multi.run-input.test.mjs +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/convergence_summary.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ab1c2d3e4f5a6b7c8.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/render_report.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/test_aggregate_runs.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/test_convergence_summary.py +0 -0
- /package/{skills → .agents/skills}/autoconverge/workflow/test_render_report.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/SKILL.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/fix.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/loop.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/low.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/medium.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/runner-selection.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/reference/xhigh.md +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/config/e_code_review_effort_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/config/e_code_review_effort_constants/effort_constants.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/finding_pipeline_constants.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/e_code_review_scripts_constants/grok_code_review_constants.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/effort_defaults_evidence.json +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/effort_evaluation.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/finding_pipeline.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/demanding.json +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/easy.json +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/fixtures/medium.json +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/grok_code_review.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/test_effort_evaluation.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/test_finding_pipeline.py +0 -0
- /package/{skills → .agents/skills}/e-code-review/scripts/test_grok_code_review.py +0 -0
- /package/{skills → .agents/skills}/e-simplify/SKILL.md +0 -0
- /package/{skills → .agents/skills}/everything-search/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/everything-search/SKILL.md +0 -0
- /package/{skills → .agents/skills}/fresh-branch/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/fresh-branch/SKILL.md +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/create_fresh_branch.py +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_git_commands.py +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_scripts_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/fresh_branch_scripts_constants/fresh_branch_cli_constants.py +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/pytest.ini +0 -0
- /package/{skills → .agents/skills}/fresh-branch/scripts/test_fresh_branch_git_commands.py +0 -0
- /package/{skills → .agents/skills}/grok-spawn/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/grok-spawn/SKILL.md +0 -0
- /package/{skills → .agents/skills}/grok-spawn/reference/flag-profiles.md +0 -0
- /package/{skills → .agents/skills}/grok-spawn/reference/worker-briefs.md +0 -0
- /package/{skills → .agents/skills}/issue-tracker/SKILL.md +0 -0
- /package/{skills → .agents/skills}/issue-tracker/reference/epic-and-sub-issue-model.md +0 -0
- /package/{skills → .agents/skills}/issue-tracker/reference/handoff-schema.md +0 -0
- /package/{skills → .agents/skills}/issue-tracker/reference/operation-matrix.md +0 -0
- /package/{skills → .agents/skills}/orchestrator/SKILL.md +0 -0
- /package/{skills → .agents/skills}/orchestrator/scripts/status_gate.py +0 -0
- /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/config/__init__.py +0 -0
- /package/{skills → .agents/skills}/orchestrator/scripts/status_gate_constants/config/constants.py +0 -0
- /package/{skills → .agents/skills}/orchestrator/scripts/test_status_gate.py +0 -0
- /package/{skills → .agents/skills}/orchestrator-refresh/SKILL.md +0 -0
- /package/{skills → .agents/skills}/privacy-hygiene/SKILL.md +0 -0
- /package/{skills → .agents/skills}/privacy-hygiene/reference/sweep-procedure.md +0 -0
- /package/{skills → .agents/skills}/prototype/SKILL.md +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/build_sandbox_settings.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/conftest.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/launch_sandbox.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/probe_sandbox_safety.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/__init__.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/build_sandbox_settings_constants.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/launch_sandbox_constants.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/probe_sandbox_safety_constants.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/prototype_scripts_constants/config/prototype_common_constants.py +0 -0
- /package/{skills → .agents/skills}/prototype/scripts/test_launch_sandbox.py +0 -0
- /package/{skills → .agents/skills}/prototype/workflows/sandbox.md +0 -0
- /package/{skills → .agents/skills}/rebase/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/rebase/SKILL.md +0 -0
- /package/{skills → .agents/skills}/session-log/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/session-log/templates/frontmatter.md +0 -0
- /package/{skills → .agents/skills}/session-tidy/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/session-tidy/SKILL.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/SKILL.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/delegation-map.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/description-field.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/progressive-disclosure.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/self-audit-checklist.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/skill-modularity.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/skill-types.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/references/thariq-x-post-skills.json +0 -0
- /package/{skills → .agents/skills}/skill-builder/templates/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/templates/gap-analysis.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/workflows/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/workflows/improve-skill.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/workflows/new-skill.md +0 -0
- /package/{skills → .agents/skills}/skill-builder/workflows/polish-skill.md +0 -0
- /package/{skills → .agents/skills}/small-cl/SKILL.md +0 -0
- /package/{skills → .agents/skills}/task-build/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/task-build/SKILL.md +0 -0
- /package/{skills → .agents/skills}/task-build/reference/tool-routing.md +0 -0
- /package/{skills → .agents/skills}/team-advisor/SKILL.md +0 -0
- /package/{skills → .agents/skills}/team-advisor/reference/advisor-docs-review.md +0 -0
- /package/{skills → .agents/skills}/update/AGENTS.md +0 -0
- /package/{skills → .agents/skills}/update/SKILL.md +0 -0
- /package/{skills → .agents/skills}/usage-pause/SKILL.md +0 -0
- /package/{skills → .agents/skills}/usage-pause/scripts/resolve_usage_window.py +0 -0
- /package/{skills → .agents/skills}/usage-pause/scripts/test_resolve_usage_window.py +0 -0
- /package/{skills → .agents/skills}/usage-pause/scripts/usage_pause_constants/__init__.py +0 -0
- /package/{skills → .agents/skills}/usage-pause/scripts/usage_pause_constants/resolve_usage_window_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/AGENTS.md +0 -0
- /package/{skills/_shared/pr-loop/scripts/skills_pr_loop_constants → .agents/skills-archived/anthropic-plan/scripts/anthropic_plan_scripts_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/validate_packet_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/test_validate_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/scripts/validate_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/README.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/build-prompt.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/reuse-audit.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/source-map.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/templates/visual-plan.template.html +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/workflow/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/workflow/plan-packet.contract.test.mjs +0 -0
- /package/{skills → .agents/skills-archived}/anthropic-plan/workflow/plan-packet.mjs +0 -0
- /package/{skills → .agents/skills-archived}/auditing-claude-config/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/auditing-claude-config/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/auditing-claude-config/reference/probe-hook.md +0 -0
- /package/{skills → .agents/skills-archived}/beat-sheet/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/beat-sheet/reference/visual-beats.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/CONSTRAINTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/EXAMPLES.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/PROMPTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/README.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/audit-and-teammates.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/copilot-gap-analysis.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/design-rationale.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/github-pr-reviews.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-assign-ids.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-capture-excerpts.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-walk-categories.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/audit-write-xml.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-append-summary.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-apply-fixes.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-git-add-commit.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-git-push.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-post-reply.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-publish-summary.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-py-compile.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-read-files.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-resolve-thread.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-test-suite.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-violation-count.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/obstacles/fix-write-xml.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/reference/team-setup.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/README.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/AGENTS.md +0 -0
- /package/{skills/anthropic-plan/scripts/anthropic_plan_scripts_constants → .agents/skills-archived/bugteam/scripts/bugteam_scripts_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/probe_code_rules_enforcer_check_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/reflow_skill_md_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/bugteam_scripts_constants/windows_safe_rmtree_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/probe_code_rules_enforcer_check.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/test_bugteam_code_rules_gate.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/test_bugteam_fix_hookspath.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/test_bugteam_preflight.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/test_probe_code_rules_enforcer_check.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/test_windows_safe_rmtree.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/scripts/windows_safe_rmtree.py +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/sources.md +0 -0
- /package/{skills → .agents/skills-archived}/bugteam/test_skill_additions.py +0 -0
- /package/{skills → .agents/skills-archived}/closeout/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/closeout/reference/handoff-prompt-template.md +0 -0
- /package/{skills → .agents/skills-archived}/closeout/reference/pii-redaction-checklist.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/reference/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/reference/cli-contract.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/reference/loop-integration.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_down_classifier.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/classifier_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/codex_usage_probe_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/findings_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/codex_review_scripts_constants/run_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/auth_failure_synthetic.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/config_load_failure_v0.125.0.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/freeform_findings_v0.144.3.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/model_rejection_v0.125.0.jsonl +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/structured_findings.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/success_stream_v0.144.3.jsonl +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/unknown_failure_synthetic.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/fixtures/usage_limit_synthetic.txt +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/parse_codex_findings.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/test_codex_down_classifier.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/test_codex_usage_probe.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/test_parse_codex_findings.py +0 -0
- /package/{skills → .agents/skills-archived}/codex-review/scripts/test_run_codex_review.py +0 -0
- /package/{skills → .agents/skills-archived}/comments/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/condensing-instructions/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/reference/tier-rubric.md +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/conftest.py +0 -0
- /package/{skills/autoconverge/workflow/autoconverge_report_constants → .agents/skills-archived/copilot-finding-triage/scripts/copilot_finding_triage_constants}/__init__.py +0 -0
- /package/{skills/bugteam/scripts/bugteam_scripts_constants → .agents/skills-archived/copilot-finding-triage/scripts/copilot_finding_triage_constants/config}/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/copilot_finding_triage_constants/config/notify_ntfy_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/notify_ntfy.py +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/scripts/test_notify_ntfy.py +0 -0
- /package/{skills → .agents/skills-archived}/copilot-finding-triage/templates/notification.md +0 -0
- /package/{skills → .agents/skills-archived}/copilot-review/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/copilot-review/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/copilot-review/templates/subagent-prompt.md +0 -0
- /package/{skills → .agents/skills-archived}/descriptions/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/emergencies/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/grokify/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/grokify/capability-claims.test.mjs +0 -0
- /package/{skills → .agents/skills-archived}/grokify/templates/handoff-template.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/final-validation-tasks.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/model-routing.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/packet-contract.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/packet-schema.json +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/process-inventory.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/review-loop.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/run-record.schema.json +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/self-audit-tasks.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/task-seeds.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/reference/task-ticket.md +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/config/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/config/constants.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/create_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/load_skill_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_create_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_validate_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_validate_protocol.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/test_validate_run.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/validate_packet.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/validate_protocol.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/scripts/validate_run.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/test_skill_contract.py +0 -0
- /package/{skills → .agents/skills-archived}/plan-to-pr/test_task_ticket_contract.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/AGENTS.md +0 -0
- /package/{skills/copilot-finding-triage/scripts/copilot_finding_triage_constants → .agents/skills-archived/pr-converge/pr_converge_skill_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/convergence-gates.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/examples.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/fix-protocol.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/ground-rules.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-post-replies.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-publish-summary.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-push.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-read-filelines.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-reset-state.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-resolve-threads.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-spawn-clean-coder.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-stage-commit.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-trigger-bugbot.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/obstacles/fix-write-test.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/progress-checklist.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/state-schema.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/reference/stop-conditions.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/README.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/caller-window-pid.ps1 +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_bugbot_ci.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence_availability.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence_gates.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_convergence_thread_gates.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/check_pending_reviews.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/conftest.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue-caller.cmd +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue-stop-others.ps1 +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue.ahk +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/cursor-agents-continue.cmd +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/fetch_copilot_reviews.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/post_fix_reply.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/AGENTS.md +0 -0
- /package/{skills/copilot-finding-triage/scripts/copilot_finding_triage_constants/config → .agents/skills-archived/pr-converge/scripts/pr_converge_scripts_constants}/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/pr_converge_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/reflow_skill_md_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_bugbot_ci.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_availability.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_codex.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_contract.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_fixture.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_gates.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_check_convergence_thread_gates.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_cursor_agents_continue.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/scripts/test_reflow_skill_md.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/test_step5_host_branch.py +0 -0
- /package/{skills → .agents/skills-archived}/pr-converge/workflows/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-fix-protocol/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-loop-cloud-transport/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-loop-cloud-transport/reference/identity-and-hooks.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-loop-cloud-transport/reference/substitution-matrix.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-loop-lifecycle/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/pr-loop-lifecycle/reference/teardown-publish-permissions.md +0 -0
- /package/{skills → .agents/skills-archived}/recall/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/recall/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/release-notes-html/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/remember/AGENTS.md +0 -0
- /package/{skills → .agents/skills-archived}/remember/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/reviewer-gates/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/reviews/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/show/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/accessibility.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/art.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/charts.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/core-design.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/erds.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/flowcharts.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/host-and-html.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/illustrative-diagrams.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/interaction.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/mockups.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/quality-gates.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/structural-diagrams.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/subject-inventory.md +0 -0
- /package/{skills → .agents/skills-archived}/show/references/svg-contract.md +0 -0
- /package/{skills → .agents/skills-archived}/show/routing.yaml +0 -0
- /package/{skills → .agents/skills-archived}/show/samples/pr1262-v2.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/scripts/README.md +0 -0
- /package/{skills → .agents/skills-archived}/show/scripts/validate-artifact.py +0 -0
- /package/{skills → .agents/skills-archived}/show/scripts/validate-package.py +0 -0
- /package/{skills → .agents/skills-archived}/show/templates/html-widget.html +0 -0
- /package/{skills → .agents/skills-archived}/show/templates/svg-base.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/css-var.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/dead-ref.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/filled-glyph.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/inherited-fill.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/invalid.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/large-canvas.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/unfilled-connector.svg +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/fixtures/valid.html +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/test_validate-artifact.py +0 -0
- /package/{skills → .agents/skills-archived}/show/tests/test_validators.py +0 -0
- /package/{skills → .agents/skills-archived}/show/workflows/create-visual.md +0 -0
- /package/{skills → .agents/skills-archived}/show/workflows/review-visual.md +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/SKILL.md +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/reference/path-layers.md +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/reference/split-further-loop.md +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/reference/splitting-principles.md +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/analyze_pr.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/categorize_files.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/__init__.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/dependency_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/git_operations_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/packing_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/plan_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/config/split_pr_constants.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/execute_split_slices.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/pack_files_into_slices.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_dependency_graph.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_git_operations.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_layer_order.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_paginate.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_process_runner.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_script_types.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/split_pr_title.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_analyze_pr.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_categorize_files.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_categorize_files_packing.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_execute_split_slices.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_dependency_graph.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_git_operations.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_layer_order.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_paginate.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_script_types.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_split_pr_title.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_dependency_graph.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_plan.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_plan_contract.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/test_verify_plan_path_normalization.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/verify_dependency_graph.py +0 -0
- /package/{skills → .agents/skills-archived}/split-pr/scripts/verify_plan.py +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Offense examples (this repo)
|
|
2
|
+
|
|
3
|
+
Classify by **role** — the reusable work the surface performs — not by matching a string list. For whether code belongs in `shared_utils` vs a workflow package, invoke `shared-extraction-audit`; this map only scores names.
|
|
4
|
+
|
|
5
|
+
## Quick classifier
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Queue, report parser, or routing table for one workflow only?
|
|
9
|
+
YES → driver name OK
|
|
10
|
+
Shared artifact change a second workflow would call?
|
|
11
|
+
YES → capability name required (flag when a driver word is present)
|
|
12
|
+
Stays inside that workflow → OK driver; state why in the report
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## OK — correctly driver-named
|
|
16
|
+
|
|
17
|
+
| Surface | Why OK |
|
|
18
|
+
|---------|--------|
|
|
19
|
+
| `cert_fix_queue` | Rejected-theme queue drain — driver-only orchestration |
|
|
20
|
+
| Cert report title → which ops to run | Driver / routing |
|
|
21
|
+
| Cert report locate / folder routing | Driver-only path finding for cert artifacts |
|
|
22
|
+
| Unfixable / unfixable-pattern tables | Cert-report classification artifacts |
|
|
23
|
+
|
|
24
|
+
## Violations — driver word on reusable capability
|
|
25
|
+
|
|
26
|
+
| Surface | Why violation | Suggested rename direction |
|
|
27
|
+
|---------|---------------|----------------------------|
|
|
28
|
+
| `cert_closeout` color engine (batch color UID rewrite) | General STP color batch shared across workflows | Capability name: STP color batch / color UID rewrite |
|
|
29
|
+
| `cert_fix_*` modules that are general STP patches | Patch logic reusable outside cert closeout | Name the STP operation (asset replace, sound slot, …) |
|
|
30
|
+
| `cert_fix_page_indicators` | Thematic page-indicator pair generation is a reusable asset op | Capability: page indicators / home indicator pair |
|
|
31
|
+
| Portal/export-named helper that any workflow could call | Motive word on a reusable library | Name the shared action (sheet write, APK locate, …) |
|
|
32
|
+
| PR titled or scoped with a driver word when the diff is a general capability | Motive framing on a library change | Retitle/scope to the capability; keep driver wording on the queue/driver PR |
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Report template
|
|
2
|
+
|
|
3
|
+
Emit this shape. Keep it compact.
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
## Name-by-capability audit — PR #<N>
|
|
7
|
+
|
|
8
|
+
**Verdict:** <clean | N violations, M OK drivers>
|
|
9
|
+
|
|
10
|
+
### Violations
|
|
11
|
+
| Finding | Path / title | Why | Suggested rename direction |
|
|
12
|
+
|---------|--------------|-----|----------------------------|
|
|
13
|
+
| Driver word on capability | `path/or/Title` | <one sentence> | <capability-oriented name family> |
|
|
14
|
+
|
|
15
|
+
### OK drivers
|
|
16
|
+
| Surface | Path / title | Why OK |
|
|
17
|
+
|---------|--------------|--------|
|
|
18
|
+
| Queue / routing / … | `path` | <one sentence> |
|
|
19
|
+
|
|
20
|
+
### Notes
|
|
21
|
+
- <optional: expanded offense in a package this PR grew, doc-only context, etc.>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Rules for filling cells
|
|
25
|
+
|
|
26
|
+
- **Finding** — short label for Violations rows only (`Driver word on capability`, `Motive framing in title`).
|
|
27
|
+
- **Why** — cite the checklist item (reuse? action name? motive reserved for drivers?).
|
|
28
|
+
- **Suggested rename direction** — a family of names (e.g. “STP color batch / color UID rewrite”).
|
|
29
|
+
- When clean: **Verdict: clean** and omit Violation rows (keep the OK drivers / Notes sections if useful).
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Name-by-capability rule (skill-local)
|
|
2
|
+
|
|
3
|
+
Prefer `docs/agents/name-by-capability.md` when that file exists in the worktree. This file is the fallback so audits still run when the docs PR has not merged yet.
|
|
4
|
+
|
|
5
|
+
## Rule
|
|
6
|
+
|
|
7
|
+
Name packages and modules for the **reusable work they perform**. Put a workflow or motive word (`cert`, `portal`, `export`, a product name, …) in the name only when that surface exists **solely** for that driver.
|
|
8
|
+
|
|
9
|
+
1. **Capability name first.** Prefer names that say the operation (replace an asset slot, rewrite a color UID, send an email, locate a folder on disk, …).
|
|
10
|
+
2. **Drivers stay at the edge.** Queue drains, report parsers, and other workflow-only shells may keep the workflow word. Libraries they call use capability names.
|
|
11
|
+
3. **Orchestrators apply capabilities.** When several operations run on one artifact, one apply/orchestrator module owns stage → apply in order → result. Callers that know *why* map intents onto a registry of capability adapters.
|
|
12
|
+
4. **Extend the capability, then wire the driver.** New use cases add or extend a capability adapter, then teach the driver which inputs map to it.
|
|
13
|
+
|
|
14
|
+
## Checklist before accepting a new or renamed path
|
|
15
|
+
|
|
16
|
+
A driver word in the name plus reuse by another workflow is a **violation**.
|
|
17
|
+
|
|
18
|
+
1. Would another workflow reuse this? When yes, name the package/module for the shared action.
|
|
19
|
+
2. Does the name state the action or artifact change?
|
|
20
|
+
3. Is any motive word reserved for driver-only code?
|
|
21
|
+
|
|
22
|
+
## Driver / motive words (non-exhaustive)
|
|
23
|
+
|
|
24
|
+
Treat these as driver words when they appear in a package or module name for reusable library code:
|
|
25
|
+
|
|
26
|
+
- `cert`, `cert_fix`, `cert_closeout`
|
|
27
|
+
- `portal`, `export`, `submission`, `discount`
|
|
28
|
+
- Product or campaign names used as a motive rather than an operation
|
|
29
|
+
|
|
30
|
+
## What to score on a PR
|
|
31
|
+
|
|
32
|
+
| Signal | Score when |
|
|
33
|
+
|--------|------------|
|
|
34
|
+
| New package/dir | Path segment carries a driver word |
|
|
35
|
+
| Renamed package/module | Old or new name carries a driver word on capability code |
|
|
36
|
+
| New module under an existing package | File/module stem carries a driver word for a general op |
|
|
37
|
+
| PR title / scope | Frames a general shared capability change with a driver/motive word |
|
|
38
|
+
| Unchanged misnamed package | Score when this PR **expands** the offense (new public API, new callers); otherwise list under Notes as out-of-diff context |
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Task seeds
|
|
2
|
+
|
|
3
|
+
Register each item on `TodoWrite` / `TaskCreate` at audit start. Complete with evidence.
|
|
4
|
+
|
|
5
|
+
1. Load the rule: `docs/agents/name-by-capability.md` when present, else `reference/rule-checklist.md` (always keep the skill checklist as fallback).
|
|
6
|
+
2. Fetch PR title, body, and changed/renamed paths via `reference/fetch-commands.md`.
|
|
7
|
+
3. Classify each naming signal as violation, OK driver, or skip (`reference/offense-examples.md` classifier first).
|
|
8
|
+
4. Emit report from `reference/report-template.md`.
|
|
9
|
+
5. Apply the requested or suggested rename direction by default; an explicit audit-only request ends after the report.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr-cleanup
|
|
3
|
+
description: >-
|
|
4
|
+
Clean a PR end-to-end with one coding agent: shared-extraction-audit,
|
|
5
|
+
name-by-capability-audit, sr-loop, then small-cl — apply and validate fixes
|
|
6
|
+
as they return. Use when the user asks for /pr-cleanup or full PR cleanup
|
|
7
|
+
(place, name, converge, then shrink).
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PR cleanup
|
|
11
|
+
|
|
12
|
+
One coding agent cleans a pull request end-to-end: put code in the right place,
|
|
13
|
+
name it for what it does, run the converging cleanup loop, then shrink the
|
|
14
|
+
change into a reviewable size.
|
|
15
|
+
|
|
16
|
+
This skill is host-neutral. Any coding agent that can edit the PR head, run
|
|
17
|
+
scoped tests, and invoke the composed skills may run it.
|
|
18
|
+
|
|
19
|
+
## When to use
|
|
20
|
+
|
|
21
|
+
- `/pr-cleanup <PR>` or “run pr-cleanup on this PR”
|
|
22
|
+
- A PR needs extraction + naming + sr-loop + a smaller reviewable slice in one pass
|
|
23
|
+
|
|
24
|
+
## Inputs
|
|
25
|
+
|
|
26
|
+
- Target: PR URL, number, or branch (required). Missing → ask:
|
|
27
|
+
`Give a GitHub PR number or URL for pr-cleanup.`
|
|
28
|
+
- Repo: take from the PR URL when given; otherwise the user’s default monitored repo
|
|
29
|
+
|
|
30
|
+
## Composition (run in this order)
|
|
31
|
+
|
|
32
|
+
| Step | Skill | Role |
|
|
33
|
+
|------|--------|------|
|
|
34
|
+
| 1 | `shared-extraction-audit` | Wrong *place* (workflow package vs shared library) |
|
|
35
|
+
| 2 | `name-by-capability-audit` | Wrong *name* (driver word on reusable capability) |
|
|
36
|
+
| 3 | `sr-loop` / `e-simplify` then `e-code-review` | Converging simplify + high-effort review with `--fix` |
|
|
37
|
+
| 4 | `small-cl` | Split / shrink into a focused reviewable PR |
|
|
38
|
+
|
|
39
|
+
All four run under **one coding agent session** on the same worktree / PR head.
|
|
40
|
+
For sr-loop advisor consults, bind `team-advisor` as a second session at equal
|
|
41
|
+
tier when the host supports it (see `team-advisor` and the advisor docs).
|
|
42
|
+
|
|
43
|
+
## Fix-as-you-go (required)
|
|
44
|
+
|
|
45
|
+
Some of these skills can report without changing code. For **pr-cleanup**, that
|
|
46
|
+
is not enough:
|
|
47
|
+
|
|
48
|
+
1. **Stream findings** — as each audit/loop returns an item (offense, rename,
|
|
49
|
+
simplify fix, review finding), treat it as work to do now, not a backlog.
|
|
50
|
+
2. **Apply the fix** on the PR head (or the first small-cl increment if already
|
|
51
|
+
splitting) before moving on to the next item when practical.
|
|
52
|
+
3. **Validate** after each applied fix: scoped tests beside touched files (or
|
|
53
|
+
`py_compile` / package tests when there is no adjacent suite). No test theater.
|
|
54
|
+
4. **Commit + push** after each validated changing pass (one concern per commit
|
|
55
|
+
when possible; keep the PR draft).
|
|
56
|
+
5. **Do not** finish with an audit-only report while known P0/P1 fixes sit
|
|
57
|
+
unapplied — either fix them or hard-block with why.
|
|
58
|
+
|
|
59
|
+
If the user says **audit-only**, stop after reports and skip apply / small-cl.
|
|
60
|
+
|
|
61
|
+
## Process
|
|
62
|
+
|
|
63
|
+
1. Resolve PR → convert to draft if needed; clean worktree of the PR head;
|
|
64
|
+
never mark ready for review.
|
|
65
|
+
2. Run the four composed skills in order on that head:
|
|
66
|
+
- `shared-extraction-audit` in the **implement** band (not audit-only)
|
|
67
|
+
- `name-by-capability-audit`; apply clear rename directions (or ones the user
|
|
68
|
+
already approved), noting rename direction in the commit message
|
|
69
|
+
- `sr-loop`: Phase A `e-simplify`, Phase B `e-code-review` at **xhigh** with
|
|
70
|
+
`--fix` (not the default low); consult `team-advisor` before the first
|
|
71
|
+
write and after writes + validation
|
|
72
|
+
- Apply fixes as each pass returns findings; validate → commit → push
|
|
73
|
+
3. After the loop converges (or nits-only stop): run **small-cl** — identify the
|
|
74
|
+
first coherent reviewable increment; if the PR is still too wide, split or
|
|
75
|
+
retitle/scope per small-cl (do not invent extra PRs unless the user asked).
|
|
76
|
+
4. Return the finish report below. Merge-ready email / chat delivery is owned by
|
|
77
|
+
the caller (for example a PR monitor host), not this skill.
|
|
78
|
+
|
|
79
|
+
## Hard rules
|
|
80
|
+
|
|
81
|
+
- No test theater.
|
|
82
|
+
- Real spawn/behavior validation when the PR claims an external binary path.
|
|
83
|
+
- Prefer cleanup; functional only for correctness. Label each commit
|
|
84
|
+
`cleanup` vs `functional`.
|
|
85
|
+
- Keep the PR draft. Never mark ready for review during this skill.
|
|
86
|
+
- Extraction before rename when both apply to the same symbol (move, then name
|
|
87
|
+
the new home).
|
|
88
|
+
- small-cl last — shrink only after place / name / cleanup are settled enough
|
|
89
|
+
that the slice is honest.
|
|
90
|
+
|
|
91
|
+
## Finish report
|
|
92
|
+
|
|
93
|
+
- PR / repo / starting_sha / ending_sha
|
|
94
|
+
- Per step: extraction findings applied, naming violations applied, sr-loop
|
|
95
|
+
passes + commits, small-cl outcome (kept / split plan)
|
|
96
|
+
- `commits_pushed` with cleanup|functional labels
|
|
97
|
+
- `validation_ran` + outcomes
|
|
98
|
+
- `hard_block` or null
|
|
99
|
+
- `draft_still: true`
|
|
@@ -8,7 +8,7 @@ State both of these to the user, in these terms, whenever a proof-of-concept is
|
|
|
8
8
|
|
|
9
9
|
Promotion records the controls applied to the real diff:
|
|
10
10
|
|
|
11
|
-
- review and verification under the [review guide](../../reviews/SKILL.md#review-workflow);
|
|
11
|
+
- review and verification under the [review guide](../../skills-archived/reviews/SKILL.md#review-workflow);
|
|
12
12
|
- the `privacy-hygiene` sweep for personal data and secrets;
|
|
13
13
|
- the pull-request review criteria and any PR-loop reviewers.
|
|
14
14
|
|
|
@@ -14,7 +14,7 @@ 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. **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.
|
|
17
|
+
6. **Review and verify the real diff.** Apply the [review guide](../../skills-archived/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
19
|
7. **Commit and open a draft PR.** After the review and verification record is complete, commit by hand per the `git-workflow` rule, then open a draft PR. Evidence: the commit hash and the PR URL.
|
|
20
20
|
|
|
@@ -27,7 +27,7 @@ DESTRUCTIVE_HOOK_BASENAME = ALL_SAFETY_HOOK_SCRIPT_BASENAMES[1]
|
|
|
27
27
|
|
|
28
28
|
CODE_RULES_HOOK_BASENAME = "code_rules_enforcer.py"
|
|
29
29
|
TDD_HOOK_BASENAME = "tdd_enforcer.py"
|
|
30
|
-
|
|
30
|
+
QUESTION_SHAPE_HOOK_BASENAME = "ask_user_question_shape_blocker.py"
|
|
31
31
|
|
|
32
32
|
BASH_MATCHER = "Bash"
|
|
33
33
|
WRITE_MATCHER = "Write"
|
|
@@ -186,7 +186,7 @@ def test_build_excludes_every_non_safety_hook() -> None:
|
|
|
186
186
|
for each_excluded in (
|
|
187
187
|
CODE_RULES_HOOK_BASENAME,
|
|
188
188
|
TDD_HOOK_BASENAME,
|
|
189
|
-
|
|
189
|
+
QUESTION_SHAPE_HOOK_BASENAME,
|
|
190
190
|
):
|
|
191
191
|
assert all(each_excluded not in each_command for each_command in all_commands)
|
|
192
192
|
|
|
@@ -34,7 +34,7 @@ from prototype_scripts_constants.config.probe_sandbox_safety_constants import (
|
|
|
34
34
|
|
|
35
35
|
SCRIPTS_DIRECTORY = Path(__file__).resolve().parent
|
|
36
36
|
PROBE_PATH = SCRIPTS_DIRECTORY / "probe_sandbox_safety.py"
|
|
37
|
-
HOOKS_BLOCKING_DIRECTORY = SCRIPTS_DIRECTORY.parents[
|
|
37
|
+
HOOKS_BLOCKING_DIRECTORY = SCRIPTS_DIRECTORY.parents[3] / "hooks" / "blocking"
|
|
38
38
|
|
|
39
39
|
PII_HOOK_BASENAME = ALL_SAFETY_HOOK_SCRIPT_BASENAMES[0]
|
|
40
40
|
DESTRUCTIVE_HOOK_BASENAME = ALL_SAFETY_HOOK_SCRIPT_BASENAMES[1]
|
|
@@ -15,11 +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. **Review and verify** the real diff against the [review guide](../../reviews/SKILL.md#review-workflow). Record the checks run and repair every required finding.
|
|
18
|
+
6. **Review and verify** the real diff against the [review guide](../../skills-archived/reviews/SKILL.md#review-workflow). Record the checks run and repair every required finding.
|
|
19
19
|
7. **Commit and PR.** After the review and verification record is complete, commit by hand per the `git-workflow` rule, then open a draft PR.
|
|
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 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.
|
|
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](../../skills-archived/reviews/SKILL.md#review-workflow). The promotion record states the checks run and the remaining TDD limitation.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@../AGENTS.md
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-router
|
|
3
|
+
description: >-
|
|
4
|
+
Resolve and arm one supported `route_review_config` route through the registered Agent|Task gate. Triggers: /review-router and guarded reviewer spawn.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Review Router
|
|
8
|
+
|
|
9
|
+
Resolve and arm the supported `e-simplify` route. The registered `PreToolUse Agent|Task` hook enforces the exact armed spawn payload.
|
|
10
|
+
|
|
11
|
+
## When this applies
|
|
12
|
+
|
|
13
|
+
Use for `/review-router` and route execution after `/review-tier`. Return `UNSUPPORTED_ROUTE` for `e-code-review`; preserve `/e-code-review` behavior.
|
|
14
|
+
|
|
15
|
+
## Operations
|
|
16
|
+
|
|
17
|
+
1. Register `reference/task-seeds.md` with the host task tool.
|
|
18
|
+
2. Call `scripts/review_router_cli.py resolve` for the current `route_policy_hash` decision and optional tier override.
|
|
19
|
+
3. Call `arm` for the exact selected slot and dispatch the returned Agent|Task payload.
|
|
20
|
+
4. Let the registered hook enforce the payload, then call `close`.
|
|
21
|
+
|
|
22
|
+
The route topology is fixed: T1 uses one Luna High slot, T2 uses one Luna Max slot, and T3 uses six ordered Luna High slots.
|
|
23
|
+
|
|
24
|
+
## Composition
|
|
25
|
+
|
|
26
|
+
| Peer | When | Produces | Missing behavior |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| `/review-tier` | Before routing | Current tier decision | Return the route request to `/review-tier`. |
|
|
29
|
+
| `/e-simplify` | When cleanup review is requested | Cleanup review request | Return `UNSUPPORTED_ROUTE`. |
|
|
30
|
+
|
|
31
|
+
## File index
|
|
32
|
+
|
|
33
|
+
| File | Purpose |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `SKILL.md` | Route contract and operations |
|
|
36
|
+
| `reference/route-policy.json` | Supported route topology |
|
|
37
|
+
| `reference/task-seeds.md` | Current route task seeds |
|
|
38
|
+
| `scripts/review_router.py` | `route_policy_hash` input and route resolution |
|
|
39
|
+
| `scripts/review_router_cli.py` | Resolve, arm, and close operations |
|
|
40
|
+
| `scripts/test_review_router.py` | Route policy tests |
|
|
41
|
+
| `scripts/test_review_router_cli.py` | CLI rejection tests |
|
|
42
|
+
| `scripts/test_review_router_integration.py` | CLI and registered-hook tests |
|
|
43
|
+
| `scripts/review_router_constants/config/constants.py` | Portable route constants |
|
|
44
|
+
| `scripts/review_router_constants/config/__init__.py` | Runtime configuration package |
|
|
45
|
+
| `scripts/review_router_constants/__init__.py` | Constants package |
|
|
46
|
+
| `scripts/conftest.py` | Test import setup |
|
|
47
|
+
|
|
48
|
+
## Folder map
|
|
49
|
+
|
|
50
|
+
- `reference/` — route policy and task seeds.
|
|
51
|
+
- `scripts/` — route resolution, CLI operations, and tests.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"routes": {
|
|
4
|
+
"e-simplify": {"status": "SUPPORTED", "skill": "e-simplify", "tiers": ["T1", "T2", "T3"], "models": {"T1": {"role": "executor", "model": "gpt-5.6-luna", "effort": "high", "pass_ids": ["simplify-01"]}, "T2": {"role": "executor", "model": "gpt-5.6-luna", "effort": "max", "pass_ids": ["simplify-01"]}, "T3": {"role": "executor", "model": "gpt-5.6-luna", "effort": "high", "pass_ids": ["simplify-01", "simplify-02", "simplify-03", "simplify-04", "simplify-05", "simplify-06"]}}},
|
|
5
|
+
"e-code-review": {"status": "UNSUPPORTED_ROUTE", "skill": "e-code-review", "tiers": []}
|
|
6
|
+
}
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Register resolve e-simplify, apply override, arm exact slot, enforce through the registered Agent|Task hook, close the decision, and report unsupported e-code-review as host tasks. Complete each with command output or the current decision/armed record.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"""Thin route orchestrator for review-tier decisions."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from review_router_constants.config.constants import UNSUPPORTED_ROUTE, UNSUPPORTED_TIER
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def load_route_policy() -> dict:
|
|
12
|
+
"""Load versioned route policy data.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
Returns:
|
|
16
|
+
Route policy mapping.
|
|
17
|
+
Raises:
|
|
18
|
+
ValueError: If the policy schema is invalid.
|
|
19
|
+
"""
|
|
20
|
+
policy_path = Path(__file__).parent.parent / "reference" / "route-policy.json"
|
|
21
|
+
policy = json.loads(policy_path.read_text(encoding="utf-8"))
|
|
22
|
+
if policy.get("version") != 1 or not isinstance(policy.get("routes"), dict):
|
|
23
|
+
raise ValueError("malformed route policy")
|
|
24
|
+
return policy
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def resolve_route(route: str, tier: str, policy: dict | None = None) -> dict:
|
|
28
|
+
"""Resolve one route or return a stable unsupported result.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
route: Requested route name.
|
|
32
|
+
tier: Effective tier.
|
|
33
|
+
policy: Optional route policy.
|
|
34
|
+
Returns:
|
|
35
|
+
Dispatch record or unsupported status.
|
|
36
|
+
"""
|
|
37
|
+
selected_policy = policy or load_route_policy()
|
|
38
|
+
route_record = selected_policy["routes"].get(route)
|
|
39
|
+
if route_record is None or route_record["status"] != "SUPPORTED":
|
|
40
|
+
return {"status": UNSUPPORTED_ROUTE, "route": route, "tier": tier}
|
|
41
|
+
if tier not in route_record["tiers"]:
|
|
42
|
+
return {"status": UNSUPPORTED_TIER, "route": route, "tier": tier}
|
|
43
|
+
dispatch = route_record["models"][tier]
|
|
44
|
+
return {
|
|
45
|
+
"status": "SUPPORTED",
|
|
46
|
+
"route": route,
|
|
47
|
+
"tier": tier,
|
|
48
|
+
"skill": route_record["skill"],
|
|
49
|
+
"dispatch": dispatch,
|
|
50
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"""CLI for signed review decisions and one-time spawn permits."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
import hashlib
|
|
7
|
+
import hmac
|
|
8
|
+
import json
|
|
9
|
+
import os
|
|
10
|
+
import shlex
|
|
11
|
+
import secrets
|
|
12
|
+
import sys
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
|
|
15
|
+
tier_script = Path(__file__).resolve().parents[1].parent / "review-tier" / "scripts"
|
|
16
|
+
if str(tier_script) not in sys.path:
|
|
17
|
+
sys.path.insert(0, str(tier_script))
|
|
18
|
+
from review_router_constants.config.constants import ( # noqa: E402
|
|
19
|
+
ALL_OVERRIDE_VALUES,
|
|
20
|
+
CLEANUP_CONTRACT,
|
|
21
|
+
DECISION_ID_BYTES,
|
|
22
|
+
INTEGRITY_KEY_BYTES,
|
|
23
|
+
INVALID_ROUTE_ARM,
|
|
24
|
+
INVALID_ROUTE_RECORD,
|
|
25
|
+
MALFORMED_TIER_OVERRIDE,
|
|
26
|
+
ROUTE_SPAWN_ARMED,
|
|
27
|
+
UNKNOWN_ROUTE_SLOT,
|
|
28
|
+
UNSUPPORTED_ROUTE,
|
|
29
|
+
)
|
|
30
|
+
from review_tier import ( # noqa: E402
|
|
31
|
+
build_generation,
|
|
32
|
+
canonical_json_hash,
|
|
33
|
+
inventory_generation,
|
|
34
|
+
policy_hash,
|
|
35
|
+
router_state_directory,
|
|
36
|
+
router_state_root,
|
|
37
|
+
router_state_root_id,
|
|
38
|
+
)
|
|
39
|
+
from review_router import load_route_policy, resolve_route # noqa: E402
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _write_signed(directory: Path, name: str, record: dict, secret: bytes) -> None:
|
|
43
|
+
encoded = _encode_record(record)
|
|
44
|
+
temporary = directory / f".{name}.tmp"
|
|
45
|
+
temporary.write_bytes(encoded)
|
|
46
|
+
temporary.replace(directory / name)
|
|
47
|
+
(directory / f"{name}.hmac").write_text(hmac.new(secret, encoded, hashlib.sha256).hexdigest(), encoding="ascii")
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def _read_signed(directory: Path, name: str) -> dict:
|
|
51
|
+
secret = (directory / "integrity.key").read_bytes()
|
|
52
|
+
record_path = directory / name
|
|
53
|
+
encoded = record_path.read_bytes()
|
|
54
|
+
expected = hmac.new(secret, encoded, hashlib.sha256).hexdigest()
|
|
55
|
+
if not hmac.compare_digest(expected, (directory / f"{name}.hmac").read_text(encoding="ascii")):
|
|
56
|
+
raise ValueError(INVALID_ROUTE_RECORD)
|
|
57
|
+
return json.loads(encoded)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _encode_record(record: dict) -> bytes:
|
|
61
|
+
return json.dumps(record, sort_keys=True, separators=(",", ":")).encode()
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _override(arguments: str) -> str | None:
|
|
65
|
+
tokens = shlex.split(arguments)
|
|
66
|
+
matches = [token for token in tokens if token == "--tier" or token.startswith("--tier=")]
|
|
67
|
+
if len(matches) > 1:
|
|
68
|
+
raise ValueError(MALFORMED_TIER_OVERRIDE)
|
|
69
|
+
if not matches:
|
|
70
|
+
return None
|
|
71
|
+
if matches[0] == "--tier":
|
|
72
|
+
index = tokens.index("--tier")
|
|
73
|
+
if index + 1 >= len(tokens) or tokens[index + 1] not in ALL_OVERRIDE_VALUES:
|
|
74
|
+
raise ValueError(MALFORMED_TIER_OVERRIDE)
|
|
75
|
+
return f"T{tokens[index + 1]}"
|
|
76
|
+
override = matches[0].split("=", 1)[1]
|
|
77
|
+
if override not in ALL_OVERRIDE_VALUES:
|
|
78
|
+
raise ValueError(MALFORMED_TIER_OVERRIDE)
|
|
79
|
+
return f"T{override}"
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def resolve(cwd: str, review_kind: str, arguments: str, base_ref: str | None) -> dict:
|
|
83
|
+
"""Create a signed review decision.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
cwd: Repository path.
|
|
87
|
+
review_kind: Requested review route.
|
|
88
|
+
arguments: Review command arguments.
|
|
89
|
+
base_ref: Optional base reference.
|
|
90
|
+
Returns:
|
|
91
|
+
Decision summary.
|
|
92
|
+
Raises:
|
|
93
|
+
ValueError: If the override or base reference is invalid.
|
|
94
|
+
"""
|
|
95
|
+
route_policy = load_route_policy()
|
|
96
|
+
route_record = route_policy["routes"].get(review_kind)
|
|
97
|
+
if route_record is None or route_record.get("status") != "SUPPORTED":
|
|
98
|
+
return {"status": UNSUPPORTED_ROUTE}
|
|
99
|
+
override = _override(arguments)
|
|
100
|
+
directory = router_state_directory(cwd)
|
|
101
|
+
if (directory / "armed-spawn.json").exists():
|
|
102
|
+
raise ValueError(ROUTE_SPAWN_ARMED)
|
|
103
|
+
directory.mkdir(parents=True, exist_ok=True)
|
|
104
|
+
key_path = directory / "integrity.key"
|
|
105
|
+
if not key_path.exists():
|
|
106
|
+
key_path.write_bytes(secrets.token_bytes(INTEGRITY_KEY_BYTES))
|
|
107
|
+
secret = key_path.read_bytes()
|
|
108
|
+
state_root = router_state_root(cwd)
|
|
109
|
+
generation = build_generation(cwd, requested_override=override, base_ref=base_ref, state_root=state_root)
|
|
110
|
+
route = resolve_route(review_kind, generation["effective_tier"], route_policy)
|
|
111
|
+
decision_id = secrets.token_hex(DECISION_ID_BYTES)
|
|
112
|
+
dispatch = route["dispatch"]
|
|
113
|
+
slots = [{"slot_id": each_slot_id, "model": dispatch["model"], "effort": dispatch["effort"]} for each_slot_id in dispatch["pass_ids"]]
|
|
114
|
+
decision = {**generation, "decision_id": decision_id, "review_kind": review_kind, "route_policy_hash": policy_hash(route_policy), "state_root_id": router_state_root_id(state_root), "slots": slots}
|
|
115
|
+
_write_signed(directory, "decision.json", decision, secret)
|
|
116
|
+
return {"status": "SUPPORTED", "decision_id": decision_id, "effective_tier": decision["effective_tier"], "automatic_tier": decision["calculated_tier"], "slot_ids": [slot["slot_id"] for slot in slots]}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def arm(cwd: str, decision_id: str, slot_id: str) -> dict:
|
|
120
|
+
"""Create a one-time spawn permit.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
cwd: Repository path.
|
|
124
|
+
decision_id: Decision identifier.
|
|
125
|
+
slot_id: Selected dispatch slot.
|
|
126
|
+
Returns:
|
|
127
|
+
Agent tool payload.
|
|
128
|
+
Raises:
|
|
129
|
+
OSError: If signed state is unavailable.
|
|
130
|
+
ValueError: If the decision or slot is invalid.
|
|
131
|
+
"""
|
|
132
|
+
directory = router_state_directory(cwd)
|
|
133
|
+
secret = (directory / "integrity.key").read_bytes()
|
|
134
|
+
decision = _read_signed(directory, "decision.json")
|
|
135
|
+
if decision["decision_id"] != decision_id or (directory / "armed-spawn.json").exists():
|
|
136
|
+
raise ValueError(INVALID_ROUTE_ARM)
|
|
137
|
+
consumed_prefix = f"{decision_id}--{slot_id}"
|
|
138
|
+
if any(path.name.startswith(consumed_prefix) for path in (directory / "consumed").glob(f"{consumed_prefix}*")):
|
|
139
|
+
raise ValueError(INVALID_ROUTE_ARM)
|
|
140
|
+
slot = next((each_slot for each_slot in decision["slots"] if each_slot["slot_id"] == slot_id), None)
|
|
141
|
+
if slot is None:
|
|
142
|
+
raise ValueError(UNKNOWN_ROUTE_SLOT)
|
|
143
|
+
consumed_slots = {path.name.split("--", 1)[1].split(".", 1)[0] for path in (directory / "consumed").glob(f"{decision_id}--*.json")}
|
|
144
|
+
expected_slots = [each_slot["slot_id"] for each_slot in decision["slots"] if each_slot["slot_id"] not in consumed_slots]
|
|
145
|
+
if expected_slots and slot_id != expected_slots[0]:
|
|
146
|
+
raise ValueError(INVALID_ROUTE_ARM)
|
|
147
|
+
decision_base = decision.get("base_ref") if decision.get("base_source") == "explicit" else None
|
|
148
|
+
state_root = router_state_root(cwd)
|
|
149
|
+
current_hash = str(inventory_generation(cwd, decision_base, state_root=state_root)["diff_hash"])
|
|
150
|
+
if current_hash != decision["diff_hash"]:
|
|
151
|
+
raise ValueError(INVALID_ROUTE_ARM)
|
|
152
|
+
prompt = f"{CLEANUP_CONTRACT} Review {decision['review_kind']} for {decision['worktree']}. Angles: Reuse, Simplification, Efficiency, Altitude. Apply direct fixes within scope. Skip correctness, security, behavior-changing, and out-of-scope findings. Decision {decision_id}; slot {slot_id}."
|
|
153
|
+
spawn = {"decision_id": decision_id, "decision_hash": canonical_json_hash(decision), "state_root_id": router_state_root_id(state_root), "slot_id": slot_id, "tool_name": "Agent", "executor_type": "Luna", "model": slot["model"], "effort": slot["effort"], "prompt": prompt, "prompt_hash": hashlib.sha256(prompt.encode()).hexdigest(), "diff_hash": decision["diff_hash"]}
|
|
154
|
+
_write_signed(directory, "armed-spawn.json", spawn, secret)
|
|
155
|
+
return {"tool_name": "Agent", "tool_input": {"executor_type": "Luna", "model": spawn["model"], "effort": spawn["effort"], "prompt": prompt}}
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def close(cwd: str, decision_id: str) -> dict:
|
|
159
|
+
"""Close a decision after its permit is consumed.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
cwd: Repository path.
|
|
163
|
+
decision_id: Decision identifier.
|
|
164
|
+
Returns:
|
|
165
|
+
Closure summary.
|
|
166
|
+
Raises:
|
|
167
|
+
OSError: If signed state is unavailable.
|
|
168
|
+
ValueError: If the decision is invalid or still armed.
|
|
169
|
+
"""
|
|
170
|
+
directory = router_state_directory(cwd)
|
|
171
|
+
decision = _read_signed(directory, "decision.json")
|
|
172
|
+
if decision["decision_id"] != decision_id or (directory / "armed-spawn.json").exists():
|
|
173
|
+
raise ValueError(ROUTE_SPAWN_ARMED)
|
|
174
|
+
(directory / "decision.json").unlink()
|
|
175
|
+
(directory / "decision.json.hmac").unlink()
|
|
176
|
+
return {"status": "CLOSED", "decision_id": decision_id}
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def main() -> int:
|
|
180
|
+
"""Run the review-routing command line interface.
|
|
181
|
+
|
|
182
|
+
Returns:
|
|
183
|
+
Process exit status.
|
|
184
|
+
"""
|
|
185
|
+
parser = argparse.ArgumentParser()
|
|
186
|
+
parser.add_argument("command", choices=("resolve", "arm", "close"))
|
|
187
|
+
parser.add_argument("--review-kind", default="e-simplify")
|
|
188
|
+
parser.add_argument("--cwd", default=os.getcwd())
|
|
189
|
+
parser.add_argument("--arguments", default="")
|
|
190
|
+
parser.add_argument("--base-ref")
|
|
191
|
+
parser.add_argument("--decision-id")
|
|
192
|
+
parser.add_argument("--slot")
|
|
193
|
+
parser.add_argument("--requested", action="store_true")
|
|
194
|
+
options = parser.parse_args()
|
|
195
|
+
if options.requested:
|
|
196
|
+
parser.error("--requested is not supported")
|
|
197
|
+
try:
|
|
198
|
+
if options.command == "resolve":
|
|
199
|
+
dispatch_record = resolve(options.cwd, options.review_kind, options.arguments, base_ref=options.base_ref)
|
|
200
|
+
elif options.command == "arm":
|
|
201
|
+
dispatch_record = arm(options.cwd, options.decision_id, options.slot)
|
|
202
|
+
else:
|
|
203
|
+
dispatch_record = close(options.cwd, options.decision_id)
|
|
204
|
+
except (OSError, ValueError) as error:
|
|
205
|
+
parser.error(str(error))
|
|
206
|
+
print(json.dumps(dispatch_record, sort_keys=True))
|
|
207
|
+
return 0
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
if __name__ == "__main__":
|
|
211
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Review-router constants package."""
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Constants for route_review_config."""
|
|
2
|
+
|
|
3
|
+
UNSUPPORTED_ROUTE = "UNSUPPORTED_ROUTE"
|
|
4
|
+
UNSUPPORTED_TIER = "UNSUPPORTED_TIER"
|
|
5
|
+
INVALID_ROUTE_RECORD = "INVALID_ROUTE_RECORD"
|
|
6
|
+
MALFORMED_TIER_OVERRIDE = "MALFORMED_TIER_OVERRIDE"
|
|
7
|
+
INVALID_ROUTE_ARM = "INVALID_ROUTE_ARM"
|
|
8
|
+
UNKNOWN_ROUTE_SLOT = "UNKNOWN_ROUTE_SLOT"
|
|
9
|
+
ROUTE_SPAWN_ARMED = "ROUTE_SPAWN_ARMED"
|
|
10
|
+
ALL_OVERRIDE_VALUES = ("1", "2", "3")
|
|
11
|
+
INTEGRITY_KEY_BYTES = 32
|
|
12
|
+
DECISION_ID_BYTES = 16
|
|
13
|
+
CLEANUP_CONTRACT = """This is a cleanup-only review of the current diff, not a correctness or security bug hunt. Gather the diff and include uncommitted changes. Review reuse, simplification, efficiency, and altitude. Reuse existing helpers and adjacent patterns. Simplify redundant state, copy-paste, nesting, dead code, and unnecessary complexity. Remove redundant computation, repeated I/O, sequential independent work, and long-lived captured objects. Fix each issue at the owning abstraction and preserve the intended behavior. Apply safe fixes directly within the reviewed diff. Each finding has file, line, summary, and concrete cost. Skip findings whose fix changes intended behavior, reaches outside the diff, or belongs to correctness review. Respond exactly: That's a correctness review — use /e-code-review, not this skill. Finish with what was fixed and what was skipped."""
|