code-coordinator 0.5.543__tar.gz → 0.5.544__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.
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/PKG-INFO +1 -1
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/milestone.py +56 -3
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/milestone_dispatch.py +145 -20
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/milestone_order.py +13 -5
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/serve_app.py +60 -13
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_milestone_order.py +94 -5
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive.py +15 -4
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_milestone_dispatch.py +125 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_milestone_gate.py +96 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/.gitignore +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/CLAUDE.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/GOAL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/LICENSE +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/MANIFEST.in +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/README.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/__init__.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/agent.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/approved_work.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/audit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/backup.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/block_log.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/board_schema.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/board_service.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/brain.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/ci_fix.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/ci_gitlab.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/claim.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/claude_setup_token.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/cli.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/client.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/codegen.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/backup.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/ci.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/codegen.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/dr.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/machine.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/pr.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/store_migrate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/comments.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/config.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/confirm_test.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dao.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/db.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/decomposition_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/deps.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dispatch_liveness.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dr_promote.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/dr_verify.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/drive.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/events.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/failure_classifier.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/filelock.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/forge_availability.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/freshness.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/gates.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/github_throttle.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/goal.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/_ci_pin.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/config_drift.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/local_machine_identity.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/pr_churn.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/release_cordon.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/stalled_pipeline.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/context.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/models.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/render.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/health/units.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/hooks.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/interactive.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/invariant_alarms.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/issues_sync_status.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/machine_fault.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/machine_metrics.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/machine_onboard.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/machine_stats.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/models.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/network.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/notify.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/openapi.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/parentage.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/plans.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/progress.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/release_window.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/repo_dormancy.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/reports.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/rest_schema.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/restart_cmd.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/review.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/self_health.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/skills/release-now/SKILL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/smoke.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/smoke_tags.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/split_work.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/sql.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/state.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/store_migrate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/store_parity.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/templates/deploy-cloudflare.node.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/test_author.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/test_report.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/uat_checks.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/usage.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-backup.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-backup.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-dr-verify.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-dr-verify.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-failure-notify.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-failure-notify.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-fleet-watchdog.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-fleet-watchdog.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/ADR_COORD_TUI_CI.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/ADR_COORD_WEB_ACCEPTANCE_SUITE.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/ADR_COORD_WEB_CI.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/ADR_PY_RUST_MIRRORS.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/CUSTOMER_FACING_APPS.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/DATA_STORE_SELECTION.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/DISASTER_RECOVERY.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/OPERATOR_GUIDES.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/install-agent.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/pyproject.toml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/dr-down.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/dr-up.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/provision-server.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/throwaway-vm.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/coord-tui-scaffold/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/coord-tui-scaffold/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/coord-tui-scaffold/.github/workflows/codegen-drift.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/coord-tui-scaffold/CLAUDE.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/coord-venv-rollback.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/extract-coord-tui.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/fleet_watchdog.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/gen_mock_index.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/lib/provision-core.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/provision-machine.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/setup-macmini.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/verify-provision-noble.sh +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/setup.cfg +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/__init__.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/backends.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/conftest.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_error_log_record.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_approve_capability_reroute_3241.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_approve_dependency_busy_2804.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_approved_work_2532.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_approved_work_2996.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_backend_selection.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_backup.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_board_schema.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_check_gh_argv_containment.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_ci_fix.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_ci_github.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_ci_gitlab.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_claude_md_budget.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_claude_setup_token.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_ci.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_codegen.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_diagnose_capability_rules.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_diagnose_forge_availability.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_diagnose_test_coverage.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_doctor_store_backend_3084.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_issue_comment.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_issue_view_list.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_issues.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_pr.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_review_test_author_tracking_epic_2639.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_serve_store_backend_3084.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_contested_tag.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_invariant_alarms.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_machine_fault.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_retried_3340.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_supervisor_3366.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_client.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_client_config_cache_atomic_3052.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_client_resource_migration_1946.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_commands_common.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_config.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_config_drift_check.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_config_effective.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_confirm_test.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_coord_log_daemon_fallback_2547.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_coord_test_runner_acceptance_toolchain_2936.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_coord_uat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dao.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dashboard_api.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dashboard_server.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_db.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_decomposition_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deploy_db_backup_unit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deploy_failure_notify_unit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deploy_notify_unit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deprecation_telemetry.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dispatch_liveness.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dispatch_workers.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dr_azure_scripts.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dr_promote.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_dr_verify.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_machine_fault.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_queue_blocked_rendering.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_queue_launch_argv.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_queue_max_parallel_config.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_queue_max_parallel_per_repo_config.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_queue_roll_pending.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_queue_self_cordon_escalation.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_sessions_snapshot.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_events.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_failure_classifier.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_fix_escalation_classifier.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_fleet_watchdog.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_forge_availability.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_gen_mock_index.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_generated_rust_fixture.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_generated_rust_requests.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_github_throttle.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_coord_tui_ci_pin.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_coord_web_ci_pin.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_fix.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_issues_sync_staleness.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_pr_churn.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_release_cordon_probe.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_health_wedged_drive_queue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_housekeeping.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_init.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_install_agent_venv_2911.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_interactive.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_interactive_pane_log_2541.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_invariant_alarms.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_issues_sync_status.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_lock_contention_ratchet.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_machine_fault.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_machine_metrics.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_machine_onboard.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_machine_stats.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_models.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_network.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_phantom_heal_venv_independence_2570.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_portal_store.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_provision_core.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_provision_machine.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_py_rust_mirror_inventory.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reconcile_late_agent_reports_2547.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_cordon_drain_stall_3336.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_cordon_stuck_2490.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_propagate_threshold.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_roll_between_legs_2854.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_roll_window_handoff.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_repo_add.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_repo_dormancy.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_repo_max_parallel_3423.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_restart_cmd.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_retry_escalation_classify_3360.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_review.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_serve_app.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_serve_rest_routes.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_session.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_smoke_fanout_manifest_3333.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_split.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_sql_dialect.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_sqlite_connect_ratchet.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_stale_busy_reviewer_697.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_state.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_store_contract.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_store_migrate.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_stuck_test_state_watchdog_2803.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_text_io_encoding_audit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_throwaway_vm.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_uat_checks.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_worker_env_venv_isolation.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/test_write_parity.py +0 -0
- {code_coordinator-0.5.543 → code_coordinator-0.5.544}/tests/write_parity.py +0 -0
|
@@ -25,8 +25,10 @@ from coord.milestone_dispatch import (
|
|
|
25
25
|
MilestoneDispatchError,
|
|
26
26
|
dispatch_entry,
|
|
27
27
|
fetch_milestone_context,
|
|
28
|
+
gate_a_probe,
|
|
28
29
|
gate_a_status,
|
|
29
30
|
is_milestone_complete,
|
|
31
|
+
milestone_oracle_loop,
|
|
30
32
|
pick_machine,
|
|
31
33
|
plan_dispatch,
|
|
32
34
|
plan_queue,
|
|
@@ -1106,11 +1108,16 @@ def milestone_dispatch_cmd(
|
|
|
1106
1108
|
# #2542: under oracle-loop control (Gate A already checked above), chain
|
|
1107
1109
|
# the whole milestone's drive-queue entries so the tick can never launch
|
|
1108
1110
|
# two of them at once — see plan_queue's own docstring for why.
|
|
1111
|
+
# #2785: resolved per milestone via `milestone_oracle_loop`, not the
|
|
1112
|
+
# repo-level `has_driver` alone. `block_reason` above already confirms
|
|
1113
|
+
# this milestone's Gate-A contract exists (we'd have exited otherwise).
|
|
1109
1114
|
queue_plan = plan_queue(
|
|
1110
1115
|
ctx.work_order,
|
|
1111
1116
|
ctx.terminal_issues,
|
|
1112
1117
|
repo_entry.name,
|
|
1113
|
-
oracle_loop=
|
|
1118
|
+
oracle_loop=milestone_oracle_loop(
|
|
1119
|
+
repo_entry, cfg, gate_a_satisfied=block_reason is None
|
|
1120
|
+
),
|
|
1114
1121
|
)
|
|
1115
1122
|
|
|
1116
1123
|
if not queue_plan:
|
|
@@ -1318,10 +1325,26 @@ def milestone_drive_cmd(
|
|
|
1318
1325
|
# #2542: pass the same `oracle_loop` the gate tick itself will use, so
|
|
1319
1326
|
# this preview never shows more than the one entry the actual `work`
|
|
1320
1327
|
# gate would dispatch for an oracle-loop milestone.
|
|
1328
|
+
# #2785: resolved per milestone via `milestone_oracle_loop`, not the
|
|
1329
|
+
# repo-level `has_driver` alone.
|
|
1330
|
+
#
|
|
1331
|
+
# #2785 review (non-blocking): reads the DURABLE `record.cleared` (has
|
|
1332
|
+
# GATE_A already been stamped as cleared for this milestone?) rather
|
|
1333
|
+
# than `probes.gate_a_blocked` — that field is a fresh live Gate-A
|
|
1334
|
+
# re-probe (`probe_milestone`'s own docstring), and folding a single
|
|
1335
|
+
# transient read failure there straight into `gate_a_satisfied=False`
|
|
1336
|
+
# would cosmetically over-show this preview's ready frontier for one
|
|
1337
|
+
# invocation. `_milestone_gate_tick`'s WORK-state dispatch (the thing
|
|
1338
|
+
# this preview mirrors) already made this same durable-vs-live switch
|
|
1339
|
+
# for the identical reason — matching it here keeps the preview and the
|
|
1340
|
+
# actual tick reading the same signal instead of two that can flap
|
|
1341
|
+
# independently.
|
|
1321
1342
|
if ctx.work_order.nodes:
|
|
1322
1343
|
plan = plan_dispatch(
|
|
1323
1344
|
ctx.work_order, board, cfg, repo_entry, ctx.terminal_issues,
|
|
1324
|
-
oracle_loop=
|
|
1345
|
+
oracle_loop=milestone_oracle_loop(
|
|
1346
|
+
repo_entry, cfg, gate_a_satisfied=mg.GATE_A in record.cleared
|
|
1347
|
+
),
|
|
1325
1348
|
)
|
|
1326
1349
|
to_dispatch, skipped, waiting, deferred = (
|
|
1327
1350
|
plan.to_dispatch, plan.skipped, plan.waiting, plan.deferred,
|
|
@@ -1501,9 +1524,39 @@ def milestone_write_order_cmd(
|
|
|
1501
1524
|
# (coord-portal#122). Cheap/early check for the explicit-group case only
|
|
1502
1525
|
# — see validate_no_shared_oracle_group's docstring for what it can't
|
|
1503
1526
|
# catch.
|
|
1527
|
+
#
|
|
1528
|
+
# #2785: resolved PER MILESTONE via `milestone_oracle_loop` — NOT
|
|
1529
|
+
# `cfg.acceptance.has_driver(repo_entry.name)` alone, which is true for
|
|
1530
|
+
# every milestone in a repo that has ever declared ANY acceptance
|
|
1531
|
+
# driver and so wrongly refused #1949's (ms-60's) work order, which
|
|
1532
|
+
# shares no manifest with anything since ms-60 has no
|
|
1533
|
+
# `tests/acceptance/ms-60/` at all. No other Gate-A probe has run yet in
|
|
1534
|
+
# this command, so resolve one fresh via `gate_a_probe` — the same
|
|
1535
|
+
# existence check `coord milestone dispatch` performs.
|
|
1536
|
+
#
|
|
1537
|
+
# #2785 review: unlike `milestone_dispatch_cmd`/`milestone_drive_cmd`,
|
|
1538
|
+
# this command must NOT abort on a *confirmed*-absent contract — ms-60
|
|
1539
|
+
# has no contract at all and that is exactly the correctly-permissive
|
|
1540
|
+
# case (`gate_a_satisfied=False` -> `oracle_loop=False` -> shared groups
|
|
1541
|
+
# allowed), the whole point of this issue. Only a *transient* read
|
|
1542
|
+
# failure (`GateAResult.transient`, #2973's tri-state) must abort:
|
|
1543
|
+
# folding it into `gate_a_satisfied=False` would silently disable the
|
|
1544
|
+
# shared-group refusal for a milestone that may well be oracle-loop-
|
|
1545
|
+
# controlled, purely because of ordinary GitHub flakiness — the #2785
|
|
1546
|
+
# review's blocking finding. `gate_a_status`'s plain `str | None` can't
|
|
1547
|
+
# tell the two apart, so this uses `gate_a_probe` directly.
|
|
1548
|
+
probe = gate_a_probe(repo_entry, cfg, milestone_number)
|
|
1549
|
+
if probe.transient:
|
|
1550
|
+
click.echo(f"error: {probe.block_reason}", err=True)
|
|
1551
|
+
sys.exit(1)
|
|
1552
|
+
|
|
1504
1553
|
try:
|
|
1505
1554
|
validate_no_shared_oracle_group(
|
|
1506
|
-
work_order,
|
|
1555
|
+
work_order,
|
|
1556
|
+
oracle_loop=milestone_oracle_loop(
|
|
1557
|
+
repo_entry, cfg,
|
|
1558
|
+
gate_a_satisfied=probe.block_reason is None,
|
|
1559
|
+
),
|
|
1507
1560
|
)
|
|
1508
1561
|
except WorkOrderError as e:
|
|
1509
1562
|
click.echo(f"error: {e}", err=True)
|
|
@@ -37,7 +37,7 @@ Three call sites share this module:
|
|
|
37
37
|
from __future__ import annotations
|
|
38
38
|
|
|
39
39
|
from dataclasses import dataclass, field
|
|
40
|
-
from typing import TYPE_CHECKING, Callable, Iterable
|
|
40
|
+
from typing import TYPE_CHECKING, Callable, Iterable, NamedTuple
|
|
41
41
|
|
|
42
42
|
import httpx
|
|
43
43
|
|
|
@@ -61,7 +61,10 @@ __all__ = [
|
|
|
61
61
|
"MilestoneContext",
|
|
62
62
|
"fetch_milestone_context",
|
|
63
63
|
"GateAFileExists",
|
|
64
|
+
"GateAResult",
|
|
65
|
+
"gate_a_probe",
|
|
64
66
|
"gate_a_status",
|
|
67
|
+
"milestone_oracle_loop",
|
|
65
68
|
"ManifestFetch",
|
|
66
69
|
"GateAApprovalFetch",
|
|
67
70
|
"gate_a_signoff",
|
|
@@ -220,22 +223,51 @@ def _default_gate_a_file_exists(repo_github: str, path: str, branch: str) -> boo
|
|
|
220
223
|
return False
|
|
221
224
|
|
|
222
225
|
|
|
223
|
-
|
|
226
|
+
class GateAResult(NamedTuple):
|
|
227
|
+
"""The full tri-state result of a Gate-A existence check (#2785 review).
|
|
228
|
+
|
|
229
|
+
``gate_a_status`` (below) collapses this into a plain ``str | None`` for
|
|
230
|
+
the callers that just want to abort on ANY truthy result — dispatch/drive
|
|
231
|
+
correctly treat "confirmed absent" and "read failed" identically, since
|
|
232
|
+
neither justifies dispatching. But a caller resolving
|
|
233
|
+
:func:`milestone_oracle_loop`'s ``gate_a_satisfied`` needs to tell the two
|
|
234
|
+
apart: a *confirmed* absence legitimately means "not oracle-loop, nothing
|
|
235
|
+
to race on yet" (``gate_a_satisfied=False`` is correct), while a
|
|
236
|
+
*transient* read failure means the answer is unknown and must not be
|
|
237
|
+
silently folded into the same "not oracle-loop" branch — that would
|
|
238
|
+
disable #2542's shared-group refusal for a milestone that may well be
|
|
239
|
+
under oracle-loop control, purely because of ordinary GitHub flakiness.
|
|
240
|
+
|
|
241
|
+
``block_reason`` is ``None`` when Gate A is satisfied (dispatch may
|
|
242
|
+
proceed); otherwise a human-readable message, exactly as
|
|
243
|
+
:func:`gate_a_status` returns. ``transient`` is ``True`` only when
|
|
244
|
+
``block_reason`` is set because of a failed *read* (network, auth, a
|
|
245
|
+
rate limit) rather than a confirmed 404 on every candidate path.
|
|
246
|
+
"""
|
|
247
|
+
|
|
248
|
+
block_reason: str | None
|
|
249
|
+
transient: bool = False
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def gate_a_probe(
|
|
224
253
|
repo_cfg: Repo,
|
|
225
254
|
config: "Config",
|
|
226
255
|
milestone_number: int,
|
|
227
256
|
*,
|
|
228
257
|
file_exists: GateAFileExists | None = None,
|
|
229
|
-
) ->
|
|
258
|
+
) -> GateAResult:
|
|
230
259
|
"""Gate A (docs/ORACLE_LOOP.md, #930): a milestone's issues may not
|
|
231
260
|
dispatch until its black-box contract exists.
|
|
232
261
|
|
|
233
|
-
Returns
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
command that
|
|
262
|
+
Returns a :class:`GateAResult` whose ``block_reason`` is ``None`` when
|
|
263
|
+
dispatch may proceed — either the repo has no ``acceptance.drivers``
|
|
264
|
+
entry configured (Gate A is an oracle-loop concept; repos outside that
|
|
265
|
+
model dispatch exactly as before #930), or the contract file already
|
|
266
|
+
exists on the repo's default branch. Otherwise ``block_reason`` is a
|
|
267
|
+
human-readable message naming the missing path and the command that
|
|
268
|
+
produces it, and ``transient`` says whether that's a confirmed absence
|
|
269
|
+
or an inconclusive (failed) read — see :class:`GateAResult`'s own
|
|
270
|
+
docstring for why the distinction matters.
|
|
239
271
|
|
|
240
272
|
#2896: a bare *milestone_number* doesn't say which acceptance search
|
|
241
273
|
root its contract lives under (the shared repo-root tree, or an
|
|
@@ -259,7 +291,7 @@ def gate_a_status(
|
|
|
259
291
|
remedy attached.
|
|
260
292
|
"""
|
|
261
293
|
if not config.acceptance.has_driver(repo_cfg.name):
|
|
262
|
-
return None
|
|
294
|
+
return GateAResult(None)
|
|
263
295
|
|
|
264
296
|
from coord import github_ops # noqa: PLC0415
|
|
265
297
|
from coord.acceptance import gate_a_contract_candidates # noqa: PLC0415
|
|
@@ -270,19 +302,20 @@ def gate_a_status(
|
|
|
270
302
|
for path in candidates:
|
|
271
303
|
try:
|
|
272
304
|
if check(repo_cfg.github, path, repo_cfg.default_branch):
|
|
273
|
-
return None
|
|
305
|
+
return GateAResult(None)
|
|
274
306
|
except github_ops.GhTransientError as e:
|
|
275
307
|
transient = transient or e
|
|
276
308
|
continue
|
|
277
309
|
if transient is not None:
|
|
278
|
-
return (
|
|
310
|
+
return GateAResult(
|
|
279
311
|
f"Gate A undetermined: could not read {repo_cfg.name}'s Gate-A "
|
|
280
312
|
f"contract on {repo_cfg.default_branch!r} ({transient}). This is "
|
|
281
313
|
"a failed read, not a confirmed absence — the contract may well "
|
|
282
|
-
"exist. Retry once the rate limit clears."
|
|
314
|
+
"exist. Retry once the rate limit clears.",
|
|
315
|
+
transient=True,
|
|
283
316
|
)
|
|
284
317
|
named = " or ".join(repr(p) for p in candidates)
|
|
285
|
-
return (
|
|
318
|
+
return GateAResult(
|
|
286
319
|
f"Gate A not satisfied: {named} does not exist yet on "
|
|
287
320
|
f"{repo_cfg.default_branch!r}. Run `coord acceptance mock {repo_cfg.name} "
|
|
288
321
|
"<tracking_issue>` (docs/ORACLE_LOOP.md) to render the mock + write "
|
|
@@ -290,6 +323,81 @@ def gate_a_status(
|
|
|
290
323
|
)
|
|
291
324
|
|
|
292
325
|
|
|
326
|
+
def gate_a_status(
|
|
327
|
+
repo_cfg: Repo,
|
|
328
|
+
config: "Config",
|
|
329
|
+
milestone_number: int,
|
|
330
|
+
*,
|
|
331
|
+
file_exists: GateAFileExists | None = None,
|
|
332
|
+
) -> str | None:
|
|
333
|
+
"""Thin ``str | None`` view over :func:`gate_a_probe`, for the callers
|
|
334
|
+
(``milestone_dispatch_cmd``, ``milestone_drive_cmd``,
|
|
335
|
+
``_milestone_drain_tick``) that only need to know whether to abort —
|
|
336
|
+
they already treat a confirmed absence and a transient read failure
|
|
337
|
+
identically (abort either way, since neither justifies dispatching), so
|
|
338
|
+
dropping ``GateAResult.transient`` here is safe for them. A caller that
|
|
339
|
+
needs to tell the two apart (:func:`milestone_oracle_loop`'s
|
|
340
|
+
``gate_a_satisfied``) should call :func:`gate_a_probe` directly instead.
|
|
341
|
+
"""
|
|
342
|
+
return gate_a_probe(
|
|
343
|
+
repo_cfg, config, milestone_number, file_exists=file_exists
|
|
344
|
+
).block_reason
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
def milestone_oracle_loop(
|
|
348
|
+
repo_cfg: Repo,
|
|
349
|
+
config: "Config",
|
|
350
|
+
*,
|
|
351
|
+
gate_a_satisfied: bool,
|
|
352
|
+
) -> bool:
|
|
353
|
+
"""Whether a milestone is actually under oracle-loop control (#2785).
|
|
354
|
+
|
|
355
|
+
#2542 introduced a family of checks/behaviors keyed on "is this
|
|
356
|
+
milestone oracle-loop-controlled" (:func:`coord.milestone_order.
|
|
357
|
+
validate_no_shared_oracle_group`'s shared-group refusal,
|
|
358
|
+
:func:`plan_dispatch`'s one-entry-per-tick cap, :func:`plan_queue`'s
|
|
359
|
+
whole-milestone ``after=`` chaining) — but every one of those call sites
|
|
360
|
+
resolved the question from ``config.acceptance.has_driver(repo_cfg.
|
|
361
|
+
name)`` alone. That is a REPO-level fact (does this repo declare ANY
|
|
362
|
+
acceptance driver at all, for ANY milestone), not a per-milestone one.
|
|
363
|
+
A repo can have a driver configured and still run milestones that never
|
|
364
|
+
touch the oracle loop at all — this repo's own ms-60 (Store Service,
|
|
365
|
+
plain refactors, no ``tests/acceptance/ms-60/``) alongside ms-37/ms-65
|
|
366
|
+
(real oracle-loop milestones). Under the old resolution EVERY milestone
|
|
367
|
+
in a repo that has EVER declared a driver was treated as oracle-loop-
|
|
368
|
+
controlled — #1949 (ms-60's tracking epic) had its `## Work order`
|
|
369
|
+
become permanently un-editable, refusing shared groups that pose no
|
|
370
|
+
actual hazard, because there is no ``tests/acceptance/ms-60/manifest.
|
|
371
|
+
yml`` for anything to race on.
|
|
372
|
+
|
|
373
|
+
True only when the repo has a driver configured AND *this milestone's*
|
|
374
|
+
Gate-A contract already exists (``gate_a_satisfied`` — the caller's
|
|
375
|
+
already-resolved :func:`gate_a_status` existence probe: ``... is
|
|
376
|
+
None``, the same signal :func:`coord.acceptance.gate_a_contract_candidates`
|
|
377
|
+
checks for). A milestone with no contract yet has nothing to race on
|
|
378
|
+
either: nobody has authored a JIT acceptance slice into a manifest that
|
|
379
|
+
doesn't exist, so treating it as oracle-loop-active before Gate A is
|
|
380
|
+
even satisfied would repeat the same category of over-broad mistake
|
|
381
|
+
this replaces, just one gate later.
|
|
382
|
+
|
|
383
|
+
Deliberately takes the already-resolved ``gate_a_satisfied`` rather than
|
|
384
|
+
a bare ``milestone_number`` and re-probing GitHub itself: every caller
|
|
385
|
+
in this module and ``coord.serve_app`` already computes a Gate-A
|
|
386
|
+
existence probe on the same tick (``gate_a_status`` / ``probe_milestone
|
|
387
|
+
().gate_a_blocked``) before ever reaching an ``oracle_loop=`` call site
|
|
388
|
+
— re-deriving it here would mean a second live fetch per tick for no
|
|
389
|
+
new information. A caller with no probe in hand yet (``coord milestone
|
|
390
|
+
write-order``, which has no other reason to touch Gate A) computes one
|
|
391
|
+
fresh via ``gate_a_status(repo_cfg, config, milestone_number) is None``.
|
|
392
|
+
|
|
393
|
+
Single source of truth for this question (epic #2096, "one question,
|
|
394
|
+
one answer") — every #2542 caller should resolve ``oracle_loop``
|
|
395
|
+
through this rather than re-deriving ``has_driver`` locally, so the two
|
|
396
|
+
can never drift apart again.
|
|
397
|
+
"""
|
|
398
|
+
return config.acceptance.has_driver(repo_cfg.name) and gate_a_satisfied
|
|
399
|
+
|
|
400
|
+
|
|
293
401
|
# (repo_github, path, branch) -> file content, or None if it doesn't exist.
|
|
294
402
|
# Injected so tests never hit `gh` — mirrors GateAFileExists above.
|
|
295
403
|
#
|
|
@@ -704,6 +812,17 @@ def issue_oracle_ready(
|
|
|
704
812
|
the entry (re-checked every tick) instead of landing it in terminal
|
|
705
813
|
``blocked``, which nothing re-evaluates (#2040) — this is an explicitly
|
|
706
814
|
operator-fixable condition with a one-command remedy.
|
|
815
|
+
|
|
816
|
+
#2785 audit note: the ``has_driver`` check below is correctly
|
|
817
|
+
repo-level — it's a cheap early exit only, immediately followed by the
|
|
818
|
+
real per-milestone ``gate_a_status`` existence check a few lines down
|
|
819
|
+
(via ``effective_file_exists``). A repo with no driver at all can have
|
|
820
|
+
no oracle-loop milestone, so short-circuiting there costs nothing; a
|
|
821
|
+
repo WITH a driver still falls through to the per-milestone contract
|
|
822
|
+
check before this ever returns non-default readiness. Unlike #2542's
|
|
823
|
+
``validate_no_shared_oracle_group``/``plan_dispatch``/``plan_queue``
|
|
824
|
+
family (see :func:`milestone_oracle_loop`), this function never treated
|
|
825
|
+
``has_driver`` alone as sufficient.
|
|
707
826
|
"""
|
|
708
827
|
if milestone_number is None or not config.acceptance.has_driver(repo_cfg.name):
|
|
709
828
|
return OracleReadiness()
|
|
@@ -943,9 +1062,12 @@ def plan_dispatch(
|
|
|
943
1062
|
distinct idle machines instead of piling onto one).
|
|
944
1063
|
|
|
945
1064
|
``oracle_loop`` (#2542) — the caller's already-resolved
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
1065
|
+
:func:`milestone_oracle_loop` for *this milestone* (#2785; NOT the
|
|
1066
|
+
repo-level ``config.acceptance.has_driver(repo_cfg.name)`` alone — see
|
|
1067
|
+
that function's docstring for why the distinction matters) — caps
|
|
1068
|
+
``to_dispatch`` at **one** entry per call. Without this, two
|
|
1069
|
+
ready-frontier entries with no claim/dependency edge between them (the
|
|
1070
|
+
normal, desired fan-out above)
|
|
949
1071
|
would both dispatch in the very same tick under an oracle-loop
|
|
950
1072
|
milestone, and each independently authors its own JIT acceptance slice
|
|
951
1073
|
into the SAME ``tests/acceptance/ms-N/manifest.yml``
|
|
@@ -1039,9 +1161,12 @@ def plan_queue(
|
|
|
1039
1161
|
the defensive tail below only fires on inputs constructed outside it.
|
|
1040
1162
|
|
|
1041
1163
|
``oracle_loop`` (#2542) — the caller's already-resolved
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1164
|
+
:func:`milestone_oracle_loop` for *this milestone* (#2785; NOT the
|
|
1165
|
+
repo-level ``config.acceptance.has_driver(repo_name)`` alone — see that
|
|
1166
|
+
function's docstring for why the distinction matters) — additionally
|
|
1167
|
+
chains every entry's ``after`` to the issue immediately before it in
|
|
1168
|
+
this function's own topological order, so the drive-queue admits the
|
|
1169
|
+
WHOLE milestone
|
|
1045
1170
|
strictly one entry at a time. Without this, two entries with no declared
|
|
1046
1171
|
edge between them (different ``group``s, or neither declaring one) are
|
|
1047
1172
|
both ``waiting`` the moment their own pre-reqs land, and the
|
|
@@ -614,11 +614,19 @@ def validate_no_shared_oracle_group(
|
|
|
614
614
|
ms-N's manifest at once.
|
|
615
615
|
|
|
616
616
|
``oracle_loop`` is the caller's already-resolved
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
``
|
|
620
|
-
|
|
621
|
-
|
|
617
|
+
:func:`coord.milestone_dispatch.milestone_oracle_loop` for *this
|
|
618
|
+
milestone* (#2785) — NOT the repo-level ``config.acceptance.
|
|
619
|
+
has_driver(repo_name)`` alone, which is true for every milestone in a
|
|
620
|
+
repo that has ever declared ANY acceptance driver and so over-fires for
|
|
621
|
+
a milestone that has no ``tests/acceptance/ms-N/`` of its own to race
|
|
622
|
+
on (#2785's ms-60/#1949: ordinary refactors sharing a repo with real
|
|
623
|
+
oracle-loop milestones, whose `## Work order` became permanently
|
|
624
|
+
un-editable under the old, repo-level resolution). This function stays
|
|
625
|
+
pure either way — no config/GitHub reach-out of its own; resolving
|
|
626
|
+
``oracle_loop`` correctly is the caller's job. A no-op when
|
|
627
|
+
``oracle_loop`` is False (a milestone outside the oracle loop keeps
|
|
628
|
+
declaring parallel groups exactly as before this check existed) or when
|
|
629
|
+
no group holds more than one node.
|
|
622
630
|
|
|
623
631
|
This is deliberately only the cheap, early check for the EXPLICIT-group
|
|
624
632
|
case — ``coord milestone write-order`` validates it before a word order
|
|
@@ -1951,10 +1951,12 @@ def _milestone_drain_tick(config: Config) -> list:
|
|
|
1951
1951
|
that filter for free). A per-milestone fetch/dispatch error must not
|
|
1952
1952
|
silence the other registered milestones — caught and logged per entry.
|
|
1953
1953
|
|
|
1954
|
-
Same ``oracle_loop`` capping as ``_milestone_gate_tick`` (#2542
|
|
1955
|
-
|
|
1956
|
-
milestone
|
|
1957
|
-
|
|
1954
|
+
Same ``oracle_loop`` capping as ``_milestone_gate_tick`` (#2542,
|
|
1955
|
+
resolved per milestone via ``milestone_oracle_loop`` since #2785): a
|
|
1956
|
+
milestone under oracle-loop control gets at most one dispatch per
|
|
1957
|
+
registered milestone per tick, so this legacy path can't fan two
|
|
1958
|
+
same-milestone entries out to distinct machines in one call and race
|
|
1959
|
+
them on the
|
|
1958
1960
|
shared ``tests/acceptance/ms-N/manifest.yml`` either — even though only
|
|
1959
1961
|
pre-#2335 registrations feed it today (see above), it is the same class
|
|
1960
1962
|
of hole as the gate tick's and worth closing the same way.
|
|
@@ -2043,9 +2045,17 @@ def _milestone_drain_tick(config: Config) -> list:
|
|
|
2043
2045
|
from coord.dispatch_liveness import github_issue_liveness_fetcher # noqa: PLC0415
|
|
2044
2046
|
from coord.network import claude_credential_reachable # noqa: PLC0415
|
|
2045
2047
|
|
|
2048
|
+
# #2785: resolved per milestone via `milestone_oracle_loop`, not
|
|
2049
|
+
# the repo-level `has_driver` alone — see that function's
|
|
2050
|
+
# docstring. `block_reason` above already is this specific
|
|
2051
|
+
# milestone's Gate-A existence probe (confirmed `None`, or this tick
|
|
2052
|
+
# would already have `continue`d above), so reuse it rather than
|
|
2053
|
+
# re-fetching.
|
|
2046
2054
|
plan = md.plan_dispatch(
|
|
2047
2055
|
ctx.work_order, board, config, repo_cfg, ctx.terminal_issues,
|
|
2048
|
-
oracle_loop=
|
|
2056
|
+
oracle_loop=md.milestone_oracle_loop(
|
|
2057
|
+
repo_cfg, config, gate_a_satisfied=block_reason is None
|
|
2058
|
+
),
|
|
2049
2059
|
credential_fetcher=claude_credential_reachable,
|
|
2050
2060
|
)
|
|
2051
2061
|
# #3376 review round 1: this drain tick is a real production
|
|
@@ -2129,13 +2139,30 @@ def _milestone_gate_tick(config: Config, *, now: float | None = None) -> list:
|
|
|
2129
2139
|
hold-and-report: it logs why it cannot advance and leaves the record
|
|
2130
2140
|
where it is. Nothing here silently falls through.
|
|
2131
2141
|
|
|
2132
|
-
``plan_dispatch`` is called with ``oracle_loop=
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2142
|
+
``plan_dispatch`` is called with ``oracle_loop=md.milestone_oracle_loop
|
|
2143
|
+
(repo_cfg, config, gate_a_satisfied=mg.GATE_A in record.cleared)`` (#2542,
|
|
2144
|
+
resolved per milestone rather than repo-wide since #2785) — for a
|
|
2145
|
+
milestone under oracle-loop control this caps the tick's dispatch at one
|
|
2146
|
+
ready-frontier entry, so this walk (docs/ORACLE_LOOP.md's "oracle
|
|
2147
|
+
drive", #1453 — the documented primary driver for an oracle-loop
|
|
2148
|
+
milestone) can never launch two same-milestone entries into their JIT
|
|
2149
|
+
slice-authoring phase in the same tick, racing on the shared
|
|
2150
|
+
``tests/acceptance/ms-N/manifest.yml``.
|
|
2151
|
+
|
|
2152
|
+
#2785 review: this reads ``GATE_A in record.cleared`` — the *durable*
|
|
2153
|
+
record of whether this milestone's Gate-A contract has already been
|
|
2154
|
+
confirmed to exist — rather than re-deriving it from a fresh
|
|
2155
|
+
``probes.gate_a_blocked`` live probe. The ``work`` gate is only
|
|
2156
|
+
reachable after ``evaluate_gate`` already advanced this record past
|
|
2157
|
+
``GATE_A`` (which stamps ``GATE_A`` into ``cleared``, see
|
|
2158
|
+
``apply_step``), so the two answers agree on the happy path — but
|
|
2159
|
+
``probe_milestone`` unconditionally re-fetches Gate A on *every* tick
|
|
2160
|
+
regardless of the milestone's current gate, so a single tick's transient
|
|
2161
|
+
GitHub read failure would otherwise flip ``gate_a_satisfied`` to
|
|
2162
|
+
``False`` for that tick alone, un-capping the one-entry-per-tick limit
|
|
2163
|
+
and reopening #2542's manifest race exactly when GitHub is least
|
|
2164
|
+
reliable. The durable record can't flap tick to tick the way a live
|
|
2165
|
+
re-probe can.
|
|
2139
2166
|
|
|
2140
2167
|
Deliberately **not** gated on ``config.milestone.auto_dispatch`` — that
|
|
2141
2168
|
flag gates the legacy standalone drain (:func:`_milestone_drain_tick`),
|
|
@@ -2244,9 +2271,29 @@ def _milestone_gate_tick(config: Config, *, now: float | None = None) -> list:
|
|
|
2244
2271
|
from coord.dispatch_liveness import github_issue_liveness_fetcher # noqa: PLC0415
|
|
2245
2272
|
from coord.network import claude_credential_reachable # noqa: PLC0415
|
|
2246
2273
|
|
|
2274
|
+
# #2785: resolved per milestone via `milestone_oracle_loop`,
|
|
2275
|
+
# not the repo-level `has_driver` alone — see that
|
|
2276
|
+
# function's docstring.
|
|
2277
|
+
#
|
|
2278
|
+
# #2785 review: reads the DURABLE `record.cleared` (has
|
|
2279
|
+
# GATE_A already been stamped as cleared for this milestone?)
|
|
2280
|
+
# rather than `probes.gate_a_blocked` — that field is a
|
|
2281
|
+
# fresh live Gate-A re-probe recomputed on EVERY tick
|
|
2282
|
+
# (`probe_milestone`'s own docstring), and a single tick's
|
|
2283
|
+
# transient GitHub read failure there would silently drop
|
|
2284
|
+
# `oracle_loop` to False for that tick's dispatch, un-capping
|
|
2285
|
+
# the one-entry-per-tick limit right when GitHub flakiness
|
|
2286
|
+
# makes caution matter most. The `work` gate is only
|
|
2287
|
+
# reachable after `evaluate_gate` already advanced this
|
|
2288
|
+
# record past GATE_A (which appends it to `cleared` —
|
|
2289
|
+
# `apply_step`), so this durable signal is exactly as
|
|
2290
|
+
# accurate on the happy path and immune to that flap.
|
|
2247
2291
|
plan = md.plan_dispatch(
|
|
2248
2292
|
ctx.work_order, board, config, repo_cfg, ctx.terminal_issues,
|
|
2249
|
-
oracle_loop=
|
|
2293
|
+
oracle_loop=md.milestone_oracle_loop(
|
|
2294
|
+
repo_cfg, config,
|
|
2295
|
+
gate_a_satisfied=mg.GATE_A in record.cleared,
|
|
2296
|
+
),
|
|
2250
2297
|
credential_fetcher=claude_credential_reachable,
|
|
2251
2298
|
)
|
|
2252
2299
|
# #3376 review round 1: same issue-liveness wiring as the
|
|
@@ -432,11 +432,13 @@ class TestMilestoneWriteOrderCmd:
|
|
|
432
432
|
def test_refuses_shared_group_under_oracle_loop(
|
|
433
433
|
self, config_file_with_gate_a: Path
|
|
434
434
|
) -> None:
|
|
435
|
-
"""#2542: this
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
the
|
|
435
|
+
"""#2542: this MILESTONE is under oracle-loop control — the repo
|
|
436
|
+
has an acceptance driver configured AND this milestone's Gate-A
|
|
437
|
+
contract already exists (#2785: both halves matter, not just the
|
|
438
|
+
repo-level driver config) — a proposed work order putting
|
|
439
|
+
#762/#763 in the same `{group: A}` cohort must be refused before
|
|
440
|
+
it's ever written, since both would author their JIT acceptance
|
|
441
|
+
slice into the SAME tests/acceptance/ms-N/manifest.yml concurrently
|
|
440
442
|
(coord-portal#122)."""
|
|
441
443
|
def get_issue(repo, number):
|
|
442
444
|
return {
|
|
@@ -450,6 +452,7 @@ class TestMilestoneWriteOrderCmd:
|
|
|
450
452
|
]
|
|
451
453
|
with patch("coord.github_ops.get_issue", side_effect=get_issue), \
|
|
452
454
|
patch("coord.github_ops.get_open_issues", return_value=open_issues), \
|
|
455
|
+
patch("coord.github_ops.get_repo_file", return_value="# Contract\n"), \
|
|
453
456
|
patch("coord.github_ops.update_issue_body") as mock_update:
|
|
454
457
|
result = CliRunner().invoke(
|
|
455
458
|
main,
|
|
@@ -491,6 +494,92 @@ class TestMilestoneWriteOrderCmd:
|
|
|
491
494
|
assert result.exit_code == 0, result.output
|
|
492
495
|
mock_update.assert_called_once()
|
|
493
496
|
|
|
497
|
+
def test_shared_group_with_driver_but_no_contract_still_writes(
|
|
498
|
+
self, config_file_with_gate_a: Path
|
|
499
|
+
) -> None:
|
|
500
|
+
"""#2785: the repo has an acceptance driver configured (so
|
|
501
|
+
`has_driver(repo)` is True), but THIS milestone has no Gate-A
|
|
502
|
+
contract at all — `tests/acceptance/ms-9/contract.md` 404s, the
|
|
503
|
+
same signal `gate_a_status` checks. That means there is no
|
|
504
|
+
`tests/acceptance/ms-9/manifest.yml` for two group members' JIT
|
|
505
|
+
slices to race on either, so #2542's shared-group refusal must NOT
|
|
506
|
+
fire — mirrors #1949 (ms-60, Store Service): a milestone with
|
|
507
|
+
ordinary parallel work sharing a repo with real oracle-loop
|
|
508
|
+
milestones must keep writing exactly as it could before #2542."""
|
|
509
|
+
def get_issue(repo, number):
|
|
510
|
+
return {
|
|
511
|
+
"number": 100, "title": "tracking", "body": "",
|
|
512
|
+
"state": "OPEN", "milestone": {"number": 9, "title": "M"},
|
|
513
|
+
"labels": [{"name": "epic"}],
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
open_issues = [
|
|
517
|
+
{"number": 762, "milestone": {"number": 9}},
|
|
518
|
+
{"number": 763, "milestone": {"number": 9}},
|
|
519
|
+
]
|
|
520
|
+
with patch("coord.github_ops.get_issue", side_effect=get_issue), \
|
|
521
|
+
patch("coord.github_ops.get_open_issues", return_value=open_issues), \
|
|
522
|
+
patch(
|
|
523
|
+
"coord.github_ops.get_repo_file",
|
|
524
|
+
side_effect=RuntimeError("404"),
|
|
525
|
+
), \
|
|
526
|
+
patch("coord.github_ops.add_issue_labels") as mock_add_labels, \
|
|
527
|
+
patch("coord.github_ops.update_issue_body") as mock_update:
|
|
528
|
+
result = CliRunner().invoke(
|
|
529
|
+
main,
|
|
530
|
+
["milestone", "write-order", "api", "100", "--config",
|
|
531
|
+
str(config_file_with_gate_a)],
|
|
532
|
+
input="- [ ] #762 {group: A}\n- [ ] #763 {group: A}\n",
|
|
533
|
+
)
|
|
534
|
+
assert result.exit_code == 0, result.output
|
|
535
|
+
mock_update.assert_called_once()
|
|
536
|
+
|
|
537
|
+
def test_transient_gate_a_read_aborts_rather_than_writing(
|
|
538
|
+
self, config_file_with_gate_a: Path
|
|
539
|
+
) -> None:
|
|
540
|
+
"""#2785 review (blocking finding): a rate-limited/transient Gate-A
|
|
541
|
+
read must NOT be silently folded into "contract confirmed absent" —
|
|
542
|
+
that would resolve `gate_a_satisfied=False` -> `oracle_loop=False`
|
|
543
|
+
and let a shared `{group: ...}` work order through for a milestone
|
|
544
|
+
that may genuinely be under oracle-loop control, reopening #2542's
|
|
545
|
+
manifest race exactly when GitHub is least reliable. The command
|
|
546
|
+
must abort instead of writing anything."""
|
|
547
|
+
from coord.github_ops import GhRateLimitError
|
|
548
|
+
|
|
549
|
+
def get_issue(repo, number):
|
|
550
|
+
return {
|
|
551
|
+
"number": 100, "title": "tracking", "body": "",
|
|
552
|
+
"state": "OPEN", "milestone": {"number": 9, "title": "M"},
|
|
553
|
+
"labels": [{"name": "epic"}],
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
open_issues = [
|
|
557
|
+
{"number": 762, "milestone": {"number": 9}},
|
|
558
|
+
{"number": 763, "milestone": {"number": 9}},
|
|
559
|
+
]
|
|
560
|
+
with patch("coord.github_ops.get_issue", side_effect=get_issue), \
|
|
561
|
+
patch("coord.github_ops.get_open_issues", return_value=open_issues), \
|
|
562
|
+
patch(
|
|
563
|
+
"coord.github_ops.get_repo_file",
|
|
564
|
+
side_effect=GhRateLimitError(
|
|
565
|
+
"gh api repos/acme/api/contents/tests/acceptance/ms-9/"
|
|
566
|
+
"contract.md?ref=main failed: API rate limit exceeded "
|
|
567
|
+
"for user ID 12345",
|
|
568
|
+
secondary=True,
|
|
569
|
+
),
|
|
570
|
+
), \
|
|
571
|
+
patch("coord.github_ops.update_issue_body") as mock_update:
|
|
572
|
+
result = CliRunner().invoke(
|
|
573
|
+
main,
|
|
574
|
+
["milestone", "write-order", "api", "100", "--config",
|
|
575
|
+
str(config_file_with_gate_a)],
|
|
576
|
+
input="- [ ] #762 {group: A}\n- [ ] #763 {group: A}\n",
|
|
577
|
+
)
|
|
578
|
+
assert result.exit_code == 1
|
|
579
|
+
assert "rate limit" in result.output.lower()
|
|
580
|
+
assert "does not exist" not in result.output
|
|
581
|
+
mock_update.assert_not_called()
|
|
582
|
+
|
|
494
583
|
|
|
495
584
|
# ── `coord milestone chat` (#770 Phase 2 dispatch) ──────────────────────────
|
|
496
585
|
|