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,29 @@
1
+ # Report template
2
+
3
+ Emit this shape. Keep it compact.
4
+
5
+ ```markdown
6
+ ## Name-by-capability audit — PR #<N>
7
+
8
+ **Verdict:** <clean | N violations, M OK drivers>
9
+
10
+ ### Violations
11
+ | Finding | Path / title | Why | Suggested rename direction |
12
+ |---------|--------------|-----|----------------------------|
13
+ | Driver word on capability | `path/or/Title` | <one sentence> | <capability-oriented name family> |
14
+
15
+ ### OK drivers
16
+ | Surface | Path / title | Why OK |
17
+ |---------|--------------|--------|
18
+ | Queue / routing / … | `path` | <one sentence> |
19
+
20
+ ### Notes
21
+ - <optional: expanded offense in a package this PR grew, doc-only context, etc.>
22
+ ```
23
+
24
+ ### Rules for filling cells
25
+
26
+ - **Finding** — short label for Violations rows only (`Driver word on capability`, `Motive framing in title`).
27
+ - **Why** — cite the checklist item (reuse? action name? motive reserved for drivers?).
28
+ - **Suggested rename direction** — a family of names (e.g. “STP color batch / color UID rewrite”).
29
+ - When clean: **Verdict: clean** and omit Violation rows (keep the OK drivers / Notes sections if useful).
@@ -0,0 +1,38 @@
1
+ # Name-by-capability rule (skill-local)
2
+
3
+ Prefer `docs/agents/name-by-capability.md` when that file exists in the worktree. This file is the fallback so audits still run when the docs PR has not merged yet.
4
+
5
+ ## Rule
6
+
7
+ Name packages and modules for the **reusable work they perform**. Put a workflow or motive word (`cert`, `portal`, `export`, a product name, …) in the name only when that surface exists **solely** for that driver.
8
+
9
+ 1. **Capability name first.** Prefer names that say the operation (replace an asset slot, rewrite a color UID, send an email, locate a folder on disk, …).
10
+ 2. **Drivers stay at the edge.** Queue drains, report parsers, and other workflow-only shells may keep the workflow word. Libraries they call use capability names.
11
+ 3. **Orchestrators apply capabilities.** When several operations run on one artifact, one apply/orchestrator module owns stage → apply in order → result. Callers that know *why* map intents onto a registry of capability adapters.
12
+ 4. **Extend the capability, then wire the driver.** New use cases add or extend a capability adapter, then teach the driver which inputs map to it.
13
+
14
+ ## Checklist before accepting a new or renamed path
15
+
16
+ A driver word in the name plus reuse by another workflow is a **violation**.
17
+
18
+ 1. Would another workflow reuse this? When yes, name the package/module for the shared action.
19
+ 2. Does the name state the action or artifact change?
20
+ 3. Is any motive word reserved for driver-only code?
21
+
22
+ ## Driver / motive words (non-exhaustive)
23
+
24
+ Treat these as driver words when they appear in a package or module name for reusable library code:
25
+
26
+ - `cert`, `cert_fix`, `cert_closeout`
27
+ - `portal`, `export`, `submission`, `discount`
28
+ - Product or campaign names used as a motive rather than an operation
29
+
30
+ ## What to score on a PR
31
+
32
+ | Signal | Score when |
33
+ |--------|------------|
34
+ | New package/dir | Path segment carries a driver word |
35
+ | Renamed package/module | Old or new name carries a driver word on capability code |
36
+ | New module under an existing package | File/module stem carries a driver word for a general op |
37
+ | PR title / scope | Frames a general shared capability change with a driver/motive word |
38
+ | Unchanged misnamed package | Score when this PR **expands** the offense (new public API, new callers); otherwise list under Notes as out-of-diff context |
@@ -0,0 +1,9 @@
1
+ # Task seeds
2
+
3
+ Register each item on `TodoWrite` / `TaskCreate` at audit start. Complete with evidence.
4
+
5
+ 1. Load the rule: `docs/agents/name-by-capability.md` when present, else `reference/rule-checklist.md` (always keep the skill checklist as fallback).
6
+ 2. Fetch PR title, body, and changed/renamed paths via `reference/fetch-commands.md`.
7
+ 3. Classify each naming signal as violation, OK driver, or skip (`reference/offense-examples.md` classifier first).
8
+ 4. Emit report from `reference/report-template.md`.
9
+ 5. Apply the requested or suggested rename direction by default; an explicit audit-only request ends after the report.
@@ -122,9 +122,11 @@ pending, or when the tool is `CronCreate`.
122
122
  `rearm_pending` when already active, but still do not re-arm.)
