code-coordinator 0.5.509__tar.gz → 0.5.510__tar.gz

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 (905) hide show
  1. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/PKG-INFO +1 -1
  2. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/code_coordinator.egg-info/PKG-INFO +1 -1
  3. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/code_coordinator.egg-info/scm_version.json +2 -2
  4. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/plans.py +59 -1
  5. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/milestone_order.py +20 -1
  6. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/plans.py +83 -0
  7. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/serve_app.py +42 -1
  8. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_plans.py +213 -0
  9. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_milestone_order.py +70 -0
  10. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_parentage.py +27 -0
  11. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_serve.py +102 -0
  12. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_sqlite_connect_ratchet.py +6 -4
  13. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.claude/commands/board.md +0 -0
  14. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.claude/commands/complete-session.md +0 -0
  15. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.claude/commands/coordinator.md +0 -0
  16. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.githooks/_lib.sh +0 -0
  17. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.githooks/post-checkout +0 -0
  18. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.githooks/post-commit +0 -0
  19. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.githooks/post-merge +0 -0
  20. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  21. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.github/coord-ci-acceptance.yml +0 -0
  22. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.github/workflows/auto-release.yml +0 -0
  23. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.github/workflows/publish.yml +0 -0
  24. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.github/workflows/test.yml +0 -0
  25. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/.gitignore +0 -0
  26. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/CLAUDE.md +0 -0
  27. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/GOAL.md +0 -0
  28. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/LICENSE +0 -0
  29. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/MANIFEST.in +0 -0
  30. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/README.md +0 -0
  31. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/code_coordinator.egg-info/SOURCES.txt +0 -0
  32. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/code_coordinator.egg-info/dependency_links.txt +0 -0
  33. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/code_coordinator.egg-info/entry_points.txt +0 -0
  34. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/code_coordinator.egg-info/requires.txt +0 -0
  35. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/code_coordinator.egg-info/scm_file_list.json +0 -0
  36. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/code_coordinator.egg-info/top_level.txt +0 -0
  37. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/__init__.py +0 -0
  38. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/_board_mapping.py +0 -0
  39. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/acceptance.py +0 -0
  40. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/acceptance_drivers.py +0 -0
  41. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/agent.py +0 -0
  42. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/agent_app.py +0 -0
  43. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/agent_update.py +0 -0
  44. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/agents/opencode/.gitignore +0 -0
  45. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/agents/opencode/agents/work.md +0 -0
  46. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/agents/opencode/routing.jsonc +0 -0
  47. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/approved_work.py +0 -0
  48. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/audit.py +0 -0
  49. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/auto_loop.py +0 -0
  50. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/backup.py +0 -0
  51. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/block_log.py +0 -0
  52. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/board_schema.py +0 -0
  53. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/board_service.py +0 -0
  54. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/board_wire.py +0 -0
  55. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/brain.py +0 -0
  56. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/branch_model.py +0 -0
  57. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/bug_intake.py +0 -0
  58. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/cargo_cache.py +0 -0
  59. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/ci_fix.py +0 -0
  60. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/ci_github.py +0 -0
  61. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/ci_gitlab.py +0 -0
  62. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/ci_store.py +0 -0
  63. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/claim.py +0 -0
  64. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/claude_setup_token.py +0 -0
  65. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/cli.py +0 -0
  66. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/client.py +0 -0
  67. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/codegen.py +0 -0
  68. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/__init__.py +0 -0
  69. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/_common.py +0 -0
  70. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/acceptance.py +0 -0
  71. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/agent_ops.py +0 -0
  72. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/audit.py +0 -0
  73. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/backup.py +0 -0
  74. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/chat.py +0 -0
  75. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/ci.py +0 -0
  76. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/codegen.py +0 -0
  77. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/dispatch.py +0 -0
  78. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/dispatch_workers.py +0 -0
  79. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/dr.py +0 -0
  80. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/drive.py +0 -0
  81. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/drive_queue.py +0 -0
  82. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/gate_a.py +0 -0
  83. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/gates.py +0 -0
  84. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/issues.py +0 -0
  85. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/lifecycle.py +0 -0
  86. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/machine.py +0 -0
  87. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/merge.py +0 -0
  88. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/milestone.py +0 -0
  89. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/plan_followup.py +0 -0
  90. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/portal.py +0 -0
  91. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/pr.py +0 -0
  92. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/release.py +0 -0
  93. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/repo.py +0 -0
  94. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/report.py +0 -0
  95. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/review.py +0 -0
  96. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/scorecard.py +0 -0
  97. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/sessions.py +0 -0
  98. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/setup.py +0 -0
  99. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/status.py +0 -0
  100. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/store_migrate.py +0 -0
  101. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/terminal.py +0 -0
  102. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/test_gate.py +0 -0
  103. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/commands/tui.py +0 -0
  104. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/comments.py +0 -0
  105. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/config.py +0 -0
  106. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/config_reload.py +0 -0
  107. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/confirm_test.py +0 -0
  108. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/conflict_fix.py +0 -0
  109. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dao.py +0 -0
  110. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dashboard/__init__.py +0 -0
  111. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dashboard/fixture.py +0 -0
  112. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dashboard/index.html +0 -0
  113. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dashboard/server.py +0 -0
  114. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dashboard/terminal.py +0 -0
  115. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/db.py +0 -0
  116. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dead_end.py +0 -0
  117. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/decomposition_chat.py +0 -0
  118. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/README.md +0 -0
  119. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-agent.service +0 -0
  120. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-backup.service +0 -0
  121. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-backup.timer +0 -0
  122. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-db-backup.service +0 -0
  123. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-db-backup.sh +0 -0
  124. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-db-backup.timer +0 -0
  125. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-dr-verify.service +0 -0
  126. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-dr-verify.timer +0 -0
  127. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-drive-queue.service +0 -0
  128. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-drive-queue.timer +0 -0
  129. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-failure-notify.service +0 -0
  130. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-fleet-watchdog.service +0 -0
  131. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-fleet-watchdog.timer +0 -0
  132. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-notify.service +0 -0
  133. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-notify.timer +0 -0
  134. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-release-propagate.service +0 -0
  135. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-release-propagate.timer +0 -0
  136. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-release-window.service +0 -0
  137. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-release-window.timer +0 -0
  138. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-serve.service +0 -0
  139. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-web-dist-build.service +0 -0
  140. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-web-dist-build.timer +0 -0
  141. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy/coord-web.service +0 -0
  142. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy_manifest.py +0 -0
  143. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deploy_units.py +0 -0
  144. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deprecation_telemetry.py +0 -0
  145. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/deps.py +0 -0
  146. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/diagnose.py +0 -0
  147. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dispatch.py +0 -0
  148. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dispatch_liveness.py +0 -0
  149. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dist_name.py +0 -0
  150. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dr_promote.py +0 -0
  151. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/dr_verify.py +0 -0
  152. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/drive.py +0 -0
  153. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/drive_queue.py +0 -0
  154. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/drive_state.py +0 -0
  155. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/events.py +0 -0
  156. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/failure_class.py +0 -0
  157. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/failure_classifier.py +0 -0
  158. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/filelock.py +0 -0
  159. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/fleet_config_health.py +0 -0
  160. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/forge_availability.py +0 -0
  161. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/freshness.py +0 -0
  162. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/gate_a.py +0 -0
  163. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/gate_b.py +0 -0
  164. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/gate_snapshot.py +0 -0
  165. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/gates.py +0 -0
  166. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/gen_board_fixture.py +0 -0
  167. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/github_ops.py +0 -0
  168. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/github_throttle.py +0 -0
  169. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/goal.py +0 -0
  170. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/graph_health.py +0 -0
  171. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/__init__.py +0 -0
  172. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/aggregate.py +0 -0
  173. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/__init__.py +0 -0
  174. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/_ci_pin.py +0 -0
  175. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/agent_install.py +0 -0
  176. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/cargo_targets.py +0 -0
  177. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/claude_binary.py +0 -0
  178. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/config_drift.py +0 -0
  179. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/coord_tui_ci_pin.py +0 -0
  180. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/coord_web_ci_pin.py +0 -0
  181. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/deploy_lane_facts.py +0 -0
  182. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/disk.py +0 -0
  183. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/fleet_board.py +0 -0
  184. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/fleet_deploy_lanes.py +0 -0
  185. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/fleet_phantom.py +0 -0
  186. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/fleet_unit_drift.py +0 -0
  187. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/graph.py +0 -0
  188. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/graphify_cli.py +0 -0
  189. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/index_lock.py +0 -0
  190. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/issues_sync_staleness.py +0 -0
  191. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/plan_usage.py +0 -0
  192. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/pr_churn.py +0 -0
  193. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/release_cordon.py +0 -0
  194. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/repo_state.py +0 -0
  195. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/spawned_coord.py +0 -0
  196. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/stalled_pipeline.py +0 -0
  197. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/timer_active.py +0 -0
  198. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/toolchain.py +0 -0
  199. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/unit_drift.py +0 -0
  200. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/unit_enablement.py +0 -0
  201. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/wedged_drive_queue.py +0 -0
  202. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/checks/worktrees.py +0 -0
  203. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/cli.py +0 -0
  204. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/context.py +0 -0
  205. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/fleet_snapshot.py +0 -0
  206. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/models.py +0 -0
  207. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/pypi.py +0 -0
  208. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/registry.py +0 -0
  209. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/render.py +0 -0
  210. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/health/units.py +0 -0
  211. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/hooks.py +0 -0
  212. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/housekeeping.py +0 -0
  213. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/interactive.py +0 -0
  214. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/invariant_alarms.py +0 -0
  215. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/issue_store.py +0 -0
  216. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/issues_sync_status.py +0 -0
  217. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/liveness_auditor.py +0 -0
  218. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/machine_fault.py +0 -0
  219. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/machine_metrics.py +0 -0
  220. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/machine_onboard.py +0 -0
  221. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/machine_pause.py +0 -0
  222. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/machine_stats.py +0 -0
  223. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/merge_queue.py +0 -0
  224. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/milestone_chat.py +0 -0
  225. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/milestone_dispatch.py +0 -0
  226. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/milestone_gate.py +0 -0
  227. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/mock_author.py +0 -0
  228. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/models.py +0 -0
  229. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/network.py +0 -0
  230. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/new_issue_chat.py +0 -0
  231. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notifier/__init__.py +0 -0
  232. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notifier/baseline.py +0 -0
  233. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notifier/cli.py +0 -0
  234. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notifier/collect.py +0 -0
  235. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notifier/digest.py +0 -0
  236. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notifier/models.py +0 -0
  237. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notifier/predicate.py +0 -0
  238. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notifier/service.py +0 -0
  239. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notifier/store.py +0 -0
  240. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notifier/transport.py +0 -0
  241. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/notify.py +0 -0
  242. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/openapi.py +0 -0
  243. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/overlap_fence.py +0 -0
  244. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/overlap_predict.py +0 -0
  245. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/parentage.py +0 -0
  246. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/parentage_github.py +0 -0
  247. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/pipeline.py +0 -0
  248. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/plan_parser.py +0 -0
  249. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/platform_paths.py +0 -0
  250. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/portal_bridge.py +0 -0
  251. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/portal_store.py +0 -0
  252. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/portal_sync.py +0 -0
  253. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/pr_body_lint.py +0 -0
  254. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/prereqs.py +0 -0
  255. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/progress.py +0 -0
  256. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/providers/__init__.py +0 -0
  257. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/providers/base.py +0 -0
  258. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/providers/claude.py +0 -0
  259. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/providers/claude_pty.py +0 -0
  260. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/providers/opencode.py +0 -0
  261. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/queue_diagnose.py +0 -0
  262. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/reconcile.py +0 -0
  263. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/reconcile_tick.py +0 -0
  264. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/refine_chat.py +0 -0
  265. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/release_cordon.py +0 -0
  266. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/release_propagate.py +0 -0
  267. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/release_verify.py +0 -0
  268. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/release_window.py +0 -0
  269. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/repo_dormancy.py +0 -0
  270. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/repo_edit.py +0 -0
  271. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/repo_onboard.py +0 -0
  272. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/reports.py +0 -0
  273. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/rest_schema.py +0 -0
  274. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/restart_cmd.py +0 -0
  275. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/revalidate.py +0 -0
  276. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/review.py +0 -0
  277. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/scorecard.py +0 -0
  278. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/self_health.py +0 -0
  279. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
  280. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
  281. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
  282. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
  283. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
  284. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/skills/portal-followup/SKILL.md +0 -0
  285. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/skills/release-now/SKILL.md +0 -0
  286. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
  287. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
  288. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/skills/update-issue/SKILL.md +0 -0
  289. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/smoke.py +0 -0
  290. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/spend_ceiling.py +0 -0
  291. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/split_work.py +0 -0
  292. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/sql.py +0 -0
  293. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/stage_projection.py +0 -0
  294. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/state.py +0 -0
  295. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/store_migrate.py +0 -0
  296. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/store_parity.py +0 -0
  297. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/templates/deploy-cloudflare.node.yml +0 -0
  298. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/test_author.py +0 -0
  299. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/test_chat.py +0 -0
  300. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/test_orchestrator.py +0 -0
  301. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/test_report.py +0 -0
  302. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/tui_release.py +0 -0
  303. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/uat_checks.py +0 -0
  304. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/usage.py +0 -0
  305. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/usage_limits.py +0 -0
  306. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/usage_rollup.py +0 -0
  307. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coord/worker_events.py +0 -0
  308. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/coordinator.example.yml +0 -0
  309. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-agent.service +0 -0
  310. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-backup.service +0 -0
  311. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-backup.timer +0 -0
  312. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-db-backup.service +0 -0
  313. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-db-backup.sh +0 -0
  314. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-db-backup.timer +0 -0
  315. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-dr-verify.service +0 -0
  316. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-dr-verify.timer +0 -0
  317. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-drive-queue.service +0 -0
  318. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-drive-queue.timer +0 -0
  319. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-failure-notify.service +0 -0
  320. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-failure-notify.sh +0 -0
  321. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-fleet-watchdog.service +0 -0
  322. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-fleet-watchdog.timer +0 -0
  323. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-notify.service +0 -0
  324. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-notify.timer +0 -0
  325. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-release-propagate.service +0 -0
  326. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-release-propagate.timer +0 -0
  327. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-release-window.service +0 -0
  328. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-release-window.timer +0 -0
  329. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-serve.service +0 -0
  330. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-web-dist-build.service +0 -0
  331. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-web-dist-build.sh +0 -0
  332. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-web-dist-build.timer +0 -0
  333. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-web-rollback.sh +0 -0
  334. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/coord-web.service +0 -0
  335. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/deploy/node-shim.sh +0 -0
  336. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/ADR_COORD_TUI_CI.md +0 -0
  337. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
  338. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/ADR_COORD_WEB_CI.md +0 -0
  339. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/ADR_COORD_WEB_DIST.md +0 -0
  340. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
  341. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/AGENT_OPERATIONS.md +0 -0
  342. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/ARCHITECTURE.md +0 -0
  343. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/ARCH_SECURITY_GATES.md +0 -0
  344. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/COCKPIT.md +0 -0
  345. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/CONTROL_CENTER.md +0 -0
  346. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/COST_DISCIPLINE.md +0 -0
  347. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/CROSS_PLATFORM.md +0 -0
  348. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/CUSTOMER_FACING_APPS.md +0 -0
  349. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/CUSTOMER_PORTAL.md +0 -0
  350. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/DATA_STORE_SELECTION.md +0 -0
  351. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/DISASTER_RECOVERY.md +0 -0
  352. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/DRIVE_QUEUE.md +0 -0
  353. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/EPHEMERAL_WORKERS.md +0 -0
  354. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/FORGE_MIGRATION.md +0 -0
  355. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/GRAPHIFY_SETUP.md +0 -0
  356. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/ISSUE_GUIDANCE.md +0 -0
  357. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/MAC_MINI.md +0 -0
  358. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
  359. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/NOTIFIER.md +0 -0
  360. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/OPENCODE_VERIFICATION.md +0 -0
  361. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/OPERATING_GOTCHAS.md +0 -0
  362. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/OPERATOR_GUIDES.md +0 -0
  363. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/ORACLE_LOOP.md +0 -0
  364. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/PHONE_WEBAPP.md +0 -0
  365. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/PIPELINE_V2.md +0 -0
  366. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/PLATFORM_EVOLUTION.md +0 -0
  367. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/SECOND_BACKEND.md +0 -0
  368. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/STORE_SERVICE.md +0 -0
  369. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/TEST_FIRST_BUG_LANE.md +0 -0
  370. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/WEB_CONTROL_CENTER.md +0 -0
  371. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/WSL_WINDOWS_WORKER.md +0 -0
  372. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/mocks/web/README.md +0 -0
  373. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/mocks/web/_tokens.css +0 -0
  374. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/mocks/web/issue-detail.html +0 -0
  375. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/mocks/web/pipeline-narrow.html +0 -0
  376. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/docs/mocks/web/pipeline-wide.html +0 -0
  377. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/graphify-out/.gitignore +0 -0
  378. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/install-agent.sh +0 -0
  379. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/pyproject.toml +0 -0
  380. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/audit_review_verdict_overrides.py +0 -0
  381. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/bootstrap-shared.sh +0 -0
  382. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/build-worker-image.sh +0 -0
  383. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/coordinator-machine.py +0 -0
  384. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/dr-down.sh +0 -0
  385. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/dr-up.sh +0 -0
  386. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/epic-down.sh +0 -0
  387. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/epic-up.sh +0 -0
  388. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/preflight.sh +0 -0
  389. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/provision-server.sh +0 -0
  390. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/provision-worker.sh +0 -0
  391. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
  392. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/tailnet-acl.hujson +0 -0
  393. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/throwaway-vm.sh +0 -0
  394. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/azure-workers/verify-github-token.sh +0 -0
  395. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/check_gh_argv_containment.py +0 -0
  396. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/codegen.py +0 -0
  397. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/coord-test-runner.sh +0 -0
  398. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
  399. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
  400. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
  401. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
  402. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/coord-venv-rollback.sh +0 -0
  403. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/drive-batch.sh +0 -0
  404. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/extract-coord-tui.sh +0 -0
  405. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/fleet_watchdog.py +0 -0
  406. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/gen_board_fixture.py +0 -0
  407. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/gen_mock_index.py +0 -0
  408. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/lib/provision-core.sh +0 -0
  409. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/next_release_tag.py +0 -0
  410. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/provision-machine.sh +0 -0
  411. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/run_tests_in_populated_home.sh +0 -0
  412. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/run_tests_without_gh.sh +0 -0
  413. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/setup-macmini.sh +0 -0
  414. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/smoke_437_interactive.py +0 -0
  415. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/verify-provision-noble.sh +0 -0
  416. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/verify_878_review_capture.py +0 -0
  417. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/verify_release_published.py +0 -0
  418. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/scripts/verify_release_wheel.py +0 -0
  419. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/setup.cfg +0 -0
  420. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/SMOKE_SET.md +0 -0
  421. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/__init__.py +0 -0
  422. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-37/conftest.py +0 -0
  423. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-37/contract.md +0 -0
  424. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-37/manifest.yml +0 -0
  425. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
  426. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
  427. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-51/contract.md +0 -0
  428. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
  429. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
  430. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-51/manifest.yml +0 -0
  431. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
  432. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-51/tsconfig.json +0 -0
  433. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
  434. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/backends.py +0 -0
  435. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/conftest.py +0 -0
  436. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/board-pipeline-basic.json +0 -0
  437. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
  438. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
  439. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
  440. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/opencode_run_sample.jsonl +0 -0
  441. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/playwright/all_pass.json +0 -0
  442. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/playwright/global_setup_crash.json +0 -0
  443. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/playwright/mixed_fail.json +0 -0
  444. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/playwright/retry_then_pass.json +0 -0
  445. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
  446. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/playwright/skip.json +0 -0
  447. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/playwright/truncated.json +0 -0
  448. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
  449. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
  450. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
  451. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
  452. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
  453. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
  454. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
  455. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
  456. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_acceptance.py +0 -0
  457. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_acceptance_drivers.py +0 -0
  458. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent.py +0 -0
  459. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_api_error.py +0 -0
  460. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_app.py +0 -0
  461. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_branch_base.py +0 -0
  462. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_branch_capture.py +0 -0
  463. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_config_free_1712.py +0 -0
  464. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_deploy_units_endpoint.py +0 -0
  465. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_dirty_worktree.py +0 -0
  466. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
  467. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_graph_self_heal.py +0 -0
  468. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_health_h3.py +0 -0
  469. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_idle_restart.py +0 -0
  470. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_push_failure.py +0 -0
  471. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_reap.py +0 -0
  472. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_repos_and_pull.py +0 -0
  473. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_restart_services_endpoint.py +0 -0
  474. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_skills_self_heal.py +0 -0
  475. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_startup_diagnostics.py +0 -0
  476. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_update.py +0 -0
  477. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_update_bluegreen.py +0 -0
  478. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_usage_limit.py +0 -0
  479. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_agent_zero_commit.py +0 -0
  480. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_ambient_home_isolation.py +0 -0
  481. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_approve_capability_reroute_3241.py +0 -0
  482. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_approve_dependency_busy_2804.py +0 -0
  483. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_approve_reject_plan.py +0 -0
  484. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_approve_usage_gate.py +0 -0
  485. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_approved_work_2532.py +0 -0
  486. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_approved_work_2996.py +0 -0
  487. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_assignment_already_recorded_daemon.py +0 -0
  488. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_audit_log.py +0 -0
  489. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_audit_outcome.py +0 -0
  490. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_audit_query.py +0 -0
  491. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_auto_loop.py +0 -0
  492. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_auto_release_publish_2035.py +0 -0
  493. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_backend_selection.py +0 -0
  494. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_backup.py +0 -0
  495. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_base_checkout_restore.py +0 -0
  496. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_block_log.py +0 -0
  497. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_board_cap_762.py +0 -0
  498. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_board_fixture.py +0 -0
  499. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_board_read_path.py +0 -0
  500. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_board_schema.py +0 -0
  501. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_board_service.py +0 -0
  502. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_board_state.py +0 -0
  503. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_board_wire.py +0 -0
  504. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_brain.py +0 -0
  505. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_branch_model.py +0 -0
  506. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_bug_intake.py +0 -0
  507. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_build_worker_image_env_update.py +0 -0
  508. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cargo_cache.py +0 -0
  509. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_check_gh_argv_containment.py +0 -0
  510. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_ci_acceptance_gate_1950.py +0 -0
  511. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_ci_fix.py +0 -0
  512. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_ci_github.py +0 -0
  513. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_ci_gitlab.py +0 -0
  514. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_ci_parity_2091.py +0 -0
  515. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_ci_store.py +0 -0
  516. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_claim.py +0 -0
  517. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_claude_md_budget.py +0 -0
  518. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_claude_setup_token.py +0 -0
  519. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_acceptance.py +0 -0
  520. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_assign.py +0 -0
  521. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
  522. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_assign_interactive_remote.py +0 -0
  523. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_assign_provider.py +0 -0
  524. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_assign_repo_drift_2219.py +0 -0
  525. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_audit.py +0 -0
  526. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_chat_continue.py +0 -0
  527. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_ci.py +0 -0
  528. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_codegen.py +0 -0
  529. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_decide.py +0 -0
  530. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_diagnose_capability_rules.py +0 -0
  531. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_diagnose_config_provenance.py +0 -0
  532. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_diagnose_forge_availability.py +0 -0
  533. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_diagnose_graph.py +0 -0
  534. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_diagnose_self.py +0 -0
  535. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_diagnose_test_coverage.py +0 -0
  536. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_doctor.py +0 -0
  537. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_doctor_config_free_1801.py +0 -0
  538. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
  539. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_doctor_store_backend_3084.py +0 -0
  540. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_drive.py +0 -0
  541. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_drive_queue.py +0 -0
  542. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_escalate.py +0 -0
  543. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_fix_headless_review.py +0 -0
  544. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_gate_a.py +0 -0
  545. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_install_drift.py +0 -0
  546. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_install_skills.py +0 -0
  547. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_issue_comment.py +0 -0
  548. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_issue_create_label.py +0 -0
  549. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_issue_reopen.py +0 -0
  550. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_issue_view_list.py +0 -0
  551. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_merge.py +0 -0
  552. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_milestone_assign.py +0 -0
  553. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_milestone_capture.py +0 -0
  554. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_milestone_chat_add_child.py +0 -0
  555. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_milestone_dispatch.py +0 -0
  556. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_milestone_gate_b.py +0 -0
  557. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_milestone_gate_c.py +0 -0
  558. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_milestone_order.py +0 -0
  559. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
  560. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_milestone_ship.py +0 -0
  561. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_network.py +0 -0
  562. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_new_issue_chat.py +0 -0
  563. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_portal.py +0 -0
  564. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_pr.py +0 -0
  565. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_pull_artifact.py +0 -0
  566. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_queue.py +0 -0
  567. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_reattach_sessions.py +0 -0
  568. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_refine_board.py +0 -0
  569. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_release_preflight.py +0 -0
  570. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_release_propagate.py +0 -0
  571. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_release_window.py +0 -0
  572. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_repo_2220.py +0 -0
  573. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
  574. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_scorecard.py +0 -0
  575. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_serve_store_backend_3084.py +0 -0
  576. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_set_review_findings.py +0 -0
  577. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_advisory_terminal.py +0 -0
  578. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_contested_tag.py +0 -0
  579. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_invariant_alarms.py +0 -0
  580. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_machine_fault.py +0 -0
  581. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_merge_queue.py +0 -0
  582. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_provider.py +0 -0
  583. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_retried_3340.py +0 -0
  584. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_review_finalizing.py +0 -0
  585. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_supervisor_3366.py +0 -0
  586. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_test_failed_tag.py +0 -0
  587. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_status_usage_limit.py +0 -0
  588. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_sync_comments_873.py +0 -0
  589. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_test_plan.py +0 -0
  590. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_track.py +0 -0
  591. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_tui_update.py +0 -0
  592. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cli_wait.py +0 -0
  593. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_client.py +0 -0
  594. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_client_base_install.py +0 -0
  595. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_client_config_cache_atomic_3052.py +0 -0
  596. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_client_resource_migration_1946.py +0 -0
  597. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_commands_common.py +0 -0
  598. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_comments.py +0 -0
  599. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_completion_summary.py +0 -0
  600. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_config.py +0 -0
  601. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_config_acceptance.py +0 -0
  602. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_config_audit.py +0 -0
  603. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_config_drift_check.py +0 -0
  604. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_config_effective.py +0 -0
  605. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_config_pricing.py +0 -0
  606. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
  607. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_config_usage_gate.py +0 -0
  608. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_confirm_test.py +0 -0
  609. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_conflict_fix.py +0 -0
  610. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_conflict_fix_semantic.py +0 -0
  611. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
  612. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_coord_test.py +0 -0
  613. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
  614. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_coord_test_runner_baseline.py +0 -0
  615. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_coord_test_runner_populated_home.py +0 -0
  616. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_coord_test_runner_routing.py +0 -0
  617. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_coord_test_runner_toolchain.py +0 -0
  618. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_coord_uat.py +0 -0
  619. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_coord_web_sse_restart_live.py +0 -0
  620. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_coordinator_machine.py +0 -0
  621. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_cross_platform_imports.py +0 -0
  622. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dao.py +0 -0
  623. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dashboard.py +0 -0
  624. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dashboard_api.py +0 -0
  625. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dashboard_fixture.py +0 -0
  626. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dashboard_server.py +0 -0
  627. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dashboard_terminal.py +0 -0
  628. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dashboard_terminal_live.py +0 -0
  629. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_db.py +0 -0
  630. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dead_end.py +0 -0
  631. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_decomposition_chat.py +0 -0
  632. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deploy_coord_db_backup.py +0 -0
  633. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deploy_coord_web_dist.py +0 -0
  634. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deploy_coord_web_rollback.py +0 -0
  635. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deploy_db_backup_unit.py +0 -0
  636. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deploy_drive_queue_unit.py +0 -0
  637. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deploy_failure_notify_unit.py +0 -0
  638. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deploy_manifest.py +0 -0
  639. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deploy_notify_unit.py +0 -0
  640. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deploy_units_lane.py +0 -0
  641. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deploy_web_unit.py +0 -0
  642. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deprecation_telemetry.py +0 -0
  643. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_deps.py +0 -0
  644. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_diagnose.py +0 -0
  645. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dispatch.py +0 -0
  646. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dispatch_liveness.py +0 -0
  647. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dispatch_target_validation.py +0 -0
  648. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dispatch_workers.py +0 -0
  649. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dist_name.py +0 -0
  650. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_done_housekeeping.py +0 -0
  651. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dr_azure_scripts.py +0 -0
  652. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dr_promote.py +0 -0
  653. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_dr_verify.py +0 -0
  654. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive.py +0 -0
  655. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive_machine_fault.py +0 -0
  656. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive_queue.py +0 -0
  657. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive_queue_blocked_rendering.py +0 -0
  658. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive_queue_launch_argv.py +0 -0
  659. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive_queue_max_parallel_config.py +0 -0
  660. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
  661. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive_queue_roll_pending.py +0 -0
  662. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
  663. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive_state.py +0 -0
  664. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_drive_tmux.py +0 -0
  665. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_epic_up_capability_detection.py +0 -0
  666. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
  667. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_epic_up_image_provenance.py +0 -0
  668. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_errors.py +0 -0
  669. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_events.py +0 -0
  670. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_failure_class.py +0 -0
  671. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_failure_classifier.py +0 -0
  672. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_filelock.py +0 -0
  673. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
  674. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_fix_escalation_classifier.py +0 -0
  675. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_fix_of_force_override.py +0 -0
  676. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_fleet_config_health.py +0 -0
  677. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_fleet_health_probes.py +0 -0
  678. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_fleet_health_snapshot.py +0 -0
  679. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_fleet_watchdog.py +0 -0
  680. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_forge_availability.py +0 -0
  681. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_freshness.py +0 -0
  682. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_gate_a.py +0 -0
  683. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_gate_b.py +0 -0
  684. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_gate_snapshot_staleness.py +0 -0
  685. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_gates.py +0 -0
  686. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_gather_fleet_tmux_sessions.py +0 -0
  687. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_gen_mock_index.py +0 -0
  688. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_generated_rust_fixture.py +0 -0
  689. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_generated_rust_requests.py +0 -0
  690. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_generated_types_fixture.py +0 -0
  691. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_github_ops.py +0 -0
  692. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_github_throttle.py +0 -0
  693. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_goal.py +0 -0
  694. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_graph_health.py +0 -0
  695. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_graph_selfheal_absent_2237.py +0 -0
  696. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_handoff.py +0 -0
  697. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_checks.py +0 -0
  698. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_cli.py +0 -0
  699. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_cli_graph.py +0 -0
  700. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_config.py +0 -0
  701. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_context.py +0 -0
  702. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_coord_tui_ci_pin.py +0 -0
  703. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_coord_web_ci_pin.py +0 -0
  704. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_deploy_lane_facts.py +0 -0
  705. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_fix.py +0 -0
  706. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_incident_regression.py +0 -0
  707. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_issues_sync_staleness.py +0 -0
  708. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_pr_churn.py +0 -0
  709. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_pypi.py +0 -0
  710. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_registry.py +0 -0
  711. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_release_cordon_probe.py +0 -0
  712. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_timer_active.py +0 -0
  713. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_toolchain.py +0 -0
  714. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_unit_drift.py +0 -0
  715. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_unit_enablement.py +0 -0
  716. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_health_wedged_drive_queue.py +0 -0
  717. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_hooks.py +0 -0
  718. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_housekeeping.py +0 -0
  719. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_human_attended_437.py +0 -0
  720. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_init.py +0 -0
  721. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_install_agent_venv_2911.py +0 -0
  722. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_integration.py +0 -0
  723. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_interactive_briefing_echo.py +0 -0
  724. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_interactive_pane_log_2541.py +0 -0
  725. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_interactive_prefill_state.py +0 -0
  726. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_interactive_session_relaunch.py +0 -0
  727. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_interactive_test_verdict_backstop.py +0 -0
  728. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_interactive_token_attribution.py +0 -0
  729. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_interactive_worktree.py +0 -0
  730. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_invariant_alarms.py +0 -0
  731. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_issue_store_seam.py +0 -0
  732. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_issues_sync_status.py +0 -0
  733. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_liveness_auditor.py +0 -0
  734. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_liveness_notify.py +0 -0
  735. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_lock_contention_ratchet.py +0 -0
  736. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_machine_fault.py +0 -0
  737. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_machine_metrics.py +0 -0
  738. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_machine_onboard.py +0 -0
  739. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_machine_pause.py +0 -0
  740. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_machine_stats.py +0 -0
  741. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_merge_queue.py +0 -0
  742. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_merge_verify.py +0 -0
  743. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_milestone_chat.py +0 -0
  744. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_milestone_dispatch.py +0 -0
  745. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_milestone_gate.py +0 -0
  746. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_milestone_seam.py +0 -0
  747. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_mock_author.py +0 -0
  748. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_model_tiering.py +0 -0
  749. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_models.py +0 -0
  750. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_models_config_labels.py +0 -0
  751. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_needs_attention.py +0 -0
  752. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_network.py +0 -0
  753. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_new_issue_chat.py +0 -0
  754. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_next_release_tag.py +0 -0
  755. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_node_shim.py +0 -0
  756. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notifier_baseline.py +0 -0
  757. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notifier_cli.py +0 -0
  758. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notifier_collect.py +0 -0
  759. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notifier_config.py +0 -0
  760. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notifier_drive_seam.py +0 -0
  761. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notifier_isolation.py +0 -0
  762. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notifier_predicate.py +0 -0
  763. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notifier_quiet_hours.py +0 -0
  764. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notifier_service.py +0 -0
  765. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notify.py +0 -0
  766. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_notify_drain.py +0 -0
  767. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_openapi.py +0 -0
  768. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_operational_defaults.py +0 -0
  769. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_overlap_fence.py +0 -0
  770. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_overlap_predict.py +0 -0
  771. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_packaged_deploy_units.py +0 -0
  772. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_paste_landed.py +0 -0
  773. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
  774. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_pipeline.py +0 -0
  775. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_plan_followup_approve_plan_command.py +0 -0
  776. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_plan_followup_pr_command.py +0 -0
  777. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_plan_followup_review_command.py +0 -0
  778. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_plan_only.py +0 -0
  779. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_plan_parser.py +0 -0
  780. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_platform_paths.py +0 -0
  781. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_portal_bridge.py +0 -0
  782. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_portal_config.py +0 -0
  783. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_portal_store.py +0 -0
  784. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_portal_sync.py +0 -0
  785. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_pr_body_lint.py +0 -0
  786. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_prereqs.py +0 -0
  787. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_production_db_guard.py +0 -0
  788. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_progress.py +0 -0
  789. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_provider_seam.py +0 -0
  790. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_providers.py +0 -0
  791. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_providers_config_labels.py +0 -0
  792. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_providers_pty.py +0 -0
  793. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_provision_core.py +0 -0
  794. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_provision_machine.py +0 -0
  795. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_py_rust_mirror_inventory.py +0 -0
  796. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_quiet_hours.py +0 -0
  797. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_quiet_hours_store_2146.py +0 -0
  798. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reap_merged_sessions.py +0 -0
  799. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reap_stale_interactive_tick.py +0 -0
  800. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reconcile.py +0 -0
  801. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reconcile_branch.py +0 -0
  802. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reconcile_completions.py +0 -0
  803. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
  804. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reconcile_merges.py +0 -0
  805. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reconcile_no_agent_record.py +0 -0
  806. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reconcile_tick.py +0 -0
  807. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reconcile_usage_limit_done.py +0 -0
  808. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_refine_chat.py +0 -0
  809. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_cordon_2101.py +0 -0
  810. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
  811. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_cordon_deadlock_2240.py +0 -0
  812. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_cordon_drain_stall_3336.py +0 -0
  813. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_cordon_stuck_2490.py +0 -0
  814. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_propagate.py +0 -0
  815. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_propagate_threshold.py +0 -0
  816. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_roll_between_legs_2854.py +0 -0
  817. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_roll_window_handoff.py +0 -0
  818. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_unified_1242.py +0 -0
  819. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_verify.py +0 -0
  820. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_release_window.py +0 -0
  821. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_remote_auto_prune.py +0 -0
  822. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_remote_interactive_reaper.py +0 -0
  823. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_repo_add.py +0 -0
  824. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_repo_dormancy.py +0 -0
  825. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_repo_edit_2220.py +0 -0
  826. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_repo_graph_fleet_2237.py +0 -0
  827. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_repo_max_parallel_3423.py +0 -0
  828. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_repo_onboard_2220.py +0 -0
  829. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_report_result_push.py +0 -0
  830. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_reports.py +0 -0
  831. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_restart_cmd.py +0 -0
  832. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_retry.py +0 -0
  833. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_retry_advisory_1606.py +0 -0
  834. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_retry_escalation_classify_3360.py +0 -0
  835. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_retry_type_1636.py +0 -0
  836. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_revalidate.py +0 -0
  837. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_review.py +0 -0
  838. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_review_end_review_without_verdict.py +0 -0
  839. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_review_parse_failure_diagnostic.py +0 -0
  840. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_review_reaffirm.py +0 -0
  841. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_review_state.py +0 -0
  842. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_review_verdict_backstop.py +0 -0
  843. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_review_verdict_override_audit.py +0 -0
  844. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_review_verdict_relay.py +0 -0
  845. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_review_zero_commits.py +0 -0
  846. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_scoped_review_wiring.py +0 -0
  847. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_scorecard.py +0 -0
  848. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_self_health.py +0 -0
  849. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_serve_app.py +0 -0
  850. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_serve_app_board_trim.py +0 -0
  851. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_serve_rest_routes.py +0 -0
  852. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_session.py +0 -0
  853. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_slice_issue_attribution.py +0 -0
  854. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_smoke.py +0 -0
  855. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_smoke_fanout_manifest_3333.py +0 -0
  856. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_smoke_live_checkout_restore.py +0 -0
  857. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_smoke_workflow.py +0 -0
  858. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_spend_ceiling.py +0 -0
  859. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_spend_ceiling_coordinator.py +0 -0
  860. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_split.py +0 -0
  861. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_split_work.py +0 -0
  862. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_sql_dialect.py +0 -0
  863. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_stage_projection.py +0 -0
  864. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_stale_busy_reviewer_697.py +0 -0
  865. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_stalled_pipeline.py +0 -0
  866. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_state.py +0 -0
  867. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_state_review_findings_daemon.py +0 -0
  868. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_status_fleet_footer.py +0 -0
  869. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_stop_1567.py +0 -0
  870. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_store_contract.py +0 -0
  871. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_store_migrate.py +0 -0
  872. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_stuck.py +0 -0
  873. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
  874. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_terminal_command.py +0 -0
  875. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_test_author.py +0 -0
  876. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_test_chat.py +0 -0
  877. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_test_orchestrator.py +0 -0
  878. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_test_report.py +0 -0
  879. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_test_verdict_parsing.py +0 -0
  880. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_test_verdict_transcript_floor.py +0 -0
  881. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_text_io_encoding_audit.py +0 -0
  882. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_thin_client_board_audit.py +0 -0
  883. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_thin_client_config_load_1080.py +0 -0
  884. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_thin_client_daemon_routing_906.py +0 -0
  885. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_throwaway_vm.py +0 -0
  886. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_tmux_host.py +0 -0
  887. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_tmux_session.py +0 -0
  888. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_transcript_floor.py +0 -0
  889. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_uat_checks.py +0 -0
  890. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_usage.py +0 -0
  891. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_usage_limits.py +0 -0
  892. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_usage_rollup.py +0 -0
  893. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_venv_live_install_2121.py +0 -0
  894. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_version_single_source.py +0 -0
  895. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_watch.py +0 -0
  896. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
  897. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_worker_env_venv_isolation.py +0 -0
  898. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_worker_events.py +0 -0
  899. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_worker_image_pin_sync.py +0 -0
  900. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_worker_safety.py +0 -0
  901. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_worker_test_scoping.py +0 -0
  902. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_worktree.py +0 -0
  903. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_worktree_rmtree_chokepoint.py +0 -0
  904. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/test_write_parity.py +0 -0
  905. {code_coordinator-0.5.509 → code_coordinator-0.5.510}/tests/write_parity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.509
