claude-dev-env 4.3.0 → 7.1.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 (480) hide show
  1. package/.agents/agents/pr-description-writer.md +2 -2
  2. package/.agents/agents/test_agent_frontmatter.py +2 -2
  3. package/.agents/agents/test_pr_description_writer_style.py +1 -3
  4. package/.agents/skills/e-code-review/SKILL.md +12 -12
  5. package/.agents/skills/e-code-review/preflight-proposal.contract.test.mjs +20 -0
  6. package/.agents/skills/e-code-review/reference/fix.md +15 -17
  7. package/.agents/skills/e-code-review/reference/loop.md +35 -39
  8. package/.agents/skills/e-code-review/reference/mode-contract.test.mjs +2 -1
  9. package/.agents/skills/e-code-review/reference/preflight-proposal.md +44 -9
  10. package/.agents/skills/e-code-review/reference/runner-selection.md +13 -14
  11. package/.agents/skills/issue-tracker/SKILL.md +5 -4
  12. package/.agents/skills/pull-request/SKILL.md +11 -13
  13. package/.agents/skills/pull-request/reference/publication-tasks.md +3 -3
  14. package/.agents/skills/pull-request/scripts/github_pr_command_constants/config/constants.py +9 -1
  15. package/.agents/skills/pull-request/scripts/pull_request.py +35 -44
  16. package/.agents/skills/pull-request/scripts/test_github_pr_command_constants.py +9 -0
  17. package/.agents/skills/pull-request/scripts/test_pull_request.py +35 -3
  18. package/.agents/skills/session-continuity/README.md +189 -0
  19. package/.agents/skills/session-continuity/SKILL.md +114 -0
  20. package/.agents/skills/session-continuity/continuity.mjs +375 -0
  21. package/.agents/skills/session-continuity/continuity.test.mjs +303 -0
  22. package/.agents/skills/skill-builder/SKILL.md +3 -196
  23. package/.agents/skills/syncing-submodules/scripts/test_sync_parent_pointer.py +0 -7
  24. package/.agents/skills/windows-scheduled-task/SKILL.md +153 -0
  25. package/_shared/pr-loop/scripts/pr_loop_shared_constants/terminology_sweep_constants.py +6 -0
  26. package/_shared/pr-loop/scripts/terminology_sweep.py +64 -19
  27. package/_shared/pr-loop/scripts/tests/test_terminology_sweep.py +59 -0
  28. package/bin/cde.mjs +36 -8
  29. package/bin/cde.test.mjs +48 -0
  30. package/bin/ever-shipped-skills.mjs +2 -20
  31. package/bin/ever-shipped-skills.test.mjs +8 -0
  32. package/bin/expand_home_directory_tokens.mjs +4 -5
  33. package/bin/expand_home_directory_tokens.test.mjs +128 -0
  34. package/bin/git_hooks_installer.mjs +22 -3
  35. package/bin/git_hooks_installer.test.mjs +159 -5
  36. package/bin/install-session-continuity.mjs +78 -0
  37. package/bin/install-session-continuity.test.mjs +42 -0
  38. package/bin/install.agents-home.test.mjs +15 -13
  39. package/bin/install.codex-rules.test.mjs +5 -2
  40. package/bin/install.cursor-rules.test.mjs +5 -2
  41. package/bin/install.mjs +506 -63
  42. package/bin/install.policy-lint.test.mjs +130 -0
  43. package/bin/install.profiles.test.mjs +10 -0
  44. package/bin/install.prune.test.mjs +286 -37
  45. package/bin/install.pstack-plugin.test.mjs +114 -0
  46. package/bin/install.test.mjs +537 -120
  47. package/bin/install.transaction.test.mjs +3 -3
  48. package/bin/refresh-pstack-plugin-skills.test.mjs +211 -0
  49. package/docs/CODE_RULES.md +1 -1
  50. package/hooks/advisory/pr_done_reminder.py +342 -0
  51. package/hooks/advisory/test_pr_done_reminder.py +249 -0
  52. package/hooks/blocking/bash_post_call_dispatcher.py +53 -6
  53. package/hooks/blocking/code_rules_banned_identifiers.py +3 -0
  54. package/hooks/blocking/code_rules_paired_test.py +22 -15
  55. package/hooks/blocking/precommit_code_rules_gate.py +5 -8
  56. package/hooks/blocking/test_bash_dispatcher_interpreter_starts.py +7 -52
  57. package/hooks/blocking/test_bash_post_call_dispatcher.py +65 -4
  58. package/hooks/blocking/test_bash_pre_tool_use_dispatcher.py +0 -69
  59. package/hooks/blocking/test_code_rules_banned_identifiers.py +64 -0
  60. package/hooks/blocking/test_code_rules_enforcer_paired_test.py +36 -29
  61. package/hooks/blocking/test_code_rules_js_resume_task_enumeration.py +4 -4
  62. package/hooks/blocking/test_code_rules_js_returns_object_schemaless.py +5 -5
  63. package/hooks/blocking/test_pre_tool_use_dispatcher.py +43 -342
  64. package/hooks/blocking/test_pre_tool_use_dispatcher_native.py +20 -51
  65. package/hooks/blocking/test_shared_stdin_adoption.py +1 -47
  66. package/hooks/git-hooks/git_hooks_constants/staged_policy_lint.py +12 -0
  67. package/hooks/git-hooks/git_hooks_constants/verification_notice_constants.py +116 -0
  68. package/hooks/git-hooks/post_commit.py +33 -0
  69. package/hooks/git-hooks/pre_commit.py +18 -49
  70. package/hooks/git-hooks/pre_push.py +45 -541
  71. package/hooks/git-hooks/test_installed_policy_lint.py +208 -0
  72. package/hooks/git-hooks/test_native_hook_support.py +129 -0
  73. package/hooks/git-hooks/test_native_policy_commit.py +120 -0
  74. package/hooks/git-hooks/test_post_commit.py +43 -0
  75. package/hooks/git-hooks/test_pre_commit.py +38 -148
  76. package/hooks/git-hooks/test_pre_push.py +48 -1631
  77. package/hooks/git-hooks/test_verification_notice.py +60 -0
  78. package/hooks/git-hooks/test_verification_start.py +173 -0
  79. package/hooks/git-hooks/verification_notice.py +192 -0
  80. package/hooks/git-hooks/verification_notice_context.py +253 -0
  81. package/hooks/git-hooks/verification_notice_state.py +237 -0
  82. package/hooks/git-hooks/verification_start.py +100 -0
  83. package/hooks/hooks.json +1 -120
  84. package/hooks/hooks_constants/banned_identifiers_constants.py +4 -0
  85. package/hooks/hooks_constants/bash_post_call_dispatcher_constants.py +14 -1
  86. package/hooks/hooks_constants/bash_pre_tool_use_dispatcher_constants.py +1 -15
  87. package/hooks/hooks_constants/post_tool_use_dispatcher_constants.py +0 -4
  88. package/hooks/hooks_constants/pr_done_reminder_constants.py +98 -0
  89. package/hooks/hooks_constants/pre_tool_use_dispatcher_constants.py +10 -93
  90. package/hooks/hooks_constants/stop_dispatcher_constants.py +1 -4
  91. package/hooks/hooks_constants/test_bash_post_call_dispatcher_constants.py +19 -2
  92. package/hooks/hooks_constants/test_bash_pre_tool_use_dispatcher_constants.py +3 -66
  93. package/hooks/hooks_constants/test_pr_done_reminder_constants.py +40 -0
  94. package/hooks/hooks_constants/test_pre_tool_use_dispatcher_constants.py +46 -201
  95. package/hooks/hooks_constants/test_stop_dispatcher_constants.py +3 -25
  96. package/hooks/validation/test_post_tool_use_dispatcher.py +35 -298
  97. package/hooks/validators/run_all_validators.py +5 -1
  98. package/hooks/validators/security_checks.py +57 -2
  99. package/hooks/validators/test_hook_timing_harness.py +2 -5
  100. package/hooks/validators/test_run_all_validators_mutation_tool_parity.py +3 -11
  101. package/hooks/validators/test_run_all_validators_policy_lint.py +36 -0
  102. package/hooks/validators/test_security_checks.py +57 -0
  103. package/package.json +2 -2
  104. package/rules/confirm-implementation-forks.md +2 -0
  105. package/rules/durable-post-artifacts.md +2 -1
  106. package/rules/git-workflow.md +18 -6
  107. package/rules/pstack-host-mapping.md +48 -0
  108. package/rules/vault-context.md +3 -5
  109. package/rules/verify-runtime-state.md +7 -0
  110. package/scripts/audit-hooks-cli.mjs +5 -0
  111. package/scripts/audit-hooks.mjs +72 -16
  112. package/scripts/automatic_advisory/__init__.py +1 -0
  113. package/scripts/automatic_advisory/checkout.py +51 -0
  114. package/scripts/automatic_advisory/cli.py +334 -0
  115. package/scripts/automatic_advisory/config/__init__.py +1 -0
  116. package/scripts/automatic_advisory/config/constants.py +93 -0
  117. package/scripts/automatic_advisory/config/timing.py +4 -0
  118. package/scripts/automatic_advisory/configuration.py +197 -0
  119. package/scripts/automatic_advisory/execution.py +350 -0
  120. package/scripts/automatic_advisory/git.py +69 -0
  121. package/scripts/automatic_advisory/model.py +107 -0
  122. package/scripts/automatic_advisory/process_host.py +32 -0
  123. package/scripts/automatic_advisory/publisher.py +84 -0
  124. package/scripts/automatic_advisory/runner.py +399 -0
  125. package/scripts/automatic_advisory/state.py +116 -0
  126. package/scripts/automatic_advisory/window_flags.py +41 -0
  127. package/scripts/automatic_advisory/windows_job.py +122 -0
  128. package/scripts/check.ps1 +0 -1
  129. package/{.agents/skills/run-claude-dev-env/driver.mjs → scripts/ci/installer-lifecycle.mjs} +3 -28
  130. package/scripts/ci/installer-lifecycle.test.mjs +26 -0
  131. package/scripts/ci/windows-installer-lifecycle.ps1 +1 -11
  132. package/scripts/codex_compat_materializer.py +99 -13
  133. package/scripts/dev_env_scripts_constants/shared_tree_constants.py +4 -5
  134. package/{.agents/skills/_shared/pr-loop/scripts → scripts}/durable_post_lint.py +35 -43
  135. package/{.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/durable_post_lint_constants.py → scripts/durable_post_lint_config/config/constants.py} +10 -10
  136. package/{.agents/skills/_shared/pr-loop/scripts/test_durable_post_lint_constants.py → scripts/durable_post_lint_config/config/test_constants.py} +14 -1
  137. package/scripts/local_report_cli.py +184 -0
  138. package/scripts/local_report_core.py +247 -0
  139. package/scripts/local_report_publisher.py +12 -0
  140. package/scripts/local_report_validation.py +357 -0
  141. package/scripts/local_verification/__init__.py +23 -0
  142. package/scripts/local_verification/check_runner.py +364 -0
  143. package/scripts/local_verification/check_support.py +99 -0
  144. package/scripts/local_verification/cli.py +158 -0
  145. package/scripts/local_verification/command_runner.py +84 -0
  146. package/scripts/local_verification/config/__init__.py +1 -0
  147. package/scripts/local_verification/config/constants.py +89 -0
  148. package/scripts/local_verification/config/timing.py +1 -0
  149. package/scripts/local_verification/git_state.py +146 -0
  150. package/scripts/local_verification/manifest.py +224 -0
  151. package/scripts/local_verification/model.py +174 -0
  152. package/scripts/local_verification/runner.py +234 -0
  153. package/scripts/policy_lint/adapter_detectors.py +13 -6
  154. package/scripts/policy_lint/adapter_pairing.py +58 -3
  155. package/scripts/policy_lint/adapters.py +7 -4
  156. package/scripts/policy_lint/config/approved_test_pairs.py +323 -0
  157. package/scripts/policy_lint/config/constants.py +5 -0
  158. package/scripts/policy_lint/engine.py +48 -4
  159. package/scripts/policy_lint/model.py +1 -0
  160. package/scripts/policy_lint/registry.py +1 -1
  161. package/scripts/policy_lint/selection.py +2 -1
  162. package/scripts/policy_lint/selection_git.py +2 -0
  163. package/scripts/pr_verification/__init__.py +1 -0
  164. package/scripts/pr_verification/branch_refs.py +114 -0
  165. package/scripts/pr_verification/config/__init__.py +1 -0
  166. package/scripts/pr_verification/config/constants.py +84 -0
  167. package/scripts/pr_verification/config/timing.py +5 -0
  168. package/scripts/pr_verification/github.py +137 -0
  169. package/scripts/pr_verification/github_api.py +376 -0
  170. package/scripts/pr_verification/github_labels.py +88 -0
  171. package/scripts/pr_verification/github_parsing.py +182 -0
  172. package/scripts/pr_verification/github_transport.py +91 -0
  173. package/scripts/pr_verification/lock.py +122 -0
  174. package/scripts/pr_verification/model.py +43 -0
  175. package/scripts/pr_verification/requirements.txt +1 -0
  176. package/scripts/refresh_pstack_plugin_skills.mjs +200 -0
  177. package/scripts/shared_tree_paths.py +32 -3
  178. package/{.agents/skills/_shared/pr-loop/scripts → scripts}/test_durable_post_lint.py +97 -0
  179. package/scripts/test_shared_tree_paths.py +33 -0
  180. package/scripts/tests/test-audit-hooks-cli.mjs +150 -0
  181. package/scripts/tests/test-audit-hooks.mjs +94 -2
  182. package/scripts/tests/test_automatic_advisory.py +376 -0
  183. package/scripts/tests/test_automatic_advisory_job_cleanup.py +71 -0
  184. package/scripts/tests/test_automatic_advisory_polling.py +216 -0
  185. package/scripts/tests/test_automatic_advisory_recovery.py +320 -0
  186. package/scripts/tests/test_automatic_advisory_repairs.py +400 -0
  187. package/scripts/tests/test_automatic_advisory_settings.py +48 -0
  188. package/scripts/tests/test_automatic_advisory_window_flags.py +163 -0
  189. package/scripts/tests/test_closed_pr_label.py +157 -0
  190. package/scripts/tests/test_codex_compat_materializer.py +189 -6
  191. package/scripts/tests/test_github_labels.py +101 -0
  192. package/scripts/tests/test_github_transport.py +125 -0
  193. package/scripts/tests/test_local_report_publisher.py +396 -0
  194. package/scripts/tests/test_local_report_publisher_cli.py +85 -0
  195. package/scripts/tests/test_local_verification.py +348 -0
  196. package/scripts/tests/test_local_verification_cli.py +98 -0
  197. package/scripts/tests/test_policy_lint_rules_archive.py +120 -0
  198. package/scripts/tests/test_policy_lint_rules_engine.py +25 -4
  199. package/scripts/tests/test_policy_lint_rules_installed_loader.py +29 -0
  200. package/scripts/tests/test_policy_lint_rules_pairing.py +163 -0
  201. package/scripts/tests/test_policy_lint_rules_registry.py +227 -13
  202. package/scripts/tests/test_policy_lint_selection.py +25 -2
  203. package/scripts/tests/test_policy_lint_selection_native_index.py +30 -0
  204. package/scripts/tests/test_pr_verification_github.py +392 -0
  205. package/scripts/tests/test_pr_verification_lock.py +168 -0
  206. package/scripts/tests/test_rules.py +3 -7
  207. package/scripts/tests/test_verification_notice.py +347 -0
  208. package/.agents/skills/_shared/pr-loop/.claude/CLAUDE.md +0 -1
  209. package/.agents/skills/_shared/pr-loop/audit-contract.md +0 -5
  210. package/.agents/skills/_shared/pr-loop/audit-reply-template.md +0 -5
  211. package/.agents/skills/_shared/pr-loop/code-rules-gate.md +0 -5
  212. package/.agents/skills/_shared/pr-loop/fix-protocol.md +0 -5
  213. package/.agents/skills/_shared/pr-loop/gh-payloads.md +0 -5
  214. package/.agents/skills/_shared/pr-loop/portable-driver.md +0 -149
  215. package/.agents/skills/_shared/pr-loop/post-audit-thread-contract.md +0 -5
  216. package/.agents/skills/_shared/pr-loop/precatch-rubric.md +0 -5
  217. package/.agents/skills/_shared/pr-loop/preflight-proposal.contract.test.mjs +0 -119
  218. package/.agents/skills/_shared/pr-loop/preflight-proposal.md +0 -5
  219. package/.agents/skills/_shared/pr-loop/prompts/.claude/CLAUDE.md +0 -1
  220. package/.agents/skills/_shared/pr-loop/prompts/AGENTS.md +0 -1
  221. package/.agents/skills/_shared/pr-loop/prompts/pr-consistency-audit.xml +0 -324
  222. package/.agents/skills/_shared/pr-loop/scripts/.claude/CLAUDE.md +0 -1
  223. package/.agents/skills/_shared/pr-loop/scripts/AGENTS.md +0 -1
  224. package/.agents/skills/_shared/pr-loop/scripts/RUNTIME_SCRIPTS.md +0 -29
  225. package/.agents/skills/_shared/pr-loop/scripts/_cli_utils.py +0 -22
  226. package/.agents/skills/_shared/pr-loop/scripts/_path_resolver.py +0 -186
  227. package/.agents/skills/_shared/pr-loop/scripts/_xml_utils.py +0 -20
  228. package/.agents/skills/_shared/pr-loop/scripts/audit_category_schema.py +0 -355
  229. package/.agents/skills/_shared/pr-loop/scripts/build_audit_prompt.py +0 -289
  230. package/.agents/skills/_shared/pr-loop/scripts/build_converge_task_list.py +0 -310
  231. package/.agents/skills/_shared/pr-loop/scripts/build_fix_prompt.py +0 -292
  232. package/.agents/skills/_shared/pr-loop/scripts/init_loop_state.py +0 -134
  233. package/.agents/skills/_shared/pr-loop/scripts/portable_converge_driver.py +0 -1646
  234. package/.agents/skills/_shared/pr-loop/scripts/preflight_worktree.py +0 -392
  235. package/.agents/skills/_shared/pr-loop/scripts/select_converge_pacer.py +0 -215
  236. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/.claude/CLAUDE.md +0 -1
  237. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/AGENTS.md +0 -1
  238. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/__init__.py +0 -0
  239. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/audit_category_schema_constants.py +0 -37
  240. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/converge_task_list_constants.py +0 -56
  241. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/handoff_constants.py +0 -45
  242. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/pacer_constants.py +0 -47
  243. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/path_resolver_constants.py +0 -157
  244. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/portable_driver_constants.py +0 -177
  245. package/.agents/skills/_shared/pr-loop/scripts/skills_pr_loop_constants/preflight_constants.py +0 -70
  246. package/.agents/skills/_shared/pr-loop/scripts/teardown_worktrees.py +0 -172
  247. package/.agents/skills/_shared/pr-loop/scripts/test__path_resolver.py +0 -106
  248. package/.agents/skills/_shared/pr-loop/scripts/test_audit_category_schema.py +0 -94
  249. package/.agents/skills/_shared/pr-loop/scripts/test_build_audit_prompt.py +0 -499
  250. package/.agents/skills/_shared/pr-loop/scripts/test_build_converge_task_list.py +0 -140
  251. package/.agents/skills/_shared/pr-loop/scripts/test_build_fix_prompt.py +0 -262
  252. package/.agents/skills/_shared/pr-loop/scripts/test_init_loop_state.py +0 -71
  253. package/.agents/skills/_shared/pr-loop/scripts/test_portable_converge_driver.py +0 -1119
  254. package/.agents/skills/_shared/pr-loop/scripts/test_preflight_worktree.py +0 -287
  255. package/.agents/skills/_shared/pr-loop/scripts/test_select_converge_pacer.py +0 -207
  256. package/.agents/skills/_shared/pr-loop/scripts/test_teardown_worktrees.py +0 -59
  257. package/.agents/skills/_shared/pr-loop/scripts/test_write_handoff.py +0 -201
  258. package/.agents/skills/_shared/pr-loop/scripts/write_audit_outcomes.py +0 -182
  259. package/.agents/skills/_shared/pr-loop/scripts/write_fix_outcomes.py +0 -206
  260. package/.agents/skills/_shared/pr-loop/scripts/write_handoff.py +0 -309
  261. package/.agents/skills/_shared/pr-loop/state-schema.md +0 -5
  262. package/.agents/skills/_shared/pr-loop/worker-spawn.md +0 -5
  263. package/.agents/skills/autoconverge/.claude/CLAUDE.md +0 -1
  264. package/.agents/skills/autoconverge/AGENTS.md +0 -1
  265. package/.agents/skills/autoconverge/SKILL.md +0 -431
  266. package/.agents/skills/autoconverge/reference/.claude/CLAUDE.md +0 -1
  267. package/.agents/skills/autoconverge/reference/AGENTS.md +0 -1
  268. package/.agents/skills/autoconverge/reference/closing-report.md +0 -93
  269. package/.agents/skills/autoconverge/reference/convergence-gates.md +0 -31
  270. package/.agents/skills/autoconverge/reference/convergence.md +0 -219
  271. package/.agents/skills/autoconverge/reference/copilot-findings.md +0 -51
  272. package/.agents/skills/autoconverge/reference/gotchas.md +0 -66
  273. package/.agents/skills/autoconverge/reference/headless-safety.md +0 -44
  274. package/.agents/skills/autoconverge/reference/multi-pr.md +0 -128
  275. package/.agents/skills/autoconverge/reference/self-closing-loop.md +0 -84
  276. package/.agents/skills/autoconverge/reference/stop-conditions.md +0 -127
  277. package/.agents/skills/autoconverge/test_portable_pacer_gate.py +0 -54
  278. package/.agents/skills/autoconverge/workflow/.claude/CLAUDE.md +0 -1
  279. package/.agents/skills/autoconverge/workflow/AGENTS.md +0 -1
  280. package/.agents/skills/autoconverge/workflow/aggregate_runs.py +0 -371
  281. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/.claude/CLAUDE.md +0 -1
  282. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/AGENTS.md +0 -1
  283. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/__init__.py +0 -0
  284. package/.agents/skills/autoconverge/workflow/autoconverge_report_constants/render_report_constants.py +0 -250
  285. package/.agents/skills/autoconverge/workflow/converge.clean-audit.test.mjs +0 -665
  286. package/.agents/skills/autoconverge/workflow/converge.codex-gate.test.mjs +0 -472
  287. package/.agents/skills/autoconverge/workflow/converge.contract.test.mjs +0 -64
  288. package/.agents/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +0 -1009
  289. package/.agents/skills/autoconverge/workflow/converge.fix-progress.test.mjs +0 -107
  290. package/.agents/skills/autoconverge/workflow/converge.fix-recovery.test.mjs +0 -33
  291. package/.agents/skills/autoconverge/workflow/converge.merge-conflict.test.mjs +0 -15
  292. package/.agents/skills/autoconverge/workflow/converge.mjs +0 -3132
  293. package/.agents/skills/autoconverge/workflow/converge.p2-advance.test.mjs +0 -202
  294. package/.agents/skills/autoconverge/workflow/converge.path-aware.test.mjs +0 -47
  295. package/.agents/skills/autoconverge/workflow/converge.precatch.test.mjs +0 -152
  296. package/.agents/skills/autoconverge/workflow/converge.run-input.test.mjs +0 -116
  297. package/.agents/skills/autoconverge/workflow/converge_multi.mjs +0 -169
  298. package/.agents/skills/autoconverge/workflow/converge_multi.run-input.test.mjs +0 -173
  299. package/.agents/skills/autoconverge/workflow/convergence_summary.py +0 -110
  300. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a11d903476b803493.jsonl +0 -2
  301. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a26213978adeef6fb.jsonl +0 -2
  302. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a3def0d15ed9d9110.jsonl +0 -2
  303. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a41f41b1b708ee3b7.jsonl +0 -2
  304. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a758b880abecc3ff7.jsonl +0 -2
  305. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-a8897b89656b1bd16.jsonl +0 -2
  306. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ab1c2d3e4f5a6b7c8.jsonl +0 -2
  307. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-abd463d744a1437bc.jsonl +0 -2
  308. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/subagents/workflows/wf_881252e6-700/agent-ad19d027ae8ee1816.jsonl +0 -2
  309. package/.agents/skills/autoconverge/workflow/fixtures/wf_run/workflows/wf_881252e6-700.json +0 -266
  310. package/.agents/skills/autoconverge/workflow/render_report.py +0 -1024
  311. package/.agents/skills/autoconverge/workflow/test_aggregate_runs.py +0 -134
  312. package/.agents/skills/autoconverge/workflow/test_convergence_summary.py +0 -149
  313. package/.agents/skills/autoconverge/workflow/test_render_report.py +0 -812
  314. package/.agents/skills/hitl/SKILL.md +0 -45
  315. package/.agents/skills/pr-cleanup/SKILL.md +0 -140
  316. package/.agents/skills/pr-cleanup/reference/process-inventory.md +0 -17
  317. package/.agents/skills/pr-cleanup/reference/task-seeds.md +0 -22
  318. package/.agents/skills/pr-name-by-capability/SKILL.md +0 -73
  319. package/.agents/skills/pr-name-by-capability/reference/fetch-commands.md +0 -29
  320. package/.agents/skills/pr-name-by-capability/reference/offense-examples.md +0 -32
  321. package/.agents/skills/pr-name-by-capability/reference/report-template.md +0 -29
  322. package/.agents/skills/pr-name-by-capability/reference/rule-checklist.md +0 -38
  323. package/.agents/skills/pr-name-by-capability/reference/task-seeds.md +0 -10
  324. package/.agents/skills/pr-plain-language-cleanup/SKILL.md +0 -93
  325. package/.agents/skills/pr-refinement/SKILL.md +0 -31
  326. package/.agents/skills/pr-shared-extraction/SKILL.md +0 -177
  327. package/.agents/skills/pr-shared-extraction/reference/examples.md +0 -46
  328. package/.agents/skills/pr-shared-extraction/reference/offense-taxonomy.md +0 -100
  329. package/.agents/skills/pr-small-cl/SKILL.md +0 -52
  330. package/.agents/skills/pr-title-description/SKILL.md +0 -96
  331. package/.agents/skills/prototype/SKILL.md +0 -85
  332. package/.agents/skills/prototype/reference/honest-limitations.md +0 -23
  333. package/.agents/skills/prototype/reference/promotion-tasks.md +0 -23
  334. package/.agents/skills/prototype/scripts/build_sandbox_settings.py +0 -249
  335. package/.agents/skills/prototype/scripts/conftest.py +0 -15
  336. package/.agents/skills/prototype/scripts/launch_sandbox.py +0 -205
  337. package/.agents/skills/prototype/scripts/probe_sandbox_safety.py +0 -311
  338. package/.agents/skills/prototype/scripts/prototype_scripts_constants/__init__.py +0 -1
  339. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/__init__.py +0 -0
  340. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/build_sandbox_settings_constants.py +0 -41
  341. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/launch_sandbox_constants.py +0 -23
  342. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/probe_sandbox_safety_constants.py +0 -45
  343. package/.agents/skills/prototype/scripts/prototype_scripts_constants/config/prototype_common_constants.py +0 -10
  344. package/.agents/skills/prototype/scripts/test_build_sandbox_settings.py +0 -275
  345. package/.agents/skills/prototype/scripts/test_launch_sandbox.py +0 -303
  346. package/.agents/skills/prototype/scripts/test_probe_sandbox_safety.py +0 -312
  347. package/.agents/skills/prototype/workflows/promotion.md +0 -25
  348. package/.agents/skills/prototype/workflows/sandbox.md +0 -35
  349. package/.agents/skills/rebase/.claude/CLAUDE.md +0 -1
  350. package/.agents/skills/rebase/AGENTS.md +0 -1
  351. package/.agents/skills/rebase/SKILL.md +0 -178
  352. package/.agents/skills/review-router/SKILL.md +0 -51
  353. package/.agents/skills/review-router/reference/route-policy.json +0 -7
  354. package/.agents/skills/review-router/reference/task-seeds.md +0 -1
  355. package/.agents/skills/review-router/scripts/conftest.py +0 -4
  356. package/.agents/skills/review-router/scripts/review_router.py +0 -50
  357. package/.agents/skills/review-router/scripts/review_router_cli.py +0 -211
  358. package/.agents/skills/review-router/scripts/review_router_constants/__init__.py +0 -1
  359. package/.agents/skills/review-router/scripts/review_router_constants/config/__init__.py +0 -0
  360. package/.agents/skills/review-router/scripts/review_router_constants/config/constants.py +0 -13
  361. package/.agents/skills/review-router/scripts/test_review_router.py +0 -23
  362. package/.agents/skills/review-router/scripts/test_review_router_cli.py +0 -47
  363. package/.agents/skills/review-tier/SKILL.md +0 -56
  364. package/.agents/skills/review-tier/reference/task-seeds.md +0 -1
  365. package/.agents/skills/review-tier/reference/tier-policy.json +0 -9
  366. package/.agents/skills/review-tier/scripts/conftest.py +0 -4
  367. package/.agents/skills/review-tier/scripts/review_tier.py +0 -359
  368. package/.agents/skills/review-tier/scripts/review_tier_constants/__init__.py +0 -1
  369. package/.agents/skills/review-tier/scripts/review_tier_constants/config/__init__.py +0 -0
  370. package/.agents/skills/review-tier/scripts/review_tier_constants/config/constants.py +0 -29
  371. package/.agents/skills/review-tier/scripts/test_generation.py +0 -159
  372. package/.agents/skills/review-tier/scripts/test_review_tier.py +0 -33
  373. package/.agents/skills/run-claude-dev-env/SKILL.md +0 -84
  374. package/.agents/skills/session-log/.claude/CLAUDE.md +0 -1
  375. package/.agents/skills/session-log/AGENTS.md +0 -1
  376. package/.agents/skills/session-log/SKILL.md +0 -170
  377. package/.agents/skills/session-log/templates/frontmatter.md +0 -40
  378. package/.agents/skills/session-tidy/.claude/CLAUDE.md +0 -1
  379. package/.agents/skills/session-tidy/AGENTS.md +0 -1
  380. package/.agents/skills/session-tidy/SKILL.md +0 -191
  381. package/.agents/skills/skill-builder/references/.claude/CLAUDE.md +0 -1
  382. package/.agents/skills/skill-builder/references/AGENTS.md +0 -1
  383. package/.agents/skills/skill-builder/references/delegation-map.md +0 -130
  384. package/.agents/skills/skill-builder/references/description-field.md +0 -111
  385. package/.agents/skills/skill-builder/references/deterministic-elements.md +0 -218
  386. package/.agents/skills/skill-builder/references/progressive-disclosure.md +0 -122
  387. package/.agents/skills/skill-builder/references/self-audit-checklist.md +0 -126
  388. package/.agents/skills/skill-builder/references/skill-modularity.md +0 -111
  389. package/.agents/skills/skill-builder/references/skill-types.md +0 -232
  390. package/.agents/skills/skill-builder/references/thariq-x-post-skills.json +0 -33
  391. package/.agents/skills/skill-builder/templates/.claude/CLAUDE.md +0 -1
  392. package/.agents/skills/skill-builder/templates/AGENTS.md +0 -1
  393. package/.agents/skills/skill-builder/templates/gap-analysis.md +0 -87
  394. package/.agents/skills/skill-builder/workflows/.claude/CLAUDE.md +0 -1
  395. package/.agents/skills/skill-builder/workflows/AGENTS.md +0 -1
  396. package/.agents/skills/skill-builder/workflows/improve-skill.md +0 -136
  397. package/.agents/skills/skill-builder/workflows/new-skill.md +0 -179
  398. package/.agents/skills/skill-builder/workflows/polish-skill.md +0 -139
  399. package/.agents/skills/source-command-sr-loop/SKILL.md +0 -82
  400. package/.agents/skills/update/.claude/CLAUDE.md +0 -1
  401. package/.agents/skills/update/AGENTS.md +0 -1
  402. package/.agents/skills/update/SKILL.md +0 -190
  403. package/_shared/pr-loop/AGENTS.md +0 -1
  404. package/_shared/pr-loop/audit-contract.md +0 -183
  405. package/_shared/pr-loop/audit-reply-template.md +0 -151
  406. package/_shared/pr-loop/code-rules-gate.md +0 -65
  407. package/_shared/pr-loop/fix-protocol.md +0 -60
  408. package/_shared/pr-loop/gh-payloads.md +0 -75
  409. package/_shared/pr-loop/post-audit-thread-contract.md +0 -51
  410. package/_shared/pr-loop/precatch-rubric.md +0 -66
  411. package/_shared/pr-loop/preflight-proposal.md +0 -56
  412. package/_shared/pr-loop/scripts/post_audit_thread.py +0 -1242
  413. package/_shared/pr-loop/scripts/pr_loop_shared_constants/post_audit_thread_constants.py +0 -199
  414. package/_shared/pr-loop/scripts/tests/test_post_audit_thread.py +0 -1115
  415. package/_shared/pr-loop/scripts/tests/test_post_audit_thread_constants.py +0 -129
  416. package/_shared/pr-loop/state-schema.md +0 -45
  417. package/_shared/pr-loop/worker-spawn.md +0 -189
  418. package/hooks/blocking/ask_user_question_shape_blocker.py +0 -83
  419. package/hooks/blocking/bot_mention_comment_blocker.py +0 -76
  420. package/hooks/blocking/claude_md_orphan_file_blocker.py +0 -129
  421. package/hooks/blocking/cursor_cli_python_misfire_blocker.py +0 -108
  422. package/hooks/blocking/destructive_command_blocker.py +0 -2073
  423. package/hooks/blocking/fable_spawn_gate.py +0 -187
  424. package/hooks/blocking/luna_fast_mode_gate.py +0 -160
  425. package/hooks/blocking/nas_ssh_binary_enforcer.py +0 -163
  426. package/hooks/blocking/orchestrator_refresh_reschedule_gate.py +0 -260
  427. package/hooks/blocking/package_inventory_stale_blocker.py +0 -107
  428. package/hooks/blocking/pii_prevention_blocker.py +0 -365
  429. package/hooks/blocking/piped_pytest_blocker.py +0 -1223
  430. package/hooks/blocking/question_to_user_enforcer.py +0 -130
  431. package/hooks/blocking/send_user_file_open_locally_blocker.py +0 -71
  432. package/hooks/blocking/sensitive_file_protector.py +0 -167
  433. package/hooks/blocking/session_edit_stage_gate.py +0 -684
  434. package/hooks/blocking/session_handoff_blocker.py +0 -182
  435. package/hooks/blocking/shell_substitution_blocker.py +0 -350
  436. package/hooks/blocking/test_ask_user_question_shape.py +0 -69
  437. package/hooks/blocking/test_bot_mention_comment_blocker.py +0 -131
  438. package/hooks/blocking/test_claude_md_orphan_file_blocker.py +0 -1277
  439. package/hooks/blocking/test_cursor_cli_python_misfire_blocker.py +0 -208
  440. package/hooks/blocking/test_destructive_command_blocker.py +0 -2024
  441. package/hooks/blocking/test_destructive_command_blocker_deny_mode.py +0 -105
  442. package/hooks/blocking/test_destructive_command_blocker_no_verify.py +0 -122
  443. package/hooks/blocking/test_destructive_command_blocker_patterns.py +0 -133
  444. package/hooks/blocking/test_fable_spawn_gate.py +0 -381
  445. package/hooks/blocking/test_inventory_deadlock_resolution.py +0 -154
  446. package/hooks/blocking/test_luna_fast_mode_gate.py +0 -211
  447. package/hooks/blocking/test_nas_ssh_binary_enforcer.py +0 -225
  448. package/hooks/blocking/test_orchestrator_refresh_reschedule_gate.py +0 -231
  449. package/hooks/blocking/test_package_inventory_stale_blocker.py +0 -382
  450. package/hooks/blocking/test_pii_prevention_blocker.py +0 -1222
  451. package/hooks/blocking/test_pii_prevention_windows_git_path.py +0 -41
  452. package/hooks/blocking/test_pii_write_surface_ephemeral.py +0 -221
  453. package/hooks/blocking/test_piped_pytest_blocker.py +0 -587
  454. package/hooks/blocking/test_precommit_code_rules_gate_native_owner.py +0 -233
  455. package/hooks/blocking/test_question_to_user_enforcer.py +0 -169
  456. package/hooks/blocking/test_send_user_file_open_locally_blocker.py +0 -118
  457. package/hooks/blocking/test_sensitive_file_protector.py +0 -365
  458. package/hooks/blocking/test_session_edit_stage_gate.py +0 -537
  459. package/hooks/blocking/test_session_edit_stage_gate_staging.py +0 -64
  460. package/hooks/blocking/test_session_edit_stage_gate_support.py +0 -204
  461. package/hooks/blocking/test_session_edit_stage_gate_tracker.py +0 -116
  462. package/hooks/blocking/test_session_handoff_blocker.py +0 -318
  463. package/hooks/blocking/test_shell_substitution_blocker.py +0 -298
  464. package/hooks/blocking/test_unscoped_search_blocker.py +0 -102
  465. package/hooks/blocking/test_write_existing_file_blocker.py +0 -122
  466. package/hooks/blocking/tests/test_pii_prevention_blocker.py +0 -259
  467. package/hooks/blocking/unscoped_search_blocker.py +0 -391
  468. package/hooks/blocking/write_existing_file_blocker.py +0 -124
  469. package/hooks/hooks_constants/bot_mention_comment_blocker_constants.py +0 -19
  470. package/hooks/hooks_constants/cursor_cli_python_misfire_blocker_constants.py +0 -79
  471. package/hooks/hooks_constants/fable_spawn_gate_constants.py +0 -61
  472. package/hooks/hooks_constants/luna_fast_mode_gate_constants.py +0 -45
  473. package/hooks/hooks_constants/nas_ssh_binary_enforcer_constants.py +0 -20
  474. package/hooks/hooks_constants/orchestrator_refresh_reschedule_gate_constants.py +0 -57
  475. package/hooks/hooks_constants/send_user_file_open_locally_blocker_constants.py +0 -17
  476. package/hooks/hooks_constants/sensitive_file_protector_constants.py +0 -40
  477. package/hooks/hooks_constants/session_handoff_blocker_constants.py +0 -10
  478. package/hooks/hooks_constants/shell_substitution_blocker_constants.py +0 -80
  479. /package/.agents/skills/{_shared/pr-loop → session-continuity}/AGENTS.md +0 -0
  480. /package/{_shared/pr-loop → .agents/skills/session-continuity}/CLAUDE.md +0 -0
