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
@@ -1,4 +1,4 @@
1
- import { test, after } from 'node:test';
1
+ import { test } from 'node:test';
2
2
  import { strict as assert } from 'node:assert';
3
3
  import { execFileSync, spawnSync } from 'node:child_process';
4
4
  import {
@@ -9,7 +9,6 @@ import {
9
9
  readFileSync,
10
10
  readdirSync,
11
11
  rmSync,
12
- cpSync,
13
12
  } from 'node:fs';
14
13
  import { tmpdir } from 'node:os';
15
14
  import { join, dirname, basename } from 'node:path';
@@ -28,21 +27,15 @@ const RETIRED_SKILL_DIRECTORIES = [
28
27
  'pr-consistency-audit',
29
28
  'bdd-protocol',
30
29
  ];
31
- const PERSONAL_SKILL_DIRECTORIES = ['balatro', 'midjourney-sref', 'credit-card-picker'];
30
+ const PERSONAL_SKILL_DIRECTORIES = ['credit-card-picker', 'midjourney-sref'];
32
31
  const SHIPPED_SKILL_DIRECTORY = 'autoconverge';
33
32
  const PRUNED_BACKUP_DIRECTORY_NAME = '.claude-dev-env-pruned';
34
33
  const SKIP_PRUNE_NOTICE_MARKER = 'Skipping retired-skill and stale-file prune';
35
34
  const STALE_SKILL_FILE_RELATIVE_SEGMENTS = ['scripts', 'retired_module.py'];
36
35
  const RUNTIME_ARTIFACT_RELATIVE_SEGMENTS = ['scripts', '__pycache__', 'helper.cpython-312.pyc'];
37
- const DEPENDENCY_STUB_PACKAGE_SEGMENTS = ['@jl-cmd', 'prompt-generator'];
38
- const DEPENDENCY_SUPPLIED_SKILL_DIRECTORY = 'dependency-supplied-skill';
39
36
  const SCOPED_GROUP_SKILL_DIRECTORY = 'orchestrator';
40
37
  const CORE_REVIEW_GUIDE_SKILL_DIRECTORIES = [
41
38
  'small-cl',
42
- 'comments',
43
- 'reviews',
44
- 'descriptions',
45
- 'emergencies',
46
39
  ];
47
40
  const PRIOR_RUN_BACKUP_DIRECTORY_NAMES = [
48
41
  '2020-01-01T00-00-00-000Z',
@@ -70,70 +63,6 @@ const NESTED_SKILL_FILE_SEGMENTS = [NESTED_SKILL_DIRECTORY, 'scripts', 'a.py'];
70
63
  const MYPY_INI_FILE_NAME = '.mypy.ini';
71
64
  const SKIPPED_RECORD_SUMMARY_MARKER = 'manifest record(s) skipped';
72
65
 
73
- /**
74
- * Create a stub node_modules tree the installer can resolve the declared
75
- * dependency package from, and return its root for the child's NODE_PATH.
76
- *
77
- * The installer resolves `@jl-cmd/prompt-generator/package.json`; a lone
78
- * package.json at that path is enough for `createRequire.resolve` to succeed.
79
- * The stub makes the dependency resolvable inside the sandbox so a full install
80
- * exercises the real prune path. It does not prove the real private package
81
- * resolves in a real install — CI cannot host that package — only that the
82
- * resolved-dependency branch prunes as designed.
83
- *
84
- * @param {string} homeDirectory The sandbox home the stub is nested under.
85
- * @returns {string} The stub modules root to place on the child's NODE_PATH.
86
- */
87
- let isolatedInstallerPath = null;
88
- let isolatedPackageCopyRoot = null;
89
-
90
- /**
91
- * Copy the package into a temp directory without node_modules and return the
92
- * copy's installer path.
93
- *
94
- * The installer resolves its declared dependencies with Node's regular
95
- * node_modules walk starting at its own file, so the real installer under the
96
- * repo always finds `@jl-cmd/prompt-generator` once `npm install` has run —
97
- * removing NODE_PATH from the child cannot make the dependency unresolvable
98
- * there. Running the copy makes resolution genuinely fail through the
99
- * installer's own catch path: no node_modules sits in the copy's ancestry and
100
- * the child gets no NODE_PATH. The copy is created once and shared by every
101
- * unresolved-dependency install; installs write only into their sandbox HOME.
102
- *
103
- * @returns {string} The path to `bin/install.mjs` inside the package copy.
104
- */
105
- function ensureIsolatedInstallerPath() {
106
- if (isolatedInstallerPath !== null) return isolatedInstallerPath;
107
- isolatedPackageCopyRoot = mkdtempSync(join(tmpdir(), 'cdev-prune-package-'));
108
- cpSync(PACKAGE_DIRECTORY, isolatedPackageCopyRoot, {
109
- recursive: true,
110
- filter: sourcePath => basename(sourcePath) !== EXCLUDED_PACKAGE_COPY_DIRECTORY,
111
- });
112
- isolatedInstallerPath = join(isolatedPackageCopyRoot, 'bin', 'install.mjs');
113
- return isolatedInstallerPath;
114
- }
115
-
116
- after(() => {
117
- if (isolatedPackageCopyRoot !== null) {
118
- rmSync(isolatedPackageCopyRoot, { recursive: true, force: true });
119
- }
120
- });
121
-
122
- function ensureDependencyStub(homeDirectory) {
123
- const stubModulesRoot = join(homeDirectory, 'dependency-stub-modules');
124
- const stubPackageDirectory = join(stubModulesRoot, ...DEPENDENCY_STUB_PACKAGE_SEGMENTS);
125
- mkdirSync(stubPackageDirectory, { recursive: true });
126
- writeFileSync(
127
- join(stubPackageDirectory, 'package.json'),
128
- JSON.stringify({
129
- name: DEPENDENCY_STUB_PACKAGE_SEGMENTS.join('/'),
130
- version: '1.0.0',
131
- description: 'sandbox dependency stub',
132
- }) + '\n',
133
- );
134
- return stubModulesRoot;
135
- }
136
-
137
66
  /**
138
67
  * Report whether a path under one managed root landed in a run backup.
139
68
  *
@@ -203,20 +132,12 @@ function plantSkillDirectory(skillsDirectory, skillName, withSkillManifest) {
203
132
  /**
204
133
  * Run the real installer against the sandbox home and return its stdout.
205
134
  *
206
- * The declared dependency package is resolvable by default: the child's
207
- * NODE_PATH points at a sandbox stub so `createRequire.resolve` finds it and the
208
- * full-install prune runs. Passing ``{ dependencyResolvable: false }`` runs the
209
- * installer from an isolated package copy with no node_modules in its ancestry
210
- * and no NODE_PATH, so the dependency fails to resolve and the installer skips
211
- * the prune.
212
- *
213
135
  * @param {string} homeDirectory The sandbox home the installer writes into.
214
136
  * @param {string[]} extraArguments Installer arguments (for example ``['--only', 'core']``).
215
- * @param {{dependencyResolvable?: boolean}} options Whether the dependency resolves.
216
137
  * @returns {string} The installer's stdout.
217
138
  */
218
- function runInstaller(homeDirectory, extraArguments, options = {}) {
219
- const { installerPath, childEnvironment } = resolveInstallerInvocation(homeDirectory, options);
139
+ function runInstaller(homeDirectory, extraArguments) {
140
+ const { installerPath, childEnvironment } = resolveInstallerInvocation(homeDirectory);
220
141
  return execFileSync('node', [installerPath, ...extraArguments], {
221
142
  cwd: dirname(installerPath),
222
143
  encoding: 'utf8',
@@ -228,11 +149,9 @@ function runInstaller(homeDirectory, extraArguments, options = {}) {
228
149
  * Build the installer path and child environment one sandbox run uses.
229
150
  *
230
151
  * @param {string} homeDirectory The sandbox home the installer writes into.
231
- * @param {{dependencyResolvable?: boolean}} options Whether the dependency resolves.
232
152
  * @returns {{installerPath: string, childEnvironment: object}} The invocation inputs.
233
153
  */
234
- function resolveInstallerInvocation(homeDirectory, options) {
235
- const dependencyResolvable = options.dependencyResolvable !== false;
154
+ function resolveInstallerInvocation(homeDirectory) {
236
155
  const childEnvironment = {
237
156
  ...process.env,
238
157
  HOME: homeDirectory,
@@ -240,12 +159,7 @@ function resolveInstallerInvocation(homeDirectory, options) {
240
159
  GIT_CONFIG_GLOBAL: join(homeDirectory, '.gitconfig'),
241
160
  CODEX_HOME: join(homeDirectory, '.codex'),
242
161
  };
243
- if (dependencyResolvable) {
244
- childEnvironment.NODE_PATH = ensureDependencyStub(homeDirectory);
245
- return { installerPath: INSTALLER_PATH, childEnvironment };
246
- }
247
- delete childEnvironment.NODE_PATH;
248
- return { installerPath: ensureIsolatedInstallerPath(), childEnvironment };
162
+ return { installerPath: INSTALLER_PATH, childEnvironment };
249
163
  }
250
164
 
251
165
  /**
@@ -259,7 +173,7 @@ function resolveInstallerInvocation(homeDirectory, options) {
259
173
  * @returns {string} The child's stdout and stderr, joined.
260
174
  */
261
175
  function runInstallerReadingBothStreams(homeDirectory, extraArguments) {
262
- const { installerPath, childEnvironment } = resolveInstallerInvocation(homeDirectory, {});
176
+ const { installerPath, childEnvironment } = resolveInstallerInvocation(homeDirectory);
263
177
  const completedRun = spawnSync('node', [installerPath, ...extraArguments], {
264
178
  cwd: dirname(installerPath),
265
179
  encoding: 'utf8',
@@ -634,7 +548,7 @@ test('a full reinstall prunes a manifest-recorded skill absent from the package
634
548
  const sandbox = createSandbox();
635
549
  try {
636
550
  const retiredManifestSkill = 'ghost-skill';
637
- const personalSkill = 'balatro';
551
+ const personalSkill = 'credit-card-picker';
638
552
  plantSkillDirectory(sandbox.skillsDirectory, retiredManifestSkill, true);
639
553
  plantSkillDirectory(sandbox.skillsDirectory, personalSkill, false);
640
554
  writeFileSync(
@@ -701,115 +615,25 @@ test('a scoped --only install leaves retired skills in place because prune runs
701
615
  }
702
616
  });
703
617
 
704
- test('a full reinstall keeps pr-fix-protocol because the package ships it again', () => {
618
+ test('a full reinstall keeps autoconverge because the package ships it again', () => {
705
619
  const sandbox = createSandbox();
706
620
  try {
707
- plantSkillDirectory(sandbox.skillsDirectory, 'pr-fix-protocol', true);
708
- writeFileSync(join(sandbox.skillsDirectory, 'pr-fix-protocol', 'SKILL.md'), 'stale seeded copy\n');
621
+ plantSkillDirectory(sandbox.skillsDirectory, 'autoconverge', true);
622
+ writeFileSync(join(sandbox.skillsDirectory, 'autoconverge', 'SKILL.md'), 'stale seeded copy\n');
709
623
 
710
624
  const installerOutput = runInstaller(sandbox.homeDirectory, []);
711
625
 
712
626
  assert.equal(
713
627
  installerOutput.includes(SKIP_PRUNE_NOTICE_MARKER),
714
628
  false,
715
- 'the resolvable-dependency install runs the prune rather than skipping it',
629
+ 'the full install runs the prune rather than skipping it',
716
630
  );
717
- const restoredSkillPath = join(sandbox.skillsDirectory, 'pr-fix-protocol', 'SKILL.md');
718
- assert.equal(existsSync(restoredSkillPath), true, 'pr-fix-protocol survives and is reinstalled');
631
+ const restoredSkillPath = join(sandbox.skillsDirectory, 'autoconverge', 'SKILL.md');
632
+ assert.equal(existsSync(restoredSkillPath), true, 'autoconverge survives and is reinstalled');
719
633
  assert.notEqual(
720
634
  readFileSync(restoredSkillPath, 'utf8'),
721
635
  'stale seeded copy\n',
722
- 'the shipped pr-fix-protocol overwrites the stale seeded copy',
723
- );
724
- } finally {
725
- rmSync(sandbox.homeDirectory, { recursive: true, force: true });
726
- }
727
- });
728
-
729
- test('a full reinstall with an unresolved dependency skips the prune and leaves retired skills untouched', () => {
730
- const sandbox = createSandbox();
731
- try {
732
- for (const retiredSkill of RETIRED_SKILL_DIRECTORIES) {
733
- plantSkillDirectory(sandbox.skillsDirectory, retiredSkill, true);
734
- }
735
-
736
- const installerOutput = runInstaller(sandbox.homeDirectory, [], { dependencyResolvable: false });
737
-
738
- assert.equal(
739
- installerOutput.includes(SKIP_PRUNE_NOTICE_MARKER),
740
- true,
741
- 'the installer logs a notice that it is skipping the prune',
742
- );
743
- for (const retiredSkill of RETIRED_SKILL_DIRECTORIES) {
744
- assert.equal(
745
- existsSync(join(sandbox.skillsDirectory, retiredSkill)),
746
- true,
747
- `retired skill ${retiredSkill} should survive when a dependency is unresolved`,
748
- );
749
- assert.equal(
750
- prunedSkillBackupContains(sandbox.claudeDirectory, retiredSkill),
751
- false,
752
- `retired skill ${retiredSkill} should not be moved to backup when the prune is skipped`,
753
- );
754
- }
755
- } finally {
756
- rmSync(sandbox.homeDirectory, { recursive: true, force: true });
757
- }
758
- });
759
-
760
- test('a full install that holds the prune keeps prior manifest file entries it did not itself write', () => {
761
- const sandbox = createSandbox();
762
- try {
763
- runInstaller(sandbox.homeDirectory, []);
764
- const { staleFilePath } = seedStaleSkillFile(sandbox);
765
- const filesBeforeHeldPrune = readManifest(sandbox.manifestPath).files;
766
-
767
- const installerOutput = runInstaller(sandbox.homeDirectory, [], { dependencyResolvable: false });
768
-
769
- assert.equal(
770
- installerOutput.includes(SKIP_PRUNE_NOTICE_MARKER),
771
- true,
772
- 'the unresolved-dependency install holds both prunes',
773
- );
774
- const recordedFiles = new Set(readManifest(sandbox.manifestPath).files);
775
- assert.equal(
776
- recordedFiles.has(staleFilePath),
777
- true,
778
- 'the entry a later pruning install needs to spot the stale file stays on the record',
779
- );
780
- const droppedEntries = filesBeforeHeldPrune.filter(priorPath => !recordedFiles.has(priorPath));
781
- assert.deepEqual(droppedEntries, [], 'a held prune drops no prior file entry');
782
- } finally {
783
- rmSync(sandbox.homeDirectory, { recursive: true, force: true });
784
- }
785
- });
786
-
787
- test('a full install that holds the prune keeps prior manifest skill names it did not itself install', () => {
788
- const sandbox = createSandbox();
789
- try {
790
- runInstaller(sandbox.homeDirectory, []);
791
- plantSkillDirectory(sandbox.skillsDirectory, DEPENDENCY_SUPPLIED_SKILL_DIRECTORY, true);
792
- const manifest = readManifest(sandbox.manifestPath);
793
- manifest.skills.push(DEPENDENCY_SUPPLIED_SKILL_DIRECTORY);
794
- writeFileSync(sandbox.manifestPath, JSON.stringify(manifest, null, 2) + '\n');
795
-
796
- const installerOutput = runInstaller(sandbox.homeDirectory, [], { dependencyResolvable: false });
797
-
798
- assert.equal(
799
- installerOutput.includes(SKIP_PRUNE_NOTICE_MARKER),
800
- true,
801
- 'the unresolved-dependency install holds both prunes',
802
- );
803
- const recordedSkills = new Set(readManifest(sandbox.manifestPath).skills);
804
- assert.equal(
805
- recordedSkills.has(DEPENDENCY_SUPPLIED_SKILL_DIRECTORY),
806
- true,
807
- 'the name a later pruning install needs to spot the retired skill stays on the record',
808
- );
809
- assert.equal(
810
- recordedSkills.has(SHIPPED_SKILL_DIRECTORY),
811
- true,
812
- 'the held run still records the skills it installed itself',
636
+ 'the shipped autoconverge overwrites the stale seeded copy',
813
637
  );
814
638
  } finally {
815
639
  rmSync(sandbox.homeDirectory, { recursive: true, force: true });
@@ -856,43 +680,38 @@ test('a scoped core install ships the canonical review guide skills', () => {
856
680
  }
857
681
  });
858
682
 
859
- test('the prune skip is scoped: once the dependency resolves a later full install prunes normally', () => {
683
+ test('a scoped core install leaves retired skills in place; a later full install prunes them', () => {
860
684
  const sandbox = createSandbox();
861
685
  try {
862
686
  for (const retiredSkill of RETIRED_SKILL_DIRECTORIES) {
863
687
  plantSkillDirectory(sandbox.skillsDirectory, retiredSkill, true);
864
688
  }
865
689
 
866
- const skippedOutput = runInstaller(sandbox.homeDirectory, [], { dependencyResolvable: false });
867
- assert.equal(
868
- skippedOutput.includes(SKIP_PRUNE_NOTICE_MARKER),
869
- true,
870
- 'the unresolved-dependency install skips the prune',
871
- );
690
+ runInstaller(sandbox.homeDirectory, ['--only', 'core']);
872
691
  for (const retiredSkill of RETIRED_SKILL_DIRECTORIES) {
873
692
  assert.equal(
874
693
  existsSync(join(sandbox.skillsDirectory, retiredSkill)),
875
694
  true,
876
- `retired skill ${retiredSkill} should still be present after the skipped prune`,
695
+ `retired skill ${retiredSkill} should survive a scoped install`,
877
696
  );
878
697
  }
879
698
 
880
- const resolvedOutput = runInstaller(sandbox.homeDirectory, [], { dependencyResolvable: true });
699
+ const fullOutput = runInstaller(sandbox.homeDirectory, []);
881
700
  assert.equal(
882
- resolvedOutput.includes(SKIP_PRUNE_NOTICE_MARKER),
701
+ fullOutput.includes(SKIP_PRUNE_NOTICE_MARKER),
883
702
  false,
884
- 'the resolved-dependency install runs the prune, proving the skip is not a permanent disable',
703
+ 'the full install runs the prune',
885
704
  );
886
705
  for (const retiredSkill of RETIRED_SKILL_DIRECTORIES) {
887
706
  assert.equal(
888
707
  existsSync(join(sandbox.skillsDirectory, retiredSkill)),
889
708
  false,
890
- `retired skill ${retiredSkill} should be pruned once the dependency resolves`,
709
+ `retired skill ${retiredSkill} should be pruned on the full install`,
891
710
  );
892
711
  assert.equal(
893
712
  prunedSkillBackupContains(sandbox.claudeDirectory, retiredSkill),
894
713
  true,
895
- `retired skill ${retiredSkill} should be moved to the prune backup on the resolved install`,
714
+ `retired skill ${retiredSkill} should be moved to the prune backup`,
896
715
  );
897
716
  }
898
717
  } finally {
@@ -214,6 +214,12 @@ test('CORE_SKILLS ships issue-tracker so the core group installs the skill the S
214
214
  });
215
215
 
216
216
 
217
+ test('CORE_SKILLS ships ELI5 as the leaf presentation skill', () => {
218
+ assert.ok(CORE_SKILLS.includes('eli5'), 'eli5 must be in CORE_SKILLS');
219
+ assert.equal(INSTALL_GROUPS.core.skills.includes('eli5'), true);
220
+ });
221
+
222
+
217
223
  test('EVER_SHIPPED_SKILL_NAMES retains imagegen so reinstall prunes the retired skill', () => {
218
224
  assert.ok(
219
225
  EVER_SHIPPED_SKILL_NAMES.has('imagegen'),
@@ -980,7 +986,6 @@ const OLD_FOLDED_HOOKS_SETTINGS = {
980
986
  { type: 'command', command: 'py -3 C:/Users/x/.claude/hooks/blocking/claude_md_orphan_file_blocker.py', timeout: 10 },
981
987
  { type: 'command', command: 'py -3 C:/Users/x/.claude/hooks/blocking/pytest_testpaths_orphan_blocker.py', timeout: 10 },
982
988
  { type: 'command', command: 'py -3 C:/Users/x/.claude/hooks/blocking/open_questions_in_plans_blocker.py', timeout: 10 },
983
- { type: 'command', command: 'py -3 C:/Users/x/.claude/hooks/blocking/plain_language_blocker.py', timeout: 10 },
984
989
  ],
985
990
  },
986
991
  ],
@@ -988,10 +993,9 @@ const OLD_FOLDED_HOOKS_SETTINGS = {
988
993
  };
989
994
 
990
995
 
991
- test('FOLDED_HOOK_RELATIVE_PATHS contains all 15 hooks removed from hooks.json plus the retired md_to_html_blocker', () => {
992
- assert.equal(FOLDED_HOOK_RELATIVE_PATHS.size, 16);
996
+ test('FOLDED_HOOK_RELATIVE_PATHS contains all 14 hooks removed from hooks.json plus the retired md_to_html_blocker', () => {
997
+ assert.equal(FOLDED_HOOK_RELATIVE_PATHS.size, 15);
993
998
  assert.ok(FOLDED_HOOK_RELATIVE_PATHS.has('blocking/write_existing_file_blocker.py'));
994
- assert.ok(FOLDED_HOOK_RELATIVE_PATHS.has('blocking/plain_language_blocker.py'));
995
999
  assert.ok(FOLDED_HOOK_RELATIVE_PATHS.has('blocking/code_rules_enforcer.py'));
996
1000
  assert.ok(FOLDED_HOOK_RELATIVE_PATHS.has('blocking/pytest_testpaths_orphan_blocker.py'));
997
1001
  assert.ok(FOLDED_HOOK_RELATIVE_PATHS.has('blocking/md_to_html_blocker.py'));
@@ -1014,7 +1018,6 @@ test('FOLDED_HOOK_RELATIVE_PATHS lists every hook the PreToolUse dispatcher host
1014
1018
  'blocking/env_var_table_code_drift_blocker.py',
1015
1019
  'blocking/pytest_testpaths_orphan_blocker.py',
1016
1020
  'blocking/open_questions_in_plans_blocker.py',
1017
- 'blocking/plain_language_blocker.py',
1018
1021
  ];
1019
1022
  const retiredHooks = [
1020
1023
  'blocking/md_to_html_blocker.py',
@@ -20,6 +20,9 @@ import {
20
20
  CURSOR_RULES_DIRECTORY_NAME,
21
21
  MANAGED_SKILLS_DIRECTORY_NAME,
22
22
  MANAGED_AGENTS_DIRECTORY_NAME,
23
+ MANAGED_HOOKS_DIRECTORY_NAME,
24
+ MANAGED_SCRIPTS_DIRECTORY_NAME,
25
+ CODEX_HOOKS_DIRECTORY_NAME,
23
26
  } from './install-constants.mjs';
24
27
 
25
28
  export const CLAUDE_CONFIG_DIR_ENVIRONMENT_VARIABLE = 'CLAUDE_CONFIG_DIR';
@@ -52,6 +55,11 @@ export const MANIFEST_FILE_NAME = '.claude-dev-env-manifest.json';
52
55
  * agentsInstallDirectory: string,
53
56
  * skillsLookupDirectory: string,
54
57
  * agentsLookupDirectory: string,
58
+ * hooksInstallDirectory: string,
59
+ * scriptsInstallDirectory: string,
60
+ * hooksLookupDirectory: string,
61
+ * scriptsLookupDirectory: string,
62
+ * codexHooksInstallDirectory: string,
55
63
  * }} InstallRootResolution
56
64
  */
57
65
 
@@ -127,6 +135,9 @@ export function resolveInstallRoot(options = {}) {
127
135
  const codexRulesInstallDirectory = resolve(
128
136
  join(codexHomeDirectory, CODEX_RULES_DIRECTORY_NAME),
129
137
  );
138
+ const codexHooksInstallDirectory = resolve(
139
+ join(codexHomeDirectory, CODEX_HOOKS_DIRECTORY_NAME),
140
+ );
130
141
  const cursorInstallDirectory = resolve(
131
142
  join(homeDirectory, DEFAULT_CURSOR_DIRECTORY_NAME),
132
143
  );
@@ -136,8 +147,12 @@ export function resolveInstallRoot(options = {}) {
136
147
  const agentsHome = resolveAgentsHome(managedRoot);
137
148
  const skillsInstallDirectory = join(agentsHome, MANAGED_SKILLS_DIRECTORY_NAME);
138
149
  const agentsInstallDirectory = join(agentsHome, MANAGED_AGENTS_DIRECTORY_NAME);
150
+ const hooksInstallDirectory = join(agentsHome, MANAGED_HOOKS_DIRECTORY_NAME);
151
+ const scriptsInstallDirectory = join(agentsHome, MANAGED_SCRIPTS_DIRECTORY_NAME);
139
152
  const skillsLookupDirectory = join(managedRoot, MANAGED_SKILLS_DIRECTORY_NAME);
140
153
  const agentsLookupDirectory = join(managedRoot, MANAGED_AGENTS_DIRECTORY_NAME);
154
+ const hooksLookupDirectory = join(managedRoot, MANAGED_HOOKS_DIRECTORY_NAME);
155
+ const scriptsLookupDirectory = join(managedRoot, MANAGED_SCRIPTS_DIRECTORY_NAME);
141
156
  return {
142
157
  managedRoot,
143
158
  source,
@@ -147,6 +162,7 @@ export function resolveInstallRoot(options = {}) {
147
162
  allDeclaredExternalPaths: [mypyIniInstallPath],
148
163
  allDeclaredExternalDirectories: [
149
164
  codexRulesInstallDirectory,
165
+ codexHooksInstallDirectory,
150
166
  cursorInstallDirectory,
151
167
  agentsHome,
152
168
  ],
@@ -158,6 +174,11 @@ export function resolveInstallRoot(options = {}) {
158
174
  agentsInstallDirectory,
159
175
  skillsLookupDirectory,
160
176
  agentsLookupDirectory,
177
+ hooksInstallDirectory,
178
+ scriptsInstallDirectory,
179
+ hooksLookupDirectory,
180
+ scriptsLookupDirectory,
181
+ codexHooksInstallDirectory,
161
182
  };
162
183
  }
163
184
 
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Resolve a managed content directory in a package source tree.
3
3
  *
4
- * This package keeps skills and agents under `.agents/<name>/`. A dependency
4
+ * This package keeps managed trees under `.agents/<name>/`. A dependency
5
5
  * package may still keep those trees at `<package-root>/<name>/`. Callers pass
6
- * the package root and the managed directory name (`skills` or `agents`); this
7
- * helper returns the directory that exists.
6
+ * the package root and the managed directory name; this helper returns the
7
+ * directory that exists.
8
8
  */
9
9
 
10
10
  import { existsSync } from 'node:fs';
@@ -13,7 +13,7 @@ import { PACKAGE_AGENTS_HOME_DIRECTORY_NAME } from './install-constants.mjs';
13
13
 
14
14
  /**
15
15
  * @param {string} sourceRoot Package root that may hold `.agents/<name>` or `<name>`.
16
- * @param {string} directoryName Managed directory name (`skills` or `agents`).
16
+ * @param {string} directoryName Managed directory name.
17
17
  * @returns {string} Absolute source directory to copy from.
18
18
  */
19
19
  export function resolvePackageManagedDirectory(sourceRoot, directoryName) {
@@ -2,6 +2,8 @@
2
2
 
3
3
  Slash-command definitions installed into `~/.claude/commands/` by `bin/install.mjs`. Each `.md` file registers a `/command-name` the user can type in Claude Code. The file name (without `.md`) becomes the command name.
4
4
 
5
+ Command bodies use `rules/asd-ste100-language.md` for user-facing word choice, sentence style, tone, punctuation, and prose form. Each command keeps its workflow contract.
6
+
5
7
  ## Command files
6
8
 
7
9
  | File | Command | What it does |
@@ -7,6 +7,9 @@ Run the converging cleanup loop on the target: `$ARGUMENTS` (blank means the
7
7
  current branch's diff). Each phase invokes an existing skill with the Skill
8
8
  tool and repeats it until a pass returns zero new findings.
9
9
 
10
+ Use `rules/asd-ste100-language.md` for user-facing wording. Keep the loop's
11
+ cleanup, verification, commit, push, and finish-report fields.
12
+
10
13
  ## Phase A — loop /simplify
11
14
 
12
15
  1. Invoke the `simplify` skill on the target (the same review the user gets
@@ -1,6 +1,6 @@
1
1
  # Prose-style enforcement
2
2
 
3
- Opinionated prose gates (heavy-word swaps, hedging, historical state phrasing, intent-only endings, hook prose-detector consistency) are **off by default**.
3
+ Opinionated prose gates (hedging, historical state phrasing, intent-only endings, hook prose-detector consistency) are **off by default**.
4
4
 
5
5
  ## Opt-in
6
6
 
@@ -10,16 +10,12 @@ The flag is `PROSE_STYLE_ENFORCEMENT_ENABLED` in `hooks/blocking/config/prose_st
10
10
 
11
11
  ## Always on
12
12
 
13
- Structural AskUserQuestion lean-block validation in `plain_language_blocker` (chat detail, length caps on question blocks) stays active regardless of the flag. Code-rules and security blockers are out of scope for this switch.
13
+ Structural AskUserQuestion lean-block validation in `ask_user_question_shape_blocker` (chat detail, length caps on question blocks) stays active regardless of the flag. Apply `rules/asd-ste100-language.md` for user-facing word choice and sentence style. Code-rules and security blockers are out of scope for this switch.
14
14
 
15
15
  ## Advisory precision measurement (OP-07B)
16
16
 
17
- When the flag is off, heavy-word and hedging hits still emit privacy-safe advisory candidates to `~/.claude/logs/prose-matcher-advisory.jsonl` (matcher id, surface, hashed context fingerprint, optional label). Classification (`keep` / `narrow` / `drop` / `advisory`) uses a labeled sample floor of 30 and precision floors 0.7 / 0.4. Matchers below the floor stay advisory. No matcher becomes hard-blocking from historical labels alone. See `hooks/observability/prose_matcher_advisory.py`.
17
+ When the flag is off, hedging hits still emit privacy-safe advisory candidates to `~/.claude/logs/prose-matcher-advisory.jsonl` (matcher id, surface, hashed context fingerprint, optional label). Classification (`keep` / `narrow` / `drop` / `advisory`) uses a labeled sample floor of 30 and precision floors 0.7 / 0.4. Matchers below the floor stay advisory. See `hooks/observability/prose_matcher_advisory.py`.
18
18
 
19
19
  ## Explicit uncertainty (OP-07C)
20
20
 
21
21
  With enforcement on, a hedge word in a sentence that also labels the claim (`unverified`, `I don't know`, `no source for this claim`, …) passes. A bare hedge in a different sentence still blocks. Detail: `rules/hedging-claims.md`.
22
-
23
- ## Plain-language advisory (OP-07D)
24
-
25
- Heavy-word matches never hard-deny a Write/Edit or AskUserQuestion. With enforcement on, the hook allows the call and returns a `systemMessage` that names everyday swaps for both AskUserQuestion and `.md` writes. Lean-block structure denials stay hard. Detail: `rules/plain-language.md`.
@@ -8,7 +8,7 @@
8
8
  |---|---|
9
9
  | `skills/team-advisor/SKILL.md` | Sole-consumer bind wiring and constraints |
10
10
  | `advisor-tool.md` | Consult timing, hard rule, how to treat advice |
11
- | `~/.claude/_shared/advisor/advisor-protocol.md` | Host bind, floor, lifecycle |
11
+ | `~/.claude/_shared/advisor/advisor-protocol.md` | Session identity, host bind, floor, lifecycle |
12
12
  | `agents/session-advisor.md` | ENDORSE / CORRECTION / PLAN / STOP |
13
13
 
14
14
  ## When to use
@@ -17,4 +17,4 @@ Follow the call rules in `advisor-tool.md` (orientation first, then consult befo
17
17
 
18
18
  ## Selected path
19
19
 
20
- `/team-advisor` is the repository's advisor implementation. It provides explicit first-consult packets, delta consults, a standing warm reviewer, and a read-only Sol CLI option.
20
+ `/team-advisor` is the repository's advisor implementation. It provides explicit first-consult packets, delta consults, a standing warm reviewer, an in-session Sol spawn on Codex, and a read-only Sol CLI option.
package/hooks/AGENTS.md CHANGED
@@ -9,9 +9,6 @@ Python hook scripts wired into Claude Code's lifecycle via `settings.json`. Each
9
9
  | `advisory/` | Hooks that warn but do not block (`permissionDecision: "ask"`) |
10
10
  | `blocking/` | Hooks that deny tool calls when a rule is violated |
11
11
  | `blocking/config/` | Shared constants for blocking hooks |
12
- | `diagnostic/` | Hooks that record and extract hook-firing records into Neon |
13
- | `diagnostic/migrations/` | SQL migrations for the `hook_events` Neon schema |
14
- | `diagnostic/queries/` | Parameterized SQL queries for inspecting blocked commands |
15
12
  | `git-hooks/` | Native git hooks (`pre-commit`, `pre-push`, `post-commit`) installed via the git-hooks path |
16
13
  | `git-hooks/git_hooks_constants/` | Shared constants for the git-hook scripts |
17
14
  | `hooks_constants/` | Shared constant modules imported by multiple hooks across this tree (includes `pii_prevention_constants.py` for personal-data and secret scan patterns) |
@@ -74,7 +74,6 @@ The check modules it calls are the `code_rules_<concern>.py` files below.
74
74
  | `destructive_command_blocker.py` | PreToolUse (Bash/PowerShell) | Shell commands with destructive literals (`rm -rf`, `git reset --hard`, etc.) |
75
75
  | `docstring_rule_gate_count_blocker.py` | PreToolUse (Write/Edit/MultiEdit) | A stale spelled-out gate-validator count in `docstring-prose-matches-implementation.md` — the "N more gate validators" / "M gated slices" count drifting from the `check_docstring_*` validators the prose names |
76
76
  | `duplicate_rmtree_helper_blocker.py` | PreToolUse (Write/Edit) | A local re-definition of the Windows-safe rmtree helper trio (`_strip_read_only_and_retry`, `_force_remove_tree` / `force_rmtree`) in place of importing a shared helper |
77
- | `eli11_reply_enforcer.py` | Stop | Final replies breaking the `eli11-replies` shape — more than 6 bullet lines, more than 2 list lines over 20 words each, or multi-line instructions with no numbered step among the lead lines. Code fences, inline code, blockquotes, table rows, and link targets come off before the reply is judged. |
78
77
  | `env_var_table_code_drift_blocker.py` | PreToolUse (Write/Edit/MultiEdit) | A markdown env-var summary table row attributing an environment variable to a code file whose source never references that variable name |
79
78
  | `es_exe_path_rewriter.py` | PreToolUse | Rewrites paths referencing `.exe` under the Everything search path |
80
79
  | `fable_spawn_gate.py` | PreToolUse (Agent/Task) | An `Agent` or `Task` spawn whose prompt carries no `FABLE-SPAWN-AUTHORIZED` token and whose model field reads `fable` in any letter case — the bare alias, or a delimiter segment of a full model id, so `claude-fable-5` is denied too |
@@ -92,7 +91,6 @@ The check modules it calls are the `code_rules_<concern>.py` files below.
92
91
  | `pii_prevention_blocker.py` | PreToolUse (Write/Edit/MultiEdit/Bash/PowerShell/MCP GitHub) | Entry hook — content that carries high-confidence personal data or secrets (real emails, home-dir paths, private IPs, credential material) on write, durable GitHub posts, or staged commit paths; resolves the staged-commit repository from the command it gates (via `pii_prevention_blocker_parts`), not the session working directory |
93
92
  | `pii_scanner.py` | library | Pure text scanners shared by `pii_prevention_blocker.py` |
94
93
  | `piped_pytest_blocker.py` | PreToolUse (Bash) | A pytest run whose output feeds a pipe, where the pipeline reports the exit code of the command on the right |
95
- | `plain_language_blocker.py` | PreToolUse (Write/Edit/AskUserQuestion) | Heavy or jargon words in user-facing prose when `CLAUDE_PROSE_STYLE_ENFORCEMENT` is on (default off); AskUserQuestion lean-block structure stays always on |
96
94
  | `precommit_code_rules_gate.py` | PreToolUse (Bash) | Staged changes that fail the CODE_RULES gate at commit time |
97
95
  | `pytest_testpaths_orphan_blocker.py` | PreToolUse (Write/Edit/MultiEdit) | New `test_*.py` files created under a directory absent from a package's explicit pytest `testpaths` allowlist |
98
96
  | `question_to_user_enforcer.py` | Stop | User-directed questions not routed through `AskUserQuestion` |
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python3
2
+ """PreToolUse hook that enforces AskUserQuestion field shape."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import json
7
+ import sys
8
+ from collections.abc import Mapping, Sequence
9
+ from pathlib import Path
10
+
11
+ _hooks_dir = str(Path(__file__).resolve().parent.parent)
12
+ if _hooks_dir not in sys.path:
13
+ sys.path.insert(0, _hooks_dir)
14
+
15
+ from hooks_constants.ask_user_question_shape import ( # noqa: E402
16
+ analyze_ask_user_question_shape,
17
+ )
18
+ from hooks_constants.ask_user_question_shape_constants import ( # noqa: E402
19
+ ASK_USER_QUESTION_TOOL_NAME,
20
+ LEAN_QUESTION_BLOCK_GUIDANCE,
21
+ LEAN_QUESTION_BLOCK_PREFIX,
22
+ LEAN_QUESTION_VIOLATION_SEPARATOR,
23
+ USER_FACING_LEAN_QUESTION_NOTICE,
24
+ )
25
+ from hooks_constants.hook_block_logger import log_hook_block # noqa: E402
26
+
27
+
28
+ def build_lean_block_reason(all_violations: Sequence[str]) -> str:
29
+ """Build a deny reason that names each field-shape violation."""
30
+ violation_list = LEAN_QUESTION_VIOLATION_SEPARATOR.join(all_violations)
31
+ return f"{LEAN_QUESTION_BLOCK_PREFIX}{violation_list}. {LEAN_QUESTION_BLOCK_GUIDANCE}"
32
+
33
+
34
+ def evaluate(payload_by_key: Mapping[str, object]) -> str | None:
35
+ """Return a deny reason when an AskUserQuestion payload breaks field shape."""
36
+ tool_name = payload_by_key.get("tool_name", "")
37
+ tool_input = payload_by_key.get("tool_input", {})
38
+ if tool_name != ASK_USER_QUESTION_TOOL_NAME:
39
+ return None
40
+ if not isinstance(tool_input, Mapping):
41
+ return None
42
+ shape_result = analyze_ask_user_question_shape(tool_input)
43
+ if shape_result.is_lean:
44
+ return None
45
+ return build_lean_block_reason(shape_result.all_violations)
46
+
47
+
48
+ def build_deny_payload(deny_reason: str) -> dict[str, object]:
49
+ """Build the standard PreToolUse deny payload for a shape violation."""
50
+ log_hook_block(
51
+ calling_hook_name="ask_user_question_shape_blocker.py",
52
+ hook_event="PreToolUse",
53
+ block_reason=deny_reason,
54
+ )
55
+ return {
56
+ "hookSpecificOutput": {
57
+ "hookEventName": "PreToolUse",
58
+ "permissionDecision": "deny",
59
+ "permissionDecisionReason": deny_reason,
60
+ },
61
+ "systemMessage": USER_FACING_LEAN_QUESTION_NOTICE,
62
+ "suppressOutput": True,
63
+ }
64
+
65
+
66
+ def main() -> None:
67
+ """Read one PreToolUse payload and deny malformed question shape."""
68
+ try:
69
+ payload_by_key = json.load(sys.stdin)
70
+ except json.JSONDecodeError:
71
+ sys.exit(0)
72
+
73
+ if not isinstance(payload_by_key, dict):
74
+ sys.exit(0)
75
+ deny_reason = evaluate(payload_by_key)
76
+ if deny_reason is None:
77
+ sys.exit(0)
78
+ sys.stdout.write(json.dumps(build_deny_payload(deny_reason)))
79
+ sys.stdout.flush()
80
+
81
+
82
+ if __name__ == "__main__":
83
+ main()