3
+ Version: 0.5.510
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-coordinator
3
- Version: 0.5.509
3
+ Version: 0.5.510
4
4
  Summary: Coordinate Claude Code workers across multiple machines and repos.
5
5
  Author-email: John Donaghy <johnfdonaghy@gmail.com>
6
6
  License-Expression: LicenseRef-FSL-1.1-MIT
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.5.509",
2
+ "tag": "0.5.510",
3
3
  "distance": 0,
4
- "node": "gace3f38afa44e85a17064892c36412cab13d0d34",
4
+ "node": "gabffbb7b64a6328ecda34ff420009f23a1f7a96e",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-09-20"
@@ -41,6 +41,16 @@ declared children (:func:`coord.plans.find_stale_epics`, parsed from the
41
41
  epic's own cached body) are either unregistered (zero children) or all
42
42
  already closed in the cache. Like ``--lint-epics``, this only reports —
43
43
  never auto-closes the epic (out of scope per #3226).
44
+
45
+ ``--lint-epics`` also folds in :func:`coord.plans.find_unparseable_epics`
46
+ (#3426): an open, ``"epic"``-labelled issue whose ``## Sub-issues`` checklist
47
+ itself fails to parse — a genuinely different failure from "title reads as
48
+ an epic but isn't labelled". Unlike every other lint here, a hit is not
49
+ merely informational: the board-payload ``children`` projection and every
50
+ other :class:`~coord.parentage.MarkdownParentage` consumer silently reports
51
+ "zero children" for that epic (indistinguishable from one that genuinely has
52
+ none — vimcode#1170), so this command exits non-zero when it finds one,
53
+ naming the offending issue, repo and the unparseable line.
44
54
  """
45
55
 
46
56
  from __future__ import annotations
@@ -174,6 +184,7 @@ def plans_cmd(
174
184
  # milestones). Both flags share a single cache fetch when both are
175
185
  # passed, rather than reading the table twice.
176
186
  unlabelled_epics: list[dict] = []
187
+ unparseable_epics: list[dict] = []
177
188
  stale_epics: list[dict] = []
178
189
  if lint_epics or lint_stale_epics:
179
190
  from coord import state # noqa: PLC0415
@@ -182,12 +193,25 @@ def plans_cmd(
182
193
  cached_issues = state.cached_open_issues(target_repo_names)
183
194
 
184
195
  if lint_epics:
185
- from coord.plans import find_unlabelled_epics # noqa: PLC0415
196
+ from coord.plans import ( # noqa: PLC0415
197
+ find_unlabelled_epics,
198
+ find_unparseable_epics,
199
+ )
186
200
 
187
201
  unlabelled_epics = sorted(
188
202
  find_unlabelled_epics(cached_issues),
189
203
  key=lambda i: (i.get("repo_name", ""), i.get("number", 0)),
190
204
  )
205
+ # #3426: a genuinely unparseable `## Sub-issues` checklist is a
206
+ # different, more serious failure than "title reads as an epic
207
+ # but isn't labelled" — every other consumer of this checklist
208
+ # (the board payload, find_stale_epics, github_ops's close-guard)
209
+ # silently reports "zero children" for it, so this is the one
210
+ # place it surfaces. Drives the non-zero exit below.
211
+ unparseable_epics = sorted(
212
+ find_unparseable_epics(cached_issues),
213
+ key=lambda i: (i.get("repo_name", ""), i.get("number", 0)),
214
+ )
191
215
 
192
216
  if lint_stale_epics:
193
217
  from coord.plans import find_stale_epics # noqa: PLC0415
@@ -214,6 +238,15 @@ def plans_cmd(
214
238
  }
215
239
  for i in unlabelled_epics
216
240
  ]
241
+ combined["unparseable_epics"] = [
242
+ {
243
+ "repo": i.get("repo_name"),
244
+ "number": i.get("number"),
245
+ "title": i.get("title"),
246
+ "error": i.get("error"),
247
+ }
248
+ for i in unparseable_epics
249
+ ]
217
250
  if lint_stale_epics:
218
251
  combined["stale_epics"] = [
219
252
  {
@@ -229,6 +262,11 @@ def plans_cmd(
229
262
  click.echo(json.dumps(combined, indent=2))
230
263
  else:
231
264
  click.echo(json.dumps(payload, indent=2))
265
+ # #3426: a genuinely unparseable epic must not exit 0 — that's the
266
+ # whole reason this survived undetected on vimcode#1170 (every
267
+ # consumer failed open AND the lint printed nothing).
268
+ if unparseable_epics:
269
+ sys.exit(1)
232
270
  return
233
271
 
234
272
  # Human-readable table.
@@ -268,6 +306,21 @@ def plans_cmd(
268
306
  else:
269
307
  click.echo("No unlabelled epics found.")
270
308
 
309
+ click.echo("")
310
+ if unparseable_epics:
311
+ click.echo(
312
+ "Unparseable epics (`## Sub-issues` checklist fails to "
313
+ "parse — every child of this epic is invisible everywhere "
314
+ "until the line below is fixed by hand):"
315
+ )
316
+ for i in unparseable_epics:
317
+ click.echo(
318
+ f" {i.get('repo_name')} #{i.get('number')} {i.get('title')!r}\n"
319
+ f" {i.get('error')}"
320
+ )
321
+ else:
322
+ click.echo("No unparseable epics found.")
323
+
271
324
  if lint_stale_epics:
272
325
  click.echo("")
273
326
  if stale_epics:
@@ -283,3 +336,8 @@ def plans_cmd(
283
336
  )
284
337
  else:
285
338
  click.echo("No stale epics found.")
339
+
340
+ # #3426: see the json_out branch above — same non-zero-exit rule for the
341
+ # human-readable path.
342
+ if unparseable_epics:
343
+ sys.exit(1)
@@ -181,7 +181,26 @@ _SUB_ISSUES_HEADING_RE = re.compile(r"^#{1,6}\s*Sub-issues\s*$", re.IGNORECASE)
181
181
  # grammar is migrating to drop it (`- #N {...}` instead of `- [ ] #N {...}`).
182
182
  # Both forms parse identically during the migration; `coord milestone sync`
183
183
  # is what rewrites existing bodies to the checkbox-free form.
184
- _ITEM_RE = re.compile(r"^-\s*(?:\[([ xX])\]\s*)?#(\d+)\s*(\{([^}]*)\})?")
184
+ # #3426: a leading emphasis marker (`**`, `*`, `_`) between the checkbox and
185
+ # `#N` is stripped before matching — `- [ ] **#1206 — tranche 2 of
186
+ # #1191**: ...` is a reasonable thing for a human to type (bolding the lead
187
+ # item is normal markdown) and used to raise `WorkOrderError` on the whole
188
+ # section, silently voiding every sibling line too (vimcode#1170).
189
+ #
190
+ # A *closing* emphasis marker immediately after the digits (e.g.
191
+ # `- [ ] **#765** {after: #762,#763}`, where only the issue number itself is
192
+ # bolded) is also optionally consumed here, before the annotation. Without
193
+ # this, `.match()` (not `.fullmatch()`) would still successfully match just
194
+ # the `- [ ] **#765` prefix, silently dropping the `{after: ...}` annotation
195
+ # instead of raising — trading a loud whole-block failure for a silent
196
+ # wrong answer (review finding on #3426). The real vimcode#1170 shape
197
+ # (`- [ ] **#1206 -- tranche 2 of #1191**: ...`, where the closing `**` is
198
+ # not adjacent to the digits) is unaffected: there the digits are followed by
199
+ # " -- tranche...", not `**`, so this optional group simply doesn't match
200
+ # there and the rest of the line is still ignored by `.match`.
201
+ _ITEM_RE = re.compile(
202
+ r"^-\s*(?:\[([ xX])\]\s*)?(?:\*\*|\*|_)?#(\d+)(?:\*\*|\*|_)?\s*(\{([^}]*)\})?"
203
+ )
185
204
  # Splits `key: value` pairs on commas that precede the *next* key, so an
186
205
  # `after: #762,#763` value (itself comma-separated) isn't cut mid-list.
187
206
  _PAIR_RE = re.compile(r"(\w+)\s*:\s*(.*?)(?=,\s*\w+\s*:|$)")
@@ -61,6 +61,17 @@ Design decisions (#974):
61
61
  the ``## Sub-issues``/``## Work order`` checklist's own ``[x]``/``[ ]`` box,
62
62
  which #1061 stopped keeping in sync with reality. The CLI command
63
63
  (``coord plans --lint-stale-epics``) is what reads the local cache.
64
+ - **Unparseable-checklist lint (#3426)**. :func:`find_unparseable_epics` is a
65
+ third read-only lint over the same locally-cached ``issues`` shape: an open,
66
+ ``"epic"``-labelled issue whose ``## Sub-issues`` checklist itself fails to
67
+ parse (:class:`~coord.milestone_order.WorkOrderError`) rather than merely
68
+ having zero/all-closed children. Every OTHER call site over the same
69
+ checklist (the board-payload ``children`` projection, :func:`find_stale_epics`
70
+ above, ``coord/github_ops.py``'s close-guard) catches that error and reports
71
+ "no children" — indistinguishable from an epic that genuinely has none, and
72
+ silent (vimcode#1170: three bold-prefixed lines hid all 24 real children with
73
+ no warning anywhere). This lint is what makes that failure visible: folded
74
+ into ``coord plans --lint-epics``, which exits non-zero when it finds one.
64
75
  """
65
76
 
66
77
  from __future__ import annotations
@@ -86,6 +97,7 @@ __all__ = [
86
97
  "PlanEntry",
87
98
  "find_tracking_issue",
88
99
  "find_unlabelled_epics",
100
+ "find_unparseable_epics",
89
101
  "find_stale_epics",
90
102
  "aggregate_plan",
91
103
  "aggregate_repo_plans",
@@ -275,6 +287,77 @@ def find_unlabelled_epics(issues: list[dict]) -> list[dict]:
275
287
  return hits
276
288
 
277
289
 
290
+ # ── Unparseable-checklist lint (#3426) ──────────────────────────────────────
291
+
292
+
293
+ def find_unparseable_epics(issues: list[dict]) -> list[dict]:
294
+ """Return open, ``TRACKING_ISSUE_LABEL``-labelled issues whose ``##
295
+ Sub-issues`` checklist fails to parse (#3426).
296
+
297
+ Every call site downstream of :class:`coord.parentage.MarkdownParentage`
298
+ (the board-payload ``children`` projection, :func:`find_stale_epics`
299
+ below, and ``coord/github_ops.py``'s close-guard) catches
300
+ :class:`~coord.milestone_order.WorkOrderError` and reports "zero
301
+ children" for the whole epic — indistinguishable from an epic that
302
+ genuinely has none. A single malformed line (e.g. an issue number
303
+ wrapped in ``**bold**``, before #3426 widened the grammar to strip a
304
+ leading emphasis marker) used to hide EVERY sibling line in the same
305
+ block too: vimcode#1170, three bold-prefixed lines hiding all 24
306
+ children while two were in flight, with nothing reporting it anywhere.
307
+
308
+ This lint is the one place that surfaces the failure instead of
309
+ swallowing it: it re-derives each epic's children through the exact same
310
+ seam the board payload uses — :class:`coord.parentage.MarkdownParentage`
311
+ .children(..., fallback_to_work_order=True) — and reports the ones that
312
+ still raise, each hit carrying the original issue dict plus an
313
+ ``"error"`` key with the exact :class:`~coord.milestone_order.
314
+ WorkOrderError` message (names the offending line).
315
+
316
+ Deliberately *not* a direct call to :func:`coord.milestone_order.
317
+ parse_sub_issues` (#3426 review finding): ``coord/serve_app.py``'s board
318
+ payload additionally falls back to ``## Work order`` when ``##
319
+ Sub-issues`` is absent/empty (common for epics that predate #1008, per
320
+ the #1197 fix-iteration finding), and that fallback parse can itself
321
+ raise. Calling ``parse_sub_issues`` alone here would let this lint and
322
+ the board payload disagree about whether the same epic is parseable —
323
+ the "one question, one answer" split-brain this repo's #2096 calls out.
324
+ Going through :class:`~coord.parentage.MarkdownParentage` with the same
325
+ ``fallback_to_work_order=True`` keeps the two consumers from being able
326
+ to diverge.
327
+
328
+ ``issues`` is the same local-cache shape :func:`find_unlabelled_epics` /
329
+ :func:`find_stale_epics` consume (``labels`` as a plain ``list[str]``,
330
+ plus ``"body"``). Read-only — flags only; the caller (``coord plans
331
+ --lint-epics``) is what turns a non-empty result into a non-zero exit
332
+ code.
333
+ """
334
+ parentage = MarkdownParentage()
335
+ hits: list[dict] = []
336
+ for issue in issues:
337
+ state = (issue.get("state") or "open").lower()
338
+ if state != "open":
339
+ continue
340
+ raw_labels = issue.get("labels") or []
341
+ label_names = {
342
+ lbl["name"] if isinstance(lbl, dict) else str(lbl) for lbl in raw_labels
343
+ }
344
+ if TRACKING_ISSUE_LABEL not in label_names:
345
+ continue
346
+ number = issue.get("number")
347
+ if number is None:
348
+ continue
349
+ try:
350
+ parentage.children(
351
+ issue.get("repo_name", ""),
352
+ int(number),
353
+ body=issue.get("body") or "",
354
+ fallback_to_work_order=True,
355
+ )
356
+ except Exception as exc: # noqa: BLE001 — #3426: report it, don't swallow it
357
+ hits.append({**issue, "error": str(exc)})
358
+ return hits
359
+
360
+
278
361
  # ── Stale-tracker lint (#3228) ──────────────────────────────────────────────
279
362
 
280
363
 
@@ -2785,6 +2785,32 @@ def _board_response_schema(components: dict) -> dict:
2785
2785
  "required": ["repo_name", "tracking_issue", "children"],
2786
2786
  },
2787
2787
  },
2788
+ "children_errors": {
2789
+ "type": "array",
2790
+ "description": (
2791
+ "#3426: per-epic parse failures for the same `## "
2792
+ "Sub-issues`/`## Work order` checklist `children` above "
2793
+ "resolves — one entry per tracking issue whose checklist "
2794
+ "raised coord.milestone_order.WorkOrderError (e.g. a "
2795
+ "duplicate `#N`, an `after` edge to an undeclared issue, "
2796
+ "a dependency cycle) instead of yielding zero/some "
2797
+ "children. Surfaces the failure instead of the silent "
2798
+ "'zero children' `children` would otherwise report for "
2799
+ "the same epic (vimcode#1170)."
2800
+ ),
2801
+ "items": {
2802
+ "type": "object",
2803
+ "properties": {
2804
+ "repo_name": {"type": "string"},
2805
+ "tracking_issue": {"type": "integer"},
2806
+ "error": {
2807
+ "type": "string",
2808
+ "description": "the WorkOrderError message, naming the offending line",
2809
+ },
2810
+ },
2811
+ "required": ["repo_name", "tracking_issue", "error"],
2812
+ },
2813
+ },
2788
2814
  },
2789
2815
  "required": [
2790
2816
  "schema_version", "round_number", "assignments", "machines",
@@ -6672,6 +6698,7 @@ def build_app(
6672
6698
 
6673
6699
  _parentage = _MarkdownParentage()
6674
6700
  _epic_children: list[dict] = []
6701
+ _epic_children_errors: list[dict] = []
6675
6702
  for _ci_ti in projection.get("issues", []):
6676
6703
  _ci_labels = _ci_ti.get("labels") or []
6677
6704
  if _TRACKING_LABEL not in _ci_labels:
@@ -6684,7 +6711,19 @@ def build_app(
6684
6711
  "", _ci_ti["number"], body=_ci_ti.get("body") or "",
6685
6712
  fallback_to_work_order=True,
6686
6713
  )
6687
- except Exception: # noqa: BLE001 — bad sub-issues block: skip this epic only
6714
+ except Exception as _ci_exc: # noqa: BLE001 — #3426: surface, don't swallow
6715
+ # A malformed `## Sub-issues` (or, via the fallback,
6716
+ # `## Work order`) block on THIS epic must not blank
6717
+ # ITS children nor any sibling epic's — fail this one
6718
+ # epic open (report it, zero children) rather than
6719
+ # letting the exception mean "silently no children"
6720
+ # (vimcode#1170: three bad lines hid all 24 real
6721
+ # children with nothing reporting it anywhere).
6722
+ _epic_children_errors.append({
6723
+ "repo_name": _ci_repo_name,
6724
+ "tracking_issue": _ci_ti["number"],
6725
+ "error": str(_ci_exc),
6726
+ })
6688
6727
  continue
6689
6728
  if _ci_kids:
6690
6729
  _epic_children.append({
@@ -6695,8 +6734,10 @@ def build_app(
6695
6734
  ],
6696
6735
  })
6697
6736
  projection["children"] = _epic_children
6737
+ projection["children_errors"] = _epic_children_errors
6698
6738
  except Exception: # noqa: BLE001 — children failure must not blank the board
6699
6739
  projection["children"] = []
6740
+ projection["children_errors"] = []
6700
6741
  # #975: milestone plan-roster — reuse coord.plans.aggregate_repo_plans
6701
6742
  # server-side so the Plans TUI panel gets one row per milestone/epic
6702
6743
  # (ready / blocked / in-flight / done counts, needs_you attention
@@ -28,6 +28,7 @@ from coord.plans import (
28
28
  find_stale_epics,
29
29
  find_tracking_issue,
30
30
  find_unlabelled_epics,
31
+ find_unparseable_epics,
31
32
  )
32
33
  from coord.state import upsert_open_issues
33
34
 
@@ -865,6 +866,113 @@ class TestFindUnlabelledEpics:
865
866
  assert find_unlabelled_epics(issues) == []
866
867
 
867
868
 
869
+ # ── find_unparseable_epics (#3426) ───────────────────────────────────────────
870
+
871
+
872
+ class TestFindUnparseableEpics:
873
+ def test_malformed_sub_issues_block_is_flagged_with_error_message(self) -> None:
874
+ """The real vimcode#1170 shape: a bold-prefixed issue number used to
875
+ make the whole `## Sub-issues` block unparseable (before #3426
876
+ widened the grammar to strip a leading `**`/`*`/`_`). Pin an entry
877
+ that IS still genuinely malformed (a duplicate `#N`) so this lint
878
+ keeps a live regression even after the bold case itself stops
879
+ failing."""
880
+ issues = [
881
+ _cached_issue(
882
+ 1170,
883
+ "Epic: vimcode integration",
884
+ labels=["epic"],
885
+ body="## Sub-issues\n- [ ] #10\n- [ ] #10\n",
886
+ )
887
+ ]
888
+ hits = find_unparseable_epics(issues)
889
+ assert [h["number"] for h in hits] == [1170]
890
+ assert "#10" in hits[0]["error"]
891
+ assert "more than once" in hits[0]["error"]
892
+
893
+ def test_bold_prefixed_issue_number_is_not_flagged(self) -> None:
894
+ """#3426's grammar widening means the common case (bolding the lead
895
+ item) is no longer even a hit for this lint."""
896
+ issues = [
897
+ _cached_issue(
898
+ 1170,
899
+ "Epic: vimcode integration",
900
+ labels=["epic"],
901
+ body=(
902
+ "## Sub-issues\n"
903
+ "- [ ] **#1206 — tranche 2 of #1191**: the 8 remaining "
904
+ "value options\n"
905
+ ),
906
+ )
907
+ ]
908
+ assert find_unparseable_epics(issues) == []
909
+
910
+ def test_well_formed_checklist_is_not_flagged(self) -> None:
911
+ issues = [_epic_with_sub_issues(700, "Epic: healthy", [701, 702])]
912
+ assert find_unparseable_epics(issues) == []
913
+
914
+ def test_no_sub_issues_block_is_not_flagged(self) -> None:
915
+ """No `## Sub-issues` heading at all just parses empty — that's a
916
+ different, non-error state from a present-but-broken block."""
917
+ issues = [_cached_issue(1, "Epic: no checklist yet", labels=["epic"])]
918
+ assert find_unparseable_epics(issues) == []
919
+
920
+ def test_non_epic_issue_is_not_flagged(self) -> None:
921
+ issues = [
922
+ _cached_issue(
923
+ 1, "Fix flaky test", body="## Sub-issues\n- [ ] #10\n- [ ] #10\n"
924
+ )
925
+ ]
926
+ assert find_unparseable_epics(issues) == []
927
+
928
+ def test_closed_epic_is_not_flagged(self) -> None:
929
+ issues = [
930
+ _cached_issue(
931
+ 2,
932
+ "Epic: closed",
933
+ labels=["epic"],
934
+ state="closed",
935
+ body="## Sub-issues\n- [ ] #10\n- [ ] #10\n",
936
+ )
937
+ ]
938
+ assert find_unparseable_epics(issues) == []
939
+
940
+ def test_malformed_work_order_fallback_is_flagged_when_sub_issues_absent(
941
+ self,
942
+ ) -> None:
943
+ """Non-blocking review finding on #3426: the board payload's
944
+ `MarkdownParentage.children(..., fallback_to_work_order=True)` falls
945
+ back to `## Work order` when `## Sub-issues` is absent/empty (#1197 —
946
+ common for epics that predate #1008), and that fallback parse can
947
+ itself raise. This lint must go through the same seam so it can't
948
+ report "clean" for an epic the board payload reports as broken."""
949
+ issues = [
950
+ _cached_issue(
951
+ 1170,
952
+ "Epic: predates sub-issues",
953
+ labels=["epic"],
954
+ body="## Work order\n- [ ] #10\n- [ ] #10\n",
955
+ )
956
+ ]
957
+ hits = find_unparseable_epics(issues)
958
+ assert [h["number"] for h in hits] == [1170]
959
+ assert "more than once" in hits[0]["error"]
960
+
961
+ def test_one_malformed_epic_does_not_suppress_a_sibling_epic(self) -> None:
962
+ """The reason this bug survived: a parse failure used to hide
963
+ EVERYTHING for that epic, silently. The lint itself must not let one
964
+ bad epic blank out a well-formed sibling's result either."""
965
+ malformed = _cached_issue(
966
+ 100,
967
+ "Epic: malformed checklist",
968
+ labels=["epic"],
969
+ body="## Sub-issues\n- [ ] #10\n- [ ] #10\n",
970
+ )
971
+ healthy = _epic_with_sub_issues(700, "Epic: healthy", [701, 702])
972
+ hits = find_unparseable_epics([malformed, healthy])
973
+ assert [h["number"] for h in hits] == [100]
974
+
975
+
868
976
  # ── find_stale_epics (#3228) ─────────────────────────────────────────────────
869
977
 
870
978
 
@@ -1085,6 +1193,111 @@ class TestLintEpicsCli:
1085
1193
  data = json.loads(result.output)
1086
1194
  assert data == []
1087
1195
 
1196
+ def test_unparseable_sub_issues_block_exits_non_zero_and_names_the_line(
1197
+ self, config_file: Path
1198
+ ) -> None:
1199
+ """#3426: this is the whole point of the lint — before this fix,
1200
+ an epic body that couldn't be parsed (vimcode#1170) produced NO
1201
+ output anywhere and exit 0, which is why the failure went
1202
+ undetected. Now the offending issue, repo and line must all be
1203
+ named, and the process must exit non-zero."""
1204
+ upsert_open_issues(
1205
+ "api",
1206
+ [
1207
+ {
1208
+ "number": 1170,
1209
+ "title": "Epic: vimcode integration",
1210
+ "body": "## Sub-issues\n- [ ] #10\n- [ ] #10\n",
1211
+ "labels": [{"name": "epic"}],
1212
+ },
1213
+ ],
1214
+ )
1215
+ with (
1216
+ patch("coord.github_ops.get_repo_milestones", return_value=[]),
1217
+ patch("coord.github_ops.get_open_issues", return_value=[]),
1218
+ patch("coord.github_ops.get_closed_epics", return_value=[]),
1219
+ ):
1220
+ result = CliRunner().invoke(
1221
+ main,
1222
+ ["plans", "--lint-epics", "--config", str(config_file)],
1223
+ )
1224
+ assert result.exit_code != 0
1225
+ assert "api" in result.output
1226
+ assert "#1170" in result.output
1227
+ assert "#10" in result.output
1228
+ assert "more than once" in result.output
1229
+
1230
+ def test_unparseable_epic_does_not_suppress_an_unrelated_repo(
1231
+ self, config_file: Path
1232
+ ) -> None:
1233
+ """Fail-open, per the acceptance bar: one malformed epic must not
1234
+ blank another, well-formed epic's lint output (still non-zero exit,
1235
+ but the healthy epic's absence from `unlabelled_epics`/other output
1236
+ is unaffected, and it never appears in `unparseable_epics`)."""
1237
+ upsert_open_issues(
1238
+ "api",
1239
+ [
1240
+ {
1241
+ "number": 1170,
1242
+ "title": "Epic: vimcode integration",
1243
+ "body": "## Sub-issues\n- [ ] #10\n- [ ] #10\n",
1244
+ "labels": [{"name": "epic"}],
1245
+ },
1246
+ {
1247
+ "number": 900,
1248
+ "title": "Epic: healthy",
1249
+ "body": "## Sub-issues\n- [ ] #901\n",
1250
+ "labels": [{"name": "epic"}],
1251
+ },
1252
+ ],
1253
+ )
1254
+ with (
1255
+ patch("coord.github_ops.get_repo_milestones", return_value=[]),
1256
+ patch("coord.github_ops.get_open_issues", return_value=[]),
1257
+ patch("coord.github_ops.get_closed_epics", return_value=[]),
1258
+ ):
1259
+ result = CliRunner().invoke(
1260
+ main,
1261
+ ["plans", "--lint-epics", "--json", "--config", str(config_file)],
1262
+ )
1263
+ assert result.exit_code != 0
1264
+ data = json.loads(result.output)
1265
+ assert [e["number"] for e in data["unparseable_epics"]] == [1170]
1266
+
1267
+ def test_bold_prefixed_issue_number_does_not_trip_the_lint(
1268
+ self, config_file: Path
1269
+ ) -> None:
1270
+ """#3426's grammar widening: the common case (bolding the lead item)
1271
+ must parse cleanly and exit 0 — it's the genuinely-malformed case
1272
+ above that must fail."""
1273
+ upsert_open_issues(
1274
+ "api",
1275
+ [
1276
+ {
1277
+ "number": 1170,
1278
+ "title": "Epic: vimcode integration",
1279
+ "body": (
1280
+ "## Sub-issues\n"
1281
+ "- [ ] **#1206 — tranche 2 of #1191**: the 8 "
1282
+ "remaining value options\n"
1283
+ ),
1284
+ "labels": [{"name": "epic"}],
1285
+ },
1286
+ ],
1287
+ )
1288
+ with (
1289
+ patch("coord.github_ops.get_repo_milestones", return_value=[]),
1290
+ patch("coord.github_ops.get_open_issues", return_value=[]),
1291
+ patch("coord.github_ops.get_closed_epics", return_value=[]),
1292
+ ):
1293
+ result = CliRunner().invoke(
1294
+ main,
1295
+ ["plans", "--lint-epics", "--json", "--config", str(config_file)],
1296
+ )
1297
+ assert result.exit_code == 0, result.output
1298
+ data = json.loads(result.output)
1299
+ assert data["unparseable_epics"] == []
1300
+
1088
1301
 
1089
1302
  # ── coord plans --lint-stale-epics CLI integration (#3228) ──────────────────
1090
1303
 
@@ -551,6 +551,76 @@ class TestParseSubIssuesErrors:
551
551
  parse_sub_issues(body)
552
552
 
553
553
 
554
+ class TestParseSubIssuesEmphasisMarkers:
555
+ """#3426: a leading `**`/`*`/`_` between the checkbox and `#N` is normal
556
+ markdown (bolding the lead item is a reasonable thing for a human to
557
+ type) and used to raise `WorkOrderError` for the whole line — and,
558
+ because `_parse_checklist_section` raises rather than skipping just that
559
+ line, silently voided every OTHER (well-formed) sibling line in the same
560
+ `## Sub-issues` block too. The fixture below pins the actual vimcode#1170
561
+ text: three bold-prefixed lines hid all 24 real children, 21 of which
562
+ parsed perfectly, until the three were corrected by hand.
563
+ """
564
+
565
+ # Real text from vimcode#1170 (trimmed to a representative slice — the
566
+ # exact three offending lines plus enough plain siblings to prove they
567
+ # stop being collateral damage).
568
+ VIMCODE_1170_BODY = """\
569
+ Epic intro prose.
570
+
571
+ ## Sub-issues
572
+ - [ ] #1201 {group: A}
573
+ - [ ] #1202 {group: A}
574
+ - [ ] #1203 {group: A}
575
+ - [ ] **#1206 — tranche 2 of #1191**: the 8 remaining value options land here
576
+ - [ ] **#1207 — tranche 3 of #1191**: another bold-prefixed line
577
+ - [ ] **#1208 — tranche 4 of #1191**: a third bold-prefixed line
578
+ - [ ] #1209 {group: B}
579
+ """
580
+
581
+ def test_bold_prefixed_lines_parse_alongside_plain_siblings(self) -> None:
582
+ wo = parse_sub_issues(self.VIMCODE_1170_BODY)
583
+ assert wo.issue_numbers == (1201, 1202, 1203, 1206, 1207, 1208, 1209)
584
+
585
+ def test_bold_prefixed_line_yields_the_same_node_as_a_plain_line(self) -> None:
586
+ bold = "## Sub-issues\n- [ ] **#42 — prose here**: more prose\n"
587
+ plain = "## Sub-issues\n- [ ] #42\n"
588
+ assert parse_sub_issues(bold).node(42) == parse_sub_issues(plain).node(42)
589
+
590
+ def test_single_asterisk_and_underscore_emphasis_also_strip(self) -> None:
591
+ assert parse_sub_issues("## Sub-issues\n- [ ] *#7 — prose*\n").issue_numbers == (7,)
592
+ assert parse_sub_issues("## Sub-issues\n- [ ] _#7 — prose_\n").issue_numbers == (7,)
593
+
594
+ def test_bold_wrapped_number_with_trailing_annotation_keeps_the_after_edge(
595
+ self,
596
+ ) -> None:
597
+ """Review finding on #3426: a line that bolds *only* the issue number
598
+ and then carries an annotation right after the closing `**` (e.g.
599
+ `- [ ] **#765** {after: #762,#763}`) must not silently drop the
600
+ `after` edge. Before the fix, `.match()` (not `.fullmatch()`) still
601
+ matched just the `- [ ] **#765` prefix and returned `after=()` —
602
+ parsing "successfully" while quietly discarding a real dependency
603
+ edge, which `ready_frontier` consumes for dispatch ordering."""
604
+ body = (
605
+ "## Work order\n"
606
+ "- [ ] #762\n"
607
+ "- [ ] #763\n"
608
+ "- [ ] **#765** {after: #762,#763}\n"
609
+ )
610
+ wo = parse_work_order(body)
611
+ assert wo.node(765).after == (762, 763)
612
+
613
+ def test_a_line_that_is_still_malformed_still_raises(self) -> None:
614
+ """Widening the grammar removes ONE failure class, not all of them —
615
+ a genuinely malformed line (no `#N` at all) still raises, and it
616
+ still voids the whole section (that fail-loud behavior at this
617
+ layer is unchanged; #3426's fix-open behavior lives one layer up,
618
+ at the callers of `parse_sub_issues`)."""
619
+ body = "## Sub-issues\n- [ ] #1\n- this is not a sub-issue item\n"
620
+ with pytest.raises(WorkOrderError, match="unparseable line"):
621
+ parse_sub_issues(body)
622
+
623
+
554
624
  class TestRenderSubIssues:
555
625
  def test_is_render_work_order(self) -> None:
556
626
  """render_sub_issues is an alias — heading-agnostic rendering means