123
123
  2. **Bind the shared advisor before any executor.** Follow
124
124
  [`_shared/advisor/advisor-protocol.md`](../../_shared/advisor/advisor-protocol.md)
125
- end to end: detect the host profile, compute the floor from the
125
+ end to end: name the session identity, compute the floor from the
126
126
  orchestrator consumer set — this session plus every tier in the
127
- routing table (its Model floor section) — walk the ladder top-down,
127
+ routing table (its Model floor section) — walk the ladder for that
128
+ host (Claude: Fable first, then Sol when Fable is out of usage;
129
+ Codex: Sol in-session; ThirdParty: headless Fable then Sol),
128
130
  and fail closed when nothing binds. This session owns the advisor's
129
131
  whole lifecycle (its Lifecycle ownership section); executors only ever
130
132
  message the warm agent or report here, and an executor that finds the
@@ -261,8 +263,8 @@ Routing rules:
261
263
  way — the coding spawn stops and the orchestrator reports it.
262
264
  - Host detection follows
263
265
  [`_shared/advisor/advisor-protocol.md`](../../_shared/advisor/advisor-protocol.md)
264
- (Host profiles section, `detect_host_profile`) — the sole detection
265
- system, with no second one.
266
+ (Host profiles section, `resolve_session_identity` then
267
+ `detect_host_profile`) — the sole detection system, with no second one.
266
268
  - Resume a warm workflow agent before creating a new workflow run when
267
269
  the warm agent holds the relevant context.