@@ -1,310 +0,0 @@
1
- #!/usr/bin/env python3
2
- """``build_converge_task_list.py`` — ordered review tasks for a run.
3
-
4
- Step 1 of autoconverge / portable pr-converge: call this script. Do not invent
5
- tasks in prose. The final task is always all runnable code reviews CLEAN on
6
- the same HEAD.
7
-
8
- ::
9
-
10
- python build_converge_task_list.py \\
11
- [--bugbot-down 0|1] [--copilot-down 0|1] \\
12
- [--codex-down 0|1] [--codex-required 0|1]
13
-
14
- Stdout JSON::
15
-
16
- {
17
- "tasks": [...],
18
- "runnable_review_ids": [...],
19
- "skipped_review_ids": [...],
20
- "final_task_id": "all_runnable_reviews_clean_same_head",
21
- "done_when": "..."
22
- }
23
- """
24
-
25
- from __future__ import annotations
26
-
27
- import argparse
28
- import json
29
- import sys
30
- from pathlib import Path
31
-
32
- _self_dir = Path(__file__).resolve().parent
33
- if str(_self_dir) not in sys.path:
34
- sys.path.insert(0, str(_self_dir))
35
-
36
- from select_converge_pacer import parse_bool_flag # noqa: E402
37
- from skills_pr_loop_constants.converge_task_list_constants import ( # noqa: E402
38
- CLI_BUGBOT_DOWN_FLAG,
39
- CLI_CODEX_DOWN_FLAG,
40
- CLI_CODEX_REQUIRED_FLAG,
41
- CLI_COPILOT_DOWN_FLAG,
42
- DONE_WHEN_TEXT,
43
- EXIT_SUCCESS,
44
- EXIT_USAGE_ERROR,
45
- RESULT_KEY_DONE_WHEN,
46
- RESULT_KEY_FINAL_TASK_ID,
47
- RESULT_KEY_RUNNABLE_REVIEW_IDS,
48
- RESULT_KEY_SKIPPED_REVIEW_IDS,
49
- RESULT_KEY_TASKS,
50
- SKIP_REASON_BUGBOT_DOWN,
51
- SKIP_REASON_CODEX_DOWN,
52
- SKIP_REASON_CODEX_NOT_REQUIRED,
53
- SKIP_REASON_COPILOT_DOWN,
54
- TASK_FIELD_ID,
55
- TASK_FIELD_IS_RUNNABLE,
56
- TASK_FIELD_KIND,
57
- TASK_FIELD_SKIP_REASON,
58
- TASK_FIELD_TITLE,
59
- TASK_ID_ALL_CLEAN_SAME_HEAD,
60
- TASK_ID_BUGBOT,
61
- TASK_ID_BUGTEAM,
62
- TASK_ID_CODE_REVIEW,
63
- TASK_ID_CODEX,
64
- TASK_ID_COPILOT,
65
- TASK_KIND_FINAL,
66
- TASK_KIND_REVIEW,
67
- TASK_TITLE_ALL_CLEAN_SAME_HEAD,
68
- TASK_TITLE_BUGBOT,
69
- TASK_TITLE_BUGTEAM,
70
- TASK_TITLE_CODE_REVIEW,
71
- TASK_TITLE_CODEX,
72
- TASK_TITLE_COPILOT,
73
- )
74
-
75
-
76
- def _review_task(
77
- *,
78
- task_id: str,
79
- title: str,
80
- is_runnable: bool,
81
- skip_reason: str | None,
82
- ) -> dict[str, object]:
83
- task: dict[str, object] = {
84
- TASK_FIELD_ID: task_id,
85
- TASK_FIELD_TITLE: title,
86
- TASK_FIELD_KIND: TASK_KIND_REVIEW,
87
- TASK_FIELD_IS_RUNNABLE: is_runnable,
88
- }
89
- if skip_reason is not None:
90
- task[TASK_FIELD_SKIP_REASON] = skip_reason
91
- return task
92
-
93
-
94
- def _append_always_runnable_reviews(
95
- all_tasks: list[dict[str, object]],
96
- ) -> None:
97
- all_tasks.append(
98
- _review_task(
99
- task_id=TASK_ID_CODE_REVIEW,
100
- title=TASK_TITLE_CODE_REVIEW,
101
- is_runnable=True,
102
- skip_reason=None,
103
- )
104
- )
105
- all_tasks.append(
106
- _review_task(
107
- task_id=TASK_ID_BUGTEAM,
108
- title=TASK_TITLE_BUGTEAM,
109
- is_runnable=True,
110
- skip_reason=None,
111
- )
112
- )
113
-
114
-
115
- def _append_bugbot_task(
116
- all_tasks: list[dict[str, object]],
117
- *,
118
- is_bugbot_down: bool,
119
- ) -> None:
120
- if is_bugbot_down:
121
- all_tasks.append(
122
- _review_task(
123
- task_id=TASK_ID_BUGBOT,
124
- title=TASK_TITLE_BUGBOT,
125
- is_runnable=False,
126
- skip_reason=SKIP_REASON_BUGBOT_DOWN,
127
- )
128
- )
129
- return
130
- all_tasks.append(
131
- _review_task(
132
- task_id=TASK_ID_BUGBOT,
133
- title=TASK_TITLE_BUGBOT,
134
- is_runnable=True,
135
- skip_reason=None,
136
- )
137
- )
138
-
139
-
140
- def _append_copilot_task(
141
- all_tasks: list[dict[str, object]],
142
- *,
143
- is_copilot_down: bool,
144
- ) -> None:
145
- if is_copilot_down:
146
- all_tasks.append(
147
- _review_task(
148
- task_id=TASK_ID_COPILOT,
149
- title=TASK_TITLE_COPILOT,
150
- is_runnable=False,
151
- skip_reason=SKIP_REASON_COPILOT_DOWN,
152
- )
153
- )
154
- return
155
- all_tasks.append(
156
- _review_task(
157
- task_id=TASK_ID_COPILOT,
158
- title=TASK_TITLE_COPILOT,
159
- is_runnable=True,
160
- skip_reason=None,
161
- )
162
- )
163
-
164
-
165
- def _append_codex_task(
166
- all_tasks: list[dict[str, object]],
167
- *,
168
- is_codex_down: bool,
169
- is_codex_required: bool,
170
- ) -> None:
171
- if is_codex_down:
172
- all_tasks.append(
173
- _review_task(
174
- task_id=TASK_ID_CODEX,
175
- title=TASK_TITLE_CODEX,
176
- is_runnable=False,
177
- skip_reason=SKIP_REASON_CODEX_DOWN,
178
- )
179
- )
180
- return
181
- if not is_codex_required:
182
- all_tasks.append(
183
- _review_task(
184
- task_id=TASK_ID_CODEX,
185
- title=TASK_TITLE_CODEX,
186
- is_runnable=False,
187
- skip_reason=SKIP_REASON_CODEX_NOT_REQUIRED,
188
- )
189
- )
190
- return
191
- all_tasks.append(
192
- _review_task(
193
- task_id=TASK_ID_CODEX,
194
- title=TASK_TITLE_CODEX,
195
- is_runnable=True,
196
- skip_reason=None,
197
- )
198
- )
199
-
200
-
201
- def _append_final_task(all_tasks: list[dict[str, object]]) -> None:
202
- all_tasks.append(
203
- {
204
- TASK_FIELD_ID: TASK_ID_ALL_CLEAN_SAME_HEAD,
205
- TASK_FIELD_TITLE: TASK_TITLE_ALL_CLEAN_SAME_HEAD,
206
- TASK_FIELD_KIND: TASK_KIND_FINAL,
207
- TASK_FIELD_IS_RUNNABLE: True,
208
- }
209
- )
210
-
211
-
212
- def _partition_review_ids(
213
- all_tasks: list[dict[str, object]],
214
- ) -> tuple[list[str], list[str]]:
215
- all_runnable_review_ids = [
216
- str(each_task[TASK_FIELD_ID])
217
- for each_task in all_tasks
218
- if each_task[TASK_FIELD_KIND] == TASK_KIND_REVIEW
219
- and each_task[TASK_FIELD_IS_RUNNABLE] is True
220
- ]
221
- all_skipped_review_ids = [
222
- str(each_task[TASK_FIELD_ID])
223
- for each_task in all_tasks
224
- if each_task[TASK_FIELD_KIND] == TASK_KIND_REVIEW
225
- and each_task[TASK_FIELD_IS_RUNNABLE] is False
226
- ]
227
- return all_runnable_review_ids, all_skipped_review_ids
228
-
229
-
230
- def build_converge_task_list(
231
- *,
232
- is_bugbot_down: bool,
233
- is_copilot_down: bool,
234
- is_codex_down: bool,
235
- is_codex_required: bool,
236
- ) -> dict[str, object]:
237
- """Return the ordered task list and done criterion for one converge run.
238
-
239
- Args:
240
- is_bugbot_down: Skip Bugbot as a runnable review.
241
- is_copilot_down: Skip Copilot as a runnable review.
242
- is_codex_down: Skip Codex even when usage would require it.
243
- is_codex_required: Weekly usage / policy requires a Codex review.
244
-
245
- Returns:
246
- JSON-serializable control object with ``tasks`` and ``done_when``.
247
- """
248
- all_tasks: list[dict[str, object]] = []
249
- _append_always_runnable_reviews(all_tasks)
250
- _append_bugbot_task(all_tasks, is_bugbot_down=is_bugbot_down)
251
- _append_copilot_task(all_tasks, is_copilot_down=is_copilot_down)
252
- _append_codex_task(
253
- all_tasks,
254
- is_codex_down=is_codex_down,
255
- is_codex_required=is_codex_required,
256
- )
257
- _append_final_task(all_tasks)
258
- all_runnable_review_ids, all_skipped_review_ids = _partition_review_ids(
259
- all_tasks
260
- )
261
- return {
262
- RESULT_KEY_TASKS: all_tasks,
263
- RESULT_KEY_RUNNABLE_REVIEW_IDS: all_runnable_review_ids,
264
- RESULT_KEY_SKIPPED_REVIEW_IDS: all_skipped_review_ids,
265
- RESULT_KEY_FINAL_TASK_ID: TASK_ID_ALL_CLEAN_SAME_HEAD,
266
- RESULT_KEY_DONE_WHEN: DONE_WHEN_TEXT,
267
- }
268
-
269
-
270
- def build_argument_parser() -> argparse.ArgumentParser:
271
- """Build the CLI parser for ``build_converge_task_list``.
272
-
273
- Returns:
274
- Configured argument parser.
275
- """
276
- parser = argparse.ArgumentParser(description="build_converge_task_list")
277
- parser.add_argument(CLI_BUGBOT_DOWN_FLAG, default="0")
278
- parser.add_argument(CLI_COPILOT_DOWN_FLAG, default="0")
279
- parser.add_argument(CLI_CODEX_DOWN_FLAG, default="0")
280
- parser.add_argument(CLI_CODEX_REQUIRED_FLAG, default="0")
281
- return parser
282
-
283
-
284
- def main(all_argv: list[str]) -> int:
285
- """CLI entry: print one task-list JSON object on stdout.
286
-
287
- Args:
288
- all_argv: Argument vector without program name.
289
-
290
- Returns:
291
- Process exit code.
292
- """
293
- parser = build_argument_parser()
294
- parsed_arguments = parser.parse_args(all_argv)
295
- try:
296
- task_list_payload = build_converge_task_list(
297
- is_bugbot_down=parse_bool_flag(parsed_arguments.bugbot_down),
298
- is_copilot_down=parse_bool_flag(parsed_arguments.copilot_down),
299
- is_codex_down=parse_bool_flag(parsed_arguments.codex_down),
300
- is_codex_required=parse_bool_flag(parsed_arguments.codex_required),
301
- )
302
- except ValueError as validation_error:
303
- print(str(validation_error), file=sys.stderr)
304
- return EXIT_USAGE_ERROR
305
- print(json.dumps(task_list_payload, sort_keys=True))
306
- return EXIT_SUCCESS
307
-
308
-
309
- if __name__ == "__main__":
310
- raise SystemExit(main(sys.argv[1:]))
@@ -1,292 +0,0 @@
1
- """Emit the complete FIX spawn prompt XML to stdout.
2
-
3
- Populates <bug> entries from findings JSON, plus <execution> checklist
4
- and <constraints>. <comment_posting> and <output_format> follow
5
- ``--flavor`` (agent or headless).
6
-
7
- Usage:
8
- python scripts/build_fix_prompt.py --owner jl-cmd --repo claude-dev-env --pr-number 422 --loop 1 --head-ref feat/branch --base-ref main --worktree-path <PATH> --findings-json <PATH> [--flavor agent|headless]
9
- """
10
-
11
- from __future__ import annotations
12
-
13
- import argparse
14
- import json
15
- import sys
16
- from xml.etree.ElementTree import Element, SubElement
17
- from pathlib import Path
18
-
19
- _self_dir = Path(__file__).resolve().parent
20
- if str(_self_dir) not in sys.path:
21
- sys.path.insert(0, str(_self_dir))
22
-
23
- from _cli_utils import require_file
24
- from _path_resolver import fix_outcome_xml_path
25
- from _xml_utils import emit_pretty_xml
26
- from skills_pr_loop_constants.path_resolver_constants import (
27
- ALL_FIX_CONSTRAINT_TEXTS,
28
- ALL_FIX_CONSTRAINT_TEXTS_HEADLESS,
29
- ALL_FIX_EXECUTION_STEPS,
30
- ALL_FIX_EXECUTION_STEPS_HEADLESS,
31
- ALL_FIX_PROMPT_FLAVORS,
32
- FINDINGS_JSON_MUST_BE_LIST_MESSAGE,
33
- FIX_COMMENT_POSTING_AGENT_TEXT,
34
- FIX_COMMENT_POSTING_HEADLESS_TEXT,
35
- FIX_OUTPUT_FORMAT_AGENT_TEXT,
36
- FIX_OUTPUT_FORMAT_HEADLESS_TEMPLATE,
37
- FIX_PROMPT_FLAVOR_AGENT,
38
- FIX_PROMPT_FLAVOR_HEADLESS,
39
- )
40
-
41
-
42
- def _comment_posting_text(flavor: str) -> str:
43
- """Return the <comment_posting> body for the given prompt flavor.
44
-
45
- Args:
46
- flavor: ``agent`` or ``headless`` prompt flavor.
47
-
48
- Returns:
49
- Comment-posting instruction text for that flavor.
50
- """
51
- if flavor == FIX_PROMPT_FLAVOR_HEADLESS:
52
- return FIX_COMMENT_POSTING_HEADLESS_TEXT
53
- return FIX_COMMENT_POSTING_AGENT_TEXT
54
-
55
-
56
- def _format_instruction_text(
57
- *,
58
- flavor: str,
59
- worktree_path: Path,
60
- pr_number: int,
61
- loop: int,
62
- ) -> str:
63
- """Return the <output_format> body for the given prompt flavor.
64
-
65
- Args:
66
- flavor: ``agent`` or ``headless`` prompt flavor.
67
- worktree_path: Path to the git worktree.
68
- pr_number: Pull request number.
69
- loop: Loop iteration number.
70
-
71
- Returns:
72
- Format-instruction text for that flavor.
73
- """
74
- if flavor == FIX_PROMPT_FLAVOR_HEADLESS:
75
- outcome_path = fix_outcome_xml_path(worktree_path, pr_number, loop)
76
- return FIX_OUTPUT_FORMAT_HEADLESS_TEMPLATE.format(
77
- outcome_path=outcome_path.as_posix(),
78
- )
79
- return FIX_OUTPUT_FORMAT_AGENT_TEXT
80
-
81
-
82
- def _all_execution_steps(flavor: str) -> list[str]:
83
- """Return the execution checklist for the given prompt flavor.
84
-
85
- Args:
86
- flavor: ``agent`` or ``headless`` prompt flavor.
87
-
88
- Returns:
89
- Ordered execution step texts for that flavor.
90
- """
91
- if flavor == FIX_PROMPT_FLAVOR_HEADLESS:
92
- return list(ALL_FIX_EXECUTION_STEPS_HEADLESS)
93
- return list(ALL_FIX_EXECUTION_STEPS)
94
-
95
-
96
- def _all_constraint_texts(flavor: str) -> list[str]:
97
- """Return the constraint texts for the given prompt flavor.
98
-
99
- Args:
100
- flavor: ``agent`` or ``headless`` prompt flavor.
101
-
102
- Returns:
103
- Ordered constraint texts for that flavor.
104
- """
105
- if flavor == FIX_PROMPT_FLAVOR_HEADLESS:
106
- return list(ALL_FIX_CONSTRAINT_TEXTS_HEADLESS)
107
- return list(ALL_FIX_CONSTRAINT_TEXTS)
108
-
109
-
110
- def build_fix_prompt_xml(
111
- *,
112
- owner: str,
113
- repo: str,
114
- pr_number: int,
115
- loop: int,
116
- head_ref: str,
117
- base_ref: str,
118
- worktree_path: Path,
119
- findings_json_path: Path,
120
- flavor: str = FIX_PROMPT_FLAVOR_AGENT,
121
- ) -> Element:
122
- """Build the complete FIX spawn prompt XML.
123
-
124
- Args:
125
- owner: GitHub repository owner.
126
- repo: GitHub repository name.
127
- pr_number: Pull request number.
128
- loop: Loop iteration number.
129
- head_ref: Head branch ref.
130
- base_ref: Base branch ref.
131
- worktree_path: Path to the git worktree.
132
- findings_json_path: Path to the findings JSON file.
133
- flavor: Prompt flavor — ``agent`` (in-agent commit/post) or
134
- ``headless`` (outcome file, lead-owned commit/post).
135
-
136
- Returns:
137
- Root <spawn_prompt> element.
138
- """
139
- findings_data = json.loads(findings_json_path.read_text(encoding="utf-8"))
140
- if not isinstance(findings_data, list):
141
- findings_type_name = type(findings_data).__name__
142
- raise TypeError(
143
- FINDINGS_JSON_MUST_BE_LIST_MESSAGE % findings_type_name
144
- )
145
-
146
- root = Element("spawn_prompt", {"role": "fix", "loop": str(loop)})
147
-
148
- context = SubElement(root, "context")
149
- SubElement(context, "owner").text = owner
150
- SubElement(context, "repo").text = repo
151
- SubElement(context, "pr_number").text = str(pr_number)
152
- SubElement(context, "head_ref").text = head_ref
153
- SubElement(context, "base_ref").text = base_ref
154
- SubElement(context, "worktree_path").text = worktree_path.as_posix()
155
-
156
- bugs_elem = SubElement(root, "bugs")
157
- for each_finding in findings_data:
158
- if isinstance(each_finding, dict):
159
- bug = SubElement(bugs_elem, "bug")
160
- for each_key, each_field_detail in each_finding.items():
161
- child = SubElement(bug, each_key)
162
- child.text = (
163
- str(each_field_detail) if each_field_detail is not None else ""
164
- )
165
-
166
- execution = SubElement(root, "execution")
167
- for each_step in _all_execution_steps(flavor):
168
- SubElement(execution, "step").text = each_step
169
-
170
- constraints = SubElement(root, "constraints")
171
- for each_constraint in _all_constraint_texts(flavor):
172
- SubElement(constraints, "constraint").text = each_constraint
173
-
174
- comment_posting = SubElement(root, "comment_posting")
175
- comment_posting.text = _comment_posting_text(flavor)
176
-
177
- format_section = SubElement(root, "output_format")
178
- format_section.text = _format_instruction_text(
179
- flavor=flavor,
180
- worktree_path=worktree_path,
181
- pr_number=pr_number,
182
- loop=loop,
183
- )
184
-
185
- return root
186
-
187
-
188
- def emit_fix_prompt(
189
- *,
190
- owner: str,
191
- repo: str,
192
- pr_number: int,
193
- loop: int,
194
- head_ref: str,
195
- base_ref: str,
196
- worktree_path: Path,
197
- findings_json_path: Path,
198
- flavor: str = FIX_PROMPT_FLAVOR_AGENT,
199
- ) -> str:
200
- """Build and serialize the FIX spawn prompt to a pretty-printed XML string.
201
-
202
- Args:
203
- owner: GitHub repository owner.
204
- repo: GitHub repository name.
205
- pr_number: Pull request number.
206
- loop: Loop iteration number.
207
- head_ref: Head branch ref.
208
- base_ref: Base branch ref.
209
- worktree_path: Path to the git worktree.
210
- findings_json_path: Path to the findings JSON file.
211
- flavor: Prompt flavor — ``agent`` or ``headless``.
212
-
213
- Returns:
214
- Pretty-printed XML string.
215
- """
216
- root = build_fix_prompt_xml(
217
- owner=owner,
218
- repo=repo,
219
- pr_number=pr_number,
220
- loop=loop,
221
- head_ref=head_ref,
222
- base_ref=base_ref,
223
- worktree_path=worktree_path,
224
- findings_json_path=findings_json_path,
225
- flavor=flavor,
226
- )
227
- return emit_pretty_xml(root)
228
-
229
-
230
- def parse_arguments(all_argv: list[str]) -> argparse.Namespace:
231
- """Parse command-line arguments.
232
-
233
- Args:
234
- all_argv: Command-line argument list.
235
-
236
- Returns:
237
- Parsed namespace with all required fix prompt parameters.
238
- """
239
- parser = argparse.ArgumentParser(description=__doc__)
240
- parser.add_argument("--owner", required=True)
241
- parser.add_argument("--repo", required=True)
242
- parser.add_argument("--pr-number", type=int, required=True)
243
- parser.add_argument("--loop", type=int, required=True)
244
- parser.add_argument("--head-ref", required=True)
245
- parser.add_argument("--base-ref", required=True)
246
- parser.add_argument("--worktree-path", type=Path, required=True)
247
- parser.add_argument("--findings-json", type=Path, required=True)
248
- parser.add_argument(
249
- "--flavor",
250
- choices=sorted(ALL_FIX_PROMPT_FLAVORS),
251
- default=FIX_PROMPT_FLAVOR_AGENT,
252
- )
253
- return parser.parse_args(all_argv)
254
-
255
-
256
- def main(all_arguments: list[str]) -> int:
257
- """Entry point: emit FIX spawn prompt XML to stdout.
258
-
259
- Args:
260
- all_arguments: Command-line arguments.
261
-
262
- Returns:
263
- 0 on success, 1 on failure.
264
- """
265
- arguments = parse_arguments(all_arguments)
266
- findings_path = getattr(arguments, "findings_json")
267
-
268
- early_exit = require_file(findings_path, "findings-json")
269
- if early_exit is not None:
270
- return early_exit
271
-
272
- try:
273
- xml_output = emit_fix_prompt(
274
- owner=arguments.owner,
275
- repo=arguments.repo,
276
- pr_number=getattr(arguments, "pr_number"),
277
- loop=arguments.loop,
278
- head_ref=getattr(arguments, "head_ref"),
279
- base_ref=getattr(arguments, "base_ref"),
280
- worktree_path=getattr(arguments, "worktree_path"),
281
- findings_json_path=findings_path,
282
- flavor=arguments.flavor,
283
- )
284
- except (json.JSONDecodeError, OSError, TypeError) as exc:
285
- print(f"emit_fix_prompt failed: {exc}", file=sys.stderr)
286
- return 1
287
- sys.stdout.write(xml_output)
288
- return 0
289
-
290
-
291
- if __name__ == "__main__":
292
- raise SystemExit(main(sys.argv[1:]))