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
@@ -22,5 +22,4 @@ ALL_STOP_HOSTED_HOOK_PATHS: tuple[str, ...] = (
22
22
  "blocking/question_to_user_enforcer.py",
23
23
  "blocking/intent_only_ending_blocker.py",
24
24
  "blocking/session_handoff_blocker.py",
25
- "blocking/eli11_reply_enforcer.py",
26
25
  )
@@ -20,7 +20,7 @@ from hooks_constants.ask_user_question_shape import ( # noqa: E402
20
20
  mask_inline_code,
21
21
  normalize_line_endings,
22
22
  )
23
- from hooks_constants.plain_language_blocker_constants import ( # noqa: E402
23
+ from hooks_constants.ask_user_question_shape_constants import ( # noqa: E402
24
24
  MAXIMUM_OPTION_DESCRIPTION_WORD_COUNT,
25
25
  MAXIMUM_QUESTION_SENTENCE_COUNT,
26
26
  MAXIMUM_QUESTION_WORD_COUNT,
@@ -1,23 +1,6 @@
1
- """Parity checks across the duplicated prose-metric copies.
1
+ """Contract tests for the retained AskUserQuestion shape capability."""
2
2
 
3
- ``plain_language_blocker_constants`` and ``eli11_reply_enforcer_constants``
4
- each carry their own copy of the metrics that read a reply's prose, so a
5
- tuning landed in one copy alone drifts the two gates apart. These checks fail
6
- loud on that drift::
7
-
8
- COUNTABLE_WORD_PATTERN ok: byte-equal across both copies
9
- table-row pattern ok: byte-equal across both copies
10
- "- Run the migration" ok: both copies read a list marker
11
- "1.5% of hosts still fail." ok: neither copy reads a list marker
12
- "**1.** Run the migration" flag: the eli11 copy alone reads a marker
13
-
14
- The list-marker copies hold two different shapes — one combined regex against
15
- a bullet/numbered split — so they are pinned by the lines they agree on plus
16
- the one line they read differently.
17
-
18
- Row 2 of ``~/.claude/orchestrator-runs/falsify-first/parked-items.md`` carries
19
- the shared home that retires these copies.
20
- """
3
+ from __future__ import annotations
21
4
 
22
5
  import pathlib
23
6
  import re
@@ -27,106 +10,45 @@ _HOOKS_ROOT = pathlib.Path(__file__).resolve().parent.parent
27
10
  if str(_HOOKS_ROOT) not in sys.path:
28
11
  sys.path.insert(0, str(_HOOKS_ROOT))
29
12
 
30
- from hooks_constants.eli11_reply_enforcer_constants import (
31
- BULLET_LINE_PATTERN,
32
- NUMBERED_STEP_PATTERN,
33
- TABLE_ROW_PATTERN,
13
+ from hooks_constants.ask_user_question_shape import ( # noqa: E402
14
+ COUNTABLE_WORD_PATTERN as ANALYZER_COUNTABLE_WORD_PATTERN,
15
+ find_chat_detail_markers,
34
16
  )
35
- from hooks_constants.eli11_reply_enforcer_constants import (
36
- COUNTABLE_WORD_PATTERN as ELI11_COUNTABLE_WORD_PATTERN,
17
+ from hooks_constants.ask_user_question_shape_constants import ( # noqa: E402
18
+ ALL_CHAT_DETAIL_MARKERS,
19
+ COUNTABLE_WORD_PATTERN,
37
20
  )
38
- from hooks_constants.ask_user_question_shape import (
39
- COUNTABLE_WORD_PATTERN as SHAPE_COUNTABLE_WORD_PATTERN,
40
- )
41
- from hooks_constants.plain_language_blocker_constants import ALL_CHAT_DETAIL_MARKERS
42
- from hooks_constants.plain_language_blocker_constants import (
43
- COUNTABLE_WORD_PATTERN as PLAIN_LANGUAGE_COUNTABLE_WORD_PATTERN,
44
- )
45
-
46
- _TABLE_ROW_MARKER_LABEL = "a table row"
47
- _LIST_MARKER_LABEL = "a bullet or numbered list marker"
48
- _BOLD_NUMBERED_STEP_LINE = "**1.** Run the migration"
49
-
50
- _ALL_SHARED_LIST_MARKER_LINES = (
51
- "- Run the migration",
52
- "* Run the migration",
53
- "+ Run the migration",
54
- "1. Run the migration",
55
- "2) Run the migration",
56
- " - Run the migration",
57
- " 1. Run the migration",
58
- )
59
-
60
- _ALL_NON_LIST_MARKER_LINES = (
61
- "Run the migration",
62
- "1.5% of hosts still fail.",
63
- "|table|row|",
64
- "-no space after the dash",
65
- )
66
-
67
21
 
68
- def _chat_detail_marker_named(marker_label: str) -> re.Pattern[str]:
69
- """Return the plain-language chat-detail pattern carrying one label.
70
22
 
71
- Args:
72
- marker_label: The label the chat-detail marker table gives a pattern.
73
-
74
- Returns:
75
- The compiled pattern registered under that label.
76
- """
23
+ def _marker_pattern(marker_label: str) -> re.Pattern[str]:
24
+ """Return the pattern registered under one shape-marker label."""
77
25
  for each_pattern, each_label in ALL_CHAT_DETAIL_MARKERS:
78
26
  if each_label == marker_label:
79
27
  return each_pattern
80
- raise AssertionError(f"no chat-detail marker labeled {marker_label!r}")
81
-
82
-
83
- def _eli11_copy_reads_a_list_marker(reply_line: str) -> bool:
84
- """Report whether the eli11 bullet/numbered split reads a list marker.
85
-
86
- Args:
87
- reply_line: One line of reply text.
88
-
89
- Returns:
90
- True when either half of the split matches the line.
91
- """
92
- if BULLET_LINE_PATTERN.search(reply_line):
93
- return True
94
- return bool(NUMBERED_STEP_PATTERN.search(reply_line))
28
+ raise AssertionError(f"missing shape marker: {marker_label}")
95
29
 
96
30
 
97
- def test_countable_word_pattern_copies_stay_byte_equal() -> None:
98
- assert (
99
- PLAIN_LANGUAGE_COUNTABLE_WORD_PATTERN.pattern
100
- == ELI11_COUNTABLE_WORD_PATTERN.pattern
101
- )
102
- assert (
103
- PLAIN_LANGUAGE_COUNTABLE_WORD_PATTERN.flags
104
- == ELI11_COUNTABLE_WORD_PATTERN.flags
105
- )
106
-
31
+ def test_analyzer_uses_the_canonical_countable_word_pattern() -> None:
32
+ assert ANALYZER_COUNTABLE_WORD_PATTERN is COUNTABLE_WORD_PATTERN
107
33
 
108
- def test_shape_analyzer_binds_the_plain_language_countable_word_pattern() -> None:
109
- """The pure shape analyzer reuses the shared pattern object, not a private copy."""
110
- assert SHAPE_COUNTABLE_WORD_PATTERN is PLAIN_LANGUAGE_COUNTABLE_WORD_PATTERN
111
34
 
35
+ def test_shape_marker_table_reads_shared_layout_markers() -> None:
36
+ table_pattern = _marker_pattern("a table row")
37
+ list_pattern = _marker_pattern("a bullet or numbered list marker")
112
38
 
113
- def test_table_row_pattern_copies_stay_byte_equal() -> None:
114
- plain_language_table_row = _chat_detail_marker_named(_TABLE_ROW_MARKER_LABEL)
115
- assert plain_language_table_row.pattern == TABLE_ROW_PATTERN.pattern
116
- assert plain_language_table_row.flags == TABLE_ROW_PATTERN.flags
39
+ assert table_pattern.search("| gate | row |")
40
+ assert list_pattern.search("- Run the migration")
41
+ assert list_pattern.search("1. Run the migration")
42
+ assert not list_pattern.search("1.5% of hosts still fail.")
117
43
 
118
44
 
119
- def test_list_marker_copies_agree_on_every_shared_line() -> None:
120
- combined_marker = _chat_detail_marker_named(_LIST_MARKER_LABEL)
121
- for each_line in _ALL_SHARED_LIST_MARKER_LINES:
122
- assert combined_marker.search(each_line)
123
- assert _eli11_copy_reads_a_list_marker(each_line)
124
- for each_line in _ALL_NON_LIST_MARKER_LINES:
125
- assert not combined_marker.search(each_line)
126
- assert not _eli11_copy_reads_a_list_marker(each_line)
127
-
45
+ def test_analyzer_reports_each_layout_marker() -> None:
46
+ marker_names = find_chat_detail_markers(
47
+ "Question?\n- Split the file\n\n| gate | row |"
48
+ )
128
49
 
129
- def test_bold_numbered_step_reads_as_a_list_marker_in_the_eli11_copy_alone() -> None:
130
- combined_marker = _chat_detail_marker_named(_LIST_MARKER_LABEL)
131
- assert not combined_marker.search(_BOLD_NUMBERED_STEP_LINE)
132
- assert _eli11_copy_reads_a_list_marker(_BOLD_NUMBERED_STEP_LINE)
50
+ assert marker_names == [
51
+ "a table row",
52
+ "a bullet or numbered list marker",
53
+ "more than one paragraph",
54
+ ]
@@ -16,7 +16,6 @@ _EXPECTED_STOP_ORDER = (
16
16
  "blocking/question_to_user_enforcer.py",
17
17
  "blocking/intent_only_ending_blocker.py",
18
18
  "blocking/session_handoff_blocker.py",
19
- "blocking/eli11_reply_enforcer.py",
20
19
  )
21
20
 
22
21
 
@@ -8,8 +8,12 @@ __all__ = [
8
8
 
9
9
  WORKING_STYLE_PROMPT = (
10
10
  "Document each task in a location that remains easy to find later. Keep a "
11
- "running scratch text ledger as you work. Write in plain English. Keep responses "
12
- "focused, brief, and concise. Keep disclaimers and caveats short while giving "
11
+ "running scratch text ledger as you work. Use ELI5 for beginner framing, large "
12
+ "visuals, minimal text, one stable self-contained HTML artifact, update-in-place "
13
+ "continuity, and sharing when a user-facing response needs that presentation. "
14
+ "Keep responses focused, brief, and concise. Apply ~/.claude/rules/asd-ste100-language.md for "
15
+ "user-facing word choice, sentence style, tone, punctuation, and prose form. "
16
+ "Keep disclaimers and caveats short while giving "
13
17
  "the main answer most of the response. Give a high-level explanation by default "
14
18
  "and provide depth when the request calls for it. "
15
19
  "Before your first tool call, state your next action in one sentence. While "
@@ -28,12 +32,7 @@ WORKING_STYLE_PROMPT = (
28
32
  "when the ambiguity changes the outcome, scope, audience, format, or risk. Use a "
29
33
  "clearly stated low-risk assumption when the intended result remains stable. "
30
34
  "Pause for the user's choice before making a high-impact decision. "
31
- "Use positive prose throughout every generated text surface, including "
32
- "documentation, comments, user-facing messages, sub-agent prompts, labels, "
33
- "plans, and instructions. Write each point as one direct affirmative statement "
34
- "that presents only the intended action, fact, reason, or outcome. Use current, "
35
- "immediately relevant context and omit historical clutter. Use plain language, "
36
- "full terms, and simple descriptive names that communicate their meaning "
37
- "immediately. Keep all text concise, clear, direct, and focused entirely on "
38
- "useful information."
35
+ "Use current, immediately relevant context. Name each action, fact, reason, "
36
+ "and outcome. Use full terms and specific names for repository work. Keep all "
37
+ "text concise, clear, direct, and useful."
39
38
  )
@@ -2,6 +2,9 @@
2
2
 
3
3
  SessionStart and SessionEnd hooks for per-session setup and cleanup: removing stale session and plugin-data directories at startup, detecting unregistered repositories, starting the session's task-list maintenance loop, injecting working-style guidance, and clearing PR-author swap state at shutdown.
4
4
 
5
+ The working-style projection uses `~/.claude/rules/asd-ste100-language.md` for
6
+ user-facing word choice, sentence style, tone, punctuation, and prose form.
7
+
5
8
  ## Key files
6
9
 
7
10
  | File | Event | What it does |
@@ -17,7 +20,7 @@ SessionStart and SessionEnd hooks for per-session setup and cleanup: removing st
17
20
  | `_path_setup.py` | — | Inserts the hooks directory on `sys.path` so SessionStart scripts import `hooks_constants` with top-level imports. |
18
21
  | `test_orchestrator_auto_starter.py` | — | Tests for `orchestrator_auto_starter.py` |
19
22
  | `test_issue_tracker_session_starter.py` | — | Tests for `issue_tracker_session_starter.py` |
20
- | `working_style_prompt.py` | SessionStart | Emits an `additionalContext` block with the fixed working-style prompt (running ledger, plain English, outcome-first finish, scope discipline). Writes nothing and runs no tools itself. |
23
+ | `working_style_prompt.py` | SessionStart | Emits an `additionalContext` block with the fixed working-style prompt (running ledger, canonical language policy, outcome-first finish, scope discipline). Writes nothing and runs no tools itself. |
21
24
  | `test_gh_pr_author_session_cleanup.py` | — | Tests for `gh_pr_author_session_cleanup.py` |
22
25
  | `test_session_edit_tracker_cleanup.py` | — | Tests for `session_edit_tracker_cleanup.py` |
23
26
  | `test_session_env_cleanup.py` | — | Tests for `session_env_cleanup.py` |
@@ -36,14 +36,18 @@ class TestWorkingStylePrompt:
36
36
  emitted = json.loads(_run_main())
37
37
  assert emitted["additionalContext"] == WORKING_STYLE_PROMPT
38
38
 
39
- def test_emitted_prompt_preserves_existing_guidance_and_adds_policy(self) -> None:
39
+ def test_emitted_prompt_contains_canonical_policy_and_scope_guidance(self) -> None:
40
40
  emitted = json.loads(_run_main())
41
41
  prompt_text = emitted["additionalContext"]
42
42
  assert "Document each task in a location that remains easy to find later." in prompt_text
43
43
  assert "Deliver the requested work at its intended scope." in prompt_text
44
- assert "Use positive prose throughout every generated text surface" in prompt_text
45
- assert "Write each point as one direct affirmative statement" in prompt_text
46
- assert "Use plain language, full terms, and simple descriptive names" in prompt_text
44
+ assert "Use ELI5 for beginner framing, large visuals, minimal text" in prompt_text
45
+ assert "one stable self-contained HTML artifact" in prompt_text
46
+ assert "update-in-place continuity, and sharing" in prompt_text
47
+ assert "Apply ~/.claude/rules/asd-ste100-language.md for user-facing word choice" in prompt_text
48
+ assert "Use current, immediately relevant context." in prompt_text
49
+ assert "Name each action, fact, reason, and outcome." in prompt_text
50
+ assert "Use full terms and specific names for repository work." in prompt_text
47
51
  assert "When a request has multiple reasonable interpretations" in prompt_text
48
52
  assert "Ask one focused clarification question" in prompt_text
49
53
  assert "Pause for the user's choice before making a high-impact decision." in prompt_text
@@ -2,8 +2,10 @@
2
2
  """SessionStart hook — inject working-style guidance into the session.
3
3
 
4
4
  At session start this hook emits an ``additionalContext`` block carrying a fixed
5
- working-style prompt: keep a running ledger, write in plain English, narrate
6
- before the first tool call, lead with the outcome, and stay at the asked scope.
5
+ working-style prompt: use ELI5 for the beginner presentation envelope, follow
6
+ ``~/.claude/rules/asd-ste100-language.md`` for sentence prose, keep a running
7
+ ledger, narrate before the first tool call, lead with the outcome, and stay at
8
+ the asked scope.
7
9
  The hook writes nothing and runs no tools itself.
8
10
  """
9
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-dev-env",
3
- "version": "2.16.0",
3
+ "version": "2.18.0",
4
4
  "description": "Claude Code development standards — rules, hooks, agents, commands, and skills",
5
5
  "type": "module",
6
6
  "bin": {
@@ -44,9 +44,6 @@
44
44
  "tdd",
45
45
  "code-quality"
46
46
  ],
47
- "dependencies": {
48
- "@jl-cmd/prompt-generator": "^1.0.0"
49
- },
50
47
  "license": "MIT",
51
48
  "repository": {
52
49
  "type": "git",
package/rules/AGENTS.md CHANGED
@@ -5,12 +5,13 @@ paths:
5
5
 
6
6
  # rules
7
7
 
8
- Rule files installed into `~/.claude/rules/` by `bin/install.mjs`. A rule without `paths:` frontmatter loads at the start of every session; a rule with `paths:` frontmatter loads only when the session works with a file its globs match. The `InstructionsLoaded` log records that match as a `path_glob_match` event. Each `.md` file covers one named rule; hook-enforced rules are also backed by a Python hook in `hooks/`.
8
+ Rule files installed into `~/.claude/rules/` by `bin/install.mjs`. A rule without `paths:` frontmatter loads at the start of every session; a rule with `paths:` frontmatter loads only when the session works with a file its globs match. The `InstructionsLoaded` log records that match as a `path_glob_match` event. The `asd-ste100-language.md` file owns general user-facing language. Each other `.md` file covers one named behavior contract; hook-enforced rules are also backed by a Python hook in `hooks/`.
9
9
 
10
10
  ## Files
11
11
 
12
12
  | File | Rule |
13
13
  |---|---|
14
+ | `asd-ste100-language.md` | Sole general user-facing language authority; concise conversational adaptation of ASD-STE100 Issue 9 |
14
15
  | `agent-spawn-protocol.md` | Check context sufficiency before a spawn and ask subagents for file-and-line answers; `/prompt-generator` is recommended for a complex or user-facing spawn |
15
16
  | `anti-corollary-tests.md` | Tests must carry information: no corollary matrices over canonical reductions, no suite that only matches a dead-implementation default, stated mutation in the audit lane |
16
17
  | `ask-user-question-required.md` | Every user-directed question goes through the `AskUserQuestion` tool — no plain-text questions |
@@ -23,10 +24,8 @@ Rule files installed into `~/.claude/rules/` by `bin/install.mjs`. A rule withou
23
24
  | `context7.md` | Use Context7 MCP to fetch current library docs; always prefer live docs over built-in knowledge |
24
25
  | `destructive-commands.md` | Allowed removal forms and the ephemeral namespace the `destructive_command_blocker` auto-allows; keep destructive literals out of a Bash command string even as data |
25
26
  | `doc-inventory-integrity.md` | Three inventory shapes stay in step with the code: a per-directory `CLAUDE.md` file list, a package `README`/`SKILL.md` inventory, and an env-var summary table |
26
- | `doc-prose-cuts.md` | Four sentence shapes to cut from prose: exclusion claims, justification sentences, conversation references, and time references |
27
27
  | `docstring-prose-matches-implementation.md` | Prose enumerations in docstrings cover every behavior the body applies |
28
28
  | `durable-post-artifacts.md` | GitHub post bodies never reference volatile scratch paths; text embeds inline and binary artifacts upload to the `artifacts` release with the permanent URL linked |
29
- | `eli11-replies.md` | Every chat reply the user reads follows one shape: action first, detail last, few words; `plain-language.md` governs word choice, this rule governs reply length and shape |
30
29
  | `explore-thoroughly.md` | Read relevant files and map existing patterns before proposing a change |
31
30
  | `falsify-before-green.md` | A check's green counts as evidence only after that same check ran red on a named break, with a passing control beside it |
32
31
  | `file-global-constants.md` | File-global constants need at least two same-file references; otherwise move value to `config/` |
@@ -39,11 +38,9 @@ Rule files installed into `~/.claude/rules/` by `bin/install.mjs`. A rule withou
39
38
  | `nas-ssh-invocation.md` | Reach the NAS through the paramiko-backed `nas_ssh_key.py` runner, which signs in-process; every ssh-family client reads the key through file permissions, refuses it, and stalls an unattended run on a password prompt |
40
39
  | `no-cross-skill-duplicate-helpers.md` | Within one skill a duplicated helper is blocked; across two skill folders a small self-contained copy is a sanctioned isolation tradeoff that draws a non-blocking advisory naming the source skill |
41
40
  | `orphan-css-class.md` | Every `class="..."` attribute in Python-generated markup has a matching selector in the `<style>` block |
42
- | `opus5-communication-contract.md` | Visible concision, one-sentence first progress, important-change-only updates, outcome-first finals, thinking-disabled tool narration (`opus5-communication-contract-v1`) |
43
41
  | `paired-test-coverage.md` | A public function omitted by a module's established paired test suite must get a behavioral test |
44
42
  | `parallel-tools.md` | Make all independent tool calls in a single response |
45
43
  | `plain-illustrative-docstrings.md` | Public docstring narrative reads plainly and shows behavior with a diagram block (a `::` example or a doctest), painting a concrete scene a general developer follows on first read; a run-on backstop hook, a prose-wall backstop hook, and Category O9 audit enforce it |
46
- | `plain-language.md` | Everyday words, short active sentences, lead with the answer |
47
44
  | `prompt-workflow-context-controls.md` | Keep prompt-workflow instruction layers small and stable; load heavy skills on demand |
48
45
  | `re-stage-before-commit.md` | Stage the files edited this session before `git commit`; the session edit stage gate denies a commit that leaves a tracked session edit unstaged, with `-a`, a pathspec, a preceding `git add`, and `# partial-commit` as escapes |
49
46
  | `research-mode.md` | Three anti-hallucination constraints: say "I don't know", verify with citations, quote for factual grounding |
@@ -0,0 +1,39 @@
1
+ # ASD-STE100 Language Policy
2
+
3
+ Use this rule as the sole general language authority for user-facing text in this repository.
4
+ It defines ordinary word choice, sentence style, tone, punctuation, and prose form.
5
+
6
+ This text is an **ASD-STE100 Issue 9 conversational adaptation**. It applies the standard's
7
+ clear-writing principles to assistant messages. The official standard remains the authority for
8
+ definitions and dictionary decisions.
9
+
10
+ ## Official sources
11
+
12
+ - [ASD-STE100 Simplified Technical English, Issue 9 (2025-01-15)](https://www.asd-ste100.org/assets/files/ASD-STE100_ISSUE9.pdf)
13
+ - [ASD-STE100 FAQ](https://www.asd-ste100.org/STE_faq.html)
14
+ - [ASD-STE100 About page](https://www.asd-ste100.org/about_STE.html)
15
+ - [ASD-STE100 tools guidance](https://www.asd-ste100.org/STEsoftware.html)
16
+ - [STEMG white paper on ASD-STE100 and artificial intelligence](https://www.asd-ste100.org/assets/files/WhitePaper-ASD-STE100_and_AI.pdf)
17
+
18
+ ## Writing policy
19
+
20
+ - Write short, complete sentences. Keep one topic in each explanatory sentence.
21
+ - Use active voice. Put the condition first when an instruction has a prerequisite.
22
+ - Write imperative procedure steps. Give one action in each sentence.
23
+ - Prefer familiar, precise words. Use one stable term for one item or action.
24
+ - Write full words and explicit references. Expand abbreviations and contractions when they first appear.
25
+ - Replace ambiguous pronouns with the noun they name.
26
+ - Use inclusive, neutral language.
27
+ - Use periods, commas, colons, and bullets to show structure.
28
+ - Preserve exact quoted labels, identifiers, formulas, titles, and interface text.
29
+ - Use `WARNING` for a real risk of injury or death. Use `CAUTION` for a real risk of equipment, tool, or machine damage. State the command or condition first, then state the result.
30
+ - Aim for 20 words or fewer in a procedure sentence when the technical content allows.
31
+ - Aim for 25 words or fewer in a descriptive sentence when the technical content allows.
32
+
33
+ Use this policy for chat, tool narration, questions, plans, documentation, code-adjacent prose,
34
+ and durable repository text. Named contracts can add behavior-specific structure, evidence,
35
+ question routing, current-state documentation, completion, docstring, or publication rules.
36
+ Those contracts use this policy for their language.
37
+
38
+ Treat automated output and language checks as drafting aids. A responsible human verifies
39
+ technical accuracy, terminology, safety, confidentiality, and intended meaning.
@@ -8,7 +8,7 @@ The `question_to_user_enforcer` Stop hook blocks a response whose final paragrap
8
8
 
9
9
  `AskUserQuestion` renders as one plain unformatted text block. Detail — plans, counts, tradeoffs, background — goes in chat text before the call. The block itself carries a lean question and short choices. When a choice needs formatting, an inline visualizer tool carries it.
10
10
 
11
- The `plain_language_blocker` PreToolUse hook denies an `AskUserQuestion` call whose `question` text or whose `description` under any of the `options` carries chat detail:
11
+ The `ask_user_question_shape_blocker` PreToolUse hook denies an `AskUserQuestion` call whose `question` text or whose `description` under any of the `options` carries chat detail:
12
12
 
13
13
  | What the block carries | Cap |
14
14
  |---|---|
@@ -30,7 +30,7 @@ On a long build, set a checkpoint cadence and hold to it. At each interval, chec
30
30
 
31
31
  Before you report progress, check each claim against a tool result from this session. State only what the evidence backs; name anything unverified as unverified. If tests fail, say so with the output; if a step was skipped, say that.
32
32
 
33
- Visible progress follows [`opus5-communication-contract.md`](opus5-communication-contract.md) (`opus5-communication-contract-v1`): the **first progress update is one sentence**; later updates mark only **important discoveries or a direction change**.
33
+ Visible progress follows the [ASD-STE100 language policy](asd-ste100-language.md) and this rule's run-completion contract: the **first progress update is one sentence**; later updates mark only **important discoveries or a direction change**.
34
34
 
35
35
  ## Re-ground the final message
36
36
 
package/scripts/AGENTS.md CHANGED
@@ -30,6 +30,7 @@ Utility scripts installed into `~/.claude/scripts/` by `bin/install.mjs`. Each s
30
30
  | `check.ps1` | Runs the full code-quality check suite |
31
31
  | `Get-SessionAccount.ps1` | Reports which Claude account the current session is actually logged into by comparing `~/.claude.json`'s CLI login against a `CLAUDE_USER_DATA_DIR` desktop profile's `lastKnownAccountUuid`, recovering the desktop account's email from profile storage when the two accounts differ |
32
32
  | `Capture-PoolHealth.ps1` | Captures Windows memory pool counters, high-handle processes, and kernel pool tags (via `NtQuerySystemInformation` class 22), prints a threshold verdict with a remediation map, and exits non-zero when any alert threshold fires |
33
+ | `Show-Asset.ps1` | Opens files on screen, sizing each image window to the image's pixel dimensions and falling back to the registered default application for non-image files |
33
34
 
34
35
  ## Subdirectories
35
36
 
@@ -0,0 +1,106 @@
1
+ <#
2
+ .SYNOPSIS
3
+ Opens files on screen, sizing each image window to the image's own dimensions.
4
+
5
+ .DESCRIPTION
6
+ For every path given, an image opens in a window whose client area matches the
7
+ image's pixel size, scaled down to fit the primary screen's working area when the
8
+ image is larger than the screen. A small image gets a usable minimum window with
9
+ the picture centered at native size. Non-image files open in their registered
10
+ default application, and any file that cannot be loaded as an image falls back to
11
+ that default application too. Escape or the close button dismisses a window; the
12
+ process exits once every window is closed.
13
+
14
+ .PARAMETER Paths
15
+ One or more file paths to open.
16
+ #>
17
+ param(
18
+ [Parameter(ValueFromRemainingArguments = $true)]
19
+ [string[]]$Paths
20
+ )
21
+
22
+ Add-Type -AssemblyName System.Windows.Forms
23
+ Add-Type -AssemblyName System.Drawing
24
+
25
+ try {
26
+ [System.Windows.Forms.Application]::SetHighDpiMode([System.Windows.Forms.HighDpiMode]::PerMonitorV2) | Out-Null
27
+ }
28
+ catch {
29
+ $null = $_
30
+ }
31
+ [System.Windows.Forms.Application]::EnableVisualStyles()
32
+
33
+ $imageExtensions = @('.png', '.jpg', '.jpeg', '.gif', '.bmp', '.webp', '.tif', '.tiff', '.ico')
34
+ $screenMargin = 80
35
+ $minimumClientWidth = 220
36
+ $minimumClientHeight = 160
37
+ $openWindowCount = 0
38
+
39
+ foreach ($path in $Paths) {
40
+ if (-not (Test-Path -LiteralPath $path)) { continue }
41
+ $fullPath = (Resolve-Path -LiteralPath $path).Path
42
+ $extension = [System.IO.Path]::GetExtension($fullPath).ToLowerInvariant()
43
+
44
+ if ($imageExtensions -notcontains $extension) {
45
+ Invoke-Item -LiteralPath $fullPath
46
+ continue
47
+ }
48
+
49
+ try {
50
+ $imageBytes = [System.IO.File]::ReadAllBytes($fullPath)
51
+ $imageStream = New-Object System.IO.MemoryStream(, $imageBytes)
52
+ $loadedImage = [System.Drawing.Image]::FromStream($imageStream)
53
+ $image = New-Object System.Drawing.Bitmap($loadedImage)
54
+ $loadedImage.Dispose()
55
+ $imageStream.Dispose()
56
+ }
57
+ catch {
58
+ Invoke-Item -LiteralPath $fullPath
59
+ continue
60
+ }
61
+
62
+ $workingArea = [System.Windows.Forms.Screen]::PrimaryScreen.WorkingArea
63
+ $maximumWidth = $workingArea.Width - $screenMargin
64
+ $maximumHeight = $workingArea.Height - $screenMargin
65
+ $scale = [Math]::Min(1.0, [Math]::Min($maximumWidth / $image.Width, $maximumHeight / $image.Height))
66
+
67
+ $pictureBox = New-Object System.Windows.Forms.PictureBox
68
+ $pictureBox.Dock = [System.Windows.Forms.DockStyle]::Fill
69
+ $pictureBox.Image = $image
70
+
71
+ if ($scale -lt 1.0) {
72
+ $pictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::Zoom
73
+ $clientWidth = [int][Math]::Round($image.Width * $scale)
74
+ $clientHeight = [int][Math]::Round($image.Height * $scale)
75
+ }
76
+ else {
77
+ $pictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::CenterImage
78
+ $clientWidth = [Math]::Max($minimumClientWidth, $image.Width)
79
+ $clientHeight = [Math]::Max($minimumClientHeight, $image.Height)
80
+ }
81
+
82
+ $form = New-Object System.Windows.Forms.Form
83
+ $form.Text = [System.IO.Path]::GetFileName($fullPath)
84
+ $form.AutoScaleMode = [System.Windows.Forms.AutoScaleMode]::None
85
+ $form.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen
86
+ $form.ClientSize = New-Object System.Drawing.Size($clientWidth, $clientHeight)
87
+ $form.KeyPreview = $true
88
+ $form.BackColor = [System.Drawing.Color]::FromArgb(24, 24, 24)
89
+ $form.Controls.Add($pictureBox)
90
+
91
+ $form.Add_KeyDown({
92
+ param($sender, $eventArguments)
93
+ if ($eventArguments.KeyCode -eq [System.Windows.Forms.Keys]::Escape) { $sender.Close() }
94
+ })
95
+ $form.Add_FormClosed({
96
+ $script:openWindowCount--
97
+ if ($script:openWindowCount -le 0) { [System.Windows.Forms.Application]::Exit() }
98
+ })
99
+
100
+ $openWindowCount++
101
+ $form.Show()
102
+ }
103
+
104
+ if ($openWindowCount -gt 0) {
105
+ [System.Windows.Forms.Application]::Run()
106
+ }
@@ -100,21 +100,48 @@ def test_untracked_import_fails_tracking_check(tmp_path: Path) -> None:
100
100
  assert any("Git mode 100644" in each_error for each_error in all_errors)
101
101
 
102
102
 
103
- def test_pull_request_trigger_is_unconditional() -> None:
103
+ def test_pull_request_target_trigger_is_unconditional() -> None:
104
104
  workflow_text = read_workflow("validate-instruction-pairs.yml")
105
105
 
106
- assert " pull_request:\n push:\n" in workflow_text
106
+ assert " pull_request:\n pull_request_target:\n push:\n" in workflow_text
107
107
 
108
108
 
109
109
  def test_instruction_pairs_status_context_stays_exact() -> None:
110
110
  workflow_text = read_workflow("validate-instruction-pairs.yml")
111
111
  reusable_workflow_text = read_workflow("instruction-pairs-reusable.yml")
112
+ caller_job_body = workflow_text.split(" instruction-pairs:\n", 1)[1]
113
+ caller_job_before_uses = caller_job_body.split("uses:", 1)[0]
112
114
 
113
115
  assert (
114
116
  " instruction-pairs:\n"
115
117
  " uses: ./.github/workflows/instruction-pairs-reusable.yml\n"
116
118
  " with:\n"
117
- " validator-ref: ${{ github.event.pull_request.head.sha || github.sha }}\n"
118
119
  in workflow_text
119
120
  )
121
+ assert " validator-ref: ${{ github.sha }}\n" in workflow_text
122
+ assert (
123
+ " checkout-ref: ${{ github.event.pull_request.head.sha || github.sha }}\n"
124
+ in workflow_text
125
+ )
126
+ assert "if:" not in caller_job_before_uses
120
127
  assert " instruction-pairs:\n name: instruction-pairs\n" in reusable_workflow_text
128
+
129
+
130
+ def test_release_please_short_circuit_exists_in_workflow() -> None:
131
+ workflow_text = read_workflow("validate-instruction-pairs.yml")
132
+ reusable_workflow_text = read_workflow("instruction-pairs-reusable.yml")
133
+
134
+ assert "skip-validation:" in reusable_workflow_text
135
+ assert "type: boolean" in reusable_workflow_text
136
+ assert "default: false" in reusable_workflow_text
137
+ assert "if: ${{ inputs.skip-validation }}" in reusable_workflow_text
138
+ assert "if: ${{ !inputs.skip-validation }}" in reusable_workflow_text
139
+ assert (
140
+ "Skipping instruction-pairs tree validation for a release-please pull request."
141
+ in reusable_workflow_text
142
+ )
143
+ assert "ref: ${{ inputs.checkout-ref }}" in reusable_workflow_text
144
+ assert "release-please--" in workflow_text
145
+ assert "chore(.*): release " in workflow_text
146
+ assert "autorelease: pending" in workflow_text
147
+ assert "skip-validation:" in workflow_text
@@ -71,8 +71,8 @@ def test_explicit_roots_write_stem_named_mdc(
71
71
  cursor = tmp_path / "cursor-home"
72
72
  _write_minimal_curated_rules(claude / "rules")
73
73
  _write_minimal_docs(claude / "docs")
74
- (claude / "rules" / "plain-language.md").write_text(
75
- "# Plain language\n\nUse short sentences.\n",
74
+ (claude / "rules" / "asd-ste100-language.md").write_text(
75
+ "# ASD-STE100 Language Policy\n\nUse short sentences.\n",
76
76
  encoding="utf-8",
77
77
  )
78
78
  (claude / "rules" / "CLAUDE.md").write_text("# Inventory\n", encoding="utf-8")
@@ -90,8 +90,8 @@ def test_explicit_roots_write_stem_named_mdc(
90
90
  )
91
91
  == 0
92
92
  )
93
- generated = (cursor / "rules" / "plain-language.mdc").read_text(encoding="utf-8")
94
- assert 'description: "Plain language"' in generated
93
+ generated = (cursor / "rules" / "asd-ste100-language.mdc").read_text(encoding="utf-8")
94
+ assert 'description: "ASD-STE100 Language Policy"' in generated
95
95
  assert "alwaysApply: true" in generated
96
96
  assert "Use short sentences." in generated
97
97
  assert not (cursor / "rules" / "CLAUDE.mdc").is_file()
@@ -40,8 +40,8 @@ def test_build_mappings_emits_stem_mdc_for_remaining_claude_rules(
40
40
  claude = tmp_path / ".claude"
41
41
  _write_minimal_curated_rules(claude / "rules")
42
42
  (claude / "docs").mkdir(parents=True, exist_ok=True)
43
- (claude / "rules" / "plain-language.md").write_text(
44
- "# Plain language\n\nBe brief.\n",
43
+ (claude / "rules" / "asd-ste100-language.md").write_text(
44
+ "# ASD-STE100 Language Policy\n\nBe brief.\n",
45
45
  encoding="utf-8",
46
46
  )
47
47
  (claude / "rules" / "CLAUDE.md").write_text(
@@ -50,10 +50,10 @@ def test_build_mappings_emits_stem_mdc_for_remaining_claude_rules(
50
50
  (claude / "rules" / "AGENTS.md").write_text("# Agent inventory\n", encoding="utf-8")
51
51
  mappings = build_mappings(claude)
52
52
  output_by_key = {each_mapping.key: each_mapping for each_mapping in mappings}
53
- discovered = output_by_key["plain-language"]
54
- assert discovered.output_name == "plain-language.mdc"
53
+ discovered = output_by_key["asd-ste100-language"]
54
+ assert discovered.output_name == "asd-ste100-language.mdc"
55
55
  assert discovered.always_apply is True
56
- assert discovered.description == "Plain language"
56
+ assert discovered.description == "ASD-STE100 Language Policy"
57
57
  assert "CLAUDE.md" not in {
58
58
  each_source.name
59
59
  for each_mapping in mappings
@@ -2,6 +2,14 @@
2
2
 
3
3
  System-prompt reference files installed into `~/.claude/system-prompts/` by `bin/install.mjs`. Rules and skills pull a file (or one of its sections) into context on demand by citing its installed path.
4
4
 
5
+ Use `~/.claude/rules/asd-ste100-language.md` for user-facing word choice,
6
+ sentence style, tone, punctuation, and prose form. Each prompt keeps its
7
+ role-specific behavior contract.
8
+
9
+ ELI5 owns the global beginner presentation envelope: large visuals, minimal
10
+ text, one stable self-contained HTML artifact, update-in-place continuity, and
11
+ sharing.
12
+
5
13
  ## Files
6
14
 
7
15
  | File | Purpose |