268
270
  - Review and verification workflows apply the [review guide](../reviews/SKILL.md#review-workflow).
@@ -10,10 +10,10 @@ description: >-
10
10
 
11
11
  # Orchestrator Refresh
12
12
 
13
- Detect the host profile first (see Host profiles in
13
+ Name the session identity first (see Host profiles in
14
14
  [`_shared/advisor/advisor-protocol.md`](../../_shared/advisor/advisor-protocol.md)).
15
15
  Re-assert the discipline for that host only — do not invent an Agent-tool
16
- Claude `session-advisor` spawn on a third-party host.
16
+ Claude `session-advisor` spawn on a Codex or third-party host.
17
17
 
18
18
  ## 0. status_gate first (deterministic)
19
19
 
@@ -94,9 +94,13 @@ once, and reports the unreachable advisor.
94
94
  the protocol's warm-up rule states;
95
95
  `hooks/blocking/fable_spawn_gate.py` denies a fable spawn whose
96
96
  prompt lacks it.
97
- - **Third-party host:** advisor is a max-tier Claude CLI bind owned
98
- by this session (`claude_chain_runner.py`, Fable high then Opus
99
- max). Do **not** spawn `session-advisor` via Agent. Executors
97
+ - **Codex host:** advisor is a native in-session Sol subagent owned
98
+ by this session. Do **not** spawn Claude `session-advisor` via
99
+ Agent. Executors consult that Sol subagent in-session. If Sol does
100
+ not bind, fail closed.
101
+ - **Third-party host:** advisor is a Claude CLI bind owned
102
+ by this session (`claude_chain_runner.py`, Fable then Sol when Fable
103
+ is out of usage, both at `ADVISOR_EFFORT`). Do **not** spawn `session-advisor` via Agent. Executors
100
104
  report blockers here; consult the CLI advisor and relay signals.
101
105
  If the CLI bind is unreachable, fail closed — do not answer the
102
106
  four signals as this third-party session.
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: pr-cleanup
3
+ description: >-
4
+ Clean a PR end-to-end with one coding agent: shared-extraction-audit,
5
+ name-by-capability-audit, sr-loop, then small-cl — apply and validate fixes
6
+ as they return. Use when the user asks for /pr-cleanup or full PR cleanup
7
+ (place, name, converge, then shrink).
8
+ ---
9
+
10
+ # PR cleanup
11
+
12
+ One coding agent cleans a pull request end-to-end: put code in the right place,
13
+ name it for what it does, run the converging cleanup loop, then shrink the
14
+ change into a reviewable size.
15
+
16
+ This skill is host-neutral. Any coding agent that can edit the PR head, run
17
+ scoped tests, and invoke the composed skills may run it.
18
+
19
+ ## When to use
20
+
21
+ - `/pr-cleanup <PR>` or “run pr-cleanup on this PR”
22
+ - A PR needs extraction + naming + sr-loop + a smaller reviewable slice in one pass
23
+
24
+ ## Inputs
25
+
26
+ - Target: PR URL, number, or branch (required). Missing → ask:
27
+ `Give a GitHub PR number or URL for pr-cleanup.`
28
+ - Repo: take from the PR URL when given; otherwise the user’s default monitored repo
29
+
30
+ ## Composition (run in this order)
31
+
32
+ | Step | Skill | Role |
33
+ |------|--------|------|
34
+ | 1 | `shared-extraction-audit` | Wrong *place* (workflow package vs shared library) |
35
+ | 2 | `name-by-capability-audit` | Wrong *name* (driver word on reusable capability) |
36
+ | 3 | `sr-loop` / `e-simplify` then `e-code-review` | Converging simplify + high-effort review with `--fix` |
37
+ | 4 | `small-cl` | Split / shrink into a focused reviewable PR |
38
+
39
+ All four run under **one coding agent session** on the same worktree / PR head.
40
+ For sr-loop advisor consults, bind `team-advisor` as a second session at equal
41
+ tier when the host supports it (see `team-advisor` and the advisor docs).
42
+
43
+ ## Fix-as-you-go (required)
44
+
45
+ Some of these skills can report without changing code. For **pr-cleanup**, that
46
+ is not enough:
47
+
48
+ 1. **Stream findings** — as each audit/loop returns an item (offense, rename,
49
+ simplify fix, review finding), treat it as work to do now, not a backlog.
50
+ 2. **Apply the fix** on the PR head (or the first small-cl increment if already
51
+ splitting) before moving on to the next item when practical.
52
+ 3. **Validate** after each applied fix: scoped tests beside touched files (or
53
+ `py_compile` / package tests when there is no adjacent suite). No test theater.
54
+ 4. **Commit + push** after each validated changing pass (one concern per commit
55
+ when possible; keep the PR draft).
56
+ 5. **Do not** finish with an audit-only report while known P0/P1 fixes sit
57
+ unapplied — either fix them or hard-block with why.
58
+
59
+ If the user says **audit-only**, stop after reports and skip apply / small-cl.
60
+
61
+ ## Process
62
+
63
+ 1. Resolve PR → convert to draft if needed; clean worktree of the PR head;
64
+ never mark ready for review.
65
+ 2. Run the four composed skills in order on that head:
66
+ - `shared-extraction-audit` in the **implement** band (not audit-only)
67
+ - `name-by-capability-audit`; apply clear rename directions (or ones the user
68
+ already approved), noting rename direction in the commit message
69
+ - `sr-loop`: Phase A `e-simplify`, Phase B `e-code-review` at **xhigh** with
70
+ `--fix` (not the default low); consult `team-advisor` before the first
71
+ write and after writes + validation
72
+ - Apply fixes as each pass returns findings; validate → commit → push
73
+ 3. After the loop converges (or nits-only stop): run **small-cl** — identify the
74
+ first coherent reviewable increment; if the PR is still too wide, split or
75
+ retitle/scope per small-cl (do not invent extra PRs unless the user asked).
76
+ 4. Return the finish report below. Merge-ready email / chat delivery is owned by
77
+ the caller (for example a PR monitor host), not this skill.
78
+
79
+ ## Hard rules
80
+
81
+ - No test theater.
82
+ - Real spawn/behavior validation when the PR claims an external binary path.
83
+ - Prefer cleanup; functional only for correctness. Label each commit
84
+ `cleanup` vs `functional`.
85
+ - Keep the PR draft. Never mark ready for review during this skill.
86
+ - Extraction before rename when both apply to the same symbol (move, then name
87
+ the new home).
88
+ - small-cl last — shrink only after place / name / cleanup are settled enough
89
+ that the slice is honest.
90
+
91
+ ## Finish report
92
+
93
+ - PR / repo / starting_sha / ending_sha
94
+ - Per step: extraction findings applied, naming violations applied, sr-loop
95
+ passes + commits, small-cl outcome (kept / split plan)
96
+ - `commits_pushed` with cleanup|functional labels
97
+ - `validation_ran` + outcomes
98
+ - `hard_block` or null
99
+ - `draft_still: true`
@@ -8,7 +8,7 @@ State both of these to the user, in these terms, whenever a proof-of-concept is
8
8
 
9
9
  Promotion records the controls applied to the real diff:
10
10
 
11
- - review and verification under the [review guide](../../reviews/SKILL.md#review-workflow);
11
+ - review and verification under the [review guide](../../skills-archived/reviews/SKILL.md#review-workflow);
12
12
  - the `privacy-hygiene` sweep for personal data and secrets;
13
13
  - the pull-request review criteria and any PR-loop reviewers.
14
14
 
@@ -14,7 +14,7 @@ Promotion runs in the **normal, fully-hooked session** — never inside the `--b
14
14
 
15
15
  5. **Privacy sweep.** Run the `privacy-hygiene` skill over the full applied working tree, not only the diff — a POC that pulled live data can leave a secret in a file the diff view hides. Evidence: its clean report, or the leak it found and how it was removed. If the skill is missing, do a manual PII and secret review and say so.
16
16
 
17
- 6. **Review and verify the real diff.** Apply the [review guide](../../reviews/SKILL.md#review-workflow). Evidence: the checks run and each required finding repaired. Do not rely on sandbox testing as promotion evidence.
17
+ 6. **Review and verify the real diff.** Apply the [review guide](../../skills-archived/reviews/SKILL.md#review-workflow). Evidence: the checks run and each required finding repaired. Do not rely on sandbox testing as promotion evidence.
18
18
 
19
19
  7. **Commit and open a draft PR.** After the review and verification record is complete, commit by hand per the `git-workflow` rule, then open a draft PR. Evidence: the commit hash and the PR URL.
20
20
 
@@ -27,7 +27,7 @@ DESTRUCTIVE_HOOK_BASENAME = ALL_SAFETY_HOOK_SCRIPT_BASENAMES[1]
27
27
 
28
28
  CODE_RULES_HOOK_BASENAME = "code_rules_enforcer.py"
29
29
  TDD_HOOK_BASENAME = "tdd_enforcer.py"
30
- PLAIN_LANGUAGE_HOOK_BASENAME = "plain_language_blocker.py"
30
+ QUESTION_SHAPE_HOOK_BASENAME = "ask_user_question_shape_blocker.py"
31
31
 
32
32
  BASH_MATCHER = "Bash"
33
33
  WRITE_MATCHER = "Write"
@@ -186,7 +186,7 @@ def test_build_excludes_every_non_safety_hook() -> None:
186
186
  for each_excluded in (
187
187
  CODE_RULES_HOOK_BASENAME,
188
188
  TDD_HOOK_BASENAME,
189
- PLAIN_LANGUAGE_HOOK_BASENAME,
189
+ QUESTION_SHAPE_HOOK_BASENAME,
190
190
  ):
191
191
  assert all(each_excluded not in each_command for each_command in all_commands)
192
192
 
@@ -15,11 +15,11 @@ The task seeds carry the full ordered detail. The shape:
15
15
  3. **Bring content as an uncommitted diff.** Copy the POC's file changes into the new branch's working tree. Do not cherry-pick or merge the sandbox commits; the sandbox history stays behind.
16
16
  4. **Cleanup.** Remove scratch files, debug dumps, and temp helpers the POC created (`cleanup-temp-files` rule).
17
17
  5. **Privacy sweep** via `privacy-hygiene` over the diff.
18
- 6. **Review and verify** the real diff against the [review guide](../../reviews/SKILL.md#review-workflow). Record the checks run and repair every required finding.
18
+ 6. **Review and verify** the real diff against the [review guide](../../skills-archived/reviews/SKILL.md#review-workflow). Record the checks run and repair every required finding.
19
19
  7. **Commit and PR.** After the review and verification record is complete, commit by hand per the `git-workflow` rule, then open a draft PR.
20
20
  8. **State the honest limitations** from `reference/honest-limitations.md` in the PR body or to the user.
21
21
  9. **Converge** by handing the PR to `autoconverge` by default; use `pr-converge` for paced ticks or `bugteam` for an open-loop audit.
22
22
 
23
23
  ## Why the clean room, not a push
24
24
 
25
- `code_rules_enforcer` is a write-time Write/Edit gate. Content that lands through `git apply`, `git checkout`, or cherry-pick receives the clean-room controls in steps 4–6: cleanup, privacy review, and review and verification under the [review guide](../../reviews/SKILL.md#review-workflow). The promotion record states the checks run and the remaining TDD limitation.
25
+ `code_rules_enforcer` is a write-time Write/Edit gate. Content that lands through `git apply`, `git checkout`, or cherry-pick receives the clean-room controls in steps 4–6: cleanup, privacy review, and review and verification under the [review guide](../../skills-archived/reviews/SKILL.md#review-workflow). The promotion record states the checks run and the remaining TDD limitation.
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: review-router
3
+ description: >-
4
+ Resolve and arm one supported `route_review_config` route through the registered Agent|Task gate. Triggers: /review-router and guarded reviewer spawn.
5
+ ---
6
+
7
+ # Review Router
8
+
9
+ Resolve and arm the supported `e-simplify` route. The registered `PreToolUse Agent|Task` hook enforces the exact armed spawn payload.
10
+
11
+ ## When this applies
12
+
13
+ Use for `/review-router` and route execution after `/review-tier`. Return `UNSUPPORTED_ROUTE` for `e-code-review`; preserve `/e-code-review` behavior.
14
+
15
+ ## Operations
16
+
17
+ 1. Register `reference/task-seeds.md` with the host task tool.
18
+ 2. Call `scripts/review_router_cli.py resolve` for the current `route_policy_hash` decision and optional tier override.
19
+ 3. Call `arm` for the exact selected slot and dispatch the returned Agent|Task payload.
20
+ 4. Let the registered hook enforce the payload, then call `close`.
21
+
22
+ The route topology is fixed: T1 uses one Luna High slot, T2 uses one Luna Max slot, and T3 uses six ordered Luna High slots.
23
+
24
+ ## Composition
25
+
26
+ | Peer | When | Produces | Missing behavior |
27
+ |---|---|---|---|
28
+ | `/review-tier` | Before routing | Current tier decision | Return the route request to `/review-tier`. |
29
+ | `/e-simplify` | When cleanup review is requested | Cleanup review request | Return `UNSUPPORTED_ROUTE`. |
30
+
31
+ ## File index
32
+
33
+ | File | Purpose |
34
+ |---|---|
35
+ | `SKILL.md` | Route contract and operations |
36
+ | `reference/route-policy.json` | Supported route topology |
37
+ | `reference/task-seeds.md` | Current route task seeds |
38
+ | `scripts/review_router.py` | `route_policy_hash` input and route resolution |
39
+ | `scripts/review_router_cli.py` | Resolve, arm, and close operations |
40
+ | `scripts/test_review_router.py` | Route policy tests |
41
+ | `scripts/test_review_router_cli.py` | CLI rejection tests |
42
+ | `scripts/test_review_router_integration.py` | CLI and registered-hook tests |
43
+ | `scripts/review_router_constants/config/constants.py` | Portable route constants |
44
+ | `scripts/review_router_constants/config/__init__.py` | Runtime configuration package |
45
+ | `scripts/review_router_constants/__init__.py` | Constants package |
46
+ | `scripts/conftest.py` | Test import setup |
47
+
48
+ ## Folder map
49
+
50
+ - `reference/` — route policy and task seeds.
51
+ - `scripts/` — route resolution, CLI operations, and tests.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 1,
3
+ "routes": {
4
+ "e-simplify": {"status": "SUPPORTED", "skill": "e-simplify", "tiers": ["T1", "T2", "T3"], "models": {"T1": {"role": "executor", "model": "gpt-5.6-luna", "effort": "high", "pass_ids": ["simplify-01"]}, "T2": {"role": "executor", "model": "gpt-5.6-luna", "effort": "max", "pass_ids": ["simplify-01"]}, "T3": {"role": "executor", "model": "gpt-5.6-luna", "effort": "high", "pass_ids": ["simplify-01", "simplify-02", "simplify-03", "simplify-04", "simplify-05", "simplify-06"]}}},
5
+ "e-code-review": {"status": "UNSUPPORTED_ROUTE", "skill": "e-code-review", "tiers": []}
6
+ }
7
+ }
@@ -0,0 +1 @@
1
+ Register resolve e-simplify, apply override, arm exact slot, enforce through the registered Agent|Task hook, close the decision, and report unsupported e-code-review as host tasks. Complete each with command output or the current decision/armed record.
@@ -0,0 +1,4 @@
1
+ from pathlib import Path
2
+ import sys
3
+
4
+ sys.path.insert(0, str(Path(__file__).resolve().parent))
@@ -0,0 +1,50 @@
1
+ """Thin route orchestrator for review-tier decisions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from pathlib import Path
7
+
8
+ from review_router_constants.config.constants import UNSUPPORTED_ROUTE, UNSUPPORTED_TIER
9
+
10
+
11
+ def load_route_policy() -> dict:
12
+ """Load versioned route policy data.
13
+
14
+ Args:
15
+ Returns:
16
+ Route policy mapping.
17
+ Raises:
18
+ ValueError: If the policy schema is invalid.
19
+ """
20
+ policy_path = Path(__file__).parent.parent / "reference" / "route-policy.json"
21
+ policy = json.loads(policy_path.read_text(encoding="utf-8"))
22
+ if policy.get("version") != 1 or not isinstance(policy.get("routes"), dict):
23
+ raise ValueError("malformed route policy")
24
+ return policy
25
+
26
+
27
+ def resolve_route(route: str, tier: str, policy: dict | None = None) -> dict:
28
+ """Resolve one route or return a stable unsupported result.
29
+
30
+ Args:
31
+ route: Requested route name.
32
+ tier: Effective tier.
33
+ policy: Optional route policy.
34
+ Returns:
35
+ Dispatch record or unsupported status.
36
+ """
37
+ selected_policy = policy or load_route_policy()
38
+ route_record = selected_policy["routes"].get(route)
39
+ if route_record is None or route_record["status"] != "SUPPORTED":
40
+ return {"status": UNSUPPORTED_ROUTE, "route": route, "tier": tier}
41
+ if tier not in route_record["tiers"]:
42
+ return {"status": UNSUPPORTED_TIER, "route": route, "tier": tier}
43
+ dispatch = route_record["models"][tier]
44
+ return {
45
+ "status": "SUPPORTED",
46
+ "route": route,
47
+ "tier": tier,
48
+ "skill": route_record["skill"],
49
+ "dispatch": dispatch,
50
+ }
@@ -0,0 +1,211 @@
1
+ """CLI for signed review decisions and one-time spawn permits."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import hashlib
7
+ import hmac
8
+ import json
9
+ import os
10
+ import shlex
11
+ import secrets
12
+ import sys
13
+ from pathlib import Path
14
+
15
+ tier_script = Path(__file__).resolve().parents[1].parent / "review-tier" / "scripts"
16
+ if str(tier_script) not in sys.path:
17
+ sys.path.insert(0, str(tier_script))
18
+ from review_router_constants.config.constants import ( # noqa: E402
19
+ ALL_OVERRIDE_VALUES,
20
+ CLEANUP_CONTRACT,
21
+ DECISION_ID_BYTES,
22
+ INTEGRITY_KEY_BYTES,
23
+ INVALID_ROUTE_ARM,
24
+ INVALID_ROUTE_RECORD,
25
+ MALFORMED_TIER_OVERRIDE,
26
+ ROUTE_SPAWN_ARMED,
27
+ UNKNOWN_ROUTE_SLOT,
28
+ UNSUPPORTED_ROUTE,
29
+ )
30
+ from review_tier import ( # noqa: E402
31
+ build_generation,
32
+ canonical_json_hash,
33
+ inventory_generation,
34
+ policy_hash,
35
+ router_state_directory,
36
+ router_state_root,
37
+ router_state_root_id,
38
+ )
39
+ from review_router import load_route_policy, resolve_route # noqa: E402
40
+
41
+
42
+ def _write_signed(directory: Path, name: str, record: dict, secret: bytes) -> None:
43
+ encoded = _encode_record(record)
44
+ temporary = directory / f".{name}.tmp"
45
+ temporary.write_bytes(encoded)
46
+ temporary.replace(directory / name)
47
+ (directory / f"{name}.hmac").write_text(hmac.new(secret, encoded, hashlib.sha256).hexdigest(), encoding="ascii")
48
+
49
+
50
+ def _read_signed(directory: Path, name: str) -> dict:
51
+ secret = (directory / "integrity.key").read_bytes()
52
+ record_path = directory / name
53
+ encoded = record_path.read_bytes()
54
+ expected = hmac.new(secret, encoded, hashlib.sha256).hexdigest()
55
+ if not hmac.compare_digest(expected, (directory / f"{name}.hmac").read_text(encoding="ascii")):
56
+ raise ValueError(INVALID_ROUTE_RECORD)
57
+ return json.loads(encoded)
58
+
59
+
60
+ def _encode_record(record: dict) -> bytes:
61
+ return json.dumps(record, sort_keys=True, separators=(",", ":")).encode()
62
+
63
+
64
+ def _override(arguments: str) -> str | None:
65
+ tokens = shlex.split(arguments)
66
+ matches = [token for token in tokens if token == "--tier" or token.startswith("--tier=")]
67
+ if len(matches) > 1:
68
+ raise ValueError(MALFORMED_TIER_OVERRIDE)
69
+ if not matches:
70
+ return None
71
+ if matches[0] == "--tier":
72
+ index = tokens.index("--tier")
73
+ if index + 1 >= len(tokens) or tokens[index + 1] not in ALL_OVERRIDE_VALUES:
74
+ raise ValueError(MALFORMED_TIER_OVERRIDE)
75
+ return f"T{tokens[index + 1]}"
76
+ override = matches[0].split("=", 1)[1]
77
+ if override not in ALL_OVERRIDE_VALUES:
78
+ raise ValueError(MALFORMED_TIER_OVERRIDE)
79
+ return f"T{override}"
80
+
81
+
82
+ def resolve(cwd: str, review_kind: str, arguments: str, base_ref: str | None) -> dict:
83
+ """Create a signed review decision.
84
+
85
+ Args:
86
+ cwd: Repository path.
87
+ review_kind: Requested review route.
88
+ arguments: Review command arguments.
89
+ base_ref: Optional base reference.
90
+ Returns:
91
+ Decision summary.
92
+ Raises:
93
+ ValueError: If the override or base reference is invalid.
94
+ """
95
+ route_policy = load_route_policy()
96
+ route_record = route_policy["routes"].get(review_kind)
97
+ if route_record is None or route_record.get("status") != "SUPPORTED":
98
+ return {"status": UNSUPPORTED_ROUTE}
99
+ override = _override(arguments)
100
+ directory = router_state_directory(cwd)
101
+ if (directory / "armed-spawn.json").exists():
102
+ raise ValueError(ROUTE_SPAWN_ARMED)
103
+ directory.mkdir(parents=True, exist_ok=True)
104
+ key_path = directory / "integrity.key"
105
+ if not key_path.exists():
106
+ key_path.write_bytes(secrets.token_bytes(INTEGRITY_KEY_BYTES))
107
+ secret = key_path.read_bytes()
108
+ state_root = router_state_root(cwd)
109
+ generation = build_generation(cwd, requested_override=override, base_ref=base_ref, state_root=state_root)
110
+ route = resolve_route(review_kind, generation["effective_tier"], route_policy)
111
+ decision_id = secrets.token_hex(DECISION_ID_BYTES)
112
+ dispatch = route["dispatch"]
113
+ slots = [{"slot_id": each_slot_id, "model": dispatch["model"], "effort": dispatch["effort"]} for each_slot_id in dispatch["pass_ids"]]
114
+ decision = {**generation, "decision_id": decision_id, "review_kind": review_kind, "route_policy_hash": policy_hash(route_policy), "state_root_id": router_state_root_id(state_root), "slots": slots}
115
+ _write_signed(directory, "decision.json", decision, secret)
116
+ return {"status": "SUPPORTED", "decision_id": decision_id, "effective_tier": decision["effective_tier"], "automatic_tier": decision["calculated_tier"], "slot_ids": [slot["slot_id"] for slot in slots]}
117
+
118
+
119
+ def arm(cwd: str, decision_id: str, slot_id: str) -> dict:
120
+ """Create a one-time spawn permit.
121
+
122
+ Args:
123
+ cwd: Repository path.
124
+ decision_id: Decision identifier.
125
+ slot_id: Selected dispatch slot.
126
+ Returns:
127
+ Agent tool payload.
128
+ Raises:
129
+ OSError: If signed state is unavailable.
130
+ ValueError: If the decision or slot is invalid.
131
+ """
132
+ directory = router_state_directory(cwd)
133
+ secret = (directory / "integrity.key").read_bytes()
134
+ decision = _read_signed(directory, "decision.json")
135
+ if decision["decision_id"] != decision_id or (directory / "armed-spawn.json").exists():
136
+ raise ValueError(INVALID_ROUTE_ARM)
137
+ consumed_prefix = f"{decision_id}--{slot_id}"
138
+ if any(path.name.startswith(consumed_prefix) for path in (directory / "consumed").glob(f"{consumed_prefix}*")):
139
+ raise ValueError(INVALID_ROUTE_ARM)
140
+ slot = next((each_slot for each_slot in decision["slots"] if each_slot["slot_id"] == slot_id), None)
141
+ if slot is None:
142
+ raise ValueError(UNKNOWN_ROUTE_SLOT)
143
+ consumed_slots = {path.name.split("--", 1)[1].split(".", 1)[0] for path in (directory / "consumed").glob(f"{decision_id}--*.json")}
144
+ expected_slots = [each_slot["slot_id"] for each_slot in decision["slots"] if each_slot["slot_id"] not in consumed_slots]
145
+ if expected_slots and slot_id != expected_slots[0]:
146
+ raise ValueError(INVALID_ROUTE_ARM)
147
+ decision_base = decision.get("base_ref") if decision.get("base_source") == "explicit" else None
148
+ state_root = router_state_root(cwd)
149
+ current_hash = str(inventory_generation(cwd, decision_base, state_root=state_root)["diff_hash"])
150
+ if current_hash != decision["diff_hash"]:
151
+ raise ValueError(INVALID_ROUTE_ARM)
152
+ prompt = f"{CLEANUP_CONTRACT} Review {decision['review_kind']} for {decision['worktree']}. Angles: Reuse, Simplification, Efficiency, Altitude. Apply direct fixes within scope. Skip correctness, security, behavior-changing, and out-of-scope findings. Decision {decision_id}; slot {slot_id}."
153
+ spawn = {"decision_id": decision_id, "decision_hash": canonical_json_hash(decision), "state_root_id": router_state_root_id(state_root), "slot_id": slot_id, "tool_name": "Agent", "executor_type": "Luna", "model": slot["model"], "effort": slot["effort"], "prompt": prompt, "prompt_hash": hashlib.sha256(prompt.encode()).hexdigest(), "diff_hash": decision["diff_hash"]}
154
+ _write_signed(directory, "armed-spawn.json", spawn, secret)
155
+ return {"tool_name": "Agent", "tool_input": {"executor_type": "Luna", "model": spawn["model"], "effort": spawn["effort"], "prompt": prompt}}
156
+
157
+
158
+ def close(cwd: str, decision_id: str) -> dict:
159
+ """Close a decision after its permit is consumed.
160
+
161
+ Args:
162
+ cwd: Repository path.
163
+ decision_id: Decision identifier.
164
+ Returns:
165
+ Closure summary.
166
+ Raises:
167
+ OSError: If signed state is unavailable.
168
+ ValueError: If the decision is invalid or still armed.
169
+ """
170
+ directory = router_state_directory(cwd)
171
+ decision = _read_signed(directory, "decision.json")
172
+ if decision["decision_id"] != decision_id or (directory / "armed-spawn.json").exists():
173
+ raise ValueError(ROUTE_SPAWN_ARMED)
174
+ (directory / "decision.json").unlink()
175
+ (directory / "decision.json.hmac").unlink()
176
+ return {"status": "CLOSED", "decision_id": decision_id}
177
+
178
+
179
+ def main() -> int:
180
+ """Run the review-routing command line interface.
181
+
182
+ Returns:
183
+ Process exit status.
184
+ """
185
+ parser = argparse.ArgumentParser()
186
+ parser.add_argument("command", choices=("resolve", "arm", "close"))
187
+ parser.add_argument("--review-kind", default="e-simplify")
188
+ parser.add_argument("--cwd", default=os.getcwd())
189
+ parser.add_argument("--arguments", default="")
190
+ parser.add_argument("--base-ref")
191
+ parser.add_argument("--decision-id")
192
+ parser.add_argument("--slot")
193
+ parser.add_argument("--requested", action="store_true")
194
+ options = parser.parse_args()
195
+ if options.requested:
196
+ parser.error("--requested is not supported")
197
+ try:
198
+ if options.command == "resolve":
199
+ dispatch_record = resolve(options.cwd, options.review_kind, options.arguments, base_ref=options.base_ref)
200
+ elif options.command == "arm":
201
+ dispatch_record = arm(options.cwd, options.decision_id, options.slot)
202
+ else:
203
+ dispatch_record = close(options.cwd, options.decision_id)
204
+ except (OSError, ValueError) as error:
205
+ parser.error(str(error))
206
+ print(json.dumps(dispatch_record, sort_keys=True))
207
+ return 0
208
+
209
+
210
+ if __name__ == "__main__":
211
+ raise SystemExit(main())
@@ -0,0 +1 @@
1
+ """Review-router constants package."""
@@ -0,0 +1,13 @@
1
+ """Constants for route_review_config."""
2
+
3
+ UNSUPPORTED_ROUTE = "UNSUPPORTED_ROUTE"
4
+ UNSUPPORTED_TIER = "UNSUPPORTED_TIER"
5
+ INVALID_ROUTE_RECORD = "INVALID_ROUTE_RECORD"
6
+ MALFORMED_TIER_OVERRIDE = "MALFORMED_TIER_OVERRIDE"
7
+ INVALID_ROUTE_ARM = "INVALID_ROUTE_ARM"
8
+ UNKNOWN_ROUTE_SLOT = "UNKNOWN_ROUTE_SLOT"
9
+ ROUTE_SPAWN_ARMED = "ROUTE_SPAWN_ARMED"
10
+ ALL_OVERRIDE_VALUES = ("1", "2", "3")
11
+ INTEGRITY_KEY_BYTES = 32
12
+ DECISION_ID_BYTES = 16
13
+ CLEANUP_CONTRACT = """This is a cleanup-only review of the current diff, not a correctness or security bug hunt. Gather the diff and include uncommitted changes. Review reuse, simplification, efficiency, and altitude. Reuse existing helpers and adjacent patterns. Simplify redundant state, copy-paste, nesting, dead code, and unnecessary complexity. Remove redundant computation, repeated I/O, sequential independent work, and long-lived captured objects. Fix each issue at the owning abstraction and preserve the intended behavior. Apply safe fixes directly within the reviewed diff. Each finding has file, line, summary, and concrete cost. Skip findings whose fix changes intended behavior, reaches outside the diff, or belongs to correctness review. Respond exactly: That's a correctness review — use /e-code-review, not this skill. Finish with what was fixed and what was skipped."""