claude-dev-env 2.16.0 → 2.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (557) hide show
  1. package/.agents/agents/AGENTS.md +6 -0
  2. package/.agents/skills/AGENTS.md +34 -35
  3. package/.agents/skills/_shared/pr-loop/AGENTS.md +22 -15
  4. package/.agents/skills/_shared/pr-loop/portable-driver.md +6 -7
  5. package/.agents/skills/_shared/pr-loop/prompts/AGENTS.md +2 -2
  6. package/.agents/skills/_shared/pr-loop/scripts/AGENTS.md +1 -1
  7. package/.agents/skills/_shared/pr-loop/scripts/portable_converge_driver.py +25 -16
  8. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +1 -5
  9. package/.agents/skills/autoconverge/reference/convergence-gates.md +31 -0
  10. package/.agents/skills/autoconverge/reference/convergence.md +8 -10
  11. package/.agents/skills/autoconverge/reference/gotchas.md +1 -1
  12. package/.agents/skills/autoconverge/reference/stop-conditions.md +1 -1
  13. package/.agents/skills/autoconverge/workflow/converge.codex-gate.test.mjs +1 -1
  14. package/.agents/skills/autoconverge/workflow/converge.contract.test.mjs +1 -1
  15. package/.agents/skills/autoconverge/workflow/converge.mjs +3 -3
  16. package/.agents/skills/cert-classification-rule/SKILL.md +224 -0
  17. package/.agents/skills/cert-classification-rule/scripts/resort_cert_folders.py +158 -0
  18. package/.agents/skills/eli5/SKILL.md +128 -0
  19. package/.agents/skills/eli5/reference/task-seeds.md +11 -0
  20. package/.agents/skills/fresh-branch/scripts/test_create_fresh_branch.py +2 -3
  21. package/.agents/skills/name-by-capability-audit/SKILL.md +67 -0
  22. package/.agents/skills/name-by-capability-audit/reference/fetch-commands.md +29 -0
  23. package/.agents/skills/name-by-capability-audit/reference/offense-examples.md +32 -0
  24. package/.agents/skills/name-by-capability-audit/reference/report-template.md +29 -0
  25. package/.agents/skills/name-by-capability-audit/reference/rule-checklist.md +38 -0
  26. package/.agents/skills/name-by-capability-audit/reference/task-seeds.md +9 -0
  27. package/.agents/skills/orchestrator/SKILL.md +6 -4
  28. package/.agents/skills/orchestrator-refresh/SKILL.md +9 -5
  29. package/.agents/skills/pr-cleanup/SKILL.md +99 -0
  30. package/.agents/skills/prototype/reference/honest-limitations.md +1 -1
  31. package/.agents/skills/prototype/reference/promotion-tasks.md +1 -1
  32. package/.agents/skills/prototype/scripts/test_build_sandbox_settings.py +2 -2
  33. package/.agents/skills/prototype/workflows/promotion.md +2 -2
  34. package/.agents/skills/review-router/SKILL.md +51 -0
  35. package/.agents/skills/review-router/reference/route-policy.json +7 -0
  36. package/.agents/skills/review-router/reference/task-seeds.md +1 -0
  37. package/.agents/skills/review-router/scripts/conftest.py +4 -0
  38. package/.agents/skills/review-router/scripts/review_router.py +50 -0
  39. package/.agents/skills/review-router/scripts/review_router_cli.py +211 -0
  40. package/.agents/skills/review-router/scripts/review_router_constants/__init__.py +1 -0
  41. package/.agents/skills/review-router/scripts/review_router_constants/config/__init__.py +0 -0
  42. package/.agents/skills/review-router/scripts/review_router_constants/config/constants.py +13 -0
  43. package/.agents/skills/review-router/scripts/test_review_router.py +23 -0
  44. package/.agents/skills/review-router/scripts/test_review_router_cli.py +47 -0
  45. package/.agents/skills/review-tier/SKILL.md +56 -0
  46. package/.agents/skills/review-tier/reference/task-seeds.md +1 -0
  47. package/.agents/skills/review-tier/reference/tier-policy.json +9 -0
  48. package/.agents/skills/review-tier/scripts/conftest.py +4 -0
  49. package/.agents/skills/review-tier/scripts/review_tier.py +332 -0
  50. package/.agents/skills/review-tier/scripts/review_tier_constants/__init__.py +1 -0
  51. package/.agents/skills/review-tier/scripts/review_tier_constants/config/__init__.py +0 -0
  52. package/.agents/skills/review-tier/scripts/review_tier_constants/config/constants.py +29 -0
  53. package/.agents/skills/review-tier/scripts/test_generation.py +171 -0
  54. package/.agents/skills/review-tier/scripts/test_review_tier.py +33 -0
  55. package/.agents/skills/session-log/SKILL.md +1 -1
  56. package/.agents/skills/shared-extraction-audit/SKILL.md +160 -0
  57. package/.agents/skills/shared-extraction-audit/reference/examples.md +46 -0
  58. package/.agents/skills/shared-extraction-audit/reference/offense-taxonomy.md +100 -0
  59. package/.agents/skills/source-command-logifix/SKILL.md +29 -0
  60. package/.agents/skills/source-command-sr-loop/SKILL.md +58 -0
  61. package/.agents/skills/team-advisor/SKILL.md +5 -5
  62. package/.agents/skills-archived/AGENTS.md +45 -0
  63. package/.agents/{skills → skills-archived}/anthropic-plan/AGENTS.md +1 -1
  64. package/.agents/{skills → skills-archived}/bugteam/scripts/reflow_skill_md.py +3 -3
  65. package/.agents/{skills → skills-archived}/codex-review/test_skill_scaffold.py +1 -1
  66. package/.agents/{skills → skills-archived}/copilot-finding-triage/SKILL.md +1 -1
  67. package/.agents/{skills → skills-archived}/pr-converge/SKILL.md +6 -6
  68. package/.agents/{skills → skills-archived}/pr-converge/pr_converge_skill_constants/AGENTS.md +1 -1
  69. package/.agents/{skills → skills-archived}/pr-converge/pr_converge_skill_constants/constants.py +1 -1
  70. package/.agents/{skills → skills-archived}/pr-converge/reference/multi-pr-orchestration.md +1 -1
  71. package/.agents/{skills → skills-archived}/pr-converge/reference/per-tick.md +3 -3
  72. package/.agents/{skills → skills-archived}/pr-converge/scripts/reflow_skill_md.py +2 -2
  73. package/.agents/{skills → skills-archived}/pr-converge/test_portable_pacer_gate.py +6 -2
  74. package/.agents/{skills → skills-archived}/pr-converge/workflows/schedule-wakeup-loop.md +1 -1
  75. package/.agents/{skills → skills-archived}/split-pr/reference/proposal-format.md +1 -1
  76. package/AGENTS.md +34 -58
  77. package/_shared/AGENTS.md +2 -0
  78. package/_shared/advisor/AGENTS.md +5 -5
  79. package/_shared/advisor/advisor-protocol.md +54 -31
  80. package/_shared/advisor/reference/advisor-block.md +5 -1
  81. package/_shared/advisor/reference/consult-format.md +1 -1
  82. package/_shared/advisor/reference/identity.md +28 -0
  83. package/_shared/advisor/reference/lifecycle.md +8 -1
  84. package/_shared/advisor/reference/sol-rung.md +14 -9
  85. package/_shared/advisor/reference/spawn-walk-log.md +6 -5
  86. package/_shared/advisor/reference/third-party-bind.md +6 -7
  87. package/_shared/advisor/reference/warm-up.md +9 -2
  88. package/_shared/advisor/scripts/codex_sol_advisor.py +66 -11
  89. package/_shared/advisor/scripts/config/advisor_scripts_constants/advisor_route_constants.py +9 -0
  90. package/_shared/advisor/scripts/config/advisor_scripts_constants/model_tier_run_validator_constants.py +16 -4
  91. package/_shared/advisor/scripts/config/advisor_scripts_constants/sol_advisor_constants.py +11 -10
  92. package/_shared/advisor/scripts/model_tier_run_validator.py +50 -23
  93. package/_shared/advisor/scripts/tests/test_codex_sol_advisor.py +108 -3
  94. package/_shared/advisor/scripts/tests/test_model_tier_run_validator.py +171 -82
  95. package/_shared/advisor/scripts/tests/test_tier_model_ids.py +43 -0
  96. package/_shared/advisor/scripts/tier_model_ids.py +75 -7
  97. package/_shared/pr-loop/audit-reply-template.md +4 -0
  98. package/_shared/pr-loop/fix-protocol.md +7 -6
  99. package/_shared/pr-loop/gh-payloads.md +8 -6
  100. package/_shared/pr-loop/precatch-rubric.md +6 -5
  101. package/_shared/pr-loop/scripts/AGENTS.md +15 -0
  102. package/_shared/pr-loop/scripts/_pr_converge_path_setup.py +38 -0
  103. package/_shared/pr-loop/scripts/check_bugbot_ci.py +279 -0
  104. package/_shared/pr-loop/scripts/check_convergence.py +923 -0
  105. package/_shared/pr-loop/scripts/check_convergence_availability.py +275 -0
  106. package/_shared/pr-loop/scripts/check_convergence_gates.py +279 -0
  107. package/_shared/pr-loop/scripts/check_convergence_thread_gates.py +219 -0
  108. package/_shared/pr-loop/scripts/check_pending_reviews.py +154 -0
  109. package/_shared/pr-loop/scripts/codex_down_classifier.py +98 -0
  110. package/_shared/pr-loop/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +1 -0
  111. package/_shared/pr-loop/scripts/codex_review_scripts_constants/AGENTS.md +18 -0
  112. package/_shared/pr-loop/scripts/codex_review_scripts_constants/__init__.py +1 -0
  113. package/_shared/pr-loop/scripts/codex_review_scripts_constants/classifier_constants.py +35 -0
  114. package/_shared/pr-loop/scripts/codex_review_scripts_constants/codex_usage_probe_constants.py +82 -0
  115. package/_shared/pr-loop/scripts/codex_review_scripts_constants/findings_constants.py +18 -0
  116. package/_shared/pr-loop/scripts/codex_review_scripts_constants/run_constants.py +53 -0
  117. package/_shared/pr-loop/scripts/codex_usage_probe.py +570 -0
  118. package/_shared/pr-loop/scripts/conftest.py +43 -0
  119. package/_shared/pr-loop/scripts/fetch_copilot_reviews.py +134 -0
  120. package/_shared/pr-loop/scripts/fixtures/auth_failure_synthetic.txt +1 -0
  121. package/_shared/pr-loop/scripts/fixtures/config_load_failure_v0.125.0.txt +1 -0
  122. package/_shared/pr-loop/scripts/fixtures/freeform_findings_v0.144.3.txt +6 -0
  123. package/_shared/pr-loop/scripts/fixtures/model_rejection_v0.125.0.jsonl +5 -0
  124. package/_shared/pr-loop/scripts/fixtures/structured_findings.txt +13 -0
  125. package/_shared/pr-loop/scripts/fixtures/success_stream_v0.144.3.jsonl +6 -0
  126. package/_shared/pr-loop/scripts/fixtures/unknown_failure_synthetic.txt +1 -0
  127. package/_shared/pr-loop/scripts/fixtures/usage_limit_synthetic.txt +1 -0
  128. package/_shared/pr-loop/scripts/parse_codex_findings.py +207 -0
  129. package/_shared/pr-loop/scripts/post_fix_reply.py +168 -0
  130. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +1 -0
  131. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/AGENTS.md +18 -0
  132. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/__init__.py +0 -0
  133. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +70 -0
  134. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/pr_converge_constants.py +118 -0
  135. package/_shared/pr-loop/scripts/pr_converge_scripts_constants/reflow_skill_md_constants.py +13 -0
  136. package/_shared/pr-loop/scripts/pr_converge_skill_constants/.claude/CLAUDE.md +1 -0
  137. package/_shared/pr-loop/scripts/pr_converge_skill_constants/AGENTS.md +26 -0
  138. package/_shared/pr-loop/scripts/pr_converge_skill_constants/__init__.py +0 -0
  139. package/_shared/pr-loop/scripts/pr_converge_skill_constants/constants.py +69 -0
  140. package/_shared/pr-loop/scripts/run_codex_review.py +609 -0
  141. package/_shared/pr-loop/scripts/test__pr_converge_path_setup.py +30 -0
  142. package/_shared/pr-loop/scripts/test_check_bugbot_ci.py +312 -0
  143. package/_shared/pr-loop/scripts/test_check_convergence.py +438 -0
  144. package/_shared/pr-loop/scripts/test_check_convergence_availability.py +391 -0
  145. package/_shared/pr-loop/scripts/test_check_convergence_codex.py +517 -0
  146. package/_shared/pr-loop/scripts/test_check_convergence_contract.py +400 -0
  147. package/_shared/pr-loop/scripts/test_check_convergence_fixture.py +179 -0
  148. package/_shared/pr-loop/scripts/test_check_convergence_gates.py +84 -0
  149. package/_shared/pr-loop/scripts/test_check_convergence_thread_gates.py +99 -0
  150. package/_shared/pr-loop/scripts/test_codex_down_classifier.py +143 -0
  151. package/_shared/pr-loop/scripts/test_codex_usage_probe.py +683 -0
  152. package/_shared/pr-loop/scripts/test_parse_codex_findings.py +130 -0
  153. package/_shared/pr-loop/scripts/test_run_codex_review.py +969 -0
  154. package/_shared/pr-loop/scripts/tests/test_claude_permissions_common.py +1 -1
  155. package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +1 -1
  156. package/_shared/pr-loop/scripts/tests/test_fix_hookspath.py +1 -1
  157. package/_shared/pr-loop/state-schema.md +20 -28
  158. package/_shared/pr-loop/worker-spawn.md +4 -3
  159. package/_shared/process-tree/AGENTS.md +3 -3
  160. package/bin/ever-shipped-skills.mjs +29 -1
  161. package/bin/install-constants.mjs +15 -6
  162. package/bin/install.agents-home.test.mjs +13 -0
  163. package/bin/install.cursor-rules.test.mjs +3 -3
  164. package/bin/install.mjs +80 -20
  165. package/bin/install.profile-root.test.mjs +1 -1
  166. package/bin/install.prune.test.mjs +23 -204
  167. package/bin/install.test.mjs +8 -5
  168. package/bin/resolve-install-root.mjs +21 -0
  169. package/bin/resolve-package-managed-directory.mjs +4 -4
  170. package/commands/AGENTS.md +2 -0
  171. package/commands/sr-loop.md +3 -0
  172. package/docs/references/prose-style-enforcement.md +3 -7
  173. package/docs/references/team-advisor-skill.md +2 -2
  174. package/hooks/AGENTS.md +0 -3
  175. package/hooks/blocking/AGENTS.md +0 -2
  176. package/hooks/blocking/ask_user_question_shape_blocker.py +83 -0
  177. package/hooks/blocking/pre_tool_use_dispatcher.py +2 -19
  178. package/hooks/blocking/state_description_blocker.py +1 -1
  179. package/hooks/blocking/test_ask_user_question_shape.py +69 -0
  180. package/hooks/blocking/test_pre_tool_use_dispatcher.py +17 -58
  181. package/hooks/blocking/test_pre_tool_use_dispatcher_native.py +9 -104
  182. package/hooks/blocking/test_state_description_blocker.py +1 -0
  183. package/hooks/blocking/test_stop_dispatcher.py +1 -26
  184. package/hooks/hooks.json +1 -1
  185. package/hooks/hooks_constants/AGENTS.md +0 -3
  186. package/hooks/hooks_constants/ask_user_question_shape.py +1 -1
  187. package/hooks/hooks_constants/ask_user_question_shape_constants.py +73 -0
  188. package/hooks/hooks_constants/bot_mention_comment_blocker_constants.py +1 -2
  189. package/hooks/hooks_constants/code_rules_path_utils_constants.py +0 -1
  190. package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +0 -7
  191. package/hooks/hooks_constants/stop_dispatcher_constants.py +0 -1
  192. package/hooks/hooks_constants/test_ask_user_question_shape.py +1 -1
  193. package/hooks/hooks_constants/test_prose_metrics_parity.py +29 -107
  194. package/hooks/hooks_constants/test_stop_dispatcher_constants.py +0 -1
  195. package/hooks/hooks_constants/working_style_prompt_constants.py +9 -10
  196. package/hooks/session/AGENTS.md +4 -1
  197. package/hooks/session/test_working_style_prompt.py +8 -4
  198. package/hooks/session/working_style_prompt.py +4 -2
  199. package/package.json +1 -4
  200. package/rules/AGENTS.md +2 -5
  201. package/rules/asd-ste100-language.md +39 -0
  202. package/rules/ask-user-question-required.md +1 -1
  203. package/rules/long-horizon-autonomy.md +1 -1
  204. package/scripts/AGENTS.md +1 -0
  205. package/scripts/Show-Asset.ps1 +106 -0
  206. package/scripts/test_validate_instruction_pairs.py +30 -3
  207. package/scripts/tests/test_engine.py +4 -4
  208. package/scripts/tests/test_rules.py +5 -5
  209. package/system-prompts/AGENTS.md +8 -0
  210. package/system-prompts/software-engineer.xml +8 -3
  211. package/.agents/skills/grokify/evals/README.md +0 -72
  212. package/.agents/skills/grokify/evals/parse-payload.test.mjs +0 -171
  213. package/.agents/skills/grokify/evals/run-capability-evals.mjs +0 -545
  214. package/_shared/pr-loop/scripts/README.md +0 -21
  215. package/docs/imagegen.md +0 -22
  216. package/hooks/blocking/eli11_reply_enforcer.py +0 -436
  217. package/hooks/blocking/plain_language_blocker.py +0 -758
  218. package/hooks/blocking/test_eli11_reply_enforcer.py +0 -390
  219. package/hooks/blocking/test_plain_language_blocker.py +0 -683
  220. package/hooks/blocking/test_plain_language_blocker_allowlist.py +0 -228
  221. package/hooks/diagnostic/AGENTS.md +0 -75
  222. package/hooks/diagnostic/CLAUDE.md +0 -1
  223. package/hooks/diagnostic/hook_log_extractor.py +0 -875
  224. package/hooks/diagnostic/hook_log_init.py +0 -202
  225. package/hooks/diagnostic/hook_log_stop_wrapper.py +0 -26
  226. package/hooks/diagnostic/migrations/2026-04-25-drop-themes-hook-events.sql +0 -3
  227. package/hooks/diagnostic/migrations/AGENTS.md +0 -16
  228. package/hooks/diagnostic/migrations/CLAUDE.md +0 -1
  229. package/hooks/diagnostic/migrations/README.md +0 -76
  230. package/hooks/diagnostic/queries/AGENTS.md +0 -19
  231. package/hooks/diagnostic/queries/CLAUDE.md +0 -1
  232. package/hooks/diagnostic/queries/block_details_for_hook.sql +0 -26
  233. package/hooks/diagnostic/queries/blocks_by_category.sql +0 -10
  234. package/hooks/diagnostic/queries/blocks_by_tool.sql +0 -9
  235. package/hooks/diagnostic/queries/blocks_last_7_days.sql +0 -11
  236. package/hooks/diagnostic/queries/top_blockers_last_24_hours.sql +0 -12
  237. package/hooks/diagnostic/queries/top_blockers_overall.sql +0 -12
  238. package/hooks/diagnostic/requirements-hook-logs-dev.txt +0 -2
  239. package/hooks/diagnostic/requirements-hook-logs.txt +0 -1
  240. package/hooks/diagnostic/schema.sql +0 -51
  241. package/hooks/diagnostic/test_hook_log_extractor.py +0 -1518
  242. package/hooks/diagnostic/test_hook_log_init.py +0 -227
  243. package/hooks/diagnostic/test_hook_log_stop_wrapper.py +0 -17
  244. package/hooks/hooks_constants/eli11_reply_enforcer_constants.py +0 -94
  245. package/hooks/hooks_constants/hook_log_extractor_constants.py +0 -233
  246. package/hooks/hooks_constants/plain_language_blocker_constants.py +0 -366
  247. package/hooks/hooks_constants/test_hook_log_extractor_constants.py +0 -123
  248. package/rules/doc-prose-cuts.md +0 -58
  249. package/rules/eli11-replies.md +0 -36
  250. package/rules/opus5-communication-contract.md +0 -45
  251. package/rules/plain-language.md +0 -9
  252. /package/.agents/{skills → skills-archived}/anthropic-plan/.claude/CLAUDE.md +0 -0
  253. /package/.agents/{skills → skills-archived}/anthropic-plan/SKILL.md +0 -0
  254. /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/.claude/CLAUDE.md +0 -0
  255. /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/AGENTS.md +0 -0
  256. /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/.claude/CLAUDE.md +0 -0
  257. /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/AGENTS.md +0 -0
  258. /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/__init__.py +0 -0
  259. /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/anthropic_plan_scripts_constants/validate_packet_constants.py +0 -0
  260. /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/test_validate_packet.py +0 -0
  261. /package/.agents/{skills → skills-archived}/anthropic-plan/scripts/validate_packet.py +0 -0
  262. /package/.agents/{skills → skills-archived}/anthropic-plan/templates/.claude/CLAUDE.md +0 -0
  263. /package/.agents/{skills → skills-archived}/anthropic-plan/templates/AGENTS.md +0 -0
  264. /package/.agents/{skills → skills-archived}/anthropic-plan/templates/README.md +0 -0
  265. /package/.agents/{skills → skills-archived}/anthropic-plan/templates/build-prompt.md +0 -0
  266. /package/.agents/{skills → skills-archived}/anthropic-plan/templates/reuse-audit.md +0 -0
  267. /package/.agents/{skills → skills-archived}/anthropic-plan/templates/source-map.md +0 -0
  268. /package/.agents/{skills → skills-archived}/anthropic-plan/templates/visual-plan.template.html +0 -0
  269. /package/.agents/{skills → skills-archived}/anthropic-plan/test_skill_contract.py +0 -0
  270. /package/.agents/{skills → skills-archived}/anthropic-plan/workflow/.claude/CLAUDE.md +0 -0
  271. /package/.agents/{skills → skills-archived}/anthropic-plan/workflow/AGENTS.md +0 -0
  272. /package/.agents/{skills → skills-archived}/anthropic-plan/workflow/plan-packet.contract.test.mjs +0 -0
  273. /package/.agents/{skills → skills-archived}/anthropic-plan/workflow/plan-packet.mjs +0 -0
  274. /package/.agents/{skills → skills-archived}/auditing-claude-config/.claude/CLAUDE.md +0 -0
  275. /package/.agents/{skills → skills-archived}/auditing-claude-config/AGENTS.md +0 -0
  276. /package/.agents/{skills → skills-archived}/auditing-claude-config/SKILL.md +0 -0
  277. /package/.agents/{skills → skills-archived}/auditing-claude-config/reference/probe-hook.md +0 -0
  278. /package/.agents/{skills → skills-archived}/beat-sheet/SKILL.md +0 -0
  279. /package/.agents/{skills → skills-archived}/beat-sheet/reference/visual-beats.md +0 -0
  280. /package/.agents/{skills → skills-archived}/bugteam/.claude/CLAUDE.md +0 -0
  281. /package/.agents/{skills → skills-archived}/bugteam/AGENTS.md +0 -0
  282. /package/.agents/{skills → skills-archived}/bugteam/CONSTRAINTS.md +0 -0
  283. /package/.agents/{skills → skills-archived}/bugteam/EXAMPLES.md +0 -0
  284. /package/.agents/{skills → skills-archived}/bugteam/PROMPTS.md +0 -0
  285. /package/.agents/{skills → skills-archived}/bugteam/SKILL.md +0 -0
  286. /package/.agents/{skills → skills-archived}/bugteam/reference/.claude/CLAUDE.md +0 -0
  287. /package/.agents/{skills → skills-archived}/bugteam/reference/AGENTS.md +0 -0
  288. /package/.agents/{skills → skills-archived}/bugteam/reference/README.md +0 -0
  289. /package/.agents/{skills → skills-archived}/bugteam/reference/audit-and-teammates.md +0 -0
  290. /package/.agents/{skills → skills-archived}/bugteam/reference/copilot-gap-analysis.md +0 -0
  291. /package/.agents/{skills → skills-archived}/bugteam/reference/design-rationale.md +0 -0
  292. /package/.agents/{skills → skills-archived}/bugteam/reference/github-pr-reviews.md +0 -0
  293. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/.claude/CLAUDE.md +0 -0
  294. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/AGENTS.md +0 -0
  295. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/audit-assign-ids.md +0 -0
  296. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/audit-capture-excerpts.md +0 -0
  297. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/audit-walk-categories.md +0 -0
  298. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/audit-write-xml.md +0 -0
  299. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-append-summary.md +0 -0
  300. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-apply-fixes.md +0 -0
  301. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-git-add-commit.md +0 -0
  302. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-git-push.md +0 -0
  303. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-post-reply.md +0 -0
  304. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-publish-summary.md +0 -0
  305. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-py-compile.md +0 -0
  306. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-read-files.md +0 -0
  307. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-resolve-thread.md +0 -0
  308. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-test-suite.md +0 -0
  309. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-violation-count.md +0 -0
  310. /package/.agents/{skills → skills-archived}/bugteam/reference/obstacles/fix-write-xml.md +0 -0
  311. /package/.agents/{skills → skills-archived}/bugteam/reference/team-setup.md +0 -0
  312. /package/.agents/{skills → skills-archived}/bugteam/scripts/.claude/CLAUDE.md +0 -0
  313. /package/.agents/{skills → skills-archived}/bugteam/scripts/AGENTS.md +0 -0
  314. /package/.agents/{skills → skills-archived}/bugteam/scripts/README.md +0 -0
  315. /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_code_rules_gate.py +0 -0
  316. /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_fix_hookspath.py +0 -0
  317. /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_preflight.py +0 -0
  318. /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/.claude/CLAUDE.md +0 -0
  319. /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/AGENTS.md +0 -0
  320. /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/__init__.py +0 -0
  321. /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/probe_code_rules_enforcer_check_constants.py +0 -0
  322. /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/reflow_skill_md_constants.py +0 -0
  323. /package/.agents/{skills → skills-archived}/bugteam/scripts/bugteam_scripts_constants/windows_safe_rmtree_constants.py +0 -0
  324. /package/.agents/{skills → skills-archived}/bugteam/scripts/probe_code_rules_enforcer_check.py +0 -0
  325. /package/.agents/{skills → skills-archived}/bugteam/scripts/test_bugteam_code_rules_gate.py +0 -0
  326. /package/.agents/{skills → skills-archived}/bugteam/scripts/test_bugteam_fix_hookspath.py +0 -0
  327. /package/.agents/{skills → skills-archived}/bugteam/scripts/test_bugteam_preflight.py +0 -0
  328. /package/.agents/{skills → skills-archived}/bugteam/scripts/test_probe_code_rules_enforcer_check.py +0 -0
  329. /package/.agents/{skills → skills-archived}/bugteam/scripts/test_windows_safe_rmtree.py +0 -0
  330. /package/.agents/{skills → skills-archived}/bugteam/scripts/windows_safe_rmtree.py +0 -0
  331. /package/.agents/{skills → skills-archived}/bugteam/sources.md +0 -0
  332. /package/.agents/{skills → skills-archived}/bugteam/test_skill_additions.py +0 -0
  333. /package/.agents/{skills → skills-archived}/closeout/SKILL.md +0 -0
  334. /package/.agents/{skills → skills-archived}/closeout/reference/handoff-prompt-template.md +0 -0
  335. /package/.agents/{skills → skills-archived}/closeout/reference/pii-redaction-checklist.md +0 -0
  336. /package/.agents/{skills → skills-archived}/codex-review/.claude/CLAUDE.md +0 -0
  337. /package/.agents/{skills → skills-archived}/codex-review/AGENTS.md +0 -0
  338. /package/.agents/{skills → skills-archived}/codex-review/SKILL.md +0 -0
  339. /package/.agents/{skills → skills-archived}/codex-review/reference/.claude/CLAUDE.md +0 -0
  340. /package/.agents/{skills → skills-archived}/codex-review/reference/AGENTS.md +0 -0
  341. /package/.agents/{skills → skills-archived}/codex-review/reference/cli-contract.md +0 -0
  342. /package/.agents/{skills → skills-archived}/codex-review/reference/loop-integration.md +0 -0
  343. /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_down_classifier.py +0 -0
  344. /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/.claude/CLAUDE.md +0 -0
  345. /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/AGENTS.md +0 -0
  346. /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/__init__.py +0 -0
  347. /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/classifier_constants.py +0 -0
  348. /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/codex_usage_probe_constants.py +0 -0
  349. /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/findings_constants.py +0 -0
  350. /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_review_scripts_constants/run_constants.py +0 -0
  351. /package/.agents/{skills → skills-archived}/codex-review/scripts/codex_usage_probe.py +0 -0
  352. /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/auth_failure_synthetic.txt +0 -0
  353. /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/config_load_failure_v0.125.0.txt +0 -0
  354. /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/freeform_findings_v0.144.3.txt +0 -0
  355. /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/model_rejection_v0.125.0.jsonl +0 -0
  356. /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/structured_findings.txt +0 -0
  357. /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/success_stream_v0.144.3.jsonl +0 -0
  358. /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/unknown_failure_synthetic.txt +0 -0
  359. /package/.agents/{skills → skills-archived}/codex-review/scripts/fixtures/usage_limit_synthetic.txt +0 -0
  360. /package/.agents/{skills → skills-archived}/codex-review/scripts/parse_codex_findings.py +0 -0
  361. /package/.agents/{skills → skills-archived}/codex-review/scripts/run_codex_review.py +0 -0
  362. /package/.agents/{skills → skills-archived}/codex-review/scripts/test_codex_down_classifier.py +0 -0
  363. /package/.agents/{skills → skills-archived}/codex-review/scripts/test_codex_usage_probe.py +0 -0
  364. /package/.agents/{skills → skills-archived}/codex-review/scripts/test_parse_codex_findings.py +0 -0
  365. /package/.agents/{skills → skills-archived}/codex-review/scripts/test_run_codex_review.py +0 -0
  366. /package/.agents/{skills → skills-archived}/comments/SKILL.md +0 -0
  367. /package/.agents/{skills → skills-archived}/condensing-instructions/SKILL.md +0 -0
  368. /package/.agents/{skills → skills-archived}/copilot-finding-triage/reference/tier-rubric.md +0 -0
  369. /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/conftest.py +0 -0
  370. /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/copilot_finding_triage_constants/__init__.py +0 -0
  371. /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/copilot_finding_triage_constants/config/__init__.py +0 -0
  372. /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/copilot_finding_triage_constants/config/notify_ntfy_constants.py +0 -0
  373. /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/notify_ntfy.py +0 -0
  374. /package/.agents/{skills → skills-archived}/copilot-finding-triage/scripts/test_notify_ntfy.py +0 -0
  375. /package/.agents/{skills → skills-archived}/copilot-finding-triage/templates/notification.md +0 -0
  376. /package/.agents/{skills → skills-archived}/copilot-review/.claude/CLAUDE.md +0 -0
  377. /package/.agents/{skills → skills-archived}/copilot-review/AGENTS.md +0 -0
  378. /package/.agents/{skills → skills-archived}/copilot-review/SKILL.md +0 -0
  379. /package/.agents/{skills → skills-archived}/copilot-review/templates/subagent-prompt.md +0 -0
  380. /package/.agents/{skills → skills-archived}/descriptions/SKILL.md +0 -0
  381. /package/.agents/{skills → skills-archived}/emergencies/SKILL.md +0 -0
  382. /package/.agents/{skills → skills-archived}/grokify/SKILL.md +0 -0
  383. /package/.agents/{skills → skills-archived}/grokify/capability-claims.test.mjs +0 -0
  384. /package/.agents/{skills → skills-archived}/grokify/templates/handoff-template.md +0 -0
  385. /package/.agents/{skills → skills-archived}/plan-to-pr/SKILL.md +0 -0
  386. /package/.agents/{skills → skills-archived}/plan-to-pr/reference/final-validation-tasks.md +0 -0
  387. /package/.agents/{skills → skills-archived}/plan-to-pr/reference/model-routing.md +0 -0
  388. /package/.agents/{skills → skills-archived}/plan-to-pr/reference/packet-contract.md +0 -0
  389. /package/.agents/{skills → skills-archived}/plan-to-pr/reference/packet-schema.json +0 -0
  390. /package/.agents/{skills → skills-archived}/plan-to-pr/reference/process-inventory.md +0 -0
  391. /package/.agents/{skills → skills-archived}/plan-to-pr/reference/review-loop.md +0 -0
  392. /package/.agents/{skills → skills-archived}/plan-to-pr/reference/run-record.schema.json +0 -0
  393. /package/.agents/{skills → skills-archived}/plan-to-pr/reference/self-audit-tasks.md +0 -0
  394. /package/.agents/{skills → skills-archived}/plan-to-pr/reference/task-seeds.md +0 -0
  395. /package/.agents/{skills → skills-archived}/plan-to-pr/reference/task-ticket.md +0 -0
  396. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/config/__init__.py +0 -0
  397. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/config/constants.py +0 -0
  398. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/create_packet.py +0 -0
  399. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/load_skill_constants.py +0 -0
  400. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/test_create_packet.py +0 -0
  401. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/test_validate_packet.py +0 -0
  402. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/test_validate_protocol.py +0 -0
  403. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/test_validate_run.py +0 -0
  404. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/validate_packet.py +0 -0
  405. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/validate_protocol.py +0 -0
  406. /package/.agents/{skills → skills-archived}/plan-to-pr/scripts/validate_run.py +0 -0
  407. /package/.agents/{skills → skills-archived}/plan-to-pr/test_skill_contract.py +0 -0
  408. /package/.agents/{skills → skills-archived}/plan-to-pr/test_task_ticket_contract.py +0 -0
  409. /package/.agents/{skills → skills-archived}/pr-converge/.claude/CLAUDE.md +0 -0
  410. /package/.agents/{skills → skills-archived}/pr-converge/AGENTS.md +0 -0
  411. /package/.agents/{skills → skills-archived}/pr-converge/pr_converge_skill_constants/.claude/CLAUDE.md +0 -0
  412. /package/.agents/{skills → skills-archived}/pr-converge/pr_converge_skill_constants/__init__.py +0 -0
  413. /package/.agents/{skills → skills-archived}/pr-converge/reference/.claude/CLAUDE.md +0 -0
  414. /package/.agents/{skills → skills-archived}/pr-converge/reference/AGENTS.md +0 -0
  415. /package/.agents/{skills → skills-archived}/pr-converge/reference/convergence-gates.md +0 -0
  416. /package/.agents/{skills → skills-archived}/pr-converge/reference/examples.md +0 -0
  417. /package/.agents/{skills → skills-archived}/pr-converge/reference/fix-protocol.md +0 -0
  418. /package/.agents/{skills → skills-archived}/pr-converge/reference/ground-rules.md +0 -0
  419. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/.claude/CLAUDE.md +0 -0
  420. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/AGENTS.md +0 -0
  421. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-post-replies.md +0 -0
  422. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-publish-summary.md +0 -0
  423. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-push.md +0 -0
  424. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-read-filelines.md +0 -0
  425. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-reset-state.md +0 -0
  426. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-resolve-threads.md +0 -0
  427. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-spawn-clean-coder.md +0 -0
  428. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-stage-commit.md +0 -0
  429. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-trigger-bugbot.md +0 -0
  430. /package/.agents/{skills → skills-archived}/pr-converge/reference/obstacles/fix-write-test.md +0 -0
  431. /package/.agents/{skills → skills-archived}/pr-converge/reference/progress-checklist.md +0 -0
  432. /package/.agents/{skills → skills-archived}/pr-converge/reference/state-schema.md +0 -0
  433. /package/.agents/{skills → skills-archived}/pr-converge/reference/stop-conditions.md +0 -0
  434. /package/.agents/{skills → skills-archived}/pr-converge/scripts/.claude/CLAUDE.md +0 -0
  435. /package/.agents/{skills → skills-archived}/pr-converge/scripts/AGENTS.md +0 -0
  436. /package/.agents/{skills → skills-archived}/pr-converge/scripts/README.md +0 -0
  437. /package/.agents/{skills → skills-archived}/pr-converge/scripts/_pr_converge_path_setup.py +0 -0
  438. /package/.agents/{skills → skills-archived}/pr-converge/scripts/caller-window-pid.ps1 +0 -0
  439. /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_bugbot_ci.py +0 -0
  440. /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_convergence.py +0 -0
  441. /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_convergence_availability.py +0 -0
  442. /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_convergence_gates.py +0 -0
  443. /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_convergence_thread_gates.py +0 -0
  444. /package/.agents/{skills → skills-archived}/pr-converge/scripts/check_pending_reviews.py +0 -0
  445. /package/.agents/{skills → skills-archived}/pr-converge/scripts/conftest.py +0 -0
  446. /package/.agents/{skills → skills-archived}/pr-converge/scripts/cursor-agents-continue-caller.cmd +0 -0
  447. /package/.agents/{skills → skills-archived}/pr-converge/scripts/cursor-agents-continue-stop-others.ps1 +0 -0
  448. /package/.agents/{skills → skills-archived}/pr-converge/scripts/cursor-agents-continue.ahk +0 -0
  449. /package/.agents/{skills → skills-archived}/pr-converge/scripts/cursor-agents-continue.cmd +0 -0
  450. /package/.agents/{skills → skills-archived}/pr-converge/scripts/fetch_copilot_reviews.py +0 -0
  451. /package/.agents/{skills → skills-archived}/pr-converge/scripts/post_fix_reply.py +0 -0
  452. /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/.claude/CLAUDE.md +0 -0
  453. /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/AGENTS.md +0 -0
  454. /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/__init__.py +0 -0
  455. /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +0 -0
  456. /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/pr_converge_constants.py +0 -0
  457. /package/.agents/{skills → skills-archived}/pr-converge/scripts/pr_converge_scripts_constants/reflow_skill_md_constants.py +0 -0
  458. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test__pr_converge_path_setup.py +0 -0
  459. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_bugbot_ci.py +0 -0
  460. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence.py +0 -0
  461. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_availability.py +0 -0
  462. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_codex.py +0 -0
  463. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_contract.py +0 -0
  464. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_fixture.py +0 -0
  465. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_gates.py +0 -0
  466. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_check_convergence_thread_gates.py +0 -0
  467. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_cursor_agents_continue.py +0 -0
  468. /package/.agents/{skills → skills-archived}/pr-converge/scripts/test_reflow_skill_md.py +0 -0
  469. /package/.agents/{skills → skills-archived}/pr-converge/test_step5_host_branch.py +0 -0
  470. /package/.agents/{skills → skills-archived}/pr-converge/workflows/.claude/CLAUDE.md +0 -0
  471. /package/.agents/{skills → skills-archived}/pr-converge/workflows/AGENTS.md +0 -0
  472. /package/.agents/{skills → skills-archived}/pr-fix-protocol/SKILL.md +0 -0
  473. /package/.agents/{skills → skills-archived}/pr-loop-cloud-transport/SKILL.md +0 -0
  474. /package/.agents/{skills → skills-archived}/pr-loop-cloud-transport/reference/identity-and-hooks.md +0 -0
  475. /package/.agents/{skills → skills-archived}/pr-loop-cloud-transport/reference/substitution-matrix.md +0 -0
  476. /package/.agents/{skills → skills-archived}/pr-loop-lifecycle/SKILL.md +0 -0
  477. /package/.agents/{skills → skills-archived}/pr-loop-lifecycle/reference/teardown-publish-permissions.md +0 -0
  478. /package/.agents/{skills → skills-archived}/recall/.claude/CLAUDE.md +0 -0
  479. /package/.agents/{skills → skills-archived}/recall/AGENTS.md +0 -0
  480. /package/.agents/{skills → skills-archived}/recall/SKILL.md +0 -0
  481. /package/.agents/{skills → skills-archived}/release-notes-html/SKILL.md +0 -0
  482. /package/.agents/{skills → skills-archived}/remember/.claude/CLAUDE.md +0 -0
  483. /package/.agents/{skills → skills-archived}/remember/AGENTS.md +0 -0
  484. /package/.agents/{skills → skills-archived}/remember/SKILL.md +0 -0
  485. /package/.agents/{skills → skills-archived}/reviewer-gates/SKILL.md +0 -0
  486. /package/.agents/{skills → skills-archived}/reviews/SKILL.md +0 -0
  487. /package/.agents/{skills → skills-archived}/show/SKILL.md +0 -0
  488. /package/.agents/{skills → skills-archived}/show/references/accessibility.md +0 -0
  489. /package/.agents/{skills → skills-archived}/show/references/art.md +0 -0
  490. /package/.agents/{skills → skills-archived}/show/references/charts.md +0 -0
  491. /package/.agents/{skills → skills-archived}/show/references/core-design.md +0 -0
  492. /package/.agents/{skills → skills-archived}/show/references/erds.md +0 -0
  493. /package/.agents/{skills → skills-archived}/show/references/flowcharts.md +0 -0
  494. /package/.agents/{skills → skills-archived}/show/references/host-and-html.md +0 -0
  495. /package/.agents/{skills → skills-archived}/show/references/illustrative-diagrams.md +0 -0
  496. /package/.agents/{skills → skills-archived}/show/references/interaction.md +0 -0
  497. /package/.agents/{skills → skills-archived}/show/references/mockups.md +0 -0
  498. /package/.agents/{skills → skills-archived}/show/references/quality-gates.md +0 -0
  499. /package/.agents/{skills → skills-archived}/show/references/structural-diagrams.md +0 -0
  500. /package/.agents/{skills → skills-archived}/show/references/subject-inventory.md +0 -0
  501. /package/.agents/{skills → skills-archived}/show/references/svg-contract.md +0 -0
  502. /package/.agents/{skills → skills-archived}/show/routing.yaml +0 -0
  503. /package/.agents/{skills → skills-archived}/show/samples/pr1262-v2.svg +0 -0
  504. /package/.agents/{skills → skills-archived}/show/scripts/README.md +0 -0
  505. /package/.agents/{skills → skills-archived}/show/scripts/validate-artifact.py +0 -0
  506. /package/.agents/{skills → skills-archived}/show/scripts/validate-package.py +0 -0
  507. /package/.agents/{skills → skills-archived}/show/templates/html-widget.html +0 -0
  508. /package/.agents/{skills → skills-archived}/show/templates/svg-base.svg +0 -0
  509. /package/.agents/{skills → skills-archived}/show/tests/fixtures/css-var.svg +0 -0
  510. /package/.agents/{skills → skills-archived}/show/tests/fixtures/dead-ref.svg +0 -0
  511. /package/.agents/{skills → skills-archived}/show/tests/fixtures/filled-glyph.svg +0 -0
  512. /package/.agents/{skills → skills-archived}/show/tests/fixtures/inherited-fill.svg +0 -0
  513. /package/.agents/{skills → skills-archived}/show/tests/fixtures/invalid.svg +0 -0
  514. /package/.agents/{skills → skills-archived}/show/tests/fixtures/large-canvas.svg +0 -0
  515. /package/.agents/{skills → skills-archived}/show/tests/fixtures/unfilled-connector.svg +0 -0
  516. /package/.agents/{skills → skills-archived}/show/tests/fixtures/valid.html +0 -0
  517. /package/.agents/{skills → skills-archived}/show/tests/test_validate-artifact.py +0 -0
  518. /package/.agents/{skills → skills-archived}/show/tests/test_validators.py +0 -0
  519. /package/.agents/{skills → skills-archived}/show/workflows/create-visual.md +0 -0
  520. /package/.agents/{skills → skills-archived}/show/workflows/review-visual.md +0 -0
  521. /package/.agents/{skills → skills-archived}/split-pr/SKILL.md +0 -0
  522. /package/.agents/{skills → skills-archived}/split-pr/reference/path-layers.md +0 -0
  523. /package/.agents/{skills → skills-archived}/split-pr/reference/split-further-loop.md +0 -0
  524. /package/.agents/{skills → skills-archived}/split-pr/reference/splitting-principles.md +0 -0
  525. /package/.agents/{skills → skills-archived}/split-pr/scripts/analyze_pr.py +0 -0
  526. /package/.agents/{skills → skills-archived}/split-pr/scripts/categorize_files.py +0 -0
  527. /package/.agents/{skills → skills-archived}/split-pr/scripts/config/__init__.py +0 -0
  528. /package/.agents/{skills → skills-archived}/split-pr/scripts/config/dependency_constants.py +0 -0
  529. /package/.agents/{skills → skills-archived}/split-pr/scripts/config/git_operations_constants.py +0 -0
  530. /package/.agents/{skills → skills-archived}/split-pr/scripts/config/packing_constants.py +0 -0
  531. /package/.agents/{skills → skills-archived}/split-pr/scripts/config/plan_constants.py +0 -0
  532. /package/.agents/{skills → skills-archived}/split-pr/scripts/config/split_pr_constants.py +0 -0
  533. /package/.agents/{skills → skills-archived}/split-pr/scripts/execute_split_slices.py +0 -0
  534. /package/.agents/{skills → skills-archived}/split-pr/scripts/pack_files_into_slices.py +0 -0
  535. /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_dependency_graph.py +0 -0
  536. /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_git_operations.py +0 -0
  537. /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_layer_order.py +0 -0
  538. /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_paginate.py +0 -0
  539. /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_process_runner.py +0 -0
  540. /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_script_types.py +0 -0
  541. /package/.agents/{skills → skills-archived}/split-pr/scripts/split_pr_title.py +0 -0
  542. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_analyze_pr.py +0 -0
  543. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_categorize_files.py +0 -0
  544. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_categorize_files_packing.py +0 -0
  545. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_execute_split_slices.py +0 -0
  546. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_dependency_graph.py +0 -0
  547. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_git_operations.py +0 -0
  548. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_layer_order.py +0 -0
  549. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_paginate.py +0 -0
  550. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_script_types.py +0 -0
  551. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_split_pr_title.py +0 -0
  552. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_verify_dependency_graph.py +0 -0
  553. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_verify_plan.py +0 -0
  554. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_verify_plan_contract.py +0 -0
  555. /package/.agents/{skills → skills-archived}/split-pr/scripts/test_verify_plan_path_normalization.py +0 -0
  556. /package/.agents/{skills → skills-archived}/split-pr/scripts/verify_dependency_graph.py +0 -0
  557. /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 push_attempt.returncode != 0, (
724
- "bare push should be refused, but it succeeded:\n"
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 |