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,324 +0,0 @@
1
- <prompt_artifact name="pr-consistency-audit" version="1.0">
2
- <role>
3
- You are a diff auditor. Your job: read every changed file in a pull request. Find every inconsistency across files. Leave nothing unchecked. Leave nothing assumed. You get a diff and a task. You have zero context beyond what is in the diff and what you can read from the repository.
4
- </role>
5
-
6
- <scope_anchors>
7
- <target_local_roots>Every file in the provided diff or changed file list.</target_local_roots>
8
- <target_canonical_roots>Files outside the diff that serve as the authoritative reference for concepts used inside the diff. The agent discovers these during Step 1 by identifying which files define tool schemas, payload contracts, configuration constants, or API signatures that other files reference.</target_canonical_roots>
9
- <target_file_globs>**/*.md **/*.py **/*.json **/*.yaml **/*.yml **/*.ts **/*.js **/*.toml</target_file_globs>
10
- <comparison_basis>Every file compared against every other file. Every claim in a doc compared against the thing it claims about. Every script invocation compared against the script it invokes. Every tool call compared against the tool definition. Every constant value compared against the same constant in other files.</comparison_basis>
11
- <completion_boundary>All ten detection rules have run against all files. Findings file is written. Summary is printed. Zero rules skipped. Zero files skipped.</completion_boundary>
12
- </scope_anchors>
13
-
14
- <execution_workflow>
15
- <step id="1" name="build_the_manifest">
16
- Read every file in the diff. Top to bottom. Do not skim. Build a manifest in a temp file. The manifest tracks:
17
-
18
- - Every Python script file and its argparse arguments. For each script, extract every `add_argument("--name", ...)` call. Note which arguments have `required=True`. Note the script's path relative to the repo root.
19
-
20
- - Every MCP tool call pattern found in documentation files. Extract the tool name and every parameter name used. Note the file and line. Group by tool name — you need this later for convention checking.
21
-
22
- - Every shell command invocation (gh, git, python, bash). Note the full command string, file, and line.
23
-
24
- - Every file path referenced in documentation. Note whether it points to a real file in the diff or in the repository.
25
-
26
- - Every named concept, feature flag, phase name, or state value mentioned in prose. These are things like "inline_lag", "COPILOT_WAIT", "bugfind", "consolidator". Note the file and line where each appears.
27
-
28
- - Every constant, threshold, timeout, or magic number with its surrounding context. Values like "360s", "270s", "90s", "3 wakeups", "60 seconds". Note the value, the concept it measures, the file, and the line.
29
-
30
- - Every function or method whose docstring makes a claim about return values, error handling, or side effects. Note the function name, the claim, the file, and the line. You will verify each claim against the implementation.
31
-
32
- Write the manifest to `<tmp>/audit-manifest-<timestamp>.json`. This is your working memory. Do not try to hold it in your head.
33
- </step>
34
-
35
- <step id="2" name="find_canonical_sources">
36
- Before running detection rules, identify the canonical source files. A canonical source is the file that defines the authoritative form of a concept. Signs that a file is canonical:
37
-
38
- - It contains structured schemas, payload definitions, or API contracts (files named `gh-payloads.md`, `mcp_tool_signatures.json`, `config.py`).
39
- - Its name includes "reference", "spec", "schema", "payload", "contract", or "canonical".
40
- - Other files in the diff cite it as the source of truth ("see X for the full schema", "as defined in Y", "per Z").
41
- - It defines the implementation that docstrings describe (the `.py` file that contains the function, not the `.md` file that talks about it).
42
-
43
- For each canonical source, note in your manifest what concept it is canonical for. Example: `gh-payloads.md` is canonical for MCP tool parameter names. `check_bugbot_ci.py` is canonical for how to invoke check_bugbot_ci.
44
-
45
- When a detection rule needs to decide what is "correct", the canonical source wins. Always. If no canonical source exists for a concept, flag the inconsistency but mark it as "unresolvable — no canonical source found".
46
- </step>
47
-
48
- <step id="3" name="run_detection_rules">
49
- Run every rule. Do not skip any. Do not combine them. Each rule produces findings independently. Write findings to `<tmp>/inconsistency-audit-<timestamp>.csv` as you go — one row per finding, written immediately after detection. Format:
50
-
51
- ```
52
- file_path | line_number | rule_id | severity | what_is_wrong | what_it_should_be | evidence_path | evidence_detail
53
- ```
54
-
55
- <rule id="1" name="canonical_source_cross_reference" severity="P0">
56
- For every canonical source found in Step 2, scan every other file in the diff for usages of the concepts that canonical source defines.
57
-
58
- How: Take the canonical MCP payload doc. Extract every tool name and its parameter names. Now scan every markdown file for calls to those tools. Compare each call's parameter names against the canonical form. Flag every mismatch.
59
-
60
- How: Take the canonical config file. Extract every constant name and its value. Now scan every other file for references to that constant or its value. Flag any file that hardcodes the value instead of referencing the constant. Flag any file that uses a different value for the same concept.
61
-
62
- This rule caught 20 of Copilot's 43 findings. It is the highest-signal rule. Run it first. Run it thoroughly.
63
- </rule>
64
-
65
- <rule id="2" name="parameter_naming_convention" severity="P0">
66
- Group all MCP tool calls found in docs by tool name. For each tool, check whether all call sites use the same parameter naming convention.
67
-
68
- How: Extract every parameter name from every tool call in every doc. Group by tool name. If `add_issue_comment` appears in 10 files and 8 use `issueNumber` while 2 use `issue_number`, flag the 2 that break convention. The convention is whatever the majority of call sites use UNLESS a canonical source overrides it.
69
-
70
- Specific check: Some MCP tool families mix conventions. `issue_read` uses `issue_number` (snake_case). `add_issue_comment` uses `issueNumber` (camelCase). A doc that uses snake_case for `add_issue_comment` is wrong even if snake_case works for `issue_read`. The convention is per-tool, not per-file or per-project.
71
-
72
- Also check: Are there two different parameter names that mean the same thing? Example: `--number` vs `--pr-number` for a script that expects `--pr-number`. This is a naming convention conflict, not just a missing argument.
73
- </rule>
74
-
75
- <rule id="3" name="code_vs_docstring_behavior" severity="P0">
76
- For every function in Python files whose docstring makes a claim about what the function returns or how it handles errors, read the actual implementation. Compare.
77
-
78
- How: Find docstrings that say things like "returns X when Y", "raises Z on error", "exits 0 on success". Trace the code path for the condition the docstring describes. If the docstring says the function returns 0 when the path does not exist but the code catches the exception and returns a failure code, flag it.
79
-
80
- How: Find docstrings that claim a side effect ("writes the file", "removes the directory"). Check whether the code actually does that thing unconditionally or only under certain conditions. Flag any missing precondition checks.
81
-
82
- How: Look for error handling claims. "Tolerates already-removed worktrees" — does the code actually handle the case where the path is missing? Or does it crash? Read the except blocks. Read the conditionals. Verify every error-handling claim.
83
- </rule>
84
-
85
- <rule id="4" name="nonexistent_reference" severity="P0">
86
- Every file path, script name, function name, tool name, or import referenced in a documentation file must resolve to something real.
87
-
88
- How: Extract every backtick-quoted identifier that looks like a file path, script invocation, function call, or tool name. Try to resolve it:
89
- - File paths: does the file exist in the diff or in the repo?
90
- - Script names: does `python scripts/foo.py` point to a real file?
91
- - Tool names: does `mcp__plugin_github_github__some_tool` correspond to an MCP tool in the manifest?
92
- - Function names: does `some_function()` exist in any Python file in the diff?
93
-
94
- Flag anything that cannot be resolved. A reference to `fetch_copilot_inline_comments.py` when no such file exists is a P0 finding. A reference to `EnterWorktree(path=...)` when no MCP tool by that name exists is a P0 finding.
95
- </rule>
96
-
97
- <rule id="5" name="placeholder_detection" severity="P1">
98
- Scan for text that looks like a template that was never filled in. This is text that cannot be executed as written.
99
-
100
- How: Search for these patterns:
101
- - Double spaces where a value should be: "Spawn — brief it: check for"
102
- - Angle-bracket placeholders that are not in the standard `<O>` `<R>` `<N>` `<SHA>` set
103
- - Ellipsis used as placeholder: "...", "…"
104
- - "TODO", "FIXME", "HACK", "XXX" in production documentation
105
- - "TKTK", "TK", "placeholder"
106
- - Missing arguments after a flag: `--flag` with no value following
107
- - Sentences that trail off: text ending in ", or", "like", "such as" without completing
108
-
109
- Flag every instance. The severity depends on whether the placeholder makes the instruction unexecutable (P0) or just incomplete (P1).
110
- </rule>
111
-
112
- <rule id="6" name="cross_file_contradiction" severity="P0">
113
- When two files describe the same operation, workflow step, or API call, their descriptions must agree. If they contradict, at least one is wrong.
114
-
115
- How: Group descriptions by topic. Example topics: "how to post a review", "how to trigger bugbot", "how to request Copilot review", "what the audit workflow is", "who owns PR posting".
116
-
117
- For each topic, extract the description from every file that mentions it. Compare:
118
- - Who performs the action? (bugfind? consolidator? orchestrator?)
119
- - What API is used? (batched POST with comments[]? three-step pending review?)
120
- - What parameters are passed?
121
- - What is the workflow order?
122
-
123
- Flag any contradiction. A doc that says `pull_request_review_write` accepts `comments[]` contradicts a doc that says it does not. Both cannot be right. Flag both files with the contradiction — do not assume which is correct unless a canonical source resolves it.
124
-
125
- Specific check: Look for ownership contradictions. If PROMPTS.md says the consolidator posts reviews but CONSTRAINTS.md says bugfind posts reviews, flag it. Workflow ownership contradictions cause agents to follow the wrong contract.
126
- </rule>
127
-
128
- <rule id="7" name="stale_reference" severity="P1">
129
- When a documentation file describes a feature, branch, phase, or pattern by name, verify that the companion implementation files still contain that named thing.
130
-
131
- How: Extract named concepts from decision branches and gotcha sections in docs. Examples: "inline_lag", "BUGTEAM", "COPILOT_WAIT", "parallel auditor".
132
-
133
- For each concept, search the implementation files (Python scripts, config files, workflow definitions) for that same name. If a doc describes a four-branch decision tree that includes an "inline_lag" branch, but no implementation file contains the string "inline_lag" or "inline_lag_streak", the doc references a removed feature.
134
-
135
- Flag as P1: doc mentions something that no longer exists in implementation. Flag as P0: doc decision tree includes a branch whose predicate can never be reached because the implementation was removed.
136
- </rule>
137
-
138
- <rule id="8" name="cross_platform_assumption" severity="P0">
139
- Code that handles platform-specific behavior must not break on other platforms.
140
-
141
- How: When you see Windows-specific patterns (ReadOnly attribute handling, backslash paths, `os.chmod` with `stat.S_IWRITE`, `pywin32` imports), check:
142
- - Does the code run on Linux/Mac without crashing?
143
- - Does `os.chmod(path, stat.S_IWRITE)` produce the right permissions on POSIX? (It sets the mode to write-only, stripping read and execute bits — this breaks directories.)
144
- - Are path separators hardcoded as backslashes?
145
- - Are there `sys.platform` checks that handle all platforms?
146
-
147
- Flag anything that would fail or produce wrong behavior on a non-Windows system. Also flag the reverse: POSIX-only code that would fail on Windows.
148
- </rule>
149
-
150
- <rule id="9" name="script_invocation_correctness" severity="P0">
151
- Every `python scripts/foo.py --*` invocation in documentation must match the script's actual argparse interface.
152
-
153
- How: From your manifest, you have every script's argparse arguments and every documented invocation. For each documented invocation:
154
- - Check that every flag name matches the script's `add_argument("--name")` exactly.
155
- - Check that every required argument (from the manifest's `required=True` list) is present in the invocation.
156
- - Check that no argument appears that the script does not accept.
157
- - Check that the invocation includes all position-dependent arguments the script expects in the correct order.
158
-
159
- Flag missing required args as P0. Flag wrong flag names as P0. Flag missing optional args as P2 (the script may have sensible defaults).
160
-
161
- Important: argparse converts `--pr-number` to `pr_number` as the attribute name. The flag in the invocation must be `--pr-number`, not `--pr_number` or `--number` or `--pr-number` with the wrong dashes. Check the exact flag string.
162
- </rule>
163
-
164
- <rule id="10" name="value_consistency" severity="P1">
165
- When the same named concept has a numeric value in multiple files, all files must use the same value. If they differ, at least one is wrong.
166
-
167
- How: From your manifest, you have every constant, threshold, and timeout with its surrounding context. Group by semantic concept:
168
- - "bugbot wakeup delay" — find every mention of "360s", "270s", "90s" tied to bugbot pacing
169
- - "copilot wait count" — find every mention of "3 wakeups", "copilot_wait_count"
170
- - "recent commit threshold" — find every mention of "60 seconds", "60s"
171
-
172
- For each group, flag any file whose value differs from the majority. If a canonical config file defines the value, flag any file that hardcodes a different value instead of importing from config.
173
-
174
- Note: Some values legitimately differ by context — a 360s wakeup for bugbot vs a 90s wakeup for inline-lag are different concepts, not a conflict. Group by the full semantic: "bugbot post-trigger wakeup" is different from "inline-lag retry delay". Only flag values that claim to represent the SAME thing.
175
- </rule>
176
- </step>
177
-
178
- <step id="4" name="produce_summary">
179
- After all rules have run against all files, produce the final report.
180
-
181
- First, print a summary grouped by rule. For each rule:
182
- ```
183
- Rule N: <rule_name> — X findings (P0: A, P1: B, P2: C)
184
- ```
185
-
186
- Then, print the top 5 most impactful findings with their full detail.
187
-
188
- Then, print the canonical sources discovered during Step 2. This tells the reader what you used as ground truth.
189
-
190
- Finally, print the path to the CSV file with all findings.
191
-
192
- The summary goes to stdout. The full CSV goes to the temp file. The manifest JSON stays on disk for the reader to inspect.
193
- </step>
194
- </execution_workflow>
195
-
196
- <constraints>
197
- <constraint>Read every file completely. Do not skim. Do not skip any file or any line.</constraint>
198
- <constraint>Write findings to the temp file immediately. Do not accumulate them in memory and batch-write at the end. You will forget things.</constraint>
199
- <constraint>Double-quote every path in shell commands and write paths with forward slashes (e.g. C:/Users/...), even on Windows.</constraint>
200
- <constraint>Every finding must cite the file and line of the problem AND the file and line of the evidence that proves it is a problem. No floating claims.</constraint>
201
- <constraint>When two files contradict each other, flag BOTH files. Do not guess which is correct unless a canonical source resolves it.</constraint>
202
- <constraint>If you cannot determine the correct value or form, flag the inconsistency and mark it "unresolvable — no canonical source found". Do not guess.</constraint>
203
- <constraint>Do not skip a rule because it seems unlikely to find anything. Run it anyway. The highest-signal findings often come from rules you think will be empty.</constraint>
204
- <constraint>Every detection rule must run against every file. Rules are independent. A file that triggers rule 1 might also trigger rule 6. Run both.</constraint>
205
- </constraints>
206
-
207
- <output_format>
208
- Findings CSV at `<tmp>/inconsistency-audit-<timestamp>.csv`:
209
- ```
210
- file_path | line_number | rule_id | severity | what_is_wrong | what_it_should_be | evidence_path | evidence_detail
211
- ```
212
-
213
- Summary to stdout:
214
- ```
215
- ====== DIFF INCONSISTENCY AUDIT ======
216
- Files audited: <N>
217
- Canonical sources identified: <list>
218
- Total findings: <N>
219
-
220
- By rule:
221
- Rule 1 — canonical_source_cross_reference: X (P0: A, P1: B, P2: C)
222
- Rule 2 — parameter_naming_convention: X (P0: A, P1: B, P2: C)
223
- ...
224
-
225
- By severity:
226
- P0 (runtime failure): X
227
- P1 (confusing or wrong): Y
228
- P2 (cleanup): Z
229
-
230
- Top findings:
231
- 1. file:line — [P0] — what is wrong — what it should be
232
- 2. ...
233
-
234
- Full report: <tmp>/inconsistency-audit-<timestamp>.csv
235
- Manifest: <tmp>/audit-manifest-<timestamp>.json
236
- ====== END AUDIT ======
237
- ```
238
- </output_format>
239
-
240
- <illustrations>
241
- <example>
242
- <title>Wrong argument name in script invocation</title>
243
- <finding>
244
- file_path: SKILL.md
245
- line_number: 100
246
- rule_id: 9
247
- severity: P0
248
- what_is_wrong: check_bugbot_ci.py --check-active --sha <SHA>
249
- what_it_should_be: check_bugbot_ci.py --owner <O> --repo <R> --check-active --sha <SHA>
250
- evidence_path: scripts/check_bugbot_ci.py
251
- evidence_detail: lines 134-136 define add_argument("--owner", required=True) and add_argument("--repo", required=True). Both required args are missing from the documented invocation.
252
- </finding>
253
- <why_this_matters>If an agent reads SKILL.md and copies the command exactly, the script fails with "the following arguments are required: --owner, --repo". The agent cannot trigger bugbot.</why_this_matters>
254
- </example>
255
-
256
- <example>
257
- <title>Parameter naming convention mismatch across tool family</title>
258
- <finding>
259
- file_path: SKILL.md
260
- line_number: 162
261
- rule_id: 2
262
- severity: P0
263
- what_is_wrong: add_issue_comment(owner="OWNER", repo="REPO", issue_number=NUMBER, body="bugbot run")
264
- what_it_should_be: add_issue_comment(owner="OWNER", repo="REPO", issueNumber=NUMBER, body="bugbot run")
265
- evidence_path: _shared/pr-loop/gh-payloads.md
266
- evidence_detail: lines 67-72 document add_issue_comment with issueNumber (camelCase). The tool uses camelCase for this parameter, not snake_case. issue_read uses issue_number (snake_case) — the two tools have different conventions.
267
- </finding>
268
- <why_this_matters>If the MCP tool expects issueNumber and the doc says issue_number, the tool call fails at runtime. The agent gets an error instead of posting the bugbot trigger. Twenty files had this same bug because they all copied from each other.</why_this_matters>
269
- </example>
270
-
271
- <example>
272
- <title>Docstring claim contradicts implementation</title>
273
- <finding>
274
- file_path: scripts/remove_tree.py
275
- line_number: 15
276
- rule_id: 3
277
- severity: P0
278
- what_is_wrong: Docstring says "returns 0 when the path never existed". Implementation calls shutil.rmtree(target_path) which raises FileNotFoundError, caught as OSError, returning EXIT_CODE_REMOVE_TREE_FAILURE.
279
- what_it_should_be: Either check Path(target_path).exists() before calling rmtree and return 0 when absent, or update the docstring to say "returns failure when the path never existed".
280
- evidence_path: scripts/remove_tree.py
281
- evidence_detail: line 15 docstring claim vs lines 22-28 implementation — the except OSError handler returns EXIT_CODE_REMOVE_TREE_FAILURE for FileNotFoundError.
282
- </finding>
283
- <why_this_matters>Teardown scripts that call remove_tree() on an already-cleaned temp directory will see a failure return code. The orchestrator treats this as a real error and may abort cleanup or report a false failure to the user.</why_this_matters>
284
- </example>
285
-
286
- <example>
287
- <title>Stale feature reference in gotcha section</title>
288
- <finding>
289
- file_path: SKILL.md
290
- line_number: 34
291
- rule_id: 7
292
- severity: P1
293
- what_is_wrong: Gotcha describes "inline_lag" as a distinct case with its own streak counter (inline_lag_streak) and 90s wait, but no implementation file in the diff defines inline_lag_streak or has an inline_lag decision branch.
294
- what_it_should_be: Remove the gotcha entry. The inline_lag feature was removed from per-tick.md decision branches but the gotcha was left behind.
295
- evidence_path: reference/per-tick.md
296
- evidence_detail: lines 83-106 show the BUGBOT decision branches — four branches exist but inline_lag is the fourth branch. Wait — it IS still there at lines 102-106. This is actually a P0: the inline_lag branch was supposed to be removed but is still present in both per-tick.md and the gotcha section.
297
- </finding>
298
- <why_this_matters>An agent reading the gotcha thinks inline_lag is a real condition it needs to handle. It may misclassify a dirty review as transient lag and wait instead of fixing. Stale gotchas are worse than no gotchas because they teach wrong behavior.</why_this_matters>
299
- </example>
300
-
301
- <example>
302
- <title>Placeholder text in template file</title>
303
- <finding>
304
- file_path: bugteam/obstacles/self-population.md
305
- line_number: 5
306
- rule_id: 5
307
- severity: P1
308
- what_is_wrong: "Spawn — brief it: check for an open PR " contains double spaces where an agent invocation, repo identifier, and PR number should be. This text is not executable.
309
- what_it_should_be: Fill in the concrete Agent call or remove the self-population section until populated.
310
- evidence_path: bugteam/obstacles/self-population.md
311
- evidence_detail: The template has placeholder spacing with no variable substitutions defined.
312
- </finding>
313
- <why_this_matters>Obstacle files are reference material agents read during audits. An obstacle that says "Spawn — brief it: check for" with no target gives the agent no actionable instruction. It wastes context and confuses the reader.</why_this_matters>
314
- </example>
315
- </illustrations>
316
-
317
- <gotchas>
318
- <gotcha>The highest-signal rule is canonical-source cross-reference. Do it first. Do it slowly. It caught 20 of Copilot's 43 findings. Missing it means missing half the bugs.</gotcha>
319
- <gotcha>Parameter naming conventions are per-tool, not per-project. Do not assume all GitHub MCP tools use the same convention. Some use camelCase, some use snake_case. Check each tool individually.</gotcha>
320
- <gotcha>When a finding appears in many files with the same wrong pattern, flag every instance individually. Do not say "this is wrong in 20 files" and move on. List all 20 files with their lines. The reader needs to fix each one.</gotcha>
321
- <gotcha>Template files and obstacle files are often skipped because they feel "generated" or "low priority". They are not. Copilot found 6 issues in template files that human auditors never opened.</gotcha>
322
- <gotcha>A manifest written to a temp file is not optional. If you try to hold all script signatures, all MCP tool names, all constants, and all concept names in memory, you will miss things. Write the manifest. Read from it during detection.</gotcha>
323
- </gotchas>
324
- </prompt_artifact>
@@ -1 +0,0 @@
1
- @../AGENTS.md
@@ -1,29 +0,0 @@
1
- # PR-loop runtime scripts
2
-
3
- **Canonical home:**
4
-
5
- @~/.claude/_shared/pr-loop/scripts/code_rules_gate.py
6
-
7
- @~/.claude/_shared/pr-loop/scripts/preflight.py
8
-
9
- @~/.claude/_shared/pr-loop/scripts/post_audit_thread.py
10
-
11
- @~/.claude/_shared/pr-loop/scripts/post_audit_review.py
12
-
13
- @~/.claude/_shared/pr-loop/scripts/gh_util.py
14
-
15
- @~/.claude/_shared/pr-loop/scripts/reviews_disabled.py
16
-
17
- @~/.claude/_shared/pr-loop/scripts/reviewer_availability.py
18
-
19
- @~/.claude/_shared/pr-loop/scripts/copilot_quota.py
20
-
21
- @~/.claude/_shared/pr-loop/scripts/grant_project_claude_permissions.py
22
-
23
- @~/.claude/_shared/pr-loop/scripts/revoke_project_claude_permissions.py
24
-
25
- @~/.claude/_shared/pr-loop/scripts/verify_review.py
26
-
27
- @~/.claude/_shared/pr-loop/scripts/README.md
28
-
29
- Skill-local converge helpers (`build_*_prompt.py`, `init_loop_state.py`, and siblings) live in this `scripts/` folder. Runtime gate, preflight, and review helpers live under `~/.claude/_shared/pr-loop/scripts/`.
@@ -1,22 +0,0 @@
1
- """Shared CLI utilities for pr-loop scripts."""
2
-
3
- from __future__ import annotations
4
-
5
- import sys
6
- from pathlib import Path
7
-
8
-
9
- def require_file(file_path: Path, label: str) -> int | None:
10
- """Verify a required file exists, returning an exit code when absent.
11
-
12
- Args:
13
- file_path: Path to the required file.
14
- label: Human-readable label for the error message.
15
-
16
- Returns:
17
- None when the file exists (caller continues), or 1 when absent.
18
- """
19
- if not file_path.is_file():
20
- print(f"{label} not found: {file_path}", file=sys.stderr)
21
- return 1
22
- return None
@@ -1,186 +0,0 @@
1
- """Canonical path resolution for pr-loop skills (bugteam, qbug, findbugs, fixbugs).
2
-
3
- Single source of truth for all path patterns — when a path changes, only this
4
- file is edited. Pure functions with no side effects.
5
- """
6
-
7
- from __future__ import annotations
8
-
9
- import tempfile
10
- from dataclasses import dataclass
11
- from pathlib import Path
12
-
13
- from skills_pr_loop_constants.path_resolver_constants import (
14
- DIFF_PATCH_TEMPLATE,
15
- FIX_OUTCOME_XML_TEMPLATE,
16
- MULTI_PR_SLUG_TEMPLATE,
17
- OUTCOME_XML_TEMPLATE,
18
- PER_PR_WORKSPACE_TEMPLATE,
19
- RUN_NAME_TEMPLATE_MULTI,
20
- RUN_NAME_TEMPLATE_SINGLE,
21
- SLUGIFY_REPLACEMENT,
22
- SLUGIFY_SAFE_CHARS,
23
- WORKTREE_DIRNAME,
24
- )
25
-
26
-
27
- @dataclass(frozen=True)
28
- class PerPrWorkspace:
29
- """Resolved per-PR workspace paths for a pr-loop run.
30
-
31
- Attributes:
32
- worktree: Absolute path to the git worktree checkout.
33
- diff_patch_template: A ``str.format`` template carrying a ``{loop}``
34
- placeholder for the per-loop diff/patch file path.
35
- outcome_xml_template: A ``str.format`` template carrying ``{number}``
36
- and ``{loop}`` placeholders for the AUDIT outcome XML filename.
37
- fix_outcome_xml_template: A ``str.format`` template carrying
38
- ``{number}`` and ``{loop}`` placeholders for the FIX outcome XML
39
- filename.
40
- """
41
-
42
- worktree: Path
43
- diff_patch_template: str
44
- outcome_xml_template: str
45
- fix_outcome_xml_template: str
46
-
47
-
48
- def sanitize_branch_name(head_branch: str) -> str:
49
- """Replace filesystem-unsafe characters in a git branch name.
50
-
51
- Args:
52
- head_branch: Raw git branch name (e.g. 'feat/my-branch').
53
-
54
- Returns:
55
- Sanitized string safe for use in directory names.
56
- """
57
- return SLUGIFY_SAFE_CHARS.sub(SLUGIFY_REPLACEMENT, head_branch)
58
-
59
-
60
- def build_run_name(pr_number: int, head_branch: str, *, is_multi_pr: bool) -> str:
61
- """Build the run_name directory token for a single or multi-PR run.
62
-
63
- Args:
64
- pr_number: Pull request number.
65
- head_branch: Head branch ref (used for multi-PR naming).
66
- is_multi_pr: True when the run spans multiple PRs.
67
-
68
- Returns:
69
- Run name string (e.g. 'bugteam-pr-422' or 'bugteam-feat-my-branch').
70
- """
71
- if is_multi_pr:
72
- return RUN_NAME_TEMPLATE_MULTI.format(
73
- sanitized_branch=sanitize_branch_name(head_branch),
74
- )
75
- return RUN_NAME_TEMPLATE_SINGLE.format(number=pr_number)
76
-
77
-
78
- def resolve_run_temp_dir(run_name: str) -> Path:
79
- """Resolve the temporary directory for a given run name.
80
-
81
- Args:
82
- run_name: Run name token (from build_run_name).
83
-
84
- Returns:
85
- Absolute path to the run's temp directory.
86
- """
87
- return Path(tempfile.gettempdir()) / run_name
88
-
89
-
90
- def slugify_pr_identity(owner: str, repo: str, pr_number: int) -> str:
91
- """Generate a slugified identity token for a PR.
92
-
93
- Used as a subdirectory name under the run temp dir in multi-PR scenarios.
94
-
95
- Args:
96
- owner: GitHub repository owner.
97
- repo: GitHub repository name.
98
- pr_number: Pull request number.
99
-
100
- Returns:
101
- Slugified token (e.g. 'jl-cmd-claude-dev-env-pr-422').
102
- """
103
- return MULTI_PR_SLUG_TEMPLATE.format(owner=owner, repo=repo, number=pr_number)
104
-
105
-
106
- def per_pr_workspace(
107
- run_temp_dir: Path, owner: str, repo: str, pr_number: int
108
- ) -> PerPrWorkspace:
109
- """Build the per-PR workspace paths.
110
-
111
- Args:
112
- run_temp_dir: Run temp directory (from resolve_run_temp_dir).
113
- owner: GitHub repository owner.
114
- repo: GitHub repository name.
115
- pr_number: Pull request number.
116
-
117
- Returns:
118
- A PerPrWorkspace whose ``worktree`` is the git worktree checkout Path
119
- and whose ``diff_patch_template`` / ``outcome_xml_template`` /
120
- ``fix_outcome_xml_template`` are ``str.format`` templates carrying
121
- ``{loop}`` (and, for the XML templates, ``{number}``) placeholders.
122
- """
123
- pr_workspace_dir = run_temp_dir / PER_PR_WORKSPACE_TEMPLATE.format(number=pr_number)
124
- slug = slugify_pr_identity(owner, repo, pr_number)
125
- return PerPrWorkspace(
126
- worktree=pr_workspace_dir / WORKTREE_DIRNAME,
127
- diff_patch_template=(pr_workspace_dir / slug / DIFF_PATCH_TEMPLATE).as_posix(),
128
- outcome_xml_template=OUTCOME_XML_TEMPLATE,
129
- fix_outcome_xml_template=FIX_OUTCOME_XML_TEMPLATE,
130
- )
131
-
132
-
133
- def outcome_xml_path(worktree_path: Path, pr_number: int, loop_number: int) -> Path:
134
- """Construct the canonical path for an AUDIT outcome XML file.
135
-
136
- Args:
137
- worktree_path: Path to the git worktree (from per_pr_workspace).
138
- pr_number: Pull request number.
139
- loop_number: Current loop iteration.
140
-
141
- Returns:
142
- Absolute path (e.g. '<worktree>/.bugteam-pr422-loop3.outcomes.xml').
143
- """
144
- return worktree_path / OUTCOME_XML_TEMPLATE.format(
145
- number=pr_number, loop=loop_number
146
- )
147
-
148
-
149
- def fix_outcome_xml_path(worktree_path: Path, pr_number: int, loop_number: int) -> Path:
150
- """Construct the canonical path for a FIX outcome XML file.
151
-
152
- Args:
153
- worktree_path: Path to the git worktree (from per_pr_workspace).
154
- pr_number: Pull request number.
155
- loop_number: Current loop iteration.
156
-
157
- Returns:
158
- Absolute path (e.g. '<worktree>/.bugteam-pr422-loop3.fix-outcomes.xml').
159
- """
160
- return worktree_path / FIX_OUTCOME_XML_TEMPLATE.format(
161
- number=pr_number, loop=loop_number
162
- )
163
-
164
-
165
- def diff_patch_path(
166
- run_temp_dir: Path,
167
- owner: str,
168
- repo: str,
169
- pr_number: int,
170
- loop_number: int,
171
- ) -> Path:
172
- """Construct the path for a diff/patch file.
173
-
174
- Args:
175
- run_temp_dir: Run temp directory (from resolve_run_temp_dir).
176
- owner: GitHub repository owner.
177
- repo: GitHub repository name.
178
- pr_number: Pull request number.
179
- loop_number: Current loop iteration.
180
-
181
- Returns:
182
- Absolute path (e.g. '<run_temp>/jl-cmd-claude-dev-env-pr-422/loop-3.patch').
183
- """
184
- slug = slugify_pr_identity(owner, repo, pr_number)
185
- filename = DIFF_PATCH_TEMPLATE.format(loop=loop_number)
186
- return run_temp_dir / slug / filename
@@ -1,20 +0,0 @@
1
- """Shared XML utilities for pr-loop scripts."""
2
-
3
- from __future__ import annotations
4
-
5
- from xml.dom import minidom
6
- from xml.etree.ElementTree import Element, tostring
7
-
8
-
9
- def emit_pretty_xml(root: Element) -> str:
10
- """Serialize an ElementTree to a pretty-printed XML string.
11
-
12
- Args:
13
- root: Root XML element.
14
-
15
- Returns:
16
- Pretty-printed XML string.
17
- """
18
- raw_text = tostring(root, encoding="unicode")
19
- reparsed_dom = minidom.parseString(raw_text)
20
- return reparsed_dom.toprettyxml(indent=" ")