claude-dev-env 2.16.0 → 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/AGENTS.md +6 -0
- package/.agents/skills/AGENTS.md +34 -35
- package/.agents/skills/_shared/pr-loop/AGENTS.md +22 -15
- package/.agents/skills/_shared/pr-loop/portable-driver.md +6 -7
- package/.agents/skills/_shared/pr-loop/prompts/AGENTS.md +2 -2
- package/.agents/skills/_shared/pr-loop/scripts/AGENTS.md +1 -1
- package/.agents/skills/_shared/pr-loop/scripts/portable_converge_driver.py +25 -16
- package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +1 -5
- package/.agents/skills/autoconverge/reference/convergence-gates.md +31 -0
- package/.agents/skills/autoconverge/reference/convergence.md +8 -10
- package/.agents/skills/autoconverge/reference/gotchas.md +1 -1
- package/.agents/skills/autoconverge/reference/stop-conditions.md +1 -1
- package/.agents/skills/autoconverge/workflow/converge.codex-gate.test.mjs +1 -1
- package/.agents/skills/autoconverge/workflow/converge.contract.test.mjs +1 -1
- package/.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/.agents/skills/eli5/SKILL.md +128 -0
- package/.agents/skills/eli5/reference/task-seeds.md +11 -0
- package/.agents/skills/fresh-branch/scripts/test_create_fresh_branch.py +2 -3
- 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/.agents/skills/prototype/reference/honest-limitations.md +1 -1
- package/.agents/skills/prototype/reference/promotion-tasks.md +1 -1
- package/.agents/skills/prototype/scripts/test_build_sandbox_settings.py +2 -2
- package/.agents/skills/prototype/workflows/promotion.md +2 -2
- 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/session-log/SKILL.md +1 -1
- 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/source-command-logifix/SKILL.md +29 -0
- package/.agents/skills/source-command-sr-loop/SKILL.md +58 -0
- package/.agents/skills-archived/AGENTS.md +45 -0
- package/.agents/{skills → skills-archived}/anthropic-plan/AGENTS.md +1 -1
- package/.agents/{skills → skills-archived}/bugteam/scripts/reflow_skill_md.py +3 -3
- package/.agents/{skills → skills-archived}/codex-review/test_skill_scaffold.py +1 -1
- package/.agents/{skills → skills-archived}/copilot-finding-triage/SKILL.md +1 -1
- package/.agents/{skills → skills-archived}/pr-converge/SKILL.md +6 -6
- package/.agents/{skills → skills-archived}/pr-converge/pr_converge_skill_constants/AGENTS.md +1 -1
- package/.agents/{skills → skills-archived}/pr-converge/pr_converge_skill_constants/constants.py +1 -1
- package/.agents/{skills → skills-archived}/pr-converge/reference/multi-pr-orchestration.md +1 -1
- package/.agents/{skills → skills-archived}/pr-converge/reference/per-tick.md +3 -3
- package/.agents/{skills → skills-archived}/pr-converge/scripts/reflow_skill_md.py +2 -2
- package/.agents/{skills → skills-archived}/pr-converge/test_portable_pacer_gate.py +6 -2
- package/.agents/{skills → skills-archived}/pr-converge/workflows/schedule-wakeup-loop.md +1 -1
- package/.agents/{skills → skills-archived}/split-pr/reference/proposal-format.md +1 -1
- 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/pr-loop/audit-reply-template.md +4 -0
- 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/ever-shipped-skills.mjs +29 -1
- package/bin/install-constants.mjs +15 -6
- package/bin/install.agents-home.test.mjs +13 -0
- package/bin/install.cursor-rules.test.mjs +3 -3
- package/bin/install.mjs +80 -20
- package/bin/install.profile-root.test.mjs +1 -1
- package/bin/install.prune.test.mjs +23 -204
- package/bin/install.test.mjs +8 -5
- package/bin/resolve-install-root.mjs +21 -0
- package/bin/resolve-package-managed-directory.mjs +4 -4
- 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/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_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/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/package.json +1 -4
- 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/test_validate_instruction_pairs.py +30 -3
- 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/.agents/skills/grokify/evals/README.md +0 -72
- package/.agents/skills/grokify/evals/parse-payload.test.mjs +0 -171
- package/.agents/skills/grokify/evals/run-capability-evals.mjs +0 -545
- package/_shared/pr-loop/scripts/README.md +0 -21
- 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/.agents/{skills → skills-archived}/anthropic-plan/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/__init__.py +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/validate_packet_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/test_validate_packet.py +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/validate_packet.py +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/templates/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/templates/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/templates/README.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/templates/build-prompt.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/templates/reuse-audit.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/templates/source-map.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/templates/visual-plan.template.html +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/test_skill_contract.py +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/workflow/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/workflow/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/workflow/plan-packet.contract.test.mjs +0 -0
- /package/.agents/{skills → skills-archived}/anthropic-plan/workflow/plan-packet.mjs +0 -0
- /package/.agents/{skills → skills-archived}/auditing-claude-config/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/auditing-claude-config/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/auditing-claude-config/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/auditing-claude-config/reference/probe-hook.md +0 -0
- /package/.agents/{skills → skills-archived}/beat-sheet/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/beat-sheet/reference/visual-beats.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/CONSTRAINTS.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/EXAMPLES.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/PROMPTS.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/README.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/audit-and-teammates.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/copilot-gap-analysis.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/design-rationale.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/github-pr-reviews.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/audit-assign-ids.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/audit-capture-excerpts.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/audit-walk-categories.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/audit-write-xml.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-append-summary.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-apply-fixes.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-git-add-commit.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-git-push.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-post-reply.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-publish-summary.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-py-compile.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-read-files.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-resolve-thread.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-test-suite.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-violation-count.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-write-xml.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/reference/team-setup.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/README.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_code_rules_gate.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_fix_hookspath.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_preflight.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/__init__.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/probe_code_rules_enforcer_check_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/reflow_skill_md_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/windows_safe_rmtree_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/probe_code_rules_enforcer_check.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/test_bugteam_code_rules_gate.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/test_bugteam_fix_hookspath.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/test_bugteam_preflight.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/test_probe_code_rules_enforcer_check.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/test_windows_safe_rmtree.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/scripts/windows_safe_rmtree.py +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/sources.md +0 -0
- /package/.agents/{skills → skills-archived}/bugteam/test_skill_additions.py +0 -0
- /package/.agents/{skills → skills-archived}/closeout/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/closeout/reference/handoff-prompt-template.md +0 -0
- /package/.agents/{skills → skills-archived}/closeout/reference/pii-redaction-checklist.md +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/reference/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/reference/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/reference/cli-contract.md +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/reference/loop-integration.md +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_down_classifier.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/__init__.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/classifier_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/codex_usage_probe_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/findings_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/run_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_usage_probe.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/auth_failure_synthetic.txt +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/config_load_failure_v0.125.0.txt +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/freeform_findings_v0.144.3.txt +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/model_rejection_v0.125.0.jsonl +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/structured_findings.txt +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/success_stream_v0.144.3.jsonl +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/unknown_failure_synthetic.txt +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/usage_limit_synthetic.txt +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/parse_codex_findings.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/run_codex_review.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/test_codex_down_classifier.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/test_codex_usage_probe.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/test_parse_codex_findings.py +0 -0
- /package/.agents/{skills → skills-archived}/codex-review/scripts/test_run_codex_review.py +0 -0
- /package/.agents/{skills → skills-archived}/comments/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/condensing-instructions/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/copilot-finding-triage/reference/tier-rubric.md +0 -0
- /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/conftest.py +0 -0
- /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/copilot_finding_triage_constants/__init__.py +0 -0
- /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/copilot_finding_triage_constants/config/__init__.py +0 -0
- /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/copilot_finding_triage_constants/config/notify_ntfy_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/notify_ntfy.py +0 -0
- /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/test_notify_ntfy.py +0 -0
- /package/.agents/{skills → skills-archived}/copilot-finding-triage/templates/notification.md +0 -0
- /package/.agents/{skills → skills-archived}/copilot-review/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/copilot-review/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/copilot-review/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/copilot-review/templates/subagent-prompt.md +0 -0
- /package/.agents/{skills → skills-archived}/descriptions/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/emergencies/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/grokify/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/grokify/capability-claims.test.mjs +0 -0
- /package/.agents/{skills → skills-archived}/grokify/templates/handoff-template.md +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/reference/final-validation-tasks.md +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/reference/model-routing.md +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/reference/packet-contract.md +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/reference/packet-schema.json +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/reference/process-inventory.md +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/reference/review-loop.md +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/reference/run-record.schema.json +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/reference/self-audit-tasks.md +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/reference/task-seeds.md +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/reference/task-ticket.md +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/config/__init__.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/config/constants.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/create_packet.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/load_skill_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/test_create_packet.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/test_validate_packet.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/test_validate_protocol.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/test_validate_run.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/validate_packet.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/validate_protocol.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/validate_run.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/test_skill_contract.py +0 -0
- /package/.agents/{skills → skills-archived}/plan-to-pr/test_task_ticket_contract.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/pr_converge_skill_constants/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/pr_converge_skill_constants/__init__.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/convergence-gates.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/examples.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/fix-protocol.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/ground-rules.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-post-replies.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-publish-summary.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-push.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-read-filelines.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-reset-state.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-resolve-threads.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-spawn-clean-coder.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-stage-commit.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-trigger-bugbot.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-write-test.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/progress-checklist.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/state-schema.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/reference/stop-conditions.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/README.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/_pr_converge_path_setup.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/caller-window-pid.ps1 +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_bugbot_ci.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_convergence.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_convergence_availability.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_convergence_gates.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_convergence_thread_gates.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_pending_reviews.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/conftest.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/cursor-agents-continue-caller.cmd +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/cursor-agents-continue-stop-others.ps1 +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/cursor-agents-continue.ahk +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/cursor-agents-continue.cmd +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/fetch_copilot_reviews.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/post_fix_reply.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/__init__.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/pr_converge_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/reflow_skill_md_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test__pr_converge_path_setup.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_bugbot_ci.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_availability.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_codex.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_contract.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_fixture.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_gates.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_thread_gates.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_cursor_agents_continue.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_reflow_skill_md.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/test_step5_host_branch.py +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/workflows/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-converge/workflows/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-fix-protocol/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-loop-cloud-transport/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-loop-cloud-transport/reference/identity-and-hooks.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-loop-cloud-transport/reference/substitution-matrix.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-loop-lifecycle/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/pr-loop-lifecycle/reference/teardown-publish-permissions.md +0 -0
- /package/.agents/{skills → skills-archived}/recall/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/recall/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/recall/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/release-notes-html/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/remember/.claude/CLAUDE.md +0 -0
- /package/.agents/{skills → skills-archived}/remember/AGENTS.md +0 -0
- /package/.agents/{skills → skills-archived}/remember/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/reviewer-gates/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/reviews/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/show/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/accessibility.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/art.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/charts.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/core-design.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/erds.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/flowcharts.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/host-and-html.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/illustrative-diagrams.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/interaction.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/mockups.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/quality-gates.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/structural-diagrams.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/subject-inventory.md +0 -0
- /package/.agents/{skills → skills-archived}/show/references/svg-contract.md +0 -0
- /package/.agents/{skills → skills-archived}/show/routing.yaml +0 -0
- /package/.agents/{skills → skills-archived}/show/samples/pr1262-v2.svg +0 -0
- /package/.agents/{skills → skills-archived}/show/scripts/README.md +0 -0
- /package/.agents/{skills → skills-archived}/show/scripts/validate-artifact.py +0 -0
- /package/.agents/{skills → skills-archived}/show/scripts/validate-package.py +0 -0
- /package/.agents/{skills → skills-archived}/show/templates/html-widget.html +0 -0
- /package/.agents/{skills → skills-archived}/show/templates/svg-base.svg +0 -0
- /package/.agents/{skills → skills-archived}/show/tests/fixtures/css-var.svg +0 -0
- /package/.agents/{skills → skills-archived}/show/tests/fixtures/dead-ref.svg +0 -0
- /package/.agents/{skills → skills-archived}/show/tests/fixtures/filled-glyph.svg +0 -0
- /package/.agents/{skills → skills-archived}/show/tests/fixtures/inherited-fill.svg +0 -0
- /package/.agents/{skills → skills-archived}/show/tests/fixtures/invalid.svg +0 -0
- /package/.agents/{skills → skills-archived}/show/tests/fixtures/large-canvas.svg +0 -0
- /package/.agents/{skills → skills-archived}/show/tests/fixtures/unfilled-connector.svg +0 -0
- /package/.agents/{skills → skills-archived}/show/tests/fixtures/valid.html +0 -0
- /package/.agents/{skills → skills-archived}/show/tests/test_validate-artifact.py +0 -0
- /package/.agents/{skills → skills-archived}/show/tests/test_validators.py +0 -0
- /package/.agents/{skills → skills-archived}/show/workflows/create-visual.md +0 -0
- /package/.agents/{skills → skills-archived}/show/workflows/review-visual.md +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/SKILL.md +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/reference/path-layers.md +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/reference/split-further-loop.md +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/reference/splitting-principles.md +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/analyze_pr.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/categorize_files.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/config/__init__.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/config/dependency_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/config/git_operations_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/config/packing_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/config/plan_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/config/split_pr_constants.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/execute_split_slices.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/pack_files_into_slices.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_dependency_graph.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_git_operations.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_layer_order.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_paginate.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_process_runner.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_script_types.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_title.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_analyze_pr.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_categorize_files.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_categorize_files_packing.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_execute_split_slices.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_dependency_graph.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_git_operations.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_layer_order.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_paginate.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_script_types.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_title.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_verify_dependency_graph.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_verify_plan.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_verify_plan_contract.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/test_verify_plan_path_normalization.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/verify_dependency_graph.py +0 -0
- /package/.agents/{skills → skills-archived}/split-pr/scripts/verify_plan.py +0 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cert-classification-rule
|
|
3
|
+
description: Add or change a Samsung cert-failure classification rule (fixable, unfixable, mixed). Use when the user says add a fixable item, add an unfixable item, mark this rejection unfixable, add a mixed item, classify this cert rejection, or add a cert rule. Covers the unfixable pattern config, the paired production-path test, and the re-sort recipe for already-filed folders.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cert-Failure Classification Rule
|
|
7
|
+
|
|
8
|
+
Add or change how a Samsung Galaxy Store certification rejection is sorted into one of four
|
|
9
|
+
buckets: `Fold`, `unfixable`, `mixed`, or `fixable`. A rejection lands in a bucket from its
|
|
10
|
+
must-fix issue titles plus a Fold device check, and the bucket decides which subfolder holds
|
|
11
|
+
the theme folder.
|
|
12
|
+
|
|
13
|
+
## Contents
|
|
14
|
+
|
|
15
|
+
- [When to use](#when-to-use)
|
|
16
|
+
- [Procedure checklist](#procedure-checklist)
|
|
17
|
+
- [The classification model](#the-classification-model)
|
|
18
|
+
- [How to add an unfixable title pattern](#how-to-add-an-unfixable-title-pattern)
|
|
19
|
+
- [How to add the paired production-path test](#how-to-add-the-paired-production-path-test)
|
|
20
|
+
- [Re-sort already-filed folders for a day](#re-sort-already-filed-folders-for-a-day)
|
|
21
|
+
- [Gotchas](#gotchas)
|
|
22
|
+
- [File index](#file-index)
|
|
23
|
+
- [Folder map](#folder-map)
|
|
24
|
+
|
|
25
|
+
## When to use
|
|
26
|
+
|
|
27
|
+
Use this skill when the user asks to:
|
|
28
|
+
|
|
29
|
+
- add a fixable item, add an unfixable item, or add a mixed item
|
|
30
|
+
- mark a rejection unfixable, or classify a cert rejection
|
|
31
|
+
- add a cert rule
|
|
32
|
+
|
|
33
|
+
Almost every such request is one new unfixable title pattern plus its paired test. The
|
|
34
|
+
`fixable` and `mixed` buckets are not configured by hand (see the model below), so a request
|
|
35
|
+
to "add a fixable item" usually means "stop treating this title as unfixable" or "confirm
|
|
36
|
+
this title stays fixable with a guard test".
|
|
37
|
+
|
|
38
|
+
### When a title pattern cannot help
|
|
39
|
+
|
|
40
|
+
If the rejection's only unfixable cue lives in the report description (the `L_TESTRESULT`
|
|
41
|
+
text, for example `*Not Identifiable`) and no must-fix title carries it, stop and tell the
|
|
42
|
+
user this exact point:
|
|
43
|
+
|
|
44
|
+
> This rejection's only unfixable signal is in the report description, not a must-fix title.
|
|
45
|
+
> The classifier reads titles only, so no pattern here will catch it — teaching it to read
|
|
46
|
+
> the description is a code change to the classifier, not a config rule.
|
|
47
|
+
|
|
48
|
+
## Procedure checklist
|
|
49
|
+
|
|
50
|
+
Copy this and check each item off as you go:
|
|
51
|
+
|
|
52
|
+
- [ ] Confirm the unfixable cue is in a must-fix **title**, not only the description (see Gotchas).
|
|
53
|
+
- [ ] Append the new `{pattern, label, review_note}` after the Gallery entry in `unfixable_patterns.json`.
|
|
54
|
+
- [ ] Add a paired production-path test: the live title classifies as `unfixable`, plus a negative guard for an out-of-scope title.
|
|
55
|
+
- [ ] Run the tests from the `shared_utils` directory and confirm green.
|
|
56
|
+
- [ ] Re-sort the affected day folders with the re-sort recipe (dry run first, then `--apply`).
|
|
57
|
+
|
|
58
|
+
## The classification model
|
|
59
|
+
|
|
60
|
+
`classify_failure(issue_titles, unfixable_patterns)` in
|
|
61
|
+
`shared_utils/samsung_utils/cert_failure_classifier.py:71` decides the bucket from the
|
|
62
|
+
must-fix issue titles:
|
|
63
|
+
|
|
64
|
+
- **unfixable** — every title matches an unfixable pattern.
|
|
65
|
+
- **mixed** — some titles match, some do not. This bucket is **derived**, never configured.
|
|
66
|
+
The classifier returns it once at least one title matches an unfixable pattern and at least
|
|
67
|
+
one does not.
|
|
68
|
+
- **fixable** — no title matches any unfixable pattern. This is the **default**: a rejection
|
|
69
|
+
needs no pattern to be fixable.
|
|
70
|
+
- **None** — there are no must-fix titles at all.
|
|
71
|
+
|
|
72
|
+
Only the `unfixable_patterns` list is authored. Adding an unfixable pattern is the only way to
|
|
73
|
+
move a title out of the default `fixable` bucket.
|
|
74
|
+
|
|
75
|
+
**Visibility auto-fix (Stage 1) also gates on these patterns.**
|
|
76
|
+
`classify_visibility_failure_title` in `visibility_failure_classifier.py` calls
|
|
77
|
+
`get_matched_unfixable_patterns` / `load_unfixable_patterns` so a title that maps to a
|
|
78
|
+
curated colour slot still sets `is_blocked_from_auto_fix=True` (and
|
|
79
|
+
`can_auto_fix(record)` is False) when it matches Gallery, Clock system-UI, lock-screen
|
|
80
|
+
video wallpaper crop, Quick-panel preview mismatch, or any other unfixable pattern.
|
|
81
|
+
Changing a pattern here therefore changes both folder sorting and visibility auto-fix
|
|
82
|
+
eligibility.
|
|
83
|
+
|
|
84
|
+
**Lock-screen video wallpaper crop stays UNFIXABLE.** Pad-to-canvas (`lock_wallpaper_cover`,
|
|
85
|
+
#1449) and tall-aspect image-gen outpaint (`lock_aspect_regen`, #1454) were tried and
|
|
86
|
+
abandoned; Themes Studio automation for this class was cancelled. Do not reopen a crop,
|
|
87
|
+
outpaint, pad, or Primary/color autofix for Blue Edge-style "cut on both side(s)" titles.
|
|
88
|
+
|
|
89
|
+
The categorizer (`FailureCategorizer.categorize_and_move` in
|
|
90
|
+
`shared_utils/samsung_utils/cert_failure_processor/failure_categorizer.py:65`) runs the Fold
|
|
91
|
+
device check and the classifier, then resolves a single bucket in
|
|
92
|
+
`_resolve_category_priority` (`failure_categorizer.py:105`):
|
|
93
|
+
|
|
94
|
+
- An `unfixable` or `mixed` classification overrides the detector — these are the
|
|
95
|
+
`severity_priority_buckets` in
|
|
96
|
+
`shared_utils/samsung_utils/config/cert_failure.py:76` (`("unfixable", "mixed")`).
|
|
97
|
+
- A `Fold` detector category is kept only when the classification is `fixable`.
|
|
98
|
+
- A `fixable` classification applies only when no detector matched.
|
|
99
|
+
|
|
100
|
+
`FoldDetector` (`failure_categorizer.py:37`) matches the device regex `SM-F[79]\d{2}[A-Z]?` or
|
|
101
|
+
the keyword `fold` (config in `cert_failure.py:52`).
|
|
102
|
+
|
|
103
|
+
## How to add an unfixable title pattern
|
|
104
|
+
|
|
105
|
+
Patterns live in `shared_utils/samsung_utils/config/unfixable_patterns.json` as a JSON list
|
|
106
|
+
under the `unfixable_patterns` key. Each entry is `{pattern, label, review_note}`.
|
|
107
|
+
|
|
108
|
+
**The Gallery entry stays first (index 0).** The tests in
|
|
109
|
+
`test_cert_failure_classifier.py::TestDefaultConfigPath` assert `result[0]` is the Gallery
|
|
110
|
+
pattern. Append every new pattern after it; never insert ahead of it.
|
|
111
|
+
|
|
112
|
+
Live pattern shape, anchored on the rejected surface (Gallery is the shipped example):
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"pattern": "(?i)<surface>.*poor visibility|poor visibility.*<surface>",
|
|
117
|
+
"label": "<Surface> visibility",
|
|
118
|
+
"review_note": "<honest note about the issue>"
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
`(?i)` is case-insensitive. The two-sided alternation matches the surface either before or
|
|
123
|
+
after the "poor visibility" phrase, because Samsung phrases the same title both ways. Replace
|
|
124
|
+
`<surface>` with the lowercase app or screen name (`settings`, `clock`, `calculator`). Match
|
|
125
|
+
against the **title** text the report shows, not the description.
|
|
126
|
+
|
|
127
|
+
### Writing the review_note honestly
|
|
128
|
+
|
|
129
|
+
`review_note` is the message the per-pattern explanation would carry in a review reply.
|
|
130
|
+
`DEFAULT_THEME_REVIEW_NOTES` still calls `compose_review_notes` with an empty matched-pattern
|
|
131
|
+
list. Devices-only, Quick-panel, and sound-preview labels in `cert_portal_notes_update_config.all_labels`
|
|
132
|
+
are the exception: `resubmit_via_notes_only_update` APPENDs those `review_note` sentences on
|
|
133
|
+
the existing ThemeUpdateProcessor path (search → Re-register → Certification Notes). Write a
|
|
134
|
+
truthful note, because it becomes the pasted sentence for those classes.
|
|
135
|
+
|
|
136
|
+
Do **not** fabricate a "Samsung confirmed" claim. State only what is true. The shipped Gallery
|
|
137
|
+
note is true because Samsung Support did confirm that issue; a new pattern for a different
|
|
138
|
+
issue must not borrow that wording unless the confirmation actually happened.
|
|
139
|
+
|
|
140
|
+
## How to add the paired production-path test
|
|
141
|
+
|
|
142
|
+
Every new unfixable pattern gets a paired test in
|
|
143
|
+
`shared_utils/samsung_utils/tests/test_cert_failure_classifier.py` that drives the production
|
|
144
|
+
path:
|
|
145
|
+
|
|
146
|
+
1. Load the real patterns with `load_unfixable_patterns()` (no path argument, so it reads the
|
|
147
|
+
shipped config).
|
|
148
|
+
2. Build the report HTML with the live must-fix title text, run it through
|
|
149
|
+
`extract_issue_titles`, then `classify_failure`, and assert the result is `unfixable`.
|
|
150
|
+
3. Add a negative guard: an out-of-scope "poor visibility" title (a surface with no pattern)
|
|
151
|
+
classifies as `fixable`, so a future broad regex cannot silently swallow unrelated
|
|
152
|
+
rejections.
|
|
153
|
+
|
|
154
|
+
Use the exact title strings Samsung's report produces. The existing
|
|
155
|
+
`TestClassifyFailure::test_gallery_regex_matches_all_known_variants` shows the shape: a list of
|
|
156
|
+
real title variants, each asserted as `unfixable` through `classify_failure`.
|
|
157
|
+
|
|
158
|
+
Run the tests from the `shared_utils` directory (its pytest config is anchored there):
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
cd shared_utils && C:\Python313\python.exe -m pytest samsung_utils/tests/test_cert_failure_classifier.py -q
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Re-sort already-filed folders for a day
|
|
165
|
+
|
|
166
|
+
After adding a pattern, theme folders filed for an earlier day still sit in their old bucket.
|
|
167
|
+
Run `scripts/resort_cert_folders.py` to recompute each theme's bucket with the new patterns and
|
|
168
|
+
move any folder whose current bucket differs from the computed one. The script reuses the
|
|
169
|
+
production `FailureCategorizer` decision helpers (`_parse_rejection_text`, `_detect_category`,
|
|
170
|
+
`_classify_from_html`, `_resolve_category_priority`), so it stays in step with the live
|
|
171
|
+
categorizer. It runs dry by default and moves only on `--apply`.
|
|
172
|
+
|
|
173
|
+
Set `PYTHONPATH` to the repo root so the import resolves the edited `shared_utils` tree rather
|
|
174
|
+
than a pip-editable install:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
set PYTHONPATH=Y:\Information Technology\Scripts\Automation\Python
|
|
178
|
+
C:\Python313\python.exe .claude\skills\cert-classification-rule\scripts\resort_cert_folders.py "<cert base path>" June 18 PRIMARY
|
|
179
|
+
C:\Python313\python.exe .claude\skills\cert-classification-rule\scripts\resort_cert_folders.py "<cert base path>" June 18 PRIMARY --apply
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Cert-failure folders live at `<base>\<Month>\<day>\<account_folder>\<bucket>\<theme>`, where
|
|
183
|
+
`<account_folder>` is `Themes` for PRIMARY and `Theme Editor Themes` for SECONDARY
|
|
184
|
+
(`AccountFolderConfig` in `shared_utils/web_automation/config/account.py:91`).
|
|
185
|
+
|
|
186
|
+
`scripts/resort_cert_folders.py` passes the repo `code_rules_enforcer` Write hook: output goes
|
|
187
|
+
through a `logger` with %-style format strings (no bare `print()`), the base path is an
|
|
188
|
+
argument, every named value is a typed `dataclass` field rather than a module-level
|
|
189
|
+
`UPPER_SNAKE` constant, and loop variables carry the `each_` prefix.
|
|
190
|
+
|
|
191
|
+
## Gotchas
|
|
192
|
+
|
|
193
|
+
- **Only titles are matched, never the description.** The classifier reads the must-fix issue
|
|
194
|
+
**titles** via the `L_TITLE` regex in `extract_issue_titles`
|
|
195
|
+
(`cert_failure_classifier.py:40`). The rejection description text — the `L_TESTRESULT` span,
|
|
196
|
+
for example a `*Not Identifiable` note — is **not** read by the classifier. A signal that
|
|
197
|
+
lives only in the description will not flag a title unless that title also matches a pattern.
|
|
198
|
+
When a rejection's only "unfixable" cue is in the description, no title pattern can catch it.
|
|
199
|
+
- **Do not reopen crop autofix.** Lock-screen video wallpaper "cut on both side(s)" is
|
|
200
|
+
UNFIXABLE. Closed #1449 (pad-to-canvas) and #1454 (tall outpaint) must stay closed.
|
|
201
|
+
- **The Gallery entry stays at index 0** of `unfixable_patterns.json`. Tests assert
|
|
202
|
+
`result[0]` is Gallery; append new patterns after it.
|
|
203
|
+
- **"-" placeholders are excluded.** Recommended-table rows show a `-` title; `extract_issue_titles`
|
|
204
|
+
drops them, so they never count toward a classification.
|
|
205
|
+
- **Run tests from the `shared_utils` directory.** Its pytest config (`testpaths`,
|
|
206
|
+
`asyncio_mode`) is anchored there. A run from the repo root will not collect the tests
|
|
207
|
+
correctly.
|
|
208
|
+
- **Use `C:\Python313\python.exe`.** The repo-root `.venv` is a Linux/NAS virtual environment
|
|
209
|
+
with no `Scripts\python.exe` on Windows.
|
|
210
|
+
- **Set `PYTHONPATH` to the repo root for the re-sort.** Without it, the import can resolve a
|
|
211
|
+
pip-editable install of `shared_utils` whose config lacks the freshly added pattern, so the
|
|
212
|
+
new pattern does not take effect.
|
|
213
|
+
|
|
214
|
+
## File index
|
|
215
|
+
|
|
216
|
+
| File | Purpose |
|
|
217
|
+
|------|---------|
|
|
218
|
+
| `SKILL.md` | This hub — the classification model, the add-a-rule procedure, the test recipe, and gotchas. |
|
|
219
|
+
| `scripts/resort_cert_folders.py` | Re-sorts already-filed cert-failure folders for a day after a pattern change. Execute it (see the re-sort section); set `PYTHONPATH` to the repo root first. Dry-run by default, moves on `--apply`. |
|
|
220
|
+
|
|
221
|
+
## Folder map
|
|
222
|
+
|
|
223
|
+
- `SKILL.md` — hub.
|
|
224
|
+
- `scripts/` — the re-sort utility, executed rather than read into context.
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"""Re-sort already-filed cert-failure theme folders after the unfixable patterns change.
|
|
2
|
+
|
|
3
|
+
Recomputes each theme's bucket from its HTML report using the production
|
|
4
|
+
FailureCategorizer decision helpers, then moves folders whose current bucket no
|
|
5
|
+
longer matches. Dry-run by default; pass --apply to move folders.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import argparse
|
|
9
|
+
import logging
|
|
10
|
+
import shutil
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
from shared_utils.samsung_utils.cert_failure_processor.failure_categorizer import (
|
|
15
|
+
FailureCategorizer,
|
|
16
|
+
)
|
|
17
|
+
from shared_utils.web_automation.config.account import (
|
|
18
|
+
AccountType,
|
|
19
|
+
account_folder_config,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger("resort_cert_folders")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass(frozen=True)
|
|
26
|
+
class ResortConfig:
|
|
27
|
+
"""Naming and discovery constants for the re-sort pass."""
|
|
28
|
+
|
|
29
|
+
report_glob: str = "*_Report.html"
|
|
30
|
+
log_format: str = "%(message)s"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass(frozen=True)
|
|
34
|
+
class FolderMove:
|
|
35
|
+
"""A single planned move from a theme's current bucket to its computed bucket."""
|
|
36
|
+
|
|
37
|
+
theme_folder: Path
|
|
38
|
+
current_bucket: str
|
|
39
|
+
computed_bucket: str
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def compute_bucket(categorizer: FailureCategorizer, theme_folder: Path, resort_config: ResortConfig) -> str | None:
|
|
43
|
+
"""Compute the bucket a theme folder belongs in from its HTML report.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
categorizer: The production categorizer holding the loaded unfixable patterns.
|
|
47
|
+
theme_folder: The theme folder containing the cert-failure HTML report.
|
|
48
|
+
resort_config: Discovery and logging constants for this pass.
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
The computed bucket name, or None when no report is present or no bucket applies.
|
|
52
|
+
"""
|
|
53
|
+
all_reports = list(theme_folder.glob(resort_config.report_glob))
|
|
54
|
+
if not all_reports:
|
|
55
|
+
logger.warning("No report for '%s' - skipping", theme_folder.name)
|
|
56
|
+
return None
|
|
57
|
+
html_content = all_reports[0].read_text(encoding="utf-8", errors="ignore")
|
|
58
|
+
rejection_text = categorizer._parse_rejection_text(html_content)
|
|
59
|
+
detector_category = categorizer._detect_category(html_content, rejection_text)
|
|
60
|
+
classification = categorizer._classify_from_html(html_content)
|
|
61
|
+
return categorizer._resolve_category_priority(detector_category, classification)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def plan_moves(account_root: Path, categorizer: FailureCategorizer, resort_config: ResortConfig) -> list[FolderMove]:
|
|
65
|
+
"""Plan every move needed to bring a day's account folder into line with the patterns.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
account_root: The <base>/<Month>/<day>/<account_folder> directory to scan.
|
|
69
|
+
categorizer: The production categorizer holding the loaded unfixable patterns.
|
|
70
|
+
resort_config: Discovery and logging constants for this pass.
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
One FolderMove per theme whose current bucket differs from its computed bucket.
|
|
74
|
+
"""
|
|
75
|
+
planned_moves: list[FolderMove] = []
|
|
76
|
+
for each_bucket_dir in sorted(path for path in account_root.iterdir() if path.is_dir()):
|
|
77
|
+
current_bucket = each_bucket_dir.name
|
|
78
|
+
for each_theme in sorted(path for path in each_bucket_dir.iterdir() if path.is_dir()):
|
|
79
|
+
computed_bucket = compute_bucket(categorizer, each_theme, resort_config)
|
|
80
|
+
if computed_bucket is not None and computed_bucket != current_bucket:
|
|
81
|
+
planned_moves.append(
|
|
82
|
+
FolderMove(
|
|
83
|
+
theme_folder=each_theme,
|
|
84
|
+
current_bucket=current_bucket,
|
|
85
|
+
computed_bucket=computed_bucket,
|
|
86
|
+
)
|
|
87
|
+
)
|
|
88
|
+
return planned_moves
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def apply_move(account_root: Path, folder_move: FolderMove) -> None:
|
|
92
|
+
"""Move one theme folder into its computed bucket directory.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
account_root: The <base>/<Month>/<day>/<account_folder> directory.
|
|
96
|
+
folder_move: The planned move to carry out.
|
|
97
|
+
"""
|
|
98
|
+
target_dir = account_root / folder_move.computed_bucket
|
|
99
|
+
target_dir.mkdir(parents=True, exist_ok=True)
|
|
100
|
+
target_path = target_dir / folder_move.theme_folder.name
|
|
101
|
+
if target_path.exists():
|
|
102
|
+
logger.warning("Target exists for '%s' - skipping", folder_move.theme_folder.name)
|
|
103
|
+
return
|
|
104
|
+
shutil.move(str(folder_move.theme_folder), str(target_path))
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def run_resort(base_path: str, month: str, day: str, account_label: str, should_apply: bool) -> None:
|
|
108
|
+
"""Plan and optionally apply a re-sort of one day's cert-failure folders.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
base_path: The cert-failure base directory.
|
|
112
|
+
month: The month folder name (for example "June").
|
|
113
|
+
day: The day folder name (for example "18").
|
|
114
|
+
account_label: "PRIMARY" or "SECONDARY".
|
|
115
|
+
should_apply: When True, move folders; when False, only log the plan.
|
|
116
|
+
"""
|
|
117
|
+
resort_config = ResortConfig()
|
|
118
|
+
logging.basicConfig(level=logging.INFO, format=resort_config.log_format)
|
|
119
|
+
account_type = AccountType[account_label]
|
|
120
|
+
account_folder = account_folder_config.get_folder_name(account_type)
|
|
121
|
+
account_root = Path(base_path) / month / day / account_folder
|
|
122
|
+
categorizer = FailureCategorizer(base_path)
|
|
123
|
+
planned_moves = plan_moves(account_root, categorizer, resort_config)
|
|
124
|
+
if not planned_moves:
|
|
125
|
+
logger.info("Nothing to re-sort in %s", account_root)
|
|
126
|
+
return
|
|
127
|
+
for each_move in planned_moves:
|
|
128
|
+
logger.info(
|
|
129
|
+
"%s: %s -> %s",
|
|
130
|
+
each_move.theme_folder.name,
|
|
131
|
+
each_move.current_bucket,
|
|
132
|
+
each_move.computed_bucket,
|
|
133
|
+
)
|
|
134
|
+
if should_apply:
|
|
135
|
+
apply_move(account_root, each_move)
|
|
136
|
+
logger.info("%d folder(s) %s", len(planned_moves), "moved" if should_apply else "planned (dry run)")
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def main() -> None:
|
|
140
|
+
"""Parse arguments and run the re-sort pass."""
|
|
141
|
+
parser = argparse.ArgumentParser(description="Re-sort cert-failure folders after a pattern change.")
|
|
142
|
+
parser.add_argument("base_path", help="Cert-failure base directory.")
|
|
143
|
+
parser.add_argument("month", help='Month folder name, for example "June".')
|
|
144
|
+
parser.add_argument("day", help='Day folder name, for example "18".')
|
|
145
|
+
parser.add_argument("account", choices=["PRIMARY", "SECONDARY"], help="Account type.")
|
|
146
|
+
parser.add_argument("--apply", action="store_true", help="Move folders instead of dry-running.")
|
|
147
|
+
parsed_arguments = parser.parse_args()
|
|
148
|
+
run_resort(
|
|
149
|
+
parsed_arguments.base_path,
|
|
150
|
+
parsed_arguments.month,
|
|
151
|
+
parsed_arguments.day,
|
|
152
|
+
parsed_arguments.account,
|
|
153
|
+
parsed_arguments.apply,
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
if __name__ == "__main__":
|
|
158
|
+
main()
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eli5
|
|
3
|
+
description: >-
|
|
4
|
+
Creates concise beginner-friendly HTML explanations with large visuals and minimal text. Triggers: ELI5, explain like I am 5, explain this simply, beginner explanation, every user-facing response.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# ELI5
|
|
8
|
+
|
|
9
|
+
All user-facing responses follow this skill.
|
|
10
|
+
Avoid all negative prose.
|
|
11
|
+
|
|
12
|
+
## Contents
|
|
13
|
+
|
|
14
|
+
- [Principle](#principle)
|
|
15
|
+
- [When this applies](#when-this-applies)
|
|
16
|
+
- [Skill classification](#skill-classification)
|
|
17
|
+
- [Authority boundaries](#authority-boundaries)
|
|
18
|
+
- [Composition boundary](#composition-boundary)
|
|
19
|
+
- [Gotchas](#gotchas)
|
|
20
|
+
- [Task seeding](#task-seeding)
|
|
21
|
+
- [Process](#process)
|
|
22
|
+
- [File index](#file-index)
|
|
23
|
+
- [Folder map](#folder-map)
|
|
24
|
+
|
|
25
|
+
## Principle
|
|
26
|
+
|
|
27
|
+
Explain the current topic for a complete beginner with plain language, large
|
|
28
|
+
visuals, and very few words. Keep the explanation concise, friendly, useful,
|
|
29
|
+
self-contained, and browser-ready.
|
|
30
|
+
|
|
31
|
+
ELI5 owns the HTML presentation envelope. Use one stable self-contained HTML
|
|
32
|
+
artifact for the active task or conversation. Keep update-in-place continuity as
|
|
33
|
+
the conversation continues, and share the current artifact after each update.
|
|
34
|
+
|
|
35
|
+
## When this applies
|
|
36
|
+
|
|
37
|
+
Apply ELI5 to every user-facing response, including responses that present a
|
|
38
|
+
capability-specific artifact. Raw tool output, machine payloads, code, and
|
|
39
|
+
native repository artifacts retain their required formats. Present their human
|
|
40
|
+
explanation inside the HTML presentation envelope when the response is user-facing.
|
|
41
|
+
|
|
42
|
+
### First-match refusal condition
|
|
43
|
+
|
|
44
|
+
Evaluate this condition before task seeding. When no task tool is available,
|
|
45
|
+
reply exactly: `ELI5 requires a session task tool. The artifact flow is paused.`
|
|
46
|
+
|
|
47
|
+
## Skill classification
|
|
48
|
+
|
|
49
|
+
**Dominant type:** Business Process & Team Automation.
|
|
50
|
+
|
|
51
|
+
**Folder rationale:** `SKILL.md` holds the global artifact workflow, and
|
|
52
|
+
`reference/task-seeds.md` holds its ordered session tasks. The leaf keeps its
|
|
53
|
+
presentation capability local.
|
|
54
|
+
|
|
55
|
+
## Authority boundaries
|
|
56
|
+
|
|
57
|
+
| Owner | Owns | ELI5 action |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| ELI5 | Beginner framing, visual expectation, minimal content, HTML continuity, and sharing | Keep the response in one useful, stable artifact. |
|
|
60
|
+
| `~/.claude/rules/asd-ste100-language.md` | Word choice, sentence structure, terminology, punctuation, procedural instructions, and safety text | Read and apply it before writing or updating any page or response prose. |
|
|
61
|
+
| The named capability skill | Native data, evidence, workflow, and file-format requirements | Preserve its contract inside the HTML presentation envelope. |
|
|
62
|
+
| User instructions and safety requirements | Task boundary, audience, confidentiality, and permitted result | Treat them as the controlling scope for the page. |
|
|
63
|
+
| Human review | Technical accuracy, terminology, safety, confidentiality, intended meaning, and rendered usefulness | Review the completed artifact before delivery. |
|
|
64
|
+
|
|
65
|
+
## Composition boundary
|
|
66
|
+
|
|
67
|
+
ELI5 is a leaf skill. Explanation and visual composition remain one user-facing
|
|
68
|
+
capability. ELI5 invokes zero presentation sub-skills. Named capability skills
|
|
69
|
+
keep ownership of their native artifact rules while ELI5 supplies the global
|
|
70
|
+
HTML presentation envelope.
|
|
71
|
+
|
|
72
|
+
## Gotchas
|
|
73
|
+
|
|
74
|
+
- Keep the HTML presentation envelope active when another capability skill creates the page.
|
|
75
|
+
- Keep sentence-level prose under `~/.claude/rules/asd-ste100-language.md`.
|
|
76
|
+
- Preserve an explicit user-supplied output path and an existing artifact path.
|
|
77
|
+
- Keep one artifact path across all updates in the active task or conversation.
|
|
78
|
+
- Keep every page self-contained and browser-ready.
|
|
79
|
+
- Preserve native wrapper, payload, evidence, and file-format contracts owned by
|
|
80
|
+
the named capability skill.
|
|
81
|
+
- Use human review for accuracy, terminology, safety, confidentiality, meaning,
|
|
82
|
+
and rendered legibility.
|
|
83
|
+
|
|
84
|
+
## Task seeding
|
|
85
|
+
|
|
86
|
+
At skill start, register every item in `reference/task-seeds.md` as a session
|
|
87
|
+
task through `TaskCreate`, `TodoWrite`, or the host task equivalent. Work from
|
|
88
|
+
that task list. Mark each item complete with `PASS`, `FAIL` plus file evidence,
|
|
89
|
+
or `N/A` plus the reason. When no task tool is available, use the exact refusal
|
|
90
|
+
under [When this applies](#when-this-applies) before authoring the artifact.
|
|
91
|
+
|
|
92
|
+
## Process
|
|
93
|
+
|
|
94
|
+
1. **Deterministic — locate the current HTML artifact or create the first one.** Find the active
|
|
95
|
+
artifact, preserve an explicit user path, or create a clear self-contained
|
|
96
|
+
browser-ready HTML artifact when no path exists. Keep the chosen path for the
|
|
97
|
+
rest of the active task or conversation.
|
|
98
|
+
2. **Borderline — add the current explanation to that artifact.** Read and apply
|
|
99
|
+
`~/.claude/rules/asd-ste100-language.md` to every sentence. Frame the topic
|
|
100
|
+
for a beginner, use a large useful visual, keep the text minimal, and update
|
|
101
|
+
the same artifact in place.
|
|
102
|
+
3. **Judgment — share the updated artifact with the user.** Review technical meaning,
|
|
103
|
+
terminology, safety, confidentiality, accessibility, browser readiness, and
|
|
104
|
+
visual legibility. When a check reports a defect, repair the artifact, repeat
|
|
105
|
+
the review, and share after all checks pass.
|
|
106
|
+
|
|
107
|
+
### Examples
|
|
108
|
+
|
|
109
|
+
- **Creation:** Input — `Explain DNS for a beginner` with no artifact path.
|
|
110
|
+
Output — `dns-explanation.html` with one self-contained page and a large visual.
|
|
111
|
+
- **Update and share:** Input — `Add why DNS caching helps` in the same
|
|
112
|
+
conversation. Output — the same `dns-explanation.html` path updated and shared.
|
|
113
|
+
|
|
114
|
+
## File index
|
|
115
|
+
|
|
116
|
+
| Path | Purpose |
|
|
117
|
+
|---|---|
|
|
118
|
+
| `SKILL.md` | Global ELI5 presentation contract, authority boundaries, gotchas, and artifact flow. |
|
|
119
|
+
| `reference/task-seeds.md` | Ordered process items to register as session tasks. |
|
|
120
|
+
|
|
121
|
+
## Folder map
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
eli5/
|
|
125
|
+
├── SKILL.md
|
|
126
|
+
└── reference/
|
|
127
|
+
└── task-seeds.md
|
|
128
|
+
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# ELI5 task seeds
|
|
2
|
+
|
|
3
|
+
Register each item as a session task at the start of the ELI5 process. Complete
|
|
4
|
+
each task with `PASS`, `FAIL` plus file evidence, or `N/A` plus the reason.
|
|
5
|
+
|
|
6
|
+
1. Resolve the active HTML artifact path and preserve the stable path.
|
|
7
|
+
2. Create the artifact when no active path exists and keep it self-contained.
|
|
8
|
+
3. Apply the ASD-STE100 rule to page and response sentences.
|
|
9
|
+
4. Add the concise beginner explanation and useful large visual in place.
|
|
10
|
+
5. Review accuracy, terminology, safety, confidentiality, accessibility, and legibility.
|
|
11
|
+
6. Share the updated artifact with the user.
|
|
@@ -720,11 +720,10 @@ class TestWorktreeBranchTracking:
|
|
|
720
720
|
capture_output=True,
|
|
721
721
|
text=True,
|
|
722
722
|
)
|
|
723
|
-
assert
|
|
724
|
-
"bare push
|
|
723
|
+
assert read_remote_main_commit(repository_path) == origin_main_before, (
|
|
724
|
+
"bare push must not advance origin/main:\n"
|
|
725
725
|
f"{push_attempt.stdout}{push_attempt.stderr}"
|
|
726
726
|
)
|
|
727
|
-
assert read_remote_main_commit(repository_path) == origin_main_before
|
|
728
727
|
|
|
729
728
|
|
|
730
729
|
class TestMainCli:
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: name-by-capability-audit
|
|
3
|
+
description: >-
|
|
4
|
+
Audit a GitHub PR for name-by-capability violations: driver/motive words on
|
|
5
|
+
reusable capability modules (queues and report routers may keep the driver
|
|
6
|
+
word), then apply capability-oriented renames by default. Triggers:
|
|
7
|
+
/name-by-capability-audit, name-by-capability audit, audit PR for naming, name
|
|
8
|
+
by capability, capability naming review, cert_fix rename check, driver word in
|
|
9
|
+
package name.
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Name-by-Capability Audit
|
|
13
|
+
|
|
14
|
+
Audit a GitHub PR against the **name-by-capability** rule. Inspect paths and title wording for driver/motive words on reusable capability code, report findings with a rename direction, and apply the suggested renames by default. An explicit audit-only request ends after the report.
|
|
15
|
+
|
|
16
|
+
## Gotchas
|
|
17
|
+
|
|
18
|
+
- Name reusable libraries for the action they perform; a first cert caller still leaves the library capability-named. Score reuse potential alongside the PR title.
|
|
19
|
+
- Correctly driver-named surfaces (`cert_fix_queue`, report routing/locate, unfixable patterns) are **OK** findings — list them under OK drivers.
|
|
20
|
+
- Renames and new paths carry the most signal; when a PR expands an already-misnamed package, note the package name too.
|
|
21
|
+
|
|
22
|
+
## When this applies
|
|
23
|
+
|
|
24
|
+
- User invokes `/name-by-capability-audit <PR>` or asks to audit a PR for name-by-capability / capability naming.
|
|
25
|
+
- PR adds or renames packages/modules, or frames a general shared operation with a driver/motive word (`cert_fix`, `cert_closeout`, `portal`, `export`, …).
|
|
26
|
+
|
|
27
|
+
**First match wins:**
|
|
28
|
+
|
|
29
|
+
- Missing PR number or URL → respond exactly: `Give a GitHub PR number or URL to audit for name-by-capability.`
|
|
30
|
+
- User requests audit-only → finish the audit report and stop.
|
|
31
|
+
- User gives a rename or fix direction → finish the audit report, then apply the direction they gave.
|
|
32
|
+
- A violation with no user-supplied direction → finish the audit report, then apply the suggested rename direction by default.
|
|
33
|
+
|
|
34
|
+
## Constraints
|
|
35
|
+
|
|
36
|
+
- Report findings plus a suggested rename direction for each violation.
|
|
37
|
+
- Suggest renames for paths the PR touched; for an expanded offense, also name the package the PR grew.
|
|
38
|
+
- Distinguish **violation** vs **OK driver** using `reference/offense-examples.md`.
|
|
39
|
+
|
|
40
|
+
## Process
|
|
41
|
+
|
|
42
|
+
Register every bullet from `reference/task-seeds.md` on the host task tool (`TodoWrite` / `TaskCreate`). Mark each complete with evidence. Follow those seeds in order — do not restate them here.
|
|
43
|
+
|
|
44
|
+
Load order for the rule: if `docs/agents/name-by-capability.md` exists, read it first; always keep `reference/rule-checklist.md` as the fallback when the doc is missing. On disagreement after the docs PR merges, prefer the repo doc and update the skill checklist in a follow-up.
|
|
45
|
+
|
|
46
|
+
## Composition
|
|
47
|
+
|
|
48
|
+
| Peer | Relationship |
|
|
49
|
+
|------|----------------|
|
|
50
|
+
| `shared-extraction-audit` | Layering and extraction (where code lives). Invoke when a path’s *role* is unclear; this skill only scores the *name*. |
|
|
51
|
+
| `reviews` / PR review skills | May invoke this skill by name when naming is in scope |
|
|
52
|
+
|
|
53
|
+
## File index
|
|
54
|
+
|
|
55
|
+
| File | Purpose |
|
|
56
|
+
|------|---------|
|
|
57
|
+
| `SKILL.md` | Hub — gotchas, when-applies, process, composition |
|
|
58
|
+
| `reference/rule-checklist.md` | Embedded rule + naming checklist (fallback when docs are missing) |
|
|
59
|
+
| `reference/offense-examples.md` | Classifier + known OK drivers vs offenders |
|
|
60
|
+
| `reference/fetch-commands.md` | Minimal `gh` fetch for PR naming surface |
|
|
61
|
+
| `reference/report-template.md` | Compact report shape |
|
|
62
|
+
| `reference/task-seeds.md` | Ordered task seeds for the audit run |
|
|
63
|
+
|
|
64
|
+
## Folder map
|
|
65
|
+
|
|
66
|
+
- `SKILL.md` — hub
|
|
67
|
+
- `reference/` — rule, examples, fetch recipe, report template, task seeds
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Fetch PR naming surface
|
|
2
|
+
|
|
3
|
+
**Execute** these commands (pwsh). Replace `<N>` with the PR number. Parse the PR number from a URL (`…/pull/2153` → `2153`) when the user pastes a link.
|
|
4
|
+
|
|
5
|
+
Prefer this recipe so the user’s worktree stays as-is. Do not `gh pr checkout` for naming audits.
|
|
6
|
+
|
|
7
|
+
## Metadata
|
|
8
|
+
|
|
9
|
+
```powershell
|
|
10
|
+
gh pr view <N> --json number,title,body,baseRefName,headRefName,url
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Paths and renames
|
|
14
|
+
|
|
15
|
+
One paginated files list covers added, modified, and renamed paths (`status`, `previous_filename`). Use `--paginate --slurp` per `gh-cli-conventions` (not built-in `--jq` across pages):
|
|
16
|
+
|
|
17
|
+
```powershell
|
|
18
|
+
gh api repos/:owner/:repo/pulls/<N>/files --paginate --slurp
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
When `:owner` / `:repo` are unknown, resolve them from `gh pr view <N> --json headRepository,url` or the PR URL, then re-run the files call.
|
|
22
|
+
|
|
23
|
+
## What to keep from the fetch
|
|
24
|
+
|
|
25
|
+
- PR title and first paragraph of body (scope wording)
|
|
26
|
+
- Every added or renamed path under package roots and `.claude/skills/`
|
|
27
|
+
- New Python module stems whose names carry driver words
|
|
28
|
+
|
|
29
|
+
Scoring rules for those signals live in `reference/rule-checklist.md` — this file only fetches.
|
|
@@ -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 